Implementation of Traction Control

So, I just got back from robotics and I’ve easily spent over 200 hours implementing this drive system. We wrote and reviewed this spec that had 5 modules.

First module, forward velocity control would return a computed forward velocity in to the second module, angular velocity control. The Angular Velocity control would compute a forward and angular velocity in to our third module, Traction Control Module. This attempted to reduce all the slippage. Then Traction Control Module would return Torque Forward and Torque Differentials in to our fourth module, which was called Motor Steering. It allowed that so when the robot was pedal to the metal, going at the top speed, it would allow the driver to just turn smoothly. The Motor Steering module would return Torque Left and Torque Right to our final module which would apply a constant torque regardless of the current speed.

I had everything implemented and coded up.

Today it was a 14 hour testing session, as well as yesterday’s 8 hour testing session. During these 23 hours, we were able to fine tune Motor Torque module (last one) and we were able to fine tune our Motor Steering algorithm.

The idea is that you should be able to plug in the joystick at any point in the module chains and still have things work, just not be as nicely drivable as it would be with all 5 modules. So we were able to drive with raw tank drive (plug in joysticks right to the motor), we were able to drive a little better with Motor Torque module (so joystick controlled torque not speed) and we were able to drive forward/backward similar but turn way better at high speeds with our Motor Steering module (motor steering automatically chained to motor torque module)

We were plagued with a fried digital side car (we didn’t know it was fried) which took up weeks 1 through week 3 (oh, you wouldn’t know how frustrated i was just wasting those 2 weeks just because we didn’t try swapping out the digital side car… we got “decent” data but way too noisy. We fried it so that it just didn’t give us good data).

However, since it isn’t necessarily easier to drive with the last two modules enabled, we decided to abandon the whole ordeal.

I’m planning on perfecting it during the summer, but I think whoever drives the robot will just have to acquire amazing driving skills. Jack-knifing ftw.

Maybe I should’ve just not been this ambitious and developed a simple acceleration-limiting algorithm that would’ve taken at most an hour. I don’t know what I should’ve aimed for. Anyhow, I was wondering how your team developed traction control.

Thanks,
Keehun
Team 2502

I’m aware of the one thread that has a large discussion about Traction Control. What I want on this thread is more of a “we’re finished, or we’re in the process of finishing a Traction Control System, and here is what we did” instead of back-and-forth discussion about how to do this.

I will see if I can open source that spec soon. It has bugs, for sure, but if some people squash enough bugs, maybe a lot of people can go sleepless for a couple days and implement it.

Ours works quite well with an open-loop acceleration-limiting system. If the driver presses a button, we simply limit the rate that the encoders speed up with a PID loop. No dynamic slip control, no turning, just a straight-line drag. We have been doing robot-turning drills and have found the robot isn’t that hard to turn around, so we decided that straight-line acceleration was the main thing that needed fixing.

We also have a system to maintain heading while the driver accelerates halfway on the carpet and halfway on regolith, because our tests revealed that robots spun very easily in that situation.

Like you, we initially tried a much more complicated system, but found that our velocity estimates were simply not accurate enough to do dynamic slip control. Coding, testing, and tuning the open-loop system took about 2 hours after about 2 weeks of trying the smarter system.

Do you mind telling me where I can learn this PID stuff? I’ve heard a lot about it but I just couldn’t find a good spot to start learning about them.

There are some white papers on the subject here on CD. Near the top of the page, find the link to CD-Media, then look for “papers” and search for PID, you should find seven of them.

The wikipedia article is quite good. And like squirrel said, there are some good whitepapers. One I especially liked was an excel spreadsheet where you could tune simulated P, I, and D parameters to see the kinds of effect they have on the output.

Mine is simple.
Since the turning of the robot could be done if the whole weight was applied I concluded that what I had to limit was the acceleration.
I used a pt by pt low pass filter. I’m using a straight line acceleration.
We can even drift the robot with full control (like Tokyo Drift :P) and then go straight forward.
The main thing is that the wheels must NEVER stop spinning because they will loose their grip. So I when we release the joystick the wheels spin for a while until the driver reacts again.

I didn’t use any kind of sensors since I didn’t know what I was doing :frowning: I’m a complete newbie in everything…