SOFTWARE TEAM

The software subteam was created in 2015 during the team’s switch from ROV to AUV competitions. Due to the additional complexity of controlling an autonomous vehicle, the then Electrical team split, and the Software team was formed. The team is still running the same core software stack from that time called Riptide Software, named after the team’s first AUV.

About the Subteam

The Software Team is responsible for creating and managing all of the code used by our team. This involves not only the required software to operate the vehicle, but also the tools to assist in testing and validation. Being a part of Software Team  gives you real programming experience working with real-time robotic systems. Whether you are interested in machine vision, controller theory, or systems design, you will find something you enjoy here.

All of our code is open source and available to view on our GitHub Organization. Additionally members contribute to open source projects with fixes and improvements to ensure that others benefit from our team’s work.

Read more about the software stack and the projects we worked on this year below!

Software Team with Robot

Riptide Software

Riptide Software is the name of the custom software stack used on our vehicle. We build our software on top of Robot Operating System (ROS), which provides useful libraries for communication, localization, vision, and other common tools for real-time robotics tasks. This year, we are running ROS 2 Humble with our software written in both C++ and Python.

Riptide Software is split into several units to modularize the various tasks our vehicle needs to perform. These include Riptide Core, Riptide Control, Riptide Perception, and Riptide Autonomy. Each unit only depends on the previous units to run, allowing for easier testing of the various software components. Additionally, all of Riptide Software is versioned into Riptide Release for each test to allow easy rollback to any previous configuration.

Riptide Software Architecture Graph

Riptide Core contains all of the packages required to run the vehicle. This contains configuration data, such as the robot config, letting the vehicle know about the locations of its various sensors and actuators. It also contains the required drivers to interact with the sensors and electronics on the vehicle.

Our vehicle is configured with a VectorNav VN-100 IMU, a BlueRobotics Bar30 Depth Sensor, and a Nortek DVL1000 – 300m Doppler Velocity Logger. These sensors provide an absolute orientation and depth, as well as an approximate X/Y position. This data is passed into an Extended Kalman Filter (EKF) configured by Riptide Core to compute its estimated location in the water.

With these packages, Riptide Core provides the tools for the vehicle to know about itself, its position, and an interface to control its thrusters and other actuators.

View the Riptide Core Repository

Render of Talos with Software Frames Labeled

Riptide Control contains the packages required to control the thrusters in order to move the vehicle. This contains the controller, thruster solver, as well as packages to enable remote driving of the vehicle.

The vehicle uses a Cascaded P controller, with the buoyancy and weight passed into a feedforward controller to offset static forces. There is a velocity and positional P controller for each angular and linear axis. The controller is separated from thruster solver to allow the controller to operate with a variety of thruster configurations. This is essential as the same controller runs on both the Puddles and Talos vehicles, which have different thruster configurations. The controller outputs a body force for the thruster solver.

The thruster solver is responsible for calculating the required commands for each thruster, depending on its location and the requested body force. This thruster location information comes from the configuration in Riptide Core. These commands are then forwarded to the electronics system to drive the thrusters.

View the Riptide Control Repository

Riptide Software Controller Diagram

Riptide Perception consists of packages related to vision-based object detection, and the mapping of those detected objects into the vehicle’s internal map. These positions can then be used by the autonomy code to navigate and align with the objects found by vision.

The vision system is a custom designed wrapper around the Sterolabs ZED SDK. It uses YOLOv5, a machine learning model developed for object detection, to find object in the water. The ZED SDK, part of the vehicle’s StereoLabs ZED 2i Camera, is used to solve for the detections position and orientation relative to the camera.

This relative position is forwarded onto the mapping system, which takes into account the confidence in the detection along with the previous estimate to update the estimated position for that object. This information is then made available to the vehicle’s internal map. The mapping system relies heavily upon tf2, a transformation library built into ROS which allows solving for the relationship between any objects in the internal map.

View the Riptide Perception Repository

YOLOv5 Detection

Riptide Autonomy contains the highest-level competition task code for the vehicle. The team uses a behaviortree-based autonomy system, featuring the BehaviorTree.CPP library, and uses its fork of Groot to edit its behavior trees. Inside of Riptide Autonomy is:

    • All actions, conditions, and decorators used in the behavior trees
    • All behavior trees used on the robot
    • An action server to run the behavior trees
    • An assistant to streamline maintainance on the system
    • Utilties for testing the health of the system

View the Riptide Autonomy Repisotry

Example BehaviorTree of Torpedoes Charging

RVIZ Plugins

One of the most important tools during testing is an interface which exposes the various controls for the system. This year the team developed several plugins for RVIZ, a visualization tool developed by ROS for monitoring the internal map of the system. These plugins add various controls to:

  • Bring up/shut down the various components of Riptide Software on the vehicle
  • Send commands to the controller for position and speed
  • Start task code
  • Monitor vehicle diagnostics

These tools have reduced the time spent configuring the vehicle by providing a simple and easy to use control interface.

Simulator Project

One of the most difficult aspects of testing underwater vehicles is finding a location to perform the test. Pool Tests take time to organize and have a limited amount of testing time available. There typically is not enough time to debug issues found in code. Instead, many of the higher-level systems are tested in a simulator environment.

Most simulators for ROS do not support simulating an underwater environment. Instead the software team is developing a custom physics model built in MathWorks Simulink to run inside Gazebo, a simulation library. This model will apply realistic forces to the vehicle, providing a realistic testbench for the controller and all systems above.

View our Simulink Model Repository

Image of Talos in Simulink simulator

Become a member!

Please fill out our membership form to be added to our team email list.

Interested in software team? Reach out to Brach Knutson: knutson.39@osu.edu

The Ohio State University Underwater Robotics Team

Dreese Laboratory
2015 Neil Ave.
Room 457
Columbus, OH, 43210, USA
osu.uwrt@gmail.com

 

Ohio State Underwater Robotics Team Logo