Best joystick controls for drive train?

What exactly is manual trim?

When you slightly tap the analog stick to hold an arm in place… applying 20ish percent of the motor power manually rather than having it programmed in.

Our Teams generally use arcade drive on the left analog stick.

One change 8888C has made is to use a modified form of arcade drive. The normal equations for left and right motors are of the form.

Left = (V + H)/2
Right = (V - H)/2

Where V and H are the Vertical and Horizontal joystick values

One issue with this is that maximum forward speed is 64.

You can somewhat mitigate that by removing the divide by 2 factor.

Left = V + H
Right = V - H

This of course allows motor drive to go beyond the maximum motor speed of 128 when the joystick is off center. We modify this slightly by scaling back the other motor if one goes beyond 128.

Lets say (Left = V + H) is 150
We scale back “Right” by a factor of 128/150 or 0.85

The other thing the team does is to desensitize H when it is near the center to make driving straight easier.

Here is a graph to try and show what happens.

The Y axis is motor speed, the X axis is the joystick angle, imagine the joystick is straight up and gradually rotated to the right until it is fully down, it has moved through 180 deg.

The Red lines are normal arcade drive left and right (right is dotted line).

The Blue line show normal arcade drive without the divide by 2.

The Pink line show Team 8888C’s modified drive.

https://vexforum.com/attachment.php?attachmentid=5059&stc=1&d=1324085181

Whether it makes any practical difference is debateable, you would have to ask the driver.

Edit:
I should also add that after this calculation the control values also go through a lookup table to try and linearize control to speed and also slew rate to filter abrupt changes to the motors.
graph1.jpg

It this method different then limiting the overall function (y+x). I would think the lack of smoothness in the number flow (as compared to (y+x)/2 ) would make it quirky.

[Delta]

I think it very much depends on the drivers preference. I drive with a co driver, which means that I can drive the chassis using tank (my preferred style of driving) and my co driver gets to use a joystick to control the arm. It is definitely debatable as to if having a co driver is good or not, but with a lot of practice you become able to drive in sync with each other. However, there are times when driving alone would be easier, like when trying to do precise maneuvers, generally descoring.

However, if I didnt have a co driver, I would probably change to arcade drive on the left joystick and the arm on the right, although I would stick with tank drive if I could as I find it easier to use.

  1. Arcade drive is much more controllable at high speeds. In FRC nearly every world class team uses a form of arcade drive because they drive so fast.
    -A large part of the ease of arcade drive is that you can easily drive straight when not going full speed. Another factor is intuitive driving going backwards or while facing yourself. Again, this is easier with arcade drive.

  2. We have used tank drive for many years in FRC and after trying arcade in the off season this year I don’t think we’ll ever be going back. We are using this driving style on all three of our Vex robots (one even adapted for a slide drive.) All three robots made it to the finals in a thirty team event today (A and C against B) so I guess that says something in itself.

It’s probably important to note that when I say arcade drive I’m actually referring to a variation originally developed by 254 which we adapted and automated to suit our own preferences. A link to the original 254 code was posted around here somewhere but I can’t remember where… Perhaps someone could link it here.

Regards, Bryan

There’s a lot that went into the drive we use.

-I’ll start by saying this is not a “raw” arcade drive, where the left power equals the forward minus the rotation, and the right adds rotation. There is a bit of math to this algorithm which determines the rotational gain based on the forward speed, and another variant (“Quick Turn”) which does a classic arcade drive when the forward speed is very close to 0 or the operator commands it.

-Team 254 (Cheesy Poofs) has been developing a “Cheesy Drive” for a long time, which historically uses a joystick and steering wheel (in FRC, not Vex). This past year they switched to an Xbox controller, with the left Y as “throttle” and right X as “wheel” (a convention we use also). They like to be able to slow down as they approach 0 speed while arcing, so they have a “quick turn” button which they can press which modifies the algorithm so they can turn in place. Their 2010 code was posted here - it’s C++, so it might be hard to read for easyC or robotC programmers.

-Team 111 (Wildstang) uses the drive algorithm from 254’s 2010 code on their 2011 robot, and automated the quick-turn based on the throttle value. They called this “Halo Drive”, after the game. We talked to their programmer (our mentors are friends), but the automation isn’t very hard and the code is not publicly available. Many other teams also automated the quick turn button (forming a Halo Drive), 111 is not the only one (but they did win the FRC world championship with 254, and we did talk to them).

-We re-implemented the C++ FRC code in LabVIEW for FIRST, then in C for Vex. We initially used it in a local fall league (OCCRA), which I posted the code for here - See cheesydrive.c and cheesydrive.h for the algorithm, and drivetrain.c and drivetrain.h for the usage. Note that it uses pointers two levels deep, so if you use robotC you’ll have to find another way to make it work.

-We then took that implementation and ported it to RobotC (which we have not yet released), and used it on all three VRC33 robots (A,B,C). 33A had a slide drive, so they mapped the X axis of the Left (throttle) stick to the slide wheel directly, resulting in a translation and rotation stick, which is VERY intuitive to anyone who plays console games.

While we’re talking about drives, I would like to mention one that I think is interesting. While we were experimenting with the capabilities of the gyro, we made a kiwi-drive holonomic robot that kept it’s controls in relation to the driver the same regardless of which direction it was facing in. So moving the joystick forward would move the robot away from the driver regardless of it’s orientation on the field. It really helped the drivers who didn’t have great spatial visualization, and couldn’t really picture the field from the robot’s point of view (we might not have picked those people to be our main drivers). Of course, this meant carefully aligning the robot at the start of the match, but it was very cool none the less.