Killough platforms (A.K.A Holonomic/kiwi drive)

My team, 820, has built a killough platform. We’re having serious issues with programming the robot. The robot doesn’t seem to go straight and it rotates while straffing. In addition the wheels turn faster when the motors are going in a clockwise direction than when they spin counter clockwise. We think it might be due to the pulsing but we’re not sure, we also strongly suspect that its a problem with programming.

Long story short we’re looking for anyone out there who has either programmed one of these before or has some ideas on how to fix the problem please reply to the post or if ur feeling very generous you could email me a copy of the code at [email protected]

Your help is greatly appreciated.

I’ve never programmed one for the RC, but I have for LEGO. :slight_smile:

The first thing I’d say is that the motors that come with the kit have a prefered direction, meaning they spin better one way than another, which is why you get the clockwise vs. counter-clockwise thing. (All motors have this problem, but for really good ones, the difference is neglible.) This is also the reason you don’t go straight, even though the same value is being sent to the motors which are currently driving you.

There are two ways to correct this. The first involves some semi-complicated programming because you create a PID loop. The idea of this loop is that it will monitor your wheel rotations (using encoders or some such thing) and if anything disturbs the speeds from the values you request, such as a bump or one motor running slower than the other, it will adjust the outputs automatically.

The other way is to use encoders (or some other method) to measure the difference in the motor speeds and hard code that into your program. Obviously, it isn’t as elegant and is harder to change when you motors get more broken in (or broken ;)), but it’s fast and easy… Actually, with a Killough, it may be just as difficult to do, because you must store the differences between all (3? I’m assuming a normal setup) the motors and choose the right one to use for which ones you are currently running.

Hope that helps!

P.S. What motion exactly are you refering to when you say straffing? One motor on full? Two? Two at differing speeds? Maybe I’m just not thinking right now… :slight_smile:

I don’t know much about kiwi drive, other than watching the original video and the 229 parody, but maybe I can still help you.

The vast majority of DC motors are designed to run more efficiently in one direction. This is a function of how the motor is wound. This difference was very drastic in the drill motors last year; I haven’t found it to be as severe in the CIMs this year. If I had to fix this in software, I would take a CIM motor, and hook it up to a Victor. Pick a few different clockwise PWM values, and measure the speed with a tachometer (you can make your own with an encoder). Then output the equivalent values to spin the motor counterclockwise. Keep note of the speeds, and then do a calculation to slow the motor when it’s running clockwise. For example, if the motor runs twice as fast clockwise as counterclockwise (a gross exaggeration):

if(pwm15>127)
   pwm15=(pwm15-127)*.5+127;

Hope this helps.

I beleive it took 1083 several regionals before they were able to get thier robot driving straight last year.

The way we controlled our Killough platform back in 2002 was a completely analog solution. We used three joysticks mounted in the same orientation as the drive wheels (120 degrees apart), mounted together using ball joints like so:

This was back in the PBASIC days. It may be low-tech, but it certainly worked: http://stuweb.ee.mtu.edu/~alkrajew/FIRST/kiwi.mpg

Wow. Just…wow. @#@#@#@#, that’s awesome. The forums don’t like the words going through my head as I see this, but I can’t find better ones to replace them.

In my dream of a 4 wheeled Killough drive bot I was going to turn the handle of a joystick to 45° from the base of the joystick. If you push the joystick strait up you get full + X and full + Y. You can map the drive motors directly to the joystick values in such a way that the bot moves in the direction that the joystick is pressed. You would also need a rotary pot to control the rotation of the bot.

I did this last year. It worked, but I couldn’t get used to the way the joystick felt in my hand. I had a hard time moving the stick along the diagonal when going straight forward and reverse.

You would also need a rotary pot to control the rotation of the bot.

I used the joystick thumb wheel for this (NOT the trim wheel!). Again, it worked, but I didn’t like it because it didn’t self center when released.

as adam already posted the analog joystick solution is very easy to construct and works flawlessly without any programming…i repeat, no programming!

my suggestion is to build one and then work on a slick programming solution if you still feel it’s necessary.