Skid Steer + Ground Steering boat


OK, so I guess we’re talking about the PILOT_STEER_TYPE=3 case (wiki, param description) but this parameter controls how the input is interpreted so I need to think a bit more why this would cause problems re the output direction. We had numerous issues in the handling of steering and reversing in old versions of (AP 3.2 etc) but I thought we had resolved all those… maybe not.

When going forwards moving the rudder to the right will turn the boat clockwise but backwards it will rotate the boat anticlockwise, compared to tank steering or omni motors in mode 3 where right is always clockwise even when reversing.

mode 0 essentially emulates Ackermann so the issue doesnt appear there.


… but we handle the reversing based on vehicle speed (including backwards) way down in the motors library and it’s independent for each output type (ackermann, vectored thrust, skid-steering, omni) so the rudder should reverse independently of what the skid steering motors are doing.

… anyway, we’re probably at the point where we need to test and confirm the issue still exists and which modes are being used. I’ll try and do that in the simulator…

1 Like

You’re right I think @rmackay9 about there not being a reversing contradiction between differential thrust and rudder steering.

I powered up my boat in manual mode and tried it in forward and reverse with the rudder stick to the left.
Whichever way the throttle was, the rudders stayed in the nose-to-port going forward, nose-to-starboard going reverse setting (like on any RC boat).

The motor differential thrust also followed this motion, when reversing with increasing port helm, the port motor would eventually stop then switch to forward thrust which also gives a nose-to-starboard turn.

After reading several posts like this that mention the reversing issue I just assumed that differential thrust gave the same yaw rate sign based on the RC input, then throttle is superimposed. I hadn’t tested it or paid much attention (obviously) but in my defense I hardly ever reverse except to stop at the dock. Thanks for the clarification. If I have misunderstood what @geofrancis is explaining please let me know and I will test some more.

1 Like


Great, thanks for testing. So this means that we’ve probably solved the issue of mixing skid-steering and ackerman steering so we should remove the pre-arm check. Txs!

1 Like

Are you in pilot mode 0 or mode 3?, In mode 0 the motors will follow the rudder like you describe But its pilot mode 3 where it doesnt go the right way.

I made a diagram to try and explain what I mean. You can see in mode 3 reverse, the rudder is trying to rotate the boat in an opposite direction to the motors. in mode 3 the rudder should swap directions and move to the red position when reversing but it doesn’t.

I spend a lot of time testing a lot of configurations, my boat has 2 motors, omni thrusters and a rudder, but this was the only scenario that i found any inconsistencies of mixing motor and control types, my rudder has very little authority in reverse compared to main motors and thrusters that it took me a long time to notice it.

@geofrancis you are correct that I am using pilot mode 0. Nice explanation of the mixing.


Txs for the diagram.

I’ve looked at the code again and I just don’t see how the input method should affect the output behaviour… but I hope to give this a test in the simulator to be sure.

@rmackay9 is the rudder effected by the motor mixer? It looks like it’s just not being effected by the pilot mode so when the motors get changed the rudder stays the same.


Yes, the rudder is in the main mixer (AR_Motors library).

One small thing that may confuse testing a bit is that in Manual mode throttle is an input to steering direction while in all other modes it is vehicle speed. So it is possible to see a difference in behaviour between manual modes and other modes. So in Manual mode for example you could drive the vehicle forward but as soon as the pilot pulls the throttle into the negative position they would see the backup behaviour. In other modes it uses speed so you wouldn’t likely see the backup behaviour until the vehicle stopped and started reversing. The backup behaviour and direction of the rudder shouldn’t be impacted by this though, it is just whether that backup behaviour happens based on throttle or on speed.

1 Like

does the rudder reverse get its throttle input from beforebefore the mixer or from the motor output? would lacking a regular “THROTTLE” and only having LEFT and RIGHT THROTTLE cause it not to get reversed?

     // reverse steering direction when backing up
            if (is_negative(throttle)) {
                steering *= -1.0f;


The throttle nudge (aka “speed nudge”) is done up in the vehicle code so it happens before the mixer.

The stick mixing feature (which allows the user to modify steering if they’ve set the STICK_MIXING parameter) is done just before the mixer. Is the STICK_MIXING parameter set on your vehicle? I’ve never liked this implementation and I should have rejected it when it was first made. I can imagine ther is a problem is you’re using this feature.