Ardusub use for AUV Glider / Single Thruster with control surfaces


I’ve got a project I’m working on that I’m in the early development phases of and I’m looking to buy vs. make regarding the autonomous control. I’m working on a traditional AUV submersible glider with a desire to also use the platform for a traditional “torpedo” style of propulsion and control (control surfaces). For the very first phase I’m just looking to make a slightly positive buoyant version surface vehicle to get the basics down then move into depth control. An example of the expected vehicle would be something like this For the very first phase I’m just looking to make a slightly positive buoyant version surface vehicle to get the basics down then move into depth control.

Phase 1: Surface operating “boat” that looks like a UUV
Phase 2: Powered single thruster UUV that looks largely like Phase 1
Phase 3: Remove the thruster and utilize only the depth control capability as a buoyancy engine for thrust (long duration power use not in-scope, call that phase 4!)

I’ve done a bit of homework here and realize that it’s not clear if ArduSub will support this style of frame out of the box or what updates are needed.

Pixhawk 4
Given the Pixhawk 1 is no longer available I found that in a community member explicitly stated the Pixhawk 4 was working with Ardusub. There were a few other posts such as as well stating similar.

I’m baselining the Pixhawk 4 using the latest Ardusub.

Control Needed

The desired surface vehicle for phase 1 of the project would use a single thruster (T200) and a control rudder to control the left/right turning. It appears from numerous example of ArduPilot controlling literally RC boats that this is possible but not specifically ArduSub. Does ArduSub support surface operations like that of a traditional “boat” without submerging or is this currently only available in ArduPilot?

Looking into submerge operations in Phase 2, in this post and this post it appears ArduSub may not support single thruster submersibles using control surfaces for maneuvering (e.g. rudder and/or dive planes). Is this still true?

The end goal is to support UUV attitude control to maintain an upright position and use control surface(s) for turning either under thrust (powered version) or while diving/surfaces (glider). Depth control would would a buoyancy engine.

If this is not supported can you let me know what parts are missing and a basic view of tasks needed to get that in work? I’m not opposed to brushing off my programming skills but this would be the first time I’m looking at ArduSub or a system of multiple PID loops so any direction would be appreciated. If I can get the Pixhawk 4 hardware and start hacking with some direction I believe that would be a good start if not already supported.

Thank you,

  • Brent

Hi @KB1LQD, welcome to the forum! :slight_smile:

This sounds like an awesome project! :smiley:

Yes, ArduSub can run on a Pixhawk 4, although at this stage it requires using the development branch firmware in order to support our depth and leak sensors (see here).

We’re also working hard on providing our own Pixhawk alternative, but until that’s released (it’s currently in validation) the Pixhawk 4 is likely the easiest board to start with.

ArduSub is focused on vectored thrusters for all its control, so while you could control a surface vessel with it using thrusters, control-surface-based control is not something we currently support. At this stage I believe that functionality is handled by the ArduBoat subsection of ArduRover, and is part of the main ArduPilot firmware+forums rather than here.

As far as I understand, yes, that’s still true. That said, our servo outputs have options to be set to rudder/elevator/… so I’ve asked our software team if those just exist as a non-functioning carry-over from ArduPilot, or whether there is some kind of support for control-surface control hidden within the codebase (I’ll get back to you with the response). My expectation is they don’t work, and having just reassigned one of my motor outputs to the Rudder option it didn’t respond with normal control inputs, so it’s at least not something that can just be connected to and work instantly.

It’s not something I’ve looked into, so I’ve asked the software team if they have some sense of what would be required.

Detailed developer documentation is something we’re currently somewhat lacking in, and are working to improve. The main reference for ardusub is (which is currently undergoing a significant overhaul). As I understand it the current best reference for attitude control is from the ArduCopter attitude overview. It may also be helpful to look through the Searching Resources section of the How to Use the Blue Robotics Forums post :slight_smile: