blob: 8546391ae40690ca675f87e8c7f39c61cf3bb2e0 [file] [log] [blame]
Ravago Jones486de802021-05-19 20:47:55 -07001#include "y2021_bot3/actors/auto_splines.h"
2
3#include "frc971/control_loops/control_loops_generated.h"
4
Stephan Pleinesf63bde82024-01-13 15:59:33 -08005namespace y2021_bot3::actors {
Ravago Jones486de802021-05-19 20:47:55 -07006
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
21flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::BasicSSpline(
22 aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder) {
23 flatbuffers::Offset<frc971::Constraint> longitudinal_constraint_offset;
24 flatbuffers::Offset<frc971::Constraint> lateral_constraint_offset;
25 flatbuffers::Offset<frc971::Constraint> voltage_constraint_offset;
26
27 {
28 frc971::Constraint::Builder longitudinal_constraint_builder =
29 builder->MakeBuilder<frc971::Constraint>();
30 longitudinal_constraint_builder.add_constraint_type(
31 frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
32 longitudinal_constraint_builder.add_value(1.0);
33 longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
34 }
35
36 {
37 frc971::Constraint::Builder lateral_constraint_builder =
38 builder->MakeBuilder<frc971::Constraint>();
39 lateral_constraint_builder.add_constraint_type(
40 frc971::ConstraintType::LATERAL_ACCELERATION);
41 lateral_constraint_builder.add_value(1.0);
42 lateral_constraint_offset = lateral_constraint_builder.Finish();
43 }
44
45 {
46 frc971::Constraint::Builder voltage_constraint_builder =
47 builder->MakeBuilder<frc971::Constraint>();
48 voltage_constraint_builder.add_constraint_type(
49 frc971::ConstraintType::VOLTAGE);
50 voltage_constraint_builder.add_value(6.0);
51 voltage_constraint_offset = voltage_constraint_builder.Finish();
52 }
53
54 flatbuffers::Offset<
55 flatbuffers::Vector<flatbuffers::Offset<frc971::Constraint>>>
56 constraints_offset =
57 builder->fbb()->CreateVector<flatbuffers::Offset<frc971::Constraint>>(
58 {longitudinal_constraint_offset, lateral_constraint_offset,
59 voltage_constraint_offset});
60
61 const float startx = 0.4;
62 const float starty = 3.4;
63 flatbuffers::Offset<flatbuffers::Vector<float>> spline_x_offset =
64 builder->fbb()->CreateVector<float>({0.0f + startx, 0.6f + startx,
65 0.6f + startx, 0.4f + startx,
66 0.4f + startx, 1.0f + startx});
67 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset =
68 builder->fbb()->CreateVector<float>({starty - 0.0f, starty - 0.0f,
69 starty - 0.3f, starty - 0.7f,
70 starty - 1.0f, starty - 1.0f});
71
72 frc971::MultiSpline::Builder multispline_builder =
73 builder->MakeBuilder<frc971::MultiSpline>();
74
75 multispline_builder.add_spline_count(1);
76 multispline_builder.add_constraints(constraints_offset);
77 multispline_builder.add_spline_x(spline_x_offset);
78 multispline_builder.add_spline_y(spline_y_offset);
79
80 return multispline_builder.Finish();
81}
82
83flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::StraightLine(
84 aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder) {
85 flatbuffers::Offset<flatbuffers::Vector<float>> spline_x_offset =
86 builder->fbb()->CreateVector<float>(
87 {-12.3, -11.9, -11.5, -11.1, -10.6, -10.0});
88 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset =
89 builder->fbb()->CreateVector<float>({1.25, 1.25, 1.25, 1.25, 1.25, 1.25});
90
91 frc971::MultiSpline::Builder multispline_builder =
92 builder->MakeBuilder<frc971::MultiSpline>();
93
94 multispline_builder.add_spline_count(1);
95 multispline_builder.add_spline_x(spline_x_offset);
96 multispline_builder.add_spline_y(spline_y_offset);
97
98 return multispline_builder.Finish();
99}
100
Stephan Pleinesf63bde82024-01-13 15:59:33 -0800101} // namespace y2021_bot3::actors