blob: 3498a3e5002ff356193b2c8781508d5cd4612898 [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(
9 aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder,
10 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset,
11 bool is_left) {
12 flatbuffers::Vector<float> *spline_y =
13 GetMutableTemporaryPointer(*builder->fbb(), spline_y_offset);
14
15 if (!is_left) {
16 for (size_t i = 0; i < spline_y->size(); i++) {
17 spline_y->Mutate(i, -spline_y->Get(i));
18 }
19 }
20}
21
22flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::BasicSSpline(
23 aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder) {
24 flatbuffers::Offset<frc971::Constraint> longitudinal_constraint_offset;
25 flatbuffers::Offset<frc971::Constraint> lateral_constraint_offset;
26 flatbuffers::Offset<frc971::Constraint> voltage_constraint_offset;
27
28 {
29 frc971::Constraint::Builder longitudinal_constraint_builder =
30 builder->MakeBuilder<frc971::Constraint>();
31 longitudinal_constraint_builder.add_constraint_type(
32 frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
33 longitudinal_constraint_builder.add_value(1.0);
34 longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
35 }
36
37 {
38 frc971::Constraint::Builder lateral_constraint_builder =
39 builder->MakeBuilder<frc971::Constraint>();
40 lateral_constraint_builder.add_constraint_type(
41 frc971::ConstraintType::LATERAL_ACCELERATION);
42 lateral_constraint_builder.add_value(1.0);
43 lateral_constraint_offset = lateral_constraint_builder.Finish();
44 }
45
46 {
47 frc971::Constraint::Builder voltage_constraint_builder =
48 builder->MakeBuilder<frc971::Constraint>();
49 voltage_constraint_builder.add_constraint_type(
50 frc971::ConstraintType::VOLTAGE);
51 voltage_constraint_builder.add_value(6.0);
52 voltage_constraint_offset = voltage_constraint_builder.Finish();
53 }
54
55 flatbuffers::Offset<
56 flatbuffers::Vector<flatbuffers::Offset<frc971::Constraint>>>
57 constraints_offset =
58 builder->fbb()->CreateVector<flatbuffers::Offset<frc971::Constraint>>(
59 {longitudinal_constraint_offset, lateral_constraint_offset,
60 voltage_constraint_offset});
61
James Kuszmaul5f6d1d42020-03-01 18:10:07 -080062 const float startx = 0.0;
63 const float starty = 0.05;
Stephan Massaltd021f972020-01-05 20:41:23 -080064 flatbuffers::Offset<flatbuffers::Vector<float>> spline_x_offset =
James Kuszmaul5f6d1d42020-03-01 18:10:07 -080065 builder->fbb()->CreateVector<float>({0.0f + startx, 0.8f + startx,
66 0.8f + startx, 1.2f + startx,
67 1.2f + startx, 2.0f + startx});
Stephan Massaltd021f972020-01-05 20:41:23 -080068 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset =
69 builder->fbb()->CreateVector<float>({starty - 0.0f, starty - 0.0f,
James Kuszmaul5f6d1d42020-03-01 18:10:07 -080070 starty - 0.1f, starty - 0.2f,
71 starty - 0.3f, starty - 0.3f});
Stephan Massaltd021f972020-01-05 20:41:23 -080072
73 frc971::MultiSpline::Builder multispline_builder =
74 builder->MakeBuilder<frc971::MultiSpline>();
75
76 multispline_builder.add_spline_count(1);
77 multispline_builder.add_constraints(constraints_offset);
78 multispline_builder.add_spline_x(spline_x_offset);
79 multispline_builder.add_spline_y(spline_y_offset);
80
81 return multispline_builder.Finish();
82}
83
84flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::StraightLine(
85 aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder) {
86 flatbuffers::Offset<flatbuffers::Vector<float>> spline_x_offset =
87 builder->fbb()->CreateVector<float>(
88 {-12.3, -11.9, -11.5, -11.1, -10.6, -10.0});
89 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset =
90 builder->fbb()->CreateVector<float>({1.25, 1.25, 1.25, 1.25, 1.25, 1.25});
91
92 frc971::MultiSpline::Builder multispline_builder =
93 builder->MakeBuilder<frc971::MultiSpline>();
94
95 multispline_builder.add_spline_count(1);
96 multispline_builder.add_spline_x(spline_x_offset);
97 multispline_builder.add_spline_y(spline_y_offset);
98
99 return multispline_builder.Finish();
100}
101
102} // namespace actors
103} // namespace y2020