Controls for a Crab Drive

Well? What exactly do you use to control a crab drive? A steering wheel that controls the angle of the drive wheels? Flight sticks? Complex programming?

As far as I know, most crab control systems that I have heard of involve the driver pushing a joystick in the direction he or she wants the robot to go. The controller then calculates which direction the wheels have to be pointed in, and once they are pointing in the right direction, the robot starts moving. There is also usually another joystick or something else for on-the-spot robot rotation.

I’m curious to know if there are any other interesting ways of controlling a crab drive. I would say that you’re definately right in that complex programming is always a part of a crab drive control system.

I’ve examined a few controls on crab/strafe drive robots and what seems to be popular is a simple single-stick control that dictates the angle of the wheels. For example, a stick moved halfway to the top-right corner from the centre position would have the robot strafe forward 45 degrees right at half-speed, or whatever the transfer function dictates for that stick position. To turn on axis, these robots often have a knob that simply moves one side forward and one side backward like a typical tank drive system.

i would think 2 joysick would be alot better

1 stick controls the direction of the wheels

the other stick is the throttle

Our programmer is doing something similar with our track systems. We will use just a regular track system but it will be programmed like a crab would…kinda neat I think.


how is that better than one stick in which the joysticks displacement vector is the robots velocity vector (what the other posts described)? also, how do you rotate in your system?

Most of the crab systems i’ve seen have what Needel stated above- a joystick that dictates which direction the wheels are pointing in and a regular tank drive joystick… that way if your robot gets bumped you aren’t screwed…

with the complexity that a crab drive already has i think it best to keep the control simple

joystick one… x=Module rotation, Y=Throddle

Take a look at this thread for my description & the description of others:

My idea is to take 2 or 4 sticks and have them either control left/right sides or each wheel. each wheel is independently swivelled/drive. this allows for really advanced stuff, like

<   \

>   /

or just

/   \

\   /

for each stick, the part it controls points in the direction the stick’s pointing, and goes the speed of the stick. (X,Y -> R,theta)
get it?

Here’s the basic idea behind the controls 1114’s SimSwerve drive system.

We added a spring loaded knob to the base of the joystick, which was mounted directly to a potentiometer. This dial controlled the angular speed of the robot. The x and y positions of the joystick controlled robot translation. So, if you want to go sideways to the right, you move the joystick sideways to the right. If you want spin on the spot, you turn the dial while leaving the joystick in the center. If you want turn and drive forward, you move the joystick forward while moving the knob.

We felt that this was the most intuitive way to drive the robot. A strafing robot is not easy to control. This cannot be overstated. You need to give your operator easy to use control system, or it’s just not going to work. Strafing is one of those things that only becomes worthwhile if you can do it really well. The effort that goes into the complexity could easily be placed in other areas.

Look for a whitepaper to be posted soon explaining the controls, and other aspects of our 2004 drive system very soon.

if you all remember the kiwi drive from 02, they used 2 stick drive. Its quite simple, you mount your joysticks downward on an angled platform, then position them 90degrees apart. kinda like this

\ | /

=left joystick
|= 0degree plane
/=right joystick

What I’ve always thought would work best for a drive like that is a joystick that dictates what axis the robot runs on, but gives it no angular movement, and a simple knob to rotate the robot on.

Well, I have no experience firsthand with crab drives, but I kinda know what you’d look at.

I’m going to relate this to N64’s Goldeneye, since that’s a nice easy example everyone knows. (Great game, too.)

Since you’re dealing with moving forward (thumb stick forward), strafing (C buttons) and twisting around (thumb stick left/right), you’ve got to control them all. And basically, those same buttons would do it for a robot as well. The only question comes up with whether you’d want the C-buttons (yes, they could be analog, but I’m aiming for a switch to avoid dealing with another stick) to be strafe or twist. Put whichever you’d use least on the switch. It’ll still be there and usable, but not necessarily as smooth as the other action on the stick.

Alternatively, if you were going to be t3h h4x0r, you could always stick a switch on the controls to toggle between the two modes. Left alone, you strafe, pushed down, you twist (or vice versa). All you’d have to do is code that in.

In addition to the link Mike Soukup posted, I have two more links for you. My post in the “Drivetrain, what did you use?” thread talks about our drivetrain from 2003 and has a brief overview of the way we controlled it. There’re also many threads about programming a swerve (which is very intimately involved in how the control system is set up). I recommend hunting them down and reviewing them.

I’m trying to build a mini-bot using the system I described earlier. I will use servos for steering and motors for drive.

The controls will be 4 sticks. Mapping is vector/speed. How? check “Angle from X,Y” in the Programming forum.

We have experimented with a few different methods and I would have to say that the best method that we found is to use pots to align the wheels in the direction you wish to travel. One year we limited the robot to find 5 different angles by using two foot pedals and the trigger on the joystick. The programming for this was rather simple.

We calibrated the pot so that when nothing was depressed, we traveled forward. For this example, I will say the value was 130. When we pressed the right foot pedal, we told the pot to change to 190. That gave us a 60 degree angle to right from the front. If we held the trigger and pressed the right foot pedal, we set the pot to 220 or 90 degrees to the right. By pressing the left foot pedal by itself, we commanded the pot to 70 and by the pressing the trigger with the left pedal we commanded the pot to 40.

The same was tried with using a pot and knob on the control board. Whatever we set the knob to on the control board, the pot on the robot would pivot the wheels to a corresponding setting. With the wheels pivoted, we in essence altered the front of the robot.

Both methods required very little programming. However, since we used the window motor and a 1/4" chain, we had several issues mechanically.


In 2001 when we did the swerve, we used one joystick for everything, in normal more the robot drove around like a non-swerve bot. When you held in the trigger it was in swerve and the crab modules followed the joystick vector. However with some experimenting the best I can come up with is something like a MS sidewinder force feedback that had the ability to twist the joystick for a third axis. This way X and Y would be the swerve vector then to rotate, twist the joystick. It seems to be VERY natural when you get used to it.

My 2 coppers

Does anyone have a picture or something of crab drive system?

Here is one of the Grand Dads of Swerve Drive: CD6

There are many more pictures of CD6 HERE

As to control, I like this method:

2 Joysticks

Y position is aways Forward / Back Tank style drive (fight stick in front of the left implies “twist CCW”)

average of X positions define what direction is “FORWARD” (both joysticks to the right - “to the robot’s right is FOWARD” both joysticks to the left - “to the robot’s left is FORWARD” One Joystick left - “45 Deg. to Left is FORWARD” )

It is makes sense to the driver once they drive for a few minutes: Side to side controls the direction of FORWARD with respect to the robot other than that it behaves like a simple tank drive.

Joe J.

P.S. If my typing is a bit messy it is probably due to the tears in my eyes at having seen my old friend CD6 again. Ah yes, we had such fun together…