Created a spline drivetrain.
Change-Id: Icfbfcec930d17d1a2ca075fc2eb67594d35113df
diff --git a/frc971/control_loops/control_loops.q b/frc971/control_loops/control_loops.q
index 44eb262..18ed29e 100644
--- a/frc971/control_loops/control_loops.q
+++ b/frc971/control_loops/control_loops.q
@@ -188,3 +188,33 @@
// Maximum acceleration for the profile.
float max_acceleration;
};
+
+// Definition of a constraint on a trajectory
+struct Constraint {
+ // Type of constraint
+ // 0: Null constraint. Ignore and all following
+ // 1: longitual acceleration
+ // 2: lateral acceleration
+ // 3: voltage
+ // 4: velocity
+ uint8_t constraint_type;
+ float value;
+ // start and end distance are only checked for velocity limits.
+ float start_distance;
+ float end_distance;
+};
+
+// Parameters for computing a trajectory using a chain of splines and
+// constraints.
+struct MultiSpline {
+ // index of the spline. Zero indicates the spline should not be computed.
+ uint32_t spline_idx;
+ // Number of splines. The spline point arrays will be expected to have
+ // 6 + 5 * (n - 1) points in them. The endpoints are shared between
+ // neighboring splines.
+ uint8_t spline_count;
+ float[36] spline_x;
+ float[36] spline_y;
+
+ Constraint[6] constraints;
+};