Software Subsystem Diagram
Similar to our electronics, much of our onboard software stack remains unchanged from last year. One big push, however, came in our offline processing capabilities. This year, we put a major focus on using simulation for robot testing and vision training. Historically, our software teams had often had limited time to test software, as our manufacturing processes typically did not finish the robot until over halfway through the year. With simulation, our goal was to be able to test software anytime -- a major long-term benefit for our project, if it could be achieved.
For physical simulation of the robot (e.g. for testing controls and motion), we used the Gazebo Garden simulation suite with its Hydrodynamics plugin to simulate underwater dynamics. Gazebo was chosen due to its significant ROS integration, which allowed us to effectively drop in our existing software stack and immediately test it (with only minimal changes for testing). Although we were not able to finish our simulation component in time to use it before real-life pool tests began, we intend to use it going forward, and are excited for the long-term possibilities that simulation might open up for our software team in the future.
For vision training, we wanted to be able to train computer vision models on competition game elements, even if we did not have the physical elements. This was another direction motivated by Robosub 2024, where we had to spend the first half of the week collecting vision data to train models due to lacking sufficient data beforehand. To obtain synthetic data, we used the Unity game engine to create realistic renderings of game elements underwater. A major upside of this approach was that it was easy to implement and could be easily reconfigured for different lighting settings, water conditions, etc. Additionally, the Unity Perception Package allowed us to the significantly streamline the process of generating large quantities of annotated bounding-box data for use in vision training.
Game element renderings in the Unity game engine