Servers by jDrones

Skid Steer Mower Overshooting pivot turns

I am working on a ZERO turn mower that I have been tuning for over a month. I have been following the recent improvements closely and have been looking forward to these new pivot controller in Rover 3.3. I am having similar issues brought up here. My rover aggressively starts the pivot and gets stuck in 360 degree rotations. In my troubleshooting, I decided to disable pivot turns all together and tune the NAV and PID settings to get a rover that behaves well before troubleshooting pivot turns. To my surprise I got close to what I want, but not quite. After normal steer tuning I enabled pivot turns again the mower still initially pushes very hard in the turn prior to the Rotation and Rotational Accelerations limits get a chance to work. Is there a FF in the new controller? Any help with tuning the new pivot turn would be greatly appreciated. I have tried hundreds of combinations and not getting it to work well. I am trying to get the mower to pivot slow (45 degrees per second) as its fairly heavy and large and has traction issues. Also, I need help to slow down prior to getting to the waypoints. Anything I do doesn’t seem to change anything.
The below dataflash log contains two parts. The first part has pivot turns disable, the second half has it enabled.
Data Flash Logs


Hi Kevin,

As a starting point I’ve created this Pivot Turn tuning wiki page. It doesn’t give a lot of advice but at least it lists the parameters that are involved in controlling the turn.

I’ll have a look in more details at your log file, thanks!

1 Like

Well, I’m afraid this is a bug! Thanks for finding it though!

I’ve created a PR which fixes the bug and we will push it out as in a patch release of Rover. Rover-3.3.1 is currently in beta testing, so this will probably go out in 3.3.2.

Thank you rmackay for finding the cause of this issue! I look forward to testing the fix. Also the wiki link helps as I missed the ATC_STR_ANG_P param and this will probably help with my issue about how hard the pivot turns initially push. My goal is to get a slower ramp of desired rotational acceleration.


We’ve “back ported” the fix into Rover-3.3 and released Rover-3.3.1-rc2. It takes a while to make it’s way through the build servers but within a few hours it should appear if you go to the Mission Planner’s install screen and click, “Beta Firmwares” at the bottom left. If you don’t see the “beta firmwares” link go to the Config/Tuning and set the “Layout” to “Advanced”. Once the “beta firmwares” link is pushed the string under the rover icon should change to “ArduRover V3.3.1-rc2”.

Could you give this -rc2 beta a try and see if it helps?

I am working on a similar project. Can I ask what zero turn mower you are using?


Thank you Randy! This fixed worked perfectly. I ran a quick test and the limits worked as expected. I still have some tuning to do and and will upload the results later. I also found that much of the steering error was coming from errors coming from the compass. I am not sure if the metal frame of the mower is messing it up. I disabled all compasses and surprisingly navigation improved significantly.

Hey Kevin,

So how is the rover working out its heading without a compass ?
I know GPS provide that information when rover is moving.

What happens when you do a spot/pivot turn.

Hello Bert, the mower is a Scag Patriot 60 inch model. Here is a photo of it.

New photo by Kevin Groba
New photo by Kevin Groba

I only did very little testing. I am not sure how it worked, but it did well. I went into mission planner after a few executions of my test mission and found that it was not following the heading correctly. I disabled all compasses and the rover continued without any issues with much improvement in the turns. The only problem is I cant shut down the AP and restart the mission without first enabling the compass momentarily. I struggle with calibration as i can’t simply pick up the rover and do a calibration. I must dismount the hardware to do it and it is still tethered to all the wiring. I also think the metal of the frame is interfering. I will have to troubleshoot this aspect some more.

The limits are now clearly showing in the log graphs. I am still having trouble tuning the initial push into the turn. I believe this is showing up where the Turnrate is exceeding DesTurnRate by more than double. Any ideas on what could cause this?

Data Flash Logs are here.


I think the ATC_STR_RAT_FF (0.6) and ATC_STR_RAT_I (0.9) are probably too high.

The ATC_STR_RAT_FF is the most important to tune so perhaps try reducing it to 0.3 or 0.4. The response is not too sensitive to the I value but reducing it to 0.2 or even 0.1 is probably a good idea.

By the way, it is possible to see the contribution to the output of the FF, P, I and D values by graphing the different parts of the PIDS (i.e. PID Steering) message. So in the graph below we can see the FF and I are playing the biggest role. FF should normally play the biggest role so this is fine, it’s just a bit too large I think.

Thank You… I am using a Toro 72" deck. What did you use to activate the steer levers, or did you use hydraulic spool valves to control the flow to each wheel motor?

The Toro actually controls the flow at the pump. There is a right and left pump for each wheel motor.


I simply disconnected the lever dampers and placed a heave duty servo that attaches to the same point and activates the physical levers on the machine. I removed the top half of the leavers to make it a little easier on the servos. This mower has transaxel and the linkages are very easy to move once you remove the dampers.

