Fang-Robotics-MCB
Fang Robotics Team Codebase
Loading...
Searching...
No Matches
slice.hpp
Go to the documentation of this file.
1#pragma once
2
3
4#include "driver/drivers.hpp"
5//Subsystems
9#include "cool_serial/byte_queue.hpp"
10
12
14
15#include "robot/base_robot.hpp"
16
20
21namespace fang::robot
22{
27 class Slice : public BaseRobot
28 {
29 public:
31
37
45
52
54 :
55 uart_{drivers.uart},
56 remote_{drivers.remote},
57 flySkyByteQueue_{},
58 flyRemote_{drivers.commandMapper, flySkyByteQueue_},
59 holonomicInput_{drivers.remote, config.input.holonomic},
60 gimbalInput_{drivers.remote, config.input.gimbal},
62 BaseRobot{makeRobot(drivers, holonomicInput_, gimbalInput_, config)}
63 {}
64
65 void initialize() override
66 {
68 uart_.init<tap::communication::serial::Uart::Uart1, 115200, tap::communication::serial::Uart::Parity::Disabled>();
69 remote_.initialize();
70 }
71
72 void update() override
73 {
74 uint8_t data{};
75 while(uart_.read(tap::communication::serial::Uart::Uart1, &data))
76 {
77 flySkyByteQueue_.push(data);
78 }
79 remote_.read();
80 flyRemote_.update();
81 }
82
83 private:
86 coolSerial::ByteQueue flySkyByteQueue_;
87 remote::FlySky flyRemote_;
88 chassis::DjiHolonomicInput holonomicInput_;
89 turret::DjiGimbalInput gimbalInput_;
90 turret::FlySkyGimbalInput flySkyGimbalInput_;
91
92
93 static BaseRobot makeRobot(Drivers& drivers, chassis::IHolonomicInput& holonomicInput, turret::IGimbalInput& gimbalInput, const Config& config)
94 {
95 auto gimbal{std::make_unique<turret::SliceFieldGimbal>(drivers, config.subsystemConfig.gimbalConfig)};
96 auto feeder{std::make_unique<turret::M2006SimpleFeeder>(drivers, config.subsystemConfig.feederConfig)};
97 auto booster{std::make_unique<turret::SliceAmmoBooster>(drivers, config.subsystemConfig.boosterConfig)};
98 auto mecanumDrive{std::make_unique<chassis::SliceMecanumDrive>(drivers, config.subsystemConfig.chassisConfig)};
99 auto commandPack
100 {
101 std::make_unique<command::PierceCommandPack>
102 (
103 drivers,
104 *booster,
105 *feeder,
106 *gimbal,
107 *mecanumDrive,
108 gimbalInput,
109 holonomicInput,
110 config.commandPackConfig
111 )
112 };
113 // If I could get the makeUniqueVector thing to work, this might be more worthwhile...
114 Subsystems subsystems{};
115 subsystems.push_back(std::move(booster));
116 subsystems.push_back(std::move(feeder));
117 subsystems.push_back(std::move(gimbal));
118 subsystems.push_back(std::move(mecanumDrive));
119
120 CommandPacks commandPacks{};
121 commandPacks.push_back(std::move(commandPack));
122 return BaseRobot{drivers.commandScheduler, std::move(subsystems), std::move(commandPacks)};
123 }
124 };
125}
Definition drivers.hpp:31
Definition dji_holonomic_input.hpp:13
Definition fly_sky.hpp:24
Definition base_robot.hpp:20
virtual void initialize() override
Definition base_robot.cpp:25
Definition slice.hpp:28
void update() override
Not virtual so that it can be passed around in maker functions.
Definition slice.hpp:72
void initialize() override
Definition slice.hpp:65
Slice(Drivers &drivers, const Config &config)
Definition slice.hpp:53
Definition dji_gimbal_input.hpp:9
Definition fly_sky_gimbal_input.hpp:9
control::CommandScheduler commandScheduler
Definition drivers.hpp:141
Definition remote.hpp:51
Definition uart.hpp:48
@ Uart1
Definition uart.hpp:52
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 slice_mecanum_drive.hpp:17
Definition pierce_command_pack.hpp:65
Definition slice.hpp:47
InputConfig input
Definition slice.hpp:49
SubsystemConfig subsystemConfig
Definition slice.hpp:48
command::PierceCommandPack::Config commandPackConfig
Definition slice.hpp:50
Definition slice.hpp:33
turret::DjiGimbalInput::Config gimbal
Definition slice.hpp:35
chassis::DjiHolonomicInput::Config holonomic
Definition slice.hpp:34
turret::SliceAmmoBooster::Config boosterConfig
Definition slice.hpp:43
fang::turret::M2006SimpleFeeder::Config feederConfig
Definition slice.hpp:42
turret::SliceFieldGimbal::Config gimbalConfig
Definition slice.hpp:41
chassis::SliceMecanumDrive::Config chassisConfig
Definition slice.hpp:40
Definition dji_gimbal_input.hpp:26
Definition m2006_simple_feeder.hpp:17
Definition slice_ammo_booster.hpp:17
Definition slice_field_gimbal.hpp:18