Rover "Tug" - Fine Tuning Steering Parameters

First, wanted to say “Thanks” for all involved in making this rover project possible. The amount of info I have received by reading these post over the last 12+ months has been amazing. Could not have made it this far without this constant stream of info.

Secondly, would like some input/suggestions on further tuning based on the attached data log. This is a short log of two passes around a short course. Visually, and tracking the rover in MP, I think I’m close but will be the first to admit that lots of the parameters in the logs are well beyond experience/knowledge.

Sincere Thanks in Advance!


Data Log:

Latest Rover Pic:

1 Like

Hi @Swebre,

You’ve done a pretty good job tuning this vehicle. For others watching below is a pic of the vehicle’s path around the course. It’s not wobbling nor overshooting so pretty good!

Speed control:

  • The speed control is good but it is really running completely on feed forward so it might be possible to smooth out the actual speed by raising ATC_SPEED_P and ATC_SPEED_I to perhaps 0.1 to 0.2.
  • It would be good to set ATC_SPEED_FF to zero and instead rely on CRUISE_SPEED and CRUISE_THROTTLE. Using both isn’t harmful but they really are the same thing so not much point.

The steering turn rate control looks very good.

The balance of FF to P and I is different than I normally use. Normally I tune ATC_STR_RAT_FF to do almost all the turning and then set ATC_STR_RAT_P and I to between 20% and 50% of FF.

On this vehicle though we see the FF and P are both nearly 0.7 and I is about 0.34. This means that the P and I terms do a lot more work and FF does less but the result is still good so feel free to leave it as is.

If pressed for advice on steering I’d say:

  • ATC_RAT_RAT_MAX of 200 (deg/sec) seems high for such a large vehicle. I’d probably lower this to 90.
  • ATC_RAT_ACC_MAX is 180 (deg/sec/sec) which is also quite high. I’d reduce this to maybe 120 or even less.
  • ATC_TURN_MAX_G of 5G (= 50m/s/s) is also too high. A value of 0.3 is probably more achievable for this frame but I don’t think you’ll notice much different either way.


Mr. rmackay9,

SINCERE Thanks for taking the time to look at the logs and provide feedback. It’s been quite a journey to get to this point. I’ve been following “in your wake” as you and others (Yuri, Kenny, etc) have been doing the heavy lifting of sorting/troubleshooting. Thanks again.

  • Speed Control
    Changes have been made per your suggestions and waiting on good weather to try.

  • Low FF/ High PI Tuning
    For months I tried to follow the documentation keeping PIDs low/or “0” and concentrating on the FF values. While I got “acceptable” routes, never could get reliable XTRACK ERROR below 0.1m (~4") which was my goal for mowing. To approach that, this machine wanted FF values ~1.630 and low PI values. PI values were critical and after extensive tuning, the Tug would still go into quick oscillations after turns. Lower the PI values and it would cover yards before really getting back on track. A quick change from AUTO-MANUAL-AUTO would stop the oscillations but good consistent tracking (for mowing) was never really achieved. However, the Tug covered ~80 miles in the hay fields pulling a 10’ weed wiper using an 18" overlap happily.

Anyway, I had read that Yuri had used low FF values with success for mowing so out of frustration, started over with FF values below 0.5 and higher PIs. After wearing out several sections of grass cutting laps over a month, this is what I came up with.

The one big improvement making onsistent turns was making LAT ACC CNTL PERIOD = 1.
Still do not exactly understand this parameter but someone might consider adding a comment in the guidance that “for large, slow moving Rovers values below 10 may be needed”.

    Because the Tug is just a stripped down zero-turn mower, it will hit 200+ deg/sec when not pulling something and sticks are nailed opposite directions. It’s a bit scary if you are standing close and the servos peg because you wired them backwards… Will lower it to 90 and report back!

    Will reduce and report back!

    Know it’s way high but found lowering it reduces the turn rate. Since this set-up is going <5 mph, skidding/flipping is not a concern. I set it unreasonably high just to make it a non-limiting parameter.

If I’m on the wrong track on any of this, please advise! This is not my background…



1 Like


Thanks for that.

It’s very possible that the different mix of FF and P/I is good advice so I’ll just keep this in mind for future reports and maybe add it to the wiki if it proves to help more people.

The quick oscillations after turns means the turn rate controller is becoming unstable given large shocks (which is what the L1 controller delivers when it passes onto the next waypoint). This shock is removed once we move to SCurves

Hi rmackay9,

Have sent the tug out on several long missions and tried some of the suggestions. Basically mixed results.

A slight increase of ATC_SPEED_P or _I (values above of P= 0.05, I=0.02) makes the tug very unhappy throwing it into strong, continuous oscillations. However, the foward speed was very constant. I’m assuming that since the speed and steering are actually controlled by the same servos, (twin stick steering w/o pivot turns) the two control systems are unexpectedly linked and fighting each other. Went back to original setting until I can do more short course testing.

Ditto on ATC_SPEED_FF. Didn’t change it and need more short runs to test.

Did work on the steering more and currently have ATC_STR_RAT_FF at 0.7 and with P=0.17 and I= 0.12. Tug seems happy with these values as it tracks well (Xtrack<0.1m) with just a slight overshoot at turns.

One set of parameters that would be very helpful to the other “Mowers” like me and anything needing real precision would be a way to place a global command during mission planning to reduce speed to “X” whenever the rover is within a certain “X” distance of a waypoint. The “Change Speed” commands can be inserted manually before and after each WP, but for large missions (300-500 waypoints) it is a royal PITA. Have tried getting a speed reduction using the ATC_TURN_MAX_G parameter but this only happens once the WP radius is reached and is just too late in the game for large machines (200-500 lbs). Also tried making the WP radius larger but that just starts the turns sooner which really doesn’t work well for mowing applications.

Any other way that I’ve missed?

Again, really appreciate your time. -Steve-