blob: 50052c7f59521ed70853b11349ae704679dccf16 [file] [log] [blame]
James Kuszmaul7077d342021-06-09 20:23:58 -07001#include <math.h>
Brian Silvermanc71537c2016-01-01 13:43:14 -08002#include <stdio.h>
3#include <string.h>
4#include <unistd.h>
Brian Silvermanc71537c2016-01-01 13:43:14 -08005
Austin Schuh3e45c752019-02-02 12:19:11 -08006#include "aos/actions/actions.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -07007#include "aos/events/shm_event_loop.h"
John Park398c74a2018-10-20 21:17:39 -07008#include "aos/init.h"
John Park33858a32018-09-28 23:05:48 -07009#include "aos/logging/logging.h"
10#include "aos/time/time.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -070011#include "frc971/control_loops/drivetrain/drivetrain_goal_generated.h"
James Kuszmaul7077d342021-06-09 20:23:58 -070012#include "frc971/input/driver_station_data.h"
13#include "frc971/input/joystick_input.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -070014#include "y2012/control_loops/accessories/accessories_generated.h"
Brian Silvermanc71537c2016-01-01 13:43:14 -080015
James Kuszmaul7077d342021-06-09 20:23:58 -070016using ::frc971::input::driver_station::ButtonLocation;
17using ::frc971::input::driver_station::ControlBit;
18using ::frc971::input::driver_station::JoystickAxis;
Brian Silvermanc71537c2016-01-01 13:43:14 -080019
20#define OLD_DS 0
21
22namespace y2012 {
23namespace input {
24namespace joysticks {
25
26const JoystickAxis kSteeringWheel(1, 1), kDriveThrottle(2, 2);
Campbell Crowley5b27f022016-02-20 16:55:35 -080027const ButtonLocation kShiftHigh(2, 3), kShiftLow(2, 1);
Brian Silvermanc71537c2016-01-01 13:43:14 -080028const ButtonLocation kQuickTurn(1, 5);
29
30const ButtonLocation kCatch(3, 10);
31
32#if OLD_DS
33const ButtonLocation kFire(3, 11);
34const ButtonLocation kUnload(1, 4);
35const ButtonLocation kReload(1, 2);
36
37const ButtonLocation kRollersOut(3, 12);
38const ButtonLocation kRollersIn(3, 7);
39
40const ButtonLocation kTuck(3, 9);
41const ButtonLocation kIntakePosition(3, 8);
42const ButtonLocation kIntakeOpenPosition(3, 10);
43const ButtonLocation kVerticalTuck(3, 1);
44const JoystickAxis kFlipRobot(3, 3);
45
46const ButtonLocation kLongShot(3, 5);
47const ButtonLocation kCloseShot(3, 2);
48const ButtonLocation kFenderShot(3, 3);
49const ButtonLocation kTrussShot(2, 11);
50const ButtonLocation kHumanPlayerShot(3, 2);
51#else
52const ButtonLocation kFire(3, 9);
53const ButtonLocation kUnload(1, 4);
54const ButtonLocation kReload(1, 2);
55
56const ButtonLocation kRollersOut(3, 8);
57const ButtonLocation kRollersIn(3, 3);
58
59const ButtonLocation kTuck(3, 4);
60const ButtonLocation kIntakePosition(3, 5);
61const ButtonLocation kIntakeOpenPosition(3, 11);
62const ButtonLocation kVerticalTuck(2, 6);
63const JoystickAxis kFlipRobot(3, 3);
64
65const ButtonLocation kLongShot(3, 7);
66const ButtonLocation kCloseShot(3, 6);
67const ButtonLocation kFenderShot(3, 2);
68const ButtonLocation kTrussShot(2, 11);
69const ButtonLocation kHumanPlayerShot(3, 1);
70#endif
71
72const ButtonLocation kUserLeft(2, 7);
73const ButtonLocation kUserRight(2, 10);
74
75const JoystickAxis kAdjustClawGoal(3, 2);
76const JoystickAxis kAdjustClawSeparation(3, 1);
77
James Kuszmaul7077d342021-06-09 20:23:58 -070078class Reader : public ::frc971::input::JoystickInput {
Brian Silvermanc71537c2016-01-01 13:43:14 -080079 public:
Austin Schuh3e45c752019-02-02 12:19:11 -080080 Reader(::aos::EventLoop *event_loop)
James Kuszmaul7077d342021-06-09 20:23:58 -070081 : ::frc971::input::JoystickInput(event_loop),
Austin Schuhbd0a40f2019-06-30 14:56:31 -070082 drivetrain_goal_sender_(
Alex Perrycb7da4b2019-08-28 19:35:56 -070083 event_loop->MakeSender<::frc971::control_loops::drivetrain::Goal>(
84 "/drivetrain")),
Austin Schuhe4526232019-06-29 16:51:33 -070085 accessories_goal_sender_(
86 event_loop
Alex Perrycb7da4b2019-08-28 19:35:56 -070087 ->MakeSender<::y2012::control_loops::accessories::Message>(
88 "/accessories")),
Austin Schuhe4526232019-06-29 16:51:33 -070089 is_high_gear_(false) {}
Brian Silvermanc71537c2016-01-01 13:43:14 -080090
James Kuszmaul7077d342021-06-09 20:23:58 -070091 void RunIteration(
92 const ::frc971::input::driver_station::Data &data) override {
Brian Silvermanc71537c2016-01-01 13:43:14 -080093 if (!data.GetControlBit(ControlBit::kAutonomous)) {
94 HandleDrivetrain(data);
95 HandleTeleop(data);
96 }
97 }
98
James Kuszmaul7077d342021-06-09 20:23:58 -070099 void HandleDrivetrain(const ::frc971::input::driver_station::Data &data) {
Brian Silvermanc71537c2016-01-01 13:43:14 -0800100 const double wheel = -data.GetAxis(kSteeringWheel);
101 const double throttle = -data.GetAxis(kDriveThrottle);
Campbell Crowley5b27f022016-02-20 16:55:35 -0800102 if (data.PosEdge(kShiftLow)) {
Brian Silvermanc71537c2016-01-01 13:43:14 -0800103 is_high_gear_ = false;
104 }
Campbell Crowley5b27f022016-02-20 16:55:35 -0800105 if (data.PosEdge(kShiftHigh)) {
Brian Silvermanc71537c2016-01-01 13:43:14 -0800106 is_high_gear_ = true;
107 }
Alex Perrycb7da4b2019-08-28 19:35:56 -0700108 auto builder = drivetrain_goal_sender_.MakeBuilder();
109 frc971::control_loops::drivetrain::Goal::Builder goal_builder =
110 builder.MakeBuilder<frc971::control_loops::drivetrain::Goal>();
111 goal_builder.add_wheel(wheel);
112 goal_builder.add_throttle(throttle);
113 goal_builder.add_highgear(is_high_gear_);
114 goal_builder.add_quickturn(data.IsPressed(kQuickTurn));
Austin Schuhbd0a40f2019-06-30 14:56:31 -0700115
Alex Perrycb7da4b2019-08-28 19:35:56 -0700116 if (!builder.Send(goal_builder.Finish())) {
Austin Schuhf257f3c2019-10-27 21:00:43 -0700117 AOS_LOG(WARNING, "sending stick values failed\n");
Brian Silvermanc71537c2016-01-01 13:43:14 -0800118 }
119 }
120
James Kuszmaul7077d342021-06-09 20:23:58 -0700121 void HandleTeleop(const ::frc971::input::driver_station::Data &data) {
Alex Perrycb7da4b2019-08-28 19:35:56 -0700122 auto builder = accessories_goal_sender_.MakeBuilder();
123 flatbuffers::Offset<flatbuffers::Vector<uint8_t>> solenoids_offset =
124 builder.fbb()->CreateVector<uint8_t>({data.IsPressed(kLongShot),
James Kuszmaul7077d342021-06-09 20:23:58 -0700125 data.IsPressed(kCloseShot),
126 data.IsPressed(kFenderShot)});
Alex Perrycb7da4b2019-08-28 19:35:56 -0700127
128 flatbuffers::Offset<flatbuffers::Vector<double>> sticks_offset =
James Kuszmaul7077d342021-06-09 20:23:58 -0700129 builder.fbb()->CreateVector<double>(
130 {data.GetAxis(kAdjustClawGoal),
131 data.GetAxis(kAdjustClawSeparation)});
Alex Perrycb7da4b2019-08-28 19:35:56 -0700132
133 y2012::control_loops::accessories::Message::Builder message_builder =
134 builder.MakeBuilder<y2012::control_loops::accessories::Message>();
135 message_builder.add_solenoids(solenoids_offset);
136 message_builder.add_sticks(sticks_offset);
137 if (!builder.Send(message_builder.Finish())) {
Austin Schuhf257f3c2019-10-27 21:00:43 -0700138 AOS_LOG(WARNING, "sending accessories goal failed\n");
Brian Silvermanc71537c2016-01-01 13:43:14 -0800139 }
Brian Silvermanc71537c2016-01-01 13:43:14 -0800140 }
141
142 private:
Alex Perrycb7da4b2019-08-28 19:35:56 -0700143 ::aos::Sender<::frc971::control_loops::drivetrain::Goal>
Austin Schuhbd0a40f2019-06-30 14:56:31 -0700144 drivetrain_goal_sender_;
Alex Perrycb7da4b2019-08-28 19:35:56 -0700145 ::aos::Sender<::y2012::control_loops::accessories::Message>
Austin Schuhe4526232019-06-29 16:51:33 -0700146 accessories_goal_sender_;
Brian Silvermanc71537c2016-01-01 13:43:14 -0800147
Austin Schuhe4526232019-06-29 16:51:33 -0700148 bool is_high_gear_;
Brian Silvermanc71537c2016-01-01 13:43:14 -0800149};
150
151} // namespace joysticks
152} // namespace input
153} // namespace y2012
154
Austin Schuh094d09b2020-11-20 23:26:52 -0800155int main(int argc, char **argv) {
156 ::aos::InitGoogle(&argc, &argv);
Austin Schuh9fe68f72019-08-10 19:32:03 -0700157
Alex Perrycb7da4b2019-08-28 19:35:56 -0700158 aos::FlatbufferDetachedBuffer<aos::Configuration> config =
159 aos::configuration::ReadConfig("config.json");
160
161 ::aos::ShmEventLoop event_loop(&config.message());
Austin Schuh3e45c752019-02-02 12:19:11 -0800162 ::y2012::input::joysticks::Reader reader(&event_loop);
Austin Schuh9fe68f72019-08-10 19:32:03 -0700163
164 event_loop.Run();
165
Austin Schuhae87e312020-08-01 16:15:01 -0700166 return 0;
Brian Silvermanc71537c2016-01-01 13:43:14 -0800167}