Moving toward better driver control

Chillout 1778 hopes this information might be helpful to any other team that is looking to develop a better driver control. We have been super excited about the experience we had with this development last year.

Last year we started to develop the best drive controller possible for our drivers. We thought we could improve on existing controllers (all video game controllers). Here is a comparison of controllers that are commonly used.

We used a new drive controller last year based on a RealFlight flight controller. We documented it as Freezy Drive.

We have been collecting more information on existing controllers and how we can improve Freezy Drive 2.0. We think we can make the controllers 20 times more accurate and more rugged then the standard Joystick.

There is a lot of potential to develop better controllers for FRC drivers. What have been the experience of others?

Where do you get the step values for all the controllers, mostly listed as 256 (8-bit)? Using the windows gamepad tool the range/resolution they report is much higher for the same controller.

You group together all gamepads with the same resolution and pros/cons, do you mean you expect this to be the same for the Xbox 360, Xbox One, PlayStation etc?

We saw a big improvement in control just by going from Xbox 360 (from FIRST Choice) to Xbox One (Related post). I imagine this can improve even more with a better controller as you’ve mentioned and I’d be curious to see what our drivers think. The only downside I could think of from the Xbox One would be the ergonomics/familiarity, and whether or not the improvement using higher accuracy sticks, but (maybe) worse ergonomics, is worth the trade off.

Yes, we would expect standard bit numbers for the controllers. We used the http://html5gamepad.com/ page to test the controllers.

To extract to the overall resolution we look at the min and max number. Then we find one value and manually try to move the stick ever so slightly to get the next value. We subtract those two and divide into the min/max. Part of the test is how hard it is to collect these numbers. If it is hard to repeat or hold a number, that can be an issue.

I expect most of the gamepad controllers will result in 256. I was surprised at the lower resolution of the larger standard joysticks. The gamepads are an improvement over standard joysticks. Our drivers really liked the 256 steps this year.

There is a balance between the quality of the potentiometers, length of the sticks and other physical factors in the gampads vs. the digital resolution of the controller. For instance, can you get back to and hold the same value easily? The flight controllers can hold 256 values quite easily. On the standard game controllers this is harder. A study in the consistency of Game controllers would be interesting. Perhaps the XBox One controllers have better gimbals?

The ability to repeat values and hold values is a bit subjective. We do use the numbers, but the students have to “feel” how hard it is to do. I notice in the other discussion an potential increase in precision through stick length. Increased stick length is something we considered early as a potential improvement to gamepads.

The potential for physical adjustment in RC transmitters is amazing. Stick length, ball bearing construction, centering tension, movement tension and grip type are all easy to change.

(This isn’t really about your specific implementation in particular, but I’ve been meaning to write this post about better driver control for a bit and it ended up here. Your team’s setup is dope!)

I’ve put a lot of thought into this, and relatively little work, and here are the things I’ve found have been the most dramatic driver control improvements for relatively little effort.

First is abandoning tank drive - Tank drive is not well designed for the driving tasks FRC drivers are attempting to accomplish. It is bad at driving in a straight line (particularly at any speed under max), it is just okay at turning in arcs, and in general it requires drivers to think less about what they want the robot to do and more about how they think the machine can do it.

Second is separating throttle (linear velocity) and rotation (angular velocity). This is the main flaw with the default setup of “arcade drive” and why people turn away from what’s frankly an otherwise better system. Putting these on the same joystick just makes both of them less precise, especially when you often need combinations of both inputs for fine control.

The third thing I’ve found is to remove a sense of direction from throttle control. This isn’t as important as the other two things, depending on the driver, but it can make a huge difference. For this year, we had a robot with openings on both sides, where different parts of the robot would be the “front” depending on the context of the game. When the joystick was used as throttle, what was front and what was back was constantly mixed up. By instead using both triggers as throttle (one positive one negative), we essentially created a “gear side throttle” and “hopper side throttle”, which removed thinking about the orientation of the robot from the equation entirely.

All of the other cool stuff, is great, and makes for huge improvements, but takes more intelligence and effort. This above is the “low hanging fruit”.

