Manual override mode: For every PWM/solenoid/relay/digital output on the cRIO you could press a sequence of buttons on a gamepad to set it to a chosen value. Useful for initial bring-up of components, debugging, or if something goes unexpectedly wrong during a match. This was especially useful for us because our normal operation modes involved doing a lot of actions at once.
To use it, you'd basically hit a button to specify the output type, then a couple to specify which output number, and then a couple more to choose the value to set it to. So for example, the values available for the PWMs were full forward, full reverse, stop, or "no override".
This feature was easy to implement because of the overall design of our code. At a high level, it looked like this:
Code:
+------------------------------------------------+
| +-------------+ |
| | | |
| +>|---------| | |
+-->|state | | |
sensor--->|estimator|-+->|-------------| |
input |---------| |control logic|->overrides->outputs
user input--->goals----->|-------------| ^
| |
+---------------------------------------+
All the outputs are collected together into a datastructure. So after the "normal" control logic ran it was easy to change parts of the output before it was written, and these changes would natuarally be reflected in the state estimation code. This meant that we didn't have to snake any changes through the normal control logic or state estimation code.