Large Rover - Sabertooth Trouble Turning

I have built this from the frame of a kids’ car. It is very large and heavy. I have attached 4 wheelchair motors, two 2x60 Sabertooth motor controllers and Pixhawk 2.

The mix is on one stick. Taranis Plus.

Forward and backward are fine but when I turn and let go of the stick the wheels slam to a stop. This also causes the motor controllers to malfunction. I have included the LOG files and a video of the event.

Video: https://www.dropbox.com/s/e1ecpq1ss5oj5pl/red%20rover%20testing%20jan%202020.mp4?dl=0

LOGS: https://www.dropbox.com/s/bee66ojighxzo88/ground_rover.zip?dl=0

1 Like

@Jimmy_Oliver what is the timestamp in the log file when you give full-right on the controller, then, release the controller, and the wheels stop suddenly? (corresponding to 3:53 in your video) is it at 17:31:48?

I took the video at 2:30 Pacific Standard time. I’m not sure my time stamp is correct on the rover.

@Jimmy_Oliver the logfile you provided had data from about 17:31:14 to 17:31:54 - so, about 40 seconds. Without knowing where in the logfile the problem you’re describing happens, it’s hard to diagnose. I suggest you go into Mission Planner, DataFlash Logs, Review a Log, then load up the log (either the bin or the DF log), turn off the map by unclicking “Show Map”, then, look at your Battery Voltage by selecting the BAT - Volt option on the righthand side of the log analyzer screen.

On the logfile you provided the battery voltage drops from 24ish to 14 something at the very end of the logfile, before the logfile ends. This indicates to me something wrong with your batteries, power wiring, circuit breaker, or controllers.

I would try to meassure the reverse voltage coming from the motors. I guess, they overload the sabertooth, stopping as quickly as they do. The throttle slew rate is helping to control the motors gently for forward/reverse, but in manual mode the steering input goes to the motors as fast as the stick moves and/or the motors do not actually have their brakes removed and the quick steering input causes them to engage.
You could try to add a flighmode in the taranis, so everytime you switch to manual, there is a slow function on the steering stick/channel.
Perhaps I am forgetting an ardurover parameter that does this for manual mode right now.
Skid steering with such a long wheelbase and high weight will be hard. All skidsteering wheeled vehicles like compact/skidloaders, the Sherp, etc. have the shortest possible wheelbase, to reduce the sideways portion of the wheel movement when turning. The sideways load on the wheels, bearings, suspension arms etc. will cause high wear.

1 Like

Would this “slowing” be achieved by rate curve in the radio or a setting in the PH2?

This is when the turning starts and the fault starts. Not sure why that happens with 2 large capacity motor controllers. 24v in and a 80a breaker. I have 6 gauge wire on the batteries.

There is a function in Opentx were you can adjust how fast a channel follows the input, be it stick or switch.
Enter the mixer screen, select the steering channel and edit it. The slow function should be in the edit screen.

1 Like

It would seem that your motor controllers do not like the back EMF from the motors stopping quickly. @count74 is correct - when looking at RCIN vs RCOUT in the log, you can clearly see the effect of the motor slew rate in forward/reverse but it seems that this is not applied to pure steering input. You currently have your MOT_SLEWRATE parameter at the default of 100 which limits throttle change to 100% per second. I operate very large skid steer rovers (>2000kg) and use a MOT_SLEWRATE of 10 due to our particular setup having relatively powerful motors capable of rotating much faster than we typically need (the current Rover code has a bug that limits the minimum achievable slew rate but I have fixed this in our version). I have not encountered this same problem - I presume because our motor controllers are quite happy dumping the excess energy back into the battery (regenerative braking). We do see large negative current spikes (>1000A) fairly regularly. I am not aware of any means by which you could rate limit the steering input as you seem to require. It would not be too hard to implement in the code and I would say that in the case of skid steer vehicles, there is a case to be made for doing it this way.

@count74 it would seem that this would only be a solution for manual mode? There would still be a possibility of this problem occurring in autonomous/assisted modes. Pivot turns for instance may trigger a similar response from the controllers.

@Jimmy_Oliver
It should be possible to setup the assisted modes, so that they do not apply such quick control changes.
The problem with your rover might be, that it needs a high amount of throttle to turn, so low tuning values might not work. Or the problem might not even show, if the wheels are on the ground and the momentum of the rover is pushing.

@Jimmy_Oliver In my controller (roboclaw) I can set the slew rate in the controller itself, rather than relying on ardurover code itself. I have this enabled on my rover. I don’t know whether the sabretooth controllers offer that but I expect that they do.

I have been told by Dimension Engineering (Sabertooth maker) that my 80a breaker is too small and is rejecting the regenerative current going back into the batteries. They have software to for RATE CURVES so that’s good. I have a 250a breaker on order and am going to read through all of your responses. Thank you so much! You guys are great. I will update progress. I have to introduce rate reduction somewhere in this chain and you guys may have explained it above. I am at work now so, until later…

What is “our version”?

The version of the Ardurover code that we use is heavily modified for our application

How low can I get the MOT_SLEWRATE with the current ROVER version?

Currently rover will go as low as 50% throttle per second. Setting the parameter any lower will result in the same 50%.

If you have any issues resolving the motor controller dropout on steering, I can implement something in the code for you (I would need to know what controller you have) but this would not be a very satisfactory long term fix for you…

Let me implement the 250a breaker and the 50% throttle and see where I land. I can also program the Sabertooth to have rate curves. The last thing I want is to just adjust my radio channel. This is an autonomous project for farming so I need built in limits that I can trust.

I’m not sure that I understand how the breaker is ‘rejecting’ the regenerative current but a larger breaker will not hurt (as long as the rest of the system is capable of handling the rated current). A larger breaker is likely to have a lower resistance which would result in a lower voltage on the high side but I doubt this is the issue…
A quick look at the spec of your motor controller shows that while you can select an exponential response (switch 5), there does not seem to be anything that limits the rate of change which is likely what you need to avoid this issue. As mentioned, the MOT_SLEWRATE parameter is only applied to the throttle input before the steering input is mixed into the output.
The AP_MotorsUGV::output() function that is called in the main loop, applies slew_limit_throttle() prior to calling output_skid_steering(). This then calculates and outputs both wheel throttle settings:

    // add in throttle and steering
const float motor_left = throttle_scaled + steering_scaled;
const float motor_right = throttle_scaled - steering_scaled;

// send pwm value to each motor
output_throttle(SRV_Channel::k_throttleLeft, 100.0f * motor_left, dt);
output_throttle(SRV_Channel::k_throttleRight, 100.0f * motor_right, dt);

As you can see, no rate limiting is applied to the steering portion of the output.

I presume that if you go easy on the steering input, that there is no problem? I would get the rover on the ground and see just how much this issue affects your operation. In autonomous/assisted modes there is also the ATC_STR_ACC_MAX parameter that limits the rate of change of steering. Try setting this value to something relatively small and using ACRO mode (requires that you have your heading sorted)

Since this is SKID STEER, why is the steering not affected if turning is just a matter of switching direction of the motors? It’s just throttle in two different directions. (There are no stupid questions?) You can program rate curve into the Sabertooth.