If you haven’t yet, I’d suggest trying a pistol grip style RC car controller, like seen here. It’s a little more intuitive than the large steering wheel setup you listed and a lot more portable. There aren’t many good off the shelf controllers like this that plug into USB, so we have always had to make a custom circuit that grabs the potentiometer readings to send to the driver station.

I would agree after this years experience.

We were afraid to change from tank drive before last year. Tank drive is so easy to understand and the drivers were comfortable with it. But, after trying the Cheesy/Culiver style drive, there is not going back. Our drivers love it. The motion of the robot was so much smoother. Also, before the drivers felt the robot was fast, now with the new controller, they want to robot to be faster.

We started with 254s code and have made little changes. I think the Bees #33 Halo drive is also interesting. Just like 254s control there is a quick turn button we used. There are a few people trying to figure out how to remove the need for quick turn. A lot of these suggestions seem like they would work for omni-drives also.

@s_forbes - The pistol grip looks interesting. I notice a lot of those at the RC car races. Has anyone tried it? Does anyone here have RC car experience? Is there a debate between traditional RC controller and pistol grip controllers?

The same electronics we have been hacking around with should work in the pistol grip controllers.

We have been using the pistol grip style controller for driving since 2011. It seems to have the fastest learning curve for new drivers, and there doesn’t seem to be an advantage to other control styles that we’re missing out on.

In 2015, we had a mecanum drivetrain (shudder) and started out the season on a typical USB gamepad controller. Mid season we switched back to the pistol grip controller and treated the drivetrain like a standard skid-steer setup, with an added strafe button that was seldom used. Our driver did better with the pistol grip controller than the gamepad.

A lot of it is driver preference, but having all of the different options available lets them find the control scheme they prefer.

Bingo. Every driver I’ve seen that uses two joysticks (or two sticks on an xbox controller) to control the 2 sides of their bot (aka tank drive), claims it’s better than any other drive, because it gives them “superior control over the robot that no other drive gives”. And there is almost certainly nothing I can say to convince them of that… until I let them drive our bot, using my controller. We (I (the driver)) use the trigger drive setup (standard racing video game setup) Right trigger is to go forward, left trigger is to go backwards, and the left stick is to turn left or right.

Once I’ve let other drivers drive out bot (so far 4 people), they all switched from using tank drive to (what I call) the trigger drive. (I don’t know if there is an actual name for this drive). And the added benefits of this, is that it compltley frees up your right thumb to use for functions on the buttons.

Another thing that driver’s really don’t realize affects their performance, is that they use the crappy logitech f310 gamepad. The trigger travel on that is super short, allowing almost no fine control, the grip sucks, the sticks such, and the buttons are super mushy. Upgrading to an xbox one controller is SO much better. Or in some team’s cases (like 3310’s and mine), upgrading to an xbox one elite controller is even better, the paddles on the back allow for a couple more functions. Some things feel super natural on the back paddles, like shifting.

Here is a link to our/my setup: http://i.imgur.com/LHxg0so.png

We will add the information to our comparison page.

You use the triggers for speed. I wonder what the resolution of those are? We can give them a go.

I notice that the elite controllers come with some joystick modifiers? Do you use the taller of regular height sticks?

Do you use the response curves in the elite?

Do you use a quick turn to spin within your radius? How do you get to the point of turning the wheels in opposite directions to turn hard?

  1. I’m not sure what you mean by resolution

  2. I use the taller stick for the left stick (the stick that controls turning left or right) because it helps me make finer movements. For the right stick I just left it the stock short stick, because it is only used for the climber which doesnt require fine control, and the tall stick gets in the way of pressing the buttons on the right

  3. We program the curves into the robot code itself, so that any gamepad controller being used has the curves, since the elite is my personal one and may not be available for the programmers to use to test stuff.

  4. Pushing the “turning stick” (left stick) without touching the triggers, causes the robot to turn in place. For example, (without touching the triggers) if the “turning stick” is pushed to the right halfway, the left side of the bot applies .5 power, and the right side of the bot applies -.5 power, resulting in a turn, to the right, in place.

