Part of our autonomous strategy this year involves having multiple different autonomous routines based on the position of the robot at the beginning of the match. Our code has been written such that it execute the correct routine based on parameters passed from autonomous init. This whole time we were operating under the assumption that the specific autonomous routine to use would be selected on the driver station by the driver and autonomous init would use network tables to get the selected position from the driver station and decide what routine to take.
Before coding the driver station part of this, I wanted to make sure that it is legal for the driver to press a button on the driver station before autonomous starts. I don’t remember reading anything specific against something like that in the manual, so I wanted to make sure. Also, I was planning on incorporating the controls for this, among some other custom controls, not in SmartDashboard but in the actual LabView dashboard. The dashboard labview source is available in labview after selecting the “dashboard project” option, but I wasn’t sure if are allowed to use a custom dashboard (not smartdashboard but the labview one with camera and graphs) during the competition.
We used the digital IO buttons in the Driver Station last year, and it was fine. Just set the right button while they’re setting up robots on the field, no rules against that that I’m aware of or that they ever called on us.
So to answer your question, yes you are allowed to change certain values on the driver station, but it must be done before the auto bell rings. I would recommend using the virtual input buttons in the I/O tab on the driver station. Also try and figure out what auto mode you will want to use while still in the queuing line so as to avoid any penalties.
As far as using a custom dashboard it is completely legal.
1126 used to have something like an analog counter on their robots. Y’know, a physical wheel on the robot numbered from 0-9, with each number corresponding to a different autonomous routine. This was mostly before the the new age driver station set up (i.e. 2008 and prior). In 2011, it was simply a three-stage switch (high, middle, low) that corresponded with whatever row we wanted to hang out.
Word to the wise, if you go with the physical robot switches, be careful not to bump one. We did at IRI in 2011, and ended up putting our ubertubes on the middle row. In our match alongside 111. And 71. We were more than a little embarrassed.
I’d recommend looking at the SmartDashboard. Using something like the chooser (or other input method), you can just set the mode on the driver station and it’ll get communicated to the robot.
I’ve generally used an analog multiplexed switch (e.g. a 12-position rotary switch with a resistor between each terminal, +5 on one side, gnd on the other, and the wiper as signal) for autonomous modes.
I read the input from the source (currently a uHID) then do some math to end up with an integer number, which I use to find the correct routine in an array. Since we store the routine as a string filename, I also send that filename back to the dashboard as the low priority string (the ‘old style’ binary string dashboard system).
I like keeping the robot in the feedback loop. The drive team occasionally complains about not being able to see the selected mode until the robot is booted up, but requiring the robot to confirm the selected mode is a much more failsafe option than selecting it and hoping the robot received it (IMO).
There’s documentation for how to do it with command based programming. To do it without command based would be similar, except you would send a string and then depending on the selected string, you would execute the desired autonomous.