• Download
  • Features
  • Parameters
  • Source
  • Other
OpenDS

A reverse-engineered lightweight FRC Driver Station alternative for Windows, Linux, and macOS.

Download

Download the stable jar from here and run. There are no additional dependencies.

You must have Java (JRE or JDK) 8 or newer installed (download here) and at minimum be running a 64-bit version of one of the following operating systems:

  • Windows 7, 8.1, 10, or 11
  • Linux kernel 2.6.35 or greater
  • macOS 10 (OSX) or newer

If you do not have Java and/or want a single install/run script, download this script instead and use it to start OpenDS. Use the same script to re-launch OpenDS.

Features

OpenDS is a fully functional FIRST Robotics Competition (FRC) Driver Station alternative for Windows, Linux, and macOS systems. All the features of the official Driver Station are implemented in OpenDS, meaning teams can use it in the place of the official Driver Station when testing robot features away from the competition.

OpenDS is extremely lightweight (about 0.25 MB) and does not require an installation of any kind, unlike the official Driver Station which has a lengthy installation process and heavy install footprint.

NOTE: OpenDS may not be used during FRC-legal competitions as per rules R710 and R901 (previously R66 and R88). OpenDS is intended for testing use only.

  • Robot
    • Enable and disable
    • Change mode (teleop/auto/test)
    • Change alliance station (1/2/3 & red/blue)
    • Send game data
    • Change team number
    • USB Joystick and Xbox controller input support
    • Restart robot code and RoboRIO
    • Emergency stop
  • Statistics
    • Robot voltage
    • Connections
    • Brownouts
    • Match time left (FMS)
    • CAN Bus
    • RoboRIO disk/RAM/CPU/version
    • Disable/Rail faults
    • Logging to .dslog files
  • NetworkTables
    • Read Shuffleboard and SmartDashboard packets
    • Display NetworkTables passed data
  • FMS
    • Connect to a offseason FMS or Cheesy Arena
    • Choose to connect or not
  • Support
    • Lightweight executable
    • Windows, Linux, and macOS support
    • No install prerequisites
    • Easily modifiable for updated protocol years
    • Command-line (CLI) parameters
Command-Line Parameters

Some features of OpenDS can be passed through to the program directly from the command line, without needing to click any part of the GUI. Note that all Boolean type parameters do not require a value to follow the parameter flag.

Parameters can be used as follows: java -jar open-ds.jar [parameters]

The complete reference of current parameters can be found below.

Name Flag Datatype Options
Alliance Color --alliance-color String Red, Blue
Alliance Number --alliance-num Integer 1, 2, 3
Debug --debug Boolean
Disable Hotkeys --disable-hotkeys Boolean
Disable Log File --disable-log Boolean
Disable Network Tables --disable-nettables Boolean
Connect to FMS --fms Boolean
Game Data --game-data String
Headless --headless Boolean
Protocol Year --protocol-year Integer [list of supported years]
Robot Drive Mode --robot-mode String Teleoperated, Autonomous, Test
Team Number --team-num Integer
Connect via USB --usb Boolean
Source

The source code for OpenDS is available on GitHub at https://github.com/Boomaa23/open-ds.

OpenDS may be used without restriction for the purpose of testing robots by teams and individuals. Please see the license for further uses.

If you find a bug or issue with OpenDS, please report it on the "Issues" section of the GitHub here.

For protocol changes in future years, OpenDS is easily modifiable. Ports, IP addresses, display layouts, and packet creation/parsing are all re-formattable.

There are three main classes that need to be implemented for a new protocol year:

  • PacketParser
    • Package: com.boomaa.opends.data.receive.parser
    • Example: Parser2020
    • Description: Parses received packet data that is not contained within tags (e.g. standard data across all packets of that type)
    • Implementation: Create four classes that extend the above class, one for each connection (e.g. TCP and UDP for RoboRIO and FMS). Make all four classes sub-classes of a single class Parser20XX with the same naming scheme found in the example.
  • PacketCreator
    • Package: com.boomaa.opends.data.send.creator
    • Example: Creator2020
    • Description: Creates packets to send to the RoboRIO or FMS based on GUI inputs and other status sources.
    • Implementation: Create four methods in a single class. Make the class extend the abstract class PacketCreator, and implement all the methods. This is a good place to access GUI data through the JDEC.
  • ElementUpdater
    • Package: com.boomaa.opends.display.updater
    • Example: Updater2020
    • Description: Updates the previously positioned GUI elements with data from the parsers.
    • Implementation: Make a new class that extends the abstract class ElementUpdater. This will contain methods to update the GUI from each packet stream, and methods to reset the elements should connection to the remote (RoboRIO/FMS) stop.

The SendTag and ReceiveTag classes should be fully updated for the additional years' sent and received (from the perspective of the driver station) tags. Use Null[Send/Receive]Tag if none, or Ref[Send/Receive]Tag.yearOfAction(int year) if it is the same as another year. Consider using the DataBase system for year-centric data storage and identification.

Make sure that naming schemes are followed. Add another integer entry to the array DisplayEndpoint:VALID_PROTOCOL_YEARS when all three main classes have been created. This will allow the selection of the new protocol by the user. Put in decreasing year order.

Other
  • Troubleshooting: Try launching from the command line (java -jar open-ds-vX.X.X.jar) and observing the console output for additional details. If issues persist, please report them on the "Issues" section of the GitHub here and they will be resolved as soon as possible.
  • Acknowledgements: Thank you to Jessica Creighton for the FRCture documentation, to Alex Spataru for his work on LibDS, and to the Game Technology Group at Sun Microsystems for JInput.
  • Contact: cmo93003@yahoo.com