Another thing I would like to add about the elite controller (and xbox one controller in general). I use the vibration for haptic feedback. For example, whenever a gear is picked up, the controller vibrates, alerting me that the gear is good to go. The controller has a main vibration motor that rattles the main controller, and also has tiny individualized vibration motors inside of the right trigger, and the left trigger. So each individual once can be activated to provide different feedbacks.

Hearing your experiences with the controller is great.

The pistol grip wheel controllers are all over the place, but I do not find any wired controllers?

What model controller are you using?
Did you have to hack a USB wire into a pistol grip controller?

I see that you are using a Futaba controller for the pistol grip. How did you modify it with the USB cable?

I’ve always heard this drive setup described as “GTA Drive”, since most students seem to know it from playing the GTA series. Not the best name but it works.

The F310’s popularity is for two reasons - 1 is it’s very cheap / easy to use, and 2 is that it does a far better job homing analog sticks than the Xbox 360 controller did. The Xbox 360 controller’s sticks would only center to like, +/- 0.1 or so, which is atrocious and for teams that didn’t program in a deadband would really mess things up. The F310s seem to center much better until you abuse the controllers by shipping them with the analog sticks depressed or something.

Personally I sort of like the triggers on these, there is a bit of resolution to them, and I don’t notice a huge improvement switching to a 360 controller, but I haven’t tried an Xbox One controller to see if their analog triggers have more precision or range than an F310. I’ve seen more and more Good Teams switch to it though, so there’s probably some merit there.

As a side note, I would try and resist the temptation to give the driver more things to do “just” because they have more free appendages for buttons. If you already have two drivers, carefully considering the division of labor for maximum efficiency is really important, and usually that means the base driver does little more than drive the base directly.

Totally agree, we just use a 1 driver system because I’m “capable” of handling the manipulators without affecting the driving performance, plus our bots aren’t exactly super complex :smiley: . Only real manipulator is the gear pickup, (and climber i guess).

oops double post. Yes, there is a lot further travel distance for the triggers on the xbox one controllers, than on the f310. The pressure on the triggers are also more natural and balanced.

Additionally, the f310 is just annoying to use, and doesn’t feel comfortable to hold. But this is also a driver preference. Driver’s who generally grew up playing on a playstation find the f310 to be more comfortable and natural, and drivers who grew up using xbox controllers find xbox controllers to be way more natural, and simply “can’t” use an f310. THe xbox one and xbox one elite controller just fits into your hand more naturally, I feel. When I use the f310, I feel like its constantly straining my thumbs.

We are using the MMJoy firmware on a Arduino Pro Micro to get values. How do you get the values from the potentiometers?

We have been using a Teensy 3.1 microcontroller. It has more analog and digital inputs that you would ever need for a controller.

Also the teensy libraries provide an easy way to emulate an HID controller. As well as a uart for feedback from the robot (vibration, lights, force feedback)

We also have automatic stick calibration which helps even more with driving straight without too much deadband.

Something we have done in the past as well is ripping out the guts of a Logitech gamepad and replacing the analog stick wires with the pots of the RC controller. We found this to be unreliable as the wiring was flaky at best resulting in the above solution we opted for instead.

So tonight some students started testing the resolution and feel of various Gamepads. Resolution has to do with the analog to digital converter build into the devices. The results are interesting measured in the number of steps possible per axis:

  1. Logitech Dual Action: 127 steps
  2. Logtitech F310: 256 steps (8-bit), triggers: 100 steps
  3. Xbox One: 800 steps (10-bit w/fitering), trigger 100 steps
  4. Xbox One Elite: 1800 steps (12-bit w.filtering), trigger 100 steps

As you can see the Xbox One controllers are in a class of their own. The values they have moved up to 10-bit and 12-bit ADC chips. A resolutions of 127 is much too small. Moving to 256 steps is noticeable. Going to 800+ feels even better.

Our students reported that the ability to make the Elite controllers sticks longer made it much easier to make values repeatable and hold values steady.

Our students were not happen with the centering of the Xbox controllers. It seems the higher resolutions do make the centering values a little less consistent.