There are two ways to control CPM vehicles, direct commands and trajectory commands.
Direct Command
The direct command uses dimensionless, uncalibrated inputs and applies them directly to the motor and servo.
motor_throttle | steering_servo | |
---|---|---|
-1.0 | Maximum reverse acceleration | Full right |
0.0 | Brake, stop | Steering roughly centered, but may have an offset |
+1.0 | Maximum forward acceleration | Full left |
Trajectory Command
The reference trajectory is defined as a Cubic Hermite spline. A spline is a function that is defined piecewise in time. Thus it can be extended in real time, which (metaphorically) looks like this:
The points defining the spline must be given as a set of five numbers [ti, px(ti), py(ti), vx(ti), vy(ti)]
, where ti
is the absolute time in nanoseconds of the trajectory point, [px, py]
is the position vector (meters) and [vx, vy]
is the velocity vector (m/s). The driving surface bounds are 0.0m < px < 4.5m
and 0.0m < py < 4.0m
.
The time between trajectory points t(i+1) - t(i)
is not fixed, but should be between 100 ms and 400 ms. Due to network latency and the controller structure, the trajectory points need to be created and sent ahead of time. The exact required lead time is TBD, but 1000 ms should be enough.
Troubleshooting