The software for our robot is one of the most complicated parts of our robot. It utilizes ROS as a backend to allow the different parts of the rover to communicate, and even getting this setup was fairly complicated. There are two seperate computers involved in our robot, the one on the ground station (that acts as command and control) and the one on the robot itself which mostly acts as an interface between the robot and ROS (and therefore our network).
The computer on the robot runs Ubuntu and Windows in a VM. The Ubuntu portion of the robot communicates directly with the Robot Arm and our embedded systems. The Robot arm uses a proprietary DENSO protocol that we were ultimately able to interface with Python. This allowed us to integrate it into ROS. The Robot Arm is fully controllable from this interface. The computer also communicates with the two separate microcontrollers that interface with the lower level systems in our robot. These are comprised of a SparkFun Redboard (essentially an Arduino UNO) and a Teensy 3.2. The Arduino maintains control over the firing system (including the feedback from our pressure sensor and the firing servo), while the Teensy handles some of the electronics that require higher performance (the WS2812 LED strips and the 38KHz oscillation required for our ball detection system). Both of these microcontrollers interface directly with the computer, into a ROS node that presents their capabilities to the network (and therefore the groundstation). The Windows VM on this computer was to accommodate a small DENSO app that had to run that was required to enable the arm motors, that we couldn't get to run on Linux. An additional complication with this software was that it would sometimes error out due to various error conditions that could occur with the arm, so Corwin implemented an AutoHotkey script that used pixel detection to monitor this application and reset it when it errored.
The Ground Station that runs the software that controls the robot was originally made for the OSU Robotics Club's Mars Rover team (of which our team are all members), and we used the hardware for our Applied Robotics Challenge. Corwin was able to use the skeleton for the GUI that he made for his capstone project for our GUI, which resulted in him being able to create the GUI very easily.
Ultimately, our software was very easy to use during competition. We designed it so that it could be tuned to the conditions of the competition beforehand, and we could simply click the zones where the friendly or opponent stood and the rest of the parameters that controlled the arm were taken care of automatically.