top of page

Software Team

Welcome to the software page for the Okanagan Marine Robotics (OKMR) team!

​

Github: Okanagan-Marine-Robotics/okmr_auv

Documentation: 2024 Google doc​​

​

Image Left to Right: Graeme Bradford, Eryk Halicki

​

11C89DD6-862A-4788-BB88-BC096E232A3A_1_105_c.jpeg
image.png

Overview

​This page outlines the architecture, design principles, and technical advancements powering our autonomous underwater vehicle (AUV), Ogopogo.

 

Over the last year, our software team has developed a robust, modular, and scalable system using industry-relevant tools and custom-built frameworks to meet the increasing complexity of RoboSub competition tasks​

​

Image: 2024 Cascade AUV at Robosub 2024

​

System Architecture

Our software stack is organized using a Control Hierarchy, a widely used structure in subsea robotics research and industry. It separates control responsibilities across five layers (L5 to L1):

​

  • L5 - Planning: High-level executive logic

  • L4 - Perception:  Spatial awareness and Object detection

  • L3 - Navigation: Translating high level commands into navigation goals

  • L2 - Controls : Mapping navigation goals to individual thrusters using PID, feedforward controllers, thrust allocation, etc.

  • L1 - Hardware Interface: Direct communication with motors, sensors, and actuators

​

This layered design allows us to decouple responsibilities, isolate bugs, and support reusable infrastructure across projects and subsystems.

​

Image: 2025 System Diagram

image.png
image.png

ROS2 Middleware

Our entire software system is built on ROS2 (Robot Operating System 2), an open-source middleware framework designed for robot control systems. ROS2 enables:

​

  • Modular development via nodes

  • Efficient inter-process communication (topics, services, actions)

  • Interoperability between C++ and Python

  • Lifecycle management and live parameter tuning

  • Easy integration with simulation and visualization tools

​

ROS2 is an industry standard and provides the structure needed for our team to scale our codebase while promoting testability and real-world robustness.

​

Automated Planning

The Automated Planning subsystem serves as the brain of the AUV. It makes all high-level decisions during autonomous missions, coordinating between mapping, object detection, and control subsystems.

​

This year, we redesigned the system using a modular and hierarchical state machine architecture based on an extended version of PyTransitions. We prioritized state machines over behavior trees due to their simplicity and traceability in debugging. This redesign allows:

​

  • Fast iteration on new missions

  • Clean integration with ROS2 actions and services

  • Reuse of planning logic between tasks

​

Image: Diagram of high level "master" state machine

​

image.png
image.png

Mapping

Our Mapping subsystem builds a 3D semantic map of the environment using a customized voxel grid system inspired by OpenVDB. This allows Ogopogo to understand both where objects are and what they are.

Key features:

​

  • Integration of object detection output into semantic maps

  • Efficient high-frequency updates using our modified "Bonxai" voxel data structure

  • New for 2025: Hydrophone-based pinger localization integrated directly into mapping

​

Image: 2024 Mapping Subsystem test video

Object Detection

The Object Detection subsystem is responsible for recognizing underwater targets and environmental markers.

Major 2025 improvements include:

​

  • Transition from prebuilt Ultralytics YOLO to a custom PyTorch-based model, providing control over model architecture and future extensions like RGBD perception

  • Integration with our 3D mapping system for spatial localization

  • Use of real-world and simulated datasets for training via Stonefish

Navigation

The Navigation subsystem converts global goals into actionable movement commands. It also maintains internal estimates of position and orientation using inertial sensors and filtering algorithms.

2025 highlights:

​

  • Complete C++ rewrite for performance gains

  • New ROS2 Action interface for precise planner-control coordination

  • Use of complementary filters to stabilize pitch and roll estimates

Actuator Control

This newly added subsystem allows the AUV to interact with physical elements in the environment via grippers, solenoids, and other actuators.

It includes:

​

  • An inverse kinematics solver for our robotic arm

  • ROS2-based actuator interfaces

  • Modular architecture for adding more actuators as needed

Motor Control

Our Motor Control subsystem translates desired movements into specific motor commands. To handle the dynamics of underwater motion, we employ a five-layer cascade control system that includes:

  • PID controllers

  • Feedforward compensation

  • Thrust allocation

  • Throttle-to-thrust conversion

​

This system was a major leap from the previous year’s simple cascading PID controller and supports highly dynamic and responsive operation.

Simulation & Testing

Simulation plays a critical role in our development pipeline, allowing us to test new software changes without the need for real sensor data or pool tests.

 

We use the Stonefish Simulator to:

  • Generate training data for object detection

  • Test mission planning logic

  • Verify system behavior without hardware risk

​

All major subsystems are testable independently in both simulated and real-world environments.

​

Image: Screenshot of a basic simulation scene in Stonefish sim

image.png
bottom of page