Unique ways of controlling your robot (driving)

The 2008 competition is mine and my team’s rookie year. This year I was the sole student programmer with about no experience with programming. I received tons of help from my mentors and I was able to help program the robot with their assistence. Because of this a lot of the time I was doing things on my own and I did a lot of experimenting.

With my mentors, we came up with quite a few ways of driving the bot. I won’t share the code right away (I need to get it first), but would anyone like to share and explain their methods of controlling the driving of the robot? I’m really curious what you guys did.

These are the things we tried (I’ll share the code when I get it)…

  1. Double Joystick: very hard to control. We tried a lot to make it more controlable, but it never worked out well.

  2. Single Joystick 1: One speed, 4 ways of moving robot. Push the joystick up and it moves forward. Push it down it moves backwards. Left it turns a bit left and right it turns a bit right.

  3. Other single joystick controlls: We made a few other single joystick control systems. One we used in the competition.

I apologize in advance if broke some sort of rule :o

These are all acceptable in competition and here.

Most teams use the double-stick method. Some use single. Others have been known to use the following:

  • DDR pad
  • Steering wheel
  • R/C controller
    *]Game controller of some form

My favorite form of driving the base of the robot so far has been double joysticks, because it gives a great deal of control, in my opinion. This year, however, we went with a single joystick with the idea that it would leave my other hand free for some push button semi-automatic controls such as u-turns and lane shifting. That hasn’t panned out (yet) but with a little bit of work we’ve gotten our controls working decently well, the single joystick needs a little more tweaking than dual joysticks.

Our joystick itself was fairly unique though(one of a kind as far as I know), what with being a weighted companion cube.

My personal favorite is a PS2 controller with the USB chicklet. The two analog sticks act the same as joysticks, but it just feels a lot more natural and allows you to have more control than sticks (imo).

we attempted a mechanum drive this year but never got the strafing to work right. but we had forward backward on the left y axis and left / right steering on the right x axis (along with strafing on the left x axis but that didn’t work like i said) and it made it very easy to drive strait since you could tweak the direction with your right hand and just keep ur left at the speed you like.

i recommend people try this cause its nice and very intuitive


We do it like one-stick but we split the x and y axis out onto different joysticks (kind of like Halo). This makes it really easy to drive dead straight (just let go of the turning joystick), gives a bit finer “feel” to the controls than one-stick, and is much more intuitive than tank drive. We have tried other methods, and some of our members prefer to drive tank-style; however, myself and last year’s driver both found Halo-style to be the best compromise, so that is what we’ve used.

Well, one of the reasons why I as the driver (and I think most of my team) didn’t like the tank control/duel joystick was partially because our robot was so powerful. The gearing ratio made it so actually stearing the it was one thing, but making it turn gradually and not suddenly turn around in a great circle was another thing. We tried all different things with the programming, but it never worked as well as we hoped. I eventually came up with a system that I used in the competition. The results were the best I could hope for. When you turned the joystick to the top left hand corner, it made a nice curve and just by turning it a bit, I could change the turning direction so if there were robots in the way I could easily menuver around them.

When we first entered the competition we only used 1/4th the power our robot was capable of. Because the rug made it so the robot was slower but a lot more controllable we upped it to 1/2 the power and added a turbo trigger. If the joystick is in a certain area the robot will automatically go straight at max speed. I think I could bring up the code, I have it on my computer somewhere…

We do it like one-stick but we split the x and y axis out onto different joysticks (kind of like Halo)

Nice! Like Mode 1 in Radio Control airplane transmitters (one stick rudder, one stick elevator), versus Mode 2 (single-stick). I’m gonna have the guys try that, next year.

I have been driving two years (171) and we have had tank drive both years. I really like this because it isolates the two sides of bot. But I will admit that I want to try the halo style so i will email my programmer right away. In my opinion I believe the one joystick is cramming to much onto one contoller, I’d rather isolate and have more precision(imo). But variety is the spice of life so I think its great how everyone does something different.

I suspect you had trouble with twin stick control because you did not map the values to a cubic curve to desensitize it.

We do something rather unique to our drive system.

There are two joysticks. On one of them, we use both axis. The X axis translates the robot left and right, and the Y axis translates the robot forwards and backwards.

We only use one axis on the other joystick. This joystick is responsible for the rotation of the robot. By using both sticks together, the software places an imaginary point in space that the robot “rotates” around. However, this control system only works on an omni directional drive system.

For our mecanum setup, we used one stick for all translation (sliding while facing same way, includes forwards/backwards) and another stick for the rotation on the X-axis.

