The BBASV 3.0 software architecture is largely similar to that of BBAUV 4.0 by design, as our goal is to maximise code reuse, lowering the burden of maintaining 2 separate software stacks. Notably, major subsystems such as the mission planner, machine learning pipeline, and control system are shared between both vehicles.
We switched to a Behaviour Tree (BT)-based mission planner for its flexibility and maintenance ease. Based on the BehaviorTree.CPP package, it has many advantages over a traditional Finite State Machine (FSM) planner, like being able to quickly interpret the ASV’s behaviour visually. The linear structure and well-defined node transitions also make it easier to configure robot behaviours simply by repositioning nodes, without accounting for innumerable state transitions. This lets our planner accommodate more situations, whereas an FSM would require exponentially more states and transitions to compete.
BBASV 3.0 features a revamped machine learning pipeline, making it faster and more modular. Instead of a mixture of Python 2 and Cython, we now use Python 3 for easier maintainability without sacrificing speed. The new modular design also allows additional models to be added in the future. We also refactored our existing YOLOv5-based architecture to allow the use of TensorRT, letting us leverage device-specific optimisations, maximising our NVIDIA RTX A2000’s potential and gaining a 2x FPS increase.
Advanced Control System
We implemented a trajectory generator to create smooth continuous paths for the BBASV 3.0 to follow. The trajectories are calculated using linear segments with polynomic blend, with limits on the maximum velocity, acceleration, and jerk of the vehicle. This improves performance for distant setpoint goals by avoiding controller saturation.
The control system makes use of control law partitioning, including a full state feedback controller which enables positional and velocity tracking, and a feed-forward controller to compensate for non-linear terms in the vehicle’s motion dynamics.
Our thrust allocator uses quadratic programming to optimise each thruster’s command based on the required forces, and maintains control along each axis of motion even during thruster saturation.