blob: 00e3bd05f07ef8f6a72182afea2f3e042119d4f8 [file] [log] [blame]
Stephan Massaltd021f972020-01-05 20:41:23 -08001#include "y2020/actors/auto_splines.h"
2
3#include "frc971/control_loops/control_loops_generated.h"
4
5namespace y2020 {
6namespace actors {
7
8void MaybeFlipSpline(
James Kuszmaul75a18c52021-03-10 22:02:07 -08009 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
10 *builder,
Stephan Massaltd021f972020-01-05 20:41:23 -080011 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset,
12 bool is_left) {
13 flatbuffers::Vector<float> *spline_y =
14 GetMutableTemporaryPointer(*builder->fbb(), spline_y_offset);
15
16 if (!is_left) {
17 for (size_t i = 0; i < spline_y->size(); i++) {
18 spline_y->Mutate(i, -spline_y->Get(i));
19 }
20 }
21}
22
23flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::BasicSSpline(
James Kuszmaul75a18c52021-03-10 22:02:07 -080024 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
25 *builder,
James Kuszmaulddd2ba62020-03-08 22:17:13 -070026 aos::Alliance alliance) {
Stephan Massaltd021f972020-01-05 20:41:23 -080027 flatbuffers::Offset<frc971::Constraint> longitudinal_constraint_offset;
28 flatbuffers::Offset<frc971::Constraint> lateral_constraint_offset;
29 flatbuffers::Offset<frc971::Constraint> voltage_constraint_offset;
30
31 {
32 frc971::Constraint::Builder longitudinal_constraint_builder =
33 builder->MakeBuilder<frc971::Constraint>();
34 longitudinal_constraint_builder.add_constraint_type(
35 frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
Austin Schuhfd1715f2021-01-30 16:58:24 -080036 longitudinal_constraint_builder.add_value(1.0);
Stephan Massaltd021f972020-01-05 20:41:23 -080037 longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
38 }
39
40 {
41 frc971::Constraint::Builder lateral_constraint_builder =
42 builder->MakeBuilder<frc971::Constraint>();
43 lateral_constraint_builder.add_constraint_type(
44 frc971::ConstraintType::LATERAL_ACCELERATION);
Austin Schuhfd1715f2021-01-30 16:58:24 -080045 lateral_constraint_builder.add_value(1.0);
Stephan Massaltd021f972020-01-05 20:41:23 -080046 lateral_constraint_offset = lateral_constraint_builder.Finish();
47 }
48
49 {
50 frc971::Constraint::Builder voltage_constraint_builder =
51 builder->MakeBuilder<frc971::Constraint>();
52 voltage_constraint_builder.add_constraint_type(
53 frc971::ConstraintType::VOLTAGE);
Austin Schuhfd1715f2021-01-30 16:58:24 -080054 voltage_constraint_builder.add_value(2.0);
Stephan Massaltd021f972020-01-05 20:41:23 -080055 voltage_constraint_offset = voltage_constraint_builder.Finish();
56 }
57
58 flatbuffers::Offset<
59 flatbuffers::Vector<flatbuffers::Offset<frc971::Constraint>>>
60 constraints_offset =
61 builder->fbb()->CreateVector<flatbuffers::Offset<frc971::Constraint>>(
62 {longitudinal_constraint_offset, lateral_constraint_offset,
63 voltage_constraint_offset});
64
Austin Schuhfd1715f2021-01-30 16:58:24 -080065 const float startx = 0.0;
66 const float starty = 0.0;
67 std::vector<float> x_pos{0.0f + startx, 0.4f + startx, 0.4f + startx,
68 0.6f + startx, 0.6f + startx, 1.0f + startx};
69 std::vector<float> y_pos{starty + 0.0f, starty + 0.0f, starty + 0.05f,
70 starty + 0.1f, starty + 0.15f, starty + 0.15f};
James Kuszmaulddd2ba62020-03-08 22:17:13 -070071 if (alliance == aos::Alliance::kRed) {
72 for (size_t ii = 0; ii < x_pos.size(); ++ii) {
73 x_pos[ii] *= -1;
74 y_pos[ii] *= -1;
75 }
76 }
Stephan Massaltd021f972020-01-05 20:41:23 -080077 flatbuffers::Offset<flatbuffers::Vector<float>> spline_x_offset =
James Kuszmaulddd2ba62020-03-08 22:17:13 -070078 builder->fbb()->CreateVector<float>(x_pos);
Stephan Massaltd021f972020-01-05 20:41:23 -080079 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset =
James Kuszmaulddd2ba62020-03-08 22:17:13 -070080 builder->fbb()->CreateVector<float>(y_pos);
Stephan Massaltd021f972020-01-05 20:41:23 -080081
82 frc971::MultiSpline::Builder multispline_builder =
83 builder->MakeBuilder<frc971::MultiSpline>();
84
85 multispline_builder.add_spline_count(1);
86 multispline_builder.add_constraints(constraints_offset);
87 multispline_builder.add_spline_x(spline_x_offset);
88 multispline_builder.add_spline_y(spline_y_offset);
89
90 return multispline_builder.Finish();
91}
92
93flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::StraightLine(
James Kuszmaul75a18c52021-03-10 22:02:07 -080094 aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
95 *builder) {
Stephan Massaltd021f972020-01-05 20:41:23 -080096 flatbuffers::Offset<flatbuffers::Vector<float>> spline_x_offset =
97 builder->fbb()->CreateVector<float>(
98 {-12.3, -11.9, -11.5, -11.1, -10.6, -10.0});
99 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset =
100 builder->fbb()->CreateVector<float>({1.25, 1.25, 1.25, 1.25, 1.25, 1.25});
101
102 frc971::MultiSpline::Builder multispline_builder =
103 builder->MakeBuilder<frc971::MultiSpline>();
104
105 multispline_builder.add_spline_count(1);
106 multispline_builder.add_spline_x(spline_x_offset);
107 multispline_builder.add_spline_y(spline_y_offset);
108
109 return multispline_builder.Finish();
110}
111
112} // namespace actors
113} // namespace y2020