blob: dbea31a14bbfa909b5fc33ebd821dec878bb096f [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(
James Kuszmaulddd2ba62020-03-08 22:17:13 -070023 aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder,
24 aos::Alliance alliance) {
Stephan Massaltd021f972020-01-05 20:41:23 -080025 flatbuffers::Offset<frc971::Constraint> longitudinal_constraint_offset;
26 flatbuffers::Offset<frc971::Constraint> lateral_constraint_offset;
27 flatbuffers::Offset<frc971::Constraint> voltage_constraint_offset;
28
29 {
30 frc971::Constraint::Builder longitudinal_constraint_builder =
31 builder->MakeBuilder<frc971::Constraint>();
32 longitudinal_constraint_builder.add_constraint_type(
33 frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
Austin Schuhfd1715f2021-01-30 16:58:24 -080034 longitudinal_constraint_builder.add_value(1.0);
Stephan Massaltd021f972020-01-05 20:41:23 -080035 longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
36 }
37
38 {
39 frc971::Constraint::Builder lateral_constraint_builder =
40 builder->MakeBuilder<frc971::Constraint>();
41 lateral_constraint_builder.add_constraint_type(
42 frc971::ConstraintType::LATERAL_ACCELERATION);
Austin Schuhfd1715f2021-01-30 16:58:24 -080043 lateral_constraint_builder.add_value(1.0);
Stephan Massaltd021f972020-01-05 20:41:23 -080044 lateral_constraint_offset = lateral_constraint_builder.Finish();
45 }
46
47 {
48 frc971::Constraint::Builder voltage_constraint_builder =
49 builder->MakeBuilder<frc971::Constraint>();
50 voltage_constraint_builder.add_constraint_type(
51 frc971::ConstraintType::VOLTAGE);
Austin Schuhfd1715f2021-01-30 16:58:24 -080052 voltage_constraint_builder.add_value(2.0);
Stephan Massaltd021f972020-01-05 20:41:23 -080053 voltage_constraint_offset = voltage_constraint_builder.Finish();
54 }
55
56 flatbuffers::Offset<
57 flatbuffers::Vector<flatbuffers::Offset<frc971::Constraint>>>
58 constraints_offset =
59 builder->fbb()->CreateVector<flatbuffers::Offset<frc971::Constraint>>(
60 {longitudinal_constraint_offset, lateral_constraint_offset,
61 voltage_constraint_offset});
62
Austin Schuhfd1715f2021-01-30 16:58:24 -080063 const float startx = 0.0;
64 const float starty = 0.0;
65 std::vector<float> x_pos{0.0f + startx, 0.4f + startx, 0.4f + startx,
66 0.6f + startx, 0.6f + startx, 1.0f + startx};
67 std::vector<float> y_pos{starty + 0.0f, starty + 0.0f, starty + 0.05f,
68 starty + 0.1f, starty + 0.15f, starty + 0.15f};
James Kuszmaulddd2ba62020-03-08 22:17:13 -070069 if (alliance == aos::Alliance::kRed) {
70 for (size_t ii = 0; ii < x_pos.size(); ++ii) {
71 x_pos[ii] *= -1;
72 y_pos[ii] *= -1;
73 }
74 }
Stephan Massaltd021f972020-01-05 20:41:23 -080075 flatbuffers::Offset<flatbuffers::Vector<float>> spline_x_offset =
James Kuszmaulddd2ba62020-03-08 22:17:13 -070076 builder->fbb()->CreateVector<float>(x_pos);
Stephan Massaltd021f972020-01-05 20:41:23 -080077 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset =
James Kuszmaulddd2ba62020-03-08 22:17:13 -070078 builder->fbb()->CreateVector<float>(y_pos);
Stephan Massaltd021f972020-01-05 20:41:23 -080079
80 frc971::MultiSpline::Builder multispline_builder =
81 builder->MakeBuilder<frc971::MultiSpline>();
82
83 multispline_builder.add_spline_count(1);
84 multispline_builder.add_constraints(constraints_offset);
85 multispline_builder.add_spline_x(spline_x_offset);
86 multispline_builder.add_spline_y(spline_y_offset);
87
88 return multispline_builder.Finish();
89}
90
91flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::StraightLine(
92 aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder) {
93 flatbuffers::Offset<flatbuffers::Vector<float>> spline_x_offset =
94 builder->fbb()->CreateVector<float>(
95 {-12.3, -11.9, -11.5, -11.1, -10.6, -10.0});
96 flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset =
97 builder->fbb()->CreateVector<float>({1.25, 1.25, 1.25, 1.25, 1.25, 1.25});
98
99 frc971::MultiSpline::Builder multispline_builder =
100 builder->MakeBuilder<frc971::MultiSpline>();
101
102 multispline_builder.add_spline_count(1);
103 multispline_builder.add_spline_x(spline_x_offset);
104 multispline_builder.add_spline_y(spline_y_offset);
105
106 return multispline_builder.Finish();
107}
108
109} // namespace actors
110} // namespace y2020