View Single Post
  #5   Spotlight this post!  
Unread 03-02-2014, 15:20
apalrd's Avatar
apalrd apalrd is offline
More Torque!
AKA: Andrew Palardy (Most people call me Palardy)
VRC #3333
Team Role: College Student
 
Join Date: Mar 2009
Rookie Year: 2009
Location: Auburn Hills, MI
Posts: 1,347
apalrd has a reputation beyond reputeapalrd has a reputation beyond reputeapalrd has a reputation beyond reputeapalrd has a reputation beyond reputeapalrd has a reputation beyond reputeapalrd has a reputation beyond reputeapalrd has a reputation beyond reputeapalrd has a reputation beyond reputeapalrd has a reputation beyond reputeapalrd has a reputation beyond reputeapalrd has a reputation beyond repute
Re: Two joystick tank drive vs one stick arcade drive

We have used a mixed style algorithm for the past few years. We currently use the 'CulverDrive' algorithm, derived from the 'Cheesy Drive' algorithm published by the Cheesy Poofs. In both cases, there is a 'throttle' and 'wheel' (steering) input which is mixed in software to a left and right command. The Arcade algorithm does something similar, in a very mathematically simplified way.

We then split the mixed algorithm between the two sticks, so the X axis is on one stick and the Y axis is on the other stick. This separates the driving from the steering, allowing the driver to more finely control both (specifically, it prevents quick changes in throttle control from bumping the steering control, and vice-versa). The driver can maintain a steering command and modify the throttle command easily as they are detached.

You can do the same with the Arcade algorithm by mapping the X input to the X axis of one stick, and the Y input to the Y axis of the other stick.

We use Logitech F310 gamepads, as we were not impressed by the quality of the xbox gamepads (specifically, they do not return to the same center very well compared to the Logitech gamepads). Our drivers also prefer the circular stick boundaries of the F310 vs the octagonal boundary of the xbox, and we coded in assumptions of a circular boundary for the CulverDrive.

We found, after much testing, that the two-stick tank drive resulted in 'trinary' (3-position, almost binary) motions. The driver would usually only put each stick in 3 positions: +1, 0, -1. Both sticks would be full forward, and to turn, the inner wheel stick would go to either 0 (driver removes thumb from stick) or -1 (driver does a full reverse spin turn). We tried to fix this on our 2011 robot using an 'arc control' code that would adjust the inner wheel transfer function (so a 0 on the inner wheel would become a +0.4 or so), but this was an intermediate measure as the driver was trained on two-stick tank and we could not switch to a mixed control setup until the next season.

With the separated throttle/wheel, the driver still drives with a trinary throttle, but can now finely control the wheel input independently to gracefully turn. The algorithm also tries to maintain a constant radius turn for a given wheel input independent of throttle (we can adjust this as one of the calibratable 'feel' parameters)


IMHO, if the driver is not already trained, you should not let the driver pick. We initially did this and most drivers picked the tank drive because they were familiar with the robot mechanics and it made sense to them (there was no 'magic software'). However, with practice, all of our drivers who have tried it have adopted our 'CulverDrive', and the Halo/Cheesy style drives as well. We believe it's WAY easier for a driver to control a high speed FRC robot well with a mixed control, YMMV.
__________________
Kettering University - Computer Engineering
Kettering Motorsports
Williams International - Commercial Engines - Controls and Accessories
FRC 33 - The Killer Bees - 2009-2012 Student, 2013-2014 Advisor
VEX IQ 3333 - The Bumble Bees - 2014+ Mentor

"Sometimes, the elegant implementation is a function. Not a method. Not a class. Not a framework. Just a function." ~ John Carmack