A new boat configuration

Hello, guys

I came up with an idea of developing a boat for river navigation. The idea is to have a vessel where it can controls itself on the middle of a river. There would be no forward propulsion, since the idea is to operate only downriver, so the speed of the vessel would be equal to the river current.
I’ll show you a drawing of the setup that I came up with:

I have a pretty solid experience with ardupilot on multirotors and fixed wings, but it’s the first time dealing with boats.

I read a lot about boats setup and I understood that there is only 2 possible configurations: Skid steering or Vectored thrust. And also that the boat doesn’t correct itself if it drifts from the track between two waypoints.

On my idea, the skid steering would work on the same way as it is for yaw motion, but for throttle it expects to move forward or backwards, not sideways.
Does anyone have an idea on how to make the autopilot understand that thrust will result on a sideway motion and that it needs to maintain the waypoints track?

I’ll appreciate any help or suggestion on this project. Thank you very much!

Skid steering and vectored thrust is not the only setup options.

Really? Nice! What other options do we have?

Omni-rover is one you might be able to take advantage of:

Thank you, @dkemxr! I’m going to look into it.

One correction is that Rover/Boat does correct it’s position if it drifts off from the line between the waypoints. It uses the same controller as Plane, it’s called the L1 controller (see here on the wiki). It does that by steering the vehicle though, not by moving laterally.

The new-ish omni rover frames are, as Dave mentions, probably the best way to add support for this lateral only frame you’re thinking of.

Sounds fun so go for it! :slight_smile:

Thanks for the info and the references! I’m going to dive more into the documentation and try to understand the codes more deeply.

I’ll try my best, thanks! :slight_smile:


I’m looking into the codes on github, but I’m not so familiar using git, so I have a question that I’m sure you can solve it.

I saw the updates that Ammarf did on this Branch:

Here he implemented the Omni + (AP_MotorsUGV.cpp), that is the one that fits the most with my project idea.

But on a different branch:

On the mode.cpp he implemented the lateral adjustments on the function calc_steering_to_waypoint, that also fits my project.

As these codes are on separate branches, and I’d like to test them both on my project, how do I merge them? For example, I’d like to use the mode.cpp from one branch and AP_MotorsUGV.cpp from the other.
I think this is a silly question, but I don’t know if there is an easier way to do it than doing it manually (copying and pasting). Also, I think if I do that, I might find inconsistencies in other files dependencies.


Ammar’s first PR to add support for OmniX and OmniPlus have been merged to master now.

I don’t know the details of his change to modify navigation but we did discuss at a high level the next step which is to use these frame’s ability to move laterally in Auto, Guided, RTL, etc (i.e. when moving towards a waypoint). The L1 nav controller outputs a lateral acceleration and at the moment we convert this to a turn-rate and feed into the steering controller. If the frame supports moving laterally we should instead take the L1 output and somehow push it into the motor library using the set_lateral function. The issue is that the L1 outputs a lateral acceleration while the motor library accepts a high level lateral input (i.e. -100% = full left, +100 = move full right). I suspect we need another PID controller to handle the conversion. It may be that the throttle controller needs to be converted into 2D.

Hi Pedro,

As Randy mentioned, the OmniPlus support has been added to master, so you could test that.

As for lateral control in auto mode, I got as far as adding the PID Randy mentioned, that’s where most of the changes are really (AR_AttitudeControl.cpp). I still haven’t been able to test it yet, but hopefully I’ll get to that soon now that the other PR went into master.

1 Like