Driving Straight with a Dual Differential Drive
Driving straight is the bane of all open loop differential drive robots (eg BOEbot, Scribbler 1, and Stingray). Up to now I thought either wheel encoders or a synchro-drive were the only fix. While I think encoders are probably still the best solution, they do consume I/O pins and require software to monitor them. But I recently saw another solution which works, requires no wheel encoders and is mechanically much simpler than a synchro-drive.
It's called a Dual Differential drive and uses two differential gears as a mechanical mixer for the output of two motors. One motor becomes the forward back motor, while the second becomes the rotation motor. The motors can be used alone or their outputs mixed in arbitrary amounts. Here's a picture of the drive done in Lego:
http://groups.csail.mit.edu/drl/courses/cs54-2001s/dualdiff.html
Now this system only fixes the variable output from two different motors. It would still suffer from repeatability problems in distance or rotation angles as motors lose power from weak batteries. Still the ability to drive straight without encoders seems worth while. Plus a compass sensor and a beacon navigation system would fix those problems while being more reliable then dead reckoning.
It's called a Dual Differential drive and uses two differential gears as a mechanical mixer for the output of two motors. One motor becomes the forward back motor, while the second becomes the rotation motor. The motors can be used alone or their outputs mixed in arbitrary amounts. Here's a picture of the drive done in Lego:
http://groups.csail.mit.edu/drl/courses/cs54-2001s/dualdiff.html
Now this system only fixes the variable output from two different motors. It would still suffer from repeatability problems in distance or rotation angles as motors lose power from weak batteries. Still the ability to drive straight without encoders seems worth while. Plus a compass sensor and a beacon navigation system would fix those problems while being more reliable then dead reckoning.
Comments
http://www.thebigtrak.com/legacysites/robotprojects/
Thanks for posting.
agfa
scribbler: http://www.youtube.com/watch?v=5r2En4hLUBI
retrobot: http://www.youtube.com/watch?v=Trv682XZ_8c
Mechanical accuracy & simplicity, coupled with a robust motor controller, can achieve a lot. BTW,·my 2-speed,·4-state relay·motor controller in the Retrobot is superior (for driving a robot) to the Scribbler's full digital proportional solid state·motor speeds controls, mainly because·it provides full dynamic braking. In addition, Scribbler and Stingray are geared· too high (fast) for accuracy/repeatability. I have yet to see a stock Stingray demonstrate·repeatable dead reckoning (yes, that's a direct challenge for you Stingray lovers!).
Edit: a DDD could make use of a single encoder effectively to track position, if· rotation or translation are used individually and not mixed together. This does·reduce processor overhead significantly.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
·"If you build it, they will come."
Post Edited (erco) : 7/4/2010 5:26:33 PM GMT
The trouble is that I/O pins and RAM are in short supply and·I'm using up two pins,·two bytes for encoder counts, and four bits for encoder state (previous and current).· Today I was trying to see if I could use the encoder to check for motor stall, but that will use even more RAM and I couldn't think of a reliable way to figure out if a pulse should have happened by now.
I suppose a steering drive like the Arrick ARobot has an advantage here.· But you lose the ability to turn in place.
BTW, I used just one sensor (hence one I/O pin) per encoder, which is technically called a "tach sensor", as opposed to a 2-sensor (two I/O) quadrature encoder. The tach sensor route uses fewer pins and a lot less processor overhead.
I've had surprisingly good results with these sensors and 36-segment encoder disks. I expected to need 72 segments or more, but I'm sticking with 36.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
·"If you build it, they will come."
I'm using one sensor with 24 segments and that seems to work well for smaller wheels. I need two bits per wheel because I sample the current encoder values and compare them to prior encoder values. After I calculate my movement count bytes I move the saved current values into the old values. My thinking is that if I kept checking the current sensor values I might get different values from the first and second operation due to robot momentum. That would cause dropped counts and erratic movement.
But a magic go straight drive would be really nice because I could avoid all that fiddling!
Right now I'm working on wall following using the Ping. If I could detect the stall condition with the encoders I could avoid the need for a bumper and using yet another I/O pin. I was using the Ping to check for free space in front and then pinging to the side, while not moving forward more than the known free space. But when something unexpected happened the robot ground against the obstruction which wasn't a good idea.
Post Edited (Martin_H) : 7/4/2010 11:45:11 PM GMT