RoboSub Technical Design Report
Read the Technical Design Report GT_MRG_RoboSub_2024_TDR.pdf
Software Design
Pontus, the ROS2 Software Stack, provides packages for autonomy, localization, perception, navigation, and control. It was modeled after Virtuoso (RoboBoat’s software stack) but redesigned for the 3D underwater environment
Autonomy
- Autonomy package provides an inheritable class
- BaseTask ROS node- provides some default functionality for generating a Task future as well as default publishing of debug and status information.
- Tasks should be implemented using state machines or at least be able to trigger the
complete
function - Competition tasks can extend the BaseTask ROS node
- Tasks should be implemented using state machines or at least be able to trigger the
- BaseRun ROS node- provides functionality for generating and running new Task nodes to completion while monitoring their status
- The Prequalification Run can simply run the Gate Task and Vertical Marker Tasks back to back
- Finals Run can implement a more complicated state machine with various fallbacks and contingencies
Localization
- The localization package is entirely odoemtry based
- fuses velocity data from DVL and acceleration data from the IMU using the Extended Kalman Filter provided by the robot_localization package
- In the future, we plan to add SLAM using data from the camera and sonars
Perception
- The perception package is used to detect objects of interest within the environment
- A preprocessing node takes in camera data to reduce noise, sharpen edges, and enhance contrast
- A YOLO model attempts to identify the object
- A simpler method of color matching is used during some tasks due to limited training and testing
- Identified objects are then matched with sonar or stereo camera detections to get the distance to the object
Navigation
- Since we don’t have SLAM to get a map for path planning, navigation relies on local relative movements by individual state machines to specific objects
- A Task was created for inter-task navigation by identifying and following the heading of path markers
- In the absence of such markers, the downward-angled sonar sweeps the pool floor looking for anything sticking up from the bottom
Control
- The control package provides a simple cascaded PID controller.
- First, a position PID controller is used to generate body velocity commands, which are then used as the input to a velocity PID controller.
- This controller then outputs body acceleration commands to the thruster controller, which uses the thruster positions provided by a URDF file to calculate individual thruster commands.
- To avoid thruster saturation, the thruster controller also separately rescales the vertical and horizontal thruster commands relative to the highest thrust value in each respective set.
Firmware
The firmware links the autonomy stack to the physical motors and auxiliary mechanisms on the Autonomous Surface Vehicle (ASV). There are two microcontrollers in use:
- Teensy: Handles motor commands for moving the ASV, both from the autonomy stack and over R/C.
- Arduino Due: Manages motor commands for auxiliary mechanisms such as arms or water shooters.
The firmware is written in C++ and utilizes the micro-ROS library to interact with the autonomy stack.