blob: b0915d5a651cb5d6769a66ce4455696c92d6f00a [file] [log] [blame]
milind-u086d7262022-01-19 20:44:18 -08001#include "y2022/actors/auto_splines.h"
2
3#include "frc971/control_loops/control_loops_generated.h"
4
Stephan Pleinesf63bde82024-01-13 15:59:33 -08005namespace y2022::actors {
milind-u086d7262022-01-19 20:44:18 -08006
7void MaybeFlipSpline(
8 aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder,
9 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset,
10 bool is_left) {
11 flatbuffers::Vector<float> *spline_y =
12 GetMutableTemporaryPointer(*builder->fbb(), spline_y_offset);
13
14 if (!is_left) {
15 for (size_t i = 0; i < spline_y->size(); i++) {
16 spline_y->Mutate(i, -spline_y->Get(i));
17 }
18 }
19}
20
Ravago Jones81e50632022-03-11 16:23:51 -080021flatbuffers::Offset<frc971::MultiSpline> FixSpline(
22 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
23 *builder,
24 flatbuffers::Offset<frc971::MultiSpline> spline_offset,
25 aos::Alliance alliance) {
26 frc971::MultiSpline *spline =
27 GetMutableTemporaryPointer(*builder->fbb(), spline_offset);
28 flatbuffers::Vector<float> *spline_x = spline->mutable_spline_x();
29 flatbuffers::Vector<float> *spline_y = spline->mutable_spline_y();
milind-u086d7262022-01-19 20:44:18 -080030
Ravago Jones81e50632022-03-11 16:23:51 -080031 if (alliance == aos::Alliance::kBlue) {
32 for (size_t ii = 0; ii < spline_x->size(); ++ii) {
33 spline_x->Mutate(ii, -spline_x->Get(ii));
34 }
35 for (size_t ii = 0; ii < spline_y->size(); ++ii) {
36 spline_y->Mutate(ii, -spline_y->Get(ii));
37 }
milind-u086d7262022-01-19 20:44:18 -080038 }
Ravago Jones81e50632022-03-11 16:23:51 -080039 return spline_offset;
milind-u086d7262022-01-19 20:44:18 -080040}
41
Ravago Jones81e50632022-03-11 16:23:51 -080042flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::TestSpline(
43 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
44 *builder,
45 aos::Alliance alliance) {
46 return FixSpline(
47 builder,
48 aos::CopyFlatBuffer<frc971::MultiSpline>(test_spline_, builder->fbb()),
49 alliance);
milind-u086d7262022-01-19 20:44:18 -080050}
51
Ravago Jonese20f7f92022-03-11 19:54:38 -080052flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::Spline1(
53 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
54 *builder,
55 aos::Alliance alliance) {
56 return FixSpline(
57 builder,
58 aos::CopyFlatBuffer<frc971::MultiSpline>(spline_1_, builder->fbb()),
59 alliance);
60}
61
62flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::Spline2(
63 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
64 *builder,
65 aos::Alliance alliance) {
66 return FixSpline(
67 builder,
68 aos::CopyFlatBuffer<frc971::MultiSpline>(spline_2_, builder->fbb()),
69 alliance);
70}
71
72flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::Spline3(
73 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
74 *builder,
75 aos::Alliance alliance) {
76 return FixSpline(
77 builder,
78 aos::CopyFlatBuffer<frc971::MultiSpline>(spline_3_, builder->fbb()),
79 alliance);
80}
81
Austin Schuhf3413b72022-04-16 19:09:33 -070082flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::SplineTwoBall1(
Henry Speiser5eed1de2022-04-07 21:52:10 -070083 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
84 *builder,
85 aos::Alliance alliance) {
86 return FixSpline(
87 builder,
Austin Schuhf3413b72022-04-16 19:09:33 -070088 aos::CopyFlatBuffer<frc971::MultiSpline>(spline_two1_, builder->fbb()),
89 alliance);
90}
91
92flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::SplineTwoBall2(
93 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
94 *builder,
95 aos::Alliance alliance) {
96 return FixSpline(
97 builder,
98 aos::CopyFlatBuffer<frc971::MultiSpline>(spline_two2_, builder->fbb()),
Henry Speiser5eed1de2022-04-07 21:52:10 -070099 alliance);
100}
101
Stephan Pleinesf63bde82024-01-13 15:59:33 -0800102} // namespace y2022::actors