Fang-Robotics-MCB
Fang Robotics Team Codebase
Loading...
Searching...
No Matches
pierce.hpp
Go to the documentation of this file.
1#ifndef FANG_ROBOTICS_MCB_INFANTRY_HPP
2#define FANG_ROBOTICS_MCB_INFANTRY_HPP
3#include "driver/drivers.hpp"
4//Subsystems
11#include "cool_serial/byte_queue.hpp"
12
14
16
17#include "robot/base_robot.hpp"
18
22
23namespace fang::robot
24{
29 class Pierce : public BaseRobot, public coolSerial::IDataHandler
30 {
31 public:
34
40
48
55
57 :
58 uart_{drivers.uart},
59 remote_{drivers.remote},
60 flySkyByteQueue_{},
61 flyRemote_{drivers.commandMapper, flySkyByteQueue_},
62 holonomicInput_{drivers.remote, config.input.holonomic},
63 gimbalInput_{drivers.remote, config.input.gimbal},
65 coolSerialUart_
66 {
67 drivers,
68 CoolSerialUart::HandlerMap
69 {
70 {253, std::ref(*this)},
71 {254, std::ref(basicTargetHandler_)}
72 }
73 },
74 BaseRobot{makeRobot(drivers, holonomicInput_, gimbalInput_, config)}
75 {}
76
77 void initialize() override
78 {
79 //coolSerialUart_.initialize();
81 //uart_.init<tap::communication::serial::Uart::Uart1, 115200, tap::communication::serial::Uart::Parity::Disabled>();
82 remote_.initialize();
83 }
84
85 void update() override
86 {
87 //coolSerialUart_.update();
88 //uint8_t data{};
89 //while(uart_.read(tap::communication::serial::Uart::Uart1, &data))
90 //{
91 // flySkyByteQueue_.push(data);
92 //}
93 remote_.read();
94 //flyRemote_.update();
95 }
96
97 void handleData(const coolSerial::Bytes& bytes)
98 {
99 //FANG_ASSERT(bytes.size() == 1, "Ahhh");
100
101 //const unsigned char kByte{bytes[0]};
103 //static uint8_t debugByte = kByte;
104 //flySkyByteQueue_.push(kByte);
105 }
106
107 private:
108 // for debug purposes
109 communication::NullBasicTargetListener nullBasicTargetListener_{};
110 communication::BasicTargetHandler basicTargetHandler_{nullBasicTargetListener_};
111
114 coolSerial::ByteQueue flySkyByteQueue_;
115 remote::FlySky flyRemote_;
116 chassis::DjiHolonomicInput holonomicInput_;
117 turret::DjiGimbalInput gimbalInput_;
118 turret::FlySkyGimbalInput flySkyGimbalInput_;
119 CoolSerialUart coolSerialUart_;
120
121
122 static BaseRobot makeRobot(Drivers& drivers, chassis::IHolonomicInput& holonomicInput, turret::IGimbalInput& gimbalInput, const Config& config)
123 {
124 auto gimbal{std::make_unique<turret::PierceFieldGimbal>(drivers, config.subsystemConfig.gimbalConfig)};
125 auto feeder{std::make_unique<turret::M2006SimpleFeeder>(drivers, config.subsystemConfig.feederConfig)};
126 auto booster{std::make_unique<turret::PierceAmmoBooster>(drivers, config.subsystemConfig.boosterConfig)};
127 auto mecanumDrive{std::make_unique<chassis::PierceMecanumDrive>(drivers, config.subsystemConfig.chassisConfig)};
128 auto commandPack
129 {
130 std::make_unique<command::PierceCommandPack>
131 (
132 drivers,
133 *booster,
134 *feeder,
135 *gimbal,
136 *mecanumDrive,
137 gimbalInput,
138 holonomicInput,
139 config.commandPackConfig
140 )
141 };
142 // If I could get the makeUniqueVector thing to work, this might be more worthwhile...
143 Subsystems subsystems{};
144 subsystems.push_back(std::move(booster));
145 subsystems.push_back(std::move(feeder));
146 subsystems.push_back(std::move(gimbal));
147 subsystems.push_back(std::move(mecanumDrive));
148
149 CommandPacks commandPacks{};
150 commandPacks.push_back(std::move(commandPack));
151 return BaseRobot{drivers.commandScheduler, std::move(subsystems), std::move(commandPacks)};
152 }
153 };
154}
155#endif
Definition drivers.hpp:31
Definition basic_target_handler.hpp:13
Definition ibasic_target_listener.hpp:13
Definition base_robot.hpp:20
virtual void initialize() override
Definition base_robot.cpp:25
Definition pierce.hpp:30
void handleData(const coolSerial::Bytes &bytes)
Definition pierce.hpp:97
Pierce(Drivers &drivers, const Config &config)
Definition pierce.hpp:56
void initialize() override
Definition pierce.hpp:77
void update() override
Not virtual so that it can be passed around in maker functions.
Definition pierce.hpp:85
control::CommandScheduler commandScheduler
Definition drivers.hpp:141
Definition remote.hpp:51
Definition uart.hpp:48
Definition remote_map_state.hpp:56
Config(double p, double i, double d, double maxIntegralAccumulation, double maxOutput, double errorDerivativeFloor, double errorDeadzone=0.0, double tQDerivativeKalman=1.0, double tRDerivativeKalman=0.0, tRProportionalKalman=1.0)
Definition dimensional_smooth_pid.hpp:16
Definition pwm_info.hpp:4
rail::chassis::IHolonomicInput< math::AbstractVector2D, double > IHolonomicInput
Definition iholonomic_input.hpp:7
Definition base_robot.cpp:4
rail::IGimbalInput< double > IGimbalInput
Definition igimbal_input.hpp:5
fang::Drivers & drivers
Definition robot_singleton.cpp:45
Definition dji_holonomic_input.hpp:31
Definition pierce_mecanum_drive.hpp:16
Definition pierce_command_pack.hpp:65
Definition pierce.hpp:50
command::PierceCommandPack::Config commandPackConfig
Definition pierce.hpp:53
SubsystemConfig subsystemConfig
Definition pierce.hpp:51
InputConfig input
Definition pierce.hpp:52
Definition pierce.hpp:36
turret::DjiGimbalInput::Config gimbal
Definition pierce.hpp:38
chassis::DjiHolonomicInput::Config holonomic
Definition pierce.hpp:37
Definition pierce.hpp:42
fang::turret::M2006SimpleFeeder::Config feederConfig
Definition pierce.hpp:45
turret::PierceFieldGimbal::Config gimbalConfig
Definition pierce.hpp:44
turret::PierceAmmoBooster::Config boosterConfig
Definition pierce.hpp:46
chassis::PierceMecanumDrive::Config chassisConfig
Definition pierce.hpp:43
Definition dji_gimbal_input.hpp:26
Definition m2006_simple_feeder.hpp:17
Definition pierce_ammo_booster.hpp:17
Definition pierce_field_gimbal.hpp:18