I guess I need to look a little harder for larger servo’s. I’ve been using Hydraulic Cylinders with proportional spool valves. It would be easier to eliminate that whole end of things.
Are you using GPS with the help of a RTK/GPS system for better accuracy? Or does the mission planner have every pass of the mower programmed into it?
I find if it bounces too much on a hillside, the system must constantly correct.



Not directly answering your question but in the picture @Kevin_Groba posted, I see a PIxhawk2 (aka the cube) autopilot with a Here GPS. There is a list of retailers here. Hex also manufactures a Here+ RTK GPS but it’s “L1” so it’s not super accurate. For really accurate RTK GPS, I here the Septentrio is good although personally I haven’t used it.

I also see an mRobotics SIK radio which can’t do video but it does allow telemetry so you can see where the vehicle is on the map.

Thanks again Randy for the suggestions. I did not know that the regular steering gains affected the PIVOT TURN controller. I falsely assumed this controller had its own values. The WIKI shows values specific to the pivot turn controller and I assumed that the others would not have any effect while in PIVOT mode.

I inputted your suggested values for ATC_STR_RAT_FF and ATC_STR_RAT_I and tested. The rotation is now very well behaved in AUTO mode. These new settings make the rover nearly impossible to drive in ACRO mode as everything is very sluggish. I will have to find a happy compromise.

Now that pivot turns are behaving I am more aware of a different issue. When the rover slowly turns to a new heading and is perfectly aligned with the next waypoint, the rover will accelerate out of the turn very aggressively and always make an initial turn in the direction of the pivot by about 20 degrees and will then slowly correct shortly thereafter. I have tried to tune out this aggressive application of throttle but nothing (even setting params to almost zero will slow this initial launch. I will make a shorter log file (I spent over an hour testing) and upload soon.

My theory is that as this rover uses mechanical linkages and that it takes time for the servos to respond from the last pivot turn command. When the AP commands both servos to go full throttle after completing a turn is that one reacts slower than the other as they both are not starting from the trimmed position. If the rover started from zero it would pull straight out of the turn. If I could slow the launch that would help but I can’t for some reason. My other theory is the rover overshot the waypoint and is simply getting back on course.
Bert, as Randy pointed out, I am not using RTK yet. I need a well-behaved rover to begin that testing. I do plan every turn in MP at the moment. Texas is very flat so hills are not an Issue for me! Although I would love to test the rover on some.

1 Like


Thanks for the detailed feedback. I think the issues you’re pointing out are software issues that we can fix.

For the pivot turns we could add a new PIVOT_TURN_RATE parameter which allows setting the desired speed of the pivot and then perhaps use 1/2 the vehicles maximum rotational acceleration.

The issue with the slow correction after the pivot turn is tricky to fix but I’m sure we can do it. I think it is related to:

  • the vehicle considers itself at the waypoint when it drives within WP_RADIUS of the waypoint. This is when it starts slowing downing and pivot turning. This is actually too early, because (by default) it will be 2m from the waypoint. So it initially points to the next waypoint but then the navigation controller starts telling it to turn more to get back on the line. One solution may be to try and make skid-steering vehicles drive right to the waypoint instead of starting turning at WP_RADIUS from the waypoint.
  • the sudden acceleration should be fixable by reducing ATC_ACCEL. If it doesn’t then I can have a look at a log.

At some point I hope/plan to rewrite the navigation controller including how we do turns with help from Leonard Hall. He’s our control expert and is largely responsible for why Copter handles so well.

Randy, I don’t really follow what you are saying with the PIVOT_TURN_RATE parameter. It seems that the new pivot controller and ATC_STR_RAT_MAX and ATC_STR_ACC_MAX should control pivot turning speed and I am having great success in that area. Is this something different?

I increased the ATC_STR_RAT_FF and ATC_STR_RAT_I slightly from what was suggested and also messed with the nav tunning and it is driving much better. My test data has a loop square followed by a looping 180.

See data flash here

Video Link

It’s driving much better but I am still having trouble with the rover turning inside the turn. But we are getting close!

By looking at the logs its seems that directly after the pivot turn DES SPEED and DES PID jump to the cruise speed levels without ramping up. Is this something that can be controlled? I feel like slowing this down might fix the issue and be easier on the hydro pumps.

When I set ATC_ACCEL_MAX there is no change in the acceleration after a pivot. But it does seem to cause the rover to stop very slowly and is fairly dangerous in acro modes if I can’t stop it immediately by going to zero throttle. It would be nice to set acceleration and stopping as separate params!

Thank you again for looking into my rover.

Wow, that is a great video! As you say, it’s driving pretty well. I’d love to get this posted as a blog on at some point. No pressure of course, whenever you’re ready or I can post it for you as well if you like. Anyway, no pressure…

The idea of a separate deceleration parameter is a good idea so I’ve created an issue for it including a description of how it can be implemented… It’s not super hard so I think there’s a good chance someone will implement it.

I had a bit day of testing boats with my main sponsor so I’ll look at the logs in more detail tomorrow.

Servers by jDrones