The drivers had different preferences as to which side they were on so they were interchangeable.

For our Mecanum drive system, 357 uses a 3-axis joystick. The X axis and the Y axis are used for forward/backward/ and translation motions, while the Z axis is used for spin. In the past we used a 2 axis joystick and isolated translational movement to only occur when the drive held the trigger of the joystick.

Team 1629 has always used a single joy stick to drive and an array of buttons and switch sto control the functions until this year. This year, while the buttons and switchs are still there, we used a steering wheel to drive. We figured “hey its a race right, race cars already work well, so we will drive it just like a race car.” (If you havent checked out our drive train check it out at http://www.team1629.com Its pretty cool.)

I like that halo idea. Things seem more intuitive and less pressure if you can train each hand to do a different task.

Here are some arguments to try single-joystick driving instead of classical tank drive. Keep in mind this is just my opinion. I also have a control systems background so I feel it’s easier and more advantageous to do a system rather than leave some things up to driver control.

Personally, I think classical “tank” drive puts too much of the drive processing on the driver, and agree with the OP that it’s harder to control. Movements aren’t as smooth as they could be and it’s hard to process inputs for improvements in the code. Driving backwards and driving while the bot is pointed at the driver also becomes harder without alot of practice. Think about a bunch of cones setup on the track and you have to slalom through them while also making the left-hand turns around the track. Without alot of practice, tank drives will usually make it through such a course slower/quirkier than the single-joystick setup. This year, the slalom consists of 5 other dynamically placed bots and 3 other trackballs on the field, so I believe this comparison is valid.

With a single joystick, in code I can create a system that has some variables (aka coefficients). Based upon the variables I can determine different integral-based rotational neutral zones, scale within certain regions of joystick movement, how the robot reacts based upon its direction, and can eliminate jerky joystick movements that translate to jerky bot movements for both rotation and lateral at the same time. For tank drive, doing all of these things requires at least twice the code so you can determine a rotation vector, where as single-joystick drive rotation is a direct input. Some of this stuff isn’t easy to do, and sometimes isn’t even necessary depending on the way the driver naturally drives.

Some drivers can intuitively drive without all of the fancy code. Yet imagine how much more they could concentrate on game strategy if they didn’t have to focus so much on the drive itself. Just my .02.

I love our steering wheel:

To convert dual-joystick tank-style control to single-joystick arcade-style control is two lines of code.

 speed = left + right;
 turn = left - right;

I have left off scaling and offset, because some people like to keep the 0-254 range and others like +/- 127 instead (the TechnoKats Overdrive code this year actually uses +/- 100 for all internal computations).

Really, and this is the programmer side of me talking, you have to taylor-make the controls to the driver/operator. Everybody’s brain is wired different, so there isn’t any one great answer.

In 2006 (I think) I saw a team that had a mechanum drivetrain that used a single joystick drive with a twist (:rolleyes: pun)… they added a twisting handle to one of the white joysticks to control the spin motion that a mechanum drive is capable of. Cool idea.

As a driver (hopefully I’m not alone on this and someone has a similar experience) some people just ‘get’ a tank (2 joystick/differential) drive system. Our driver we had through the 2006 season wouldn’t take anything else really… he could feel the way the robot drove and found it simplest to do tank drive.

Personally, I agree. Our robot runs most efficiently if we run down our homestretch going forwards, grab the ball, and use the bounce of the ball running into the opposite wall of the field to speed up our acceleration comming back on the other side of the track. This requires me to be able to drive the robot backwards, something that I think would be much more difficult with any other kind of input system I can think of.


I’m my experience, I’ve grown to love a two Joystick Tank system. Usually the programmer will set the maxes so that max forward is always perfectly straight. I’ve used a lot of different controls with my vex robot’s and the only time I don’t use a tank is when I’m using my custom mecanums.

We used the normal tank drive system in 2006 and 2007. To make it a little easier to control, we hacked off the long joystick arms. It worked alright, but it was still pretty difficult to conrol when trying to manipulate turns. Going in a gradual in high gear was also near impossible!

This year we decided to go with a controller used for racing remote control cars, and it worked amazingly well (photo here). The guts of the controller were removed, and it was programed to work with feedback from gear tooth sensors in the transmission.

The steering wheel allows for fine control during high speed maneuvers, something that is very useful for this years game. Turning the wheel without throttling makes the bot turn in place, and reversing the throttle makes it behave like a car driving backwards. I think everyone on the team who tried our new drive system agreed that it was much easier to control than the tank style.