View Single Post
  #3   Spotlight this post!  
Unread 19-03-2011, 01:13
biojae's Avatar
biojae biojae is offline
Likes Omni drives :)
AKA: Justin Stocking
FTC #5011 (BOT SQUAD) && FTC#72(Garage bots)&& FRC#0399 (Eagle Robotics)
Team Role: College Student
 
Join Date: Oct 2008
Rookie Year: 2008
Location: Lancaster
Posts: 276
biojae is a jewel in the roughbiojae is a jewel in the roughbiojae is a jewel in the rough
Re: Perfect driving using encoders?

You could interpret the joystick as a velocity command (rate).

If you are using one joystick (arcade) your code could look something like this:
(Sorry, I don't have labview on my computer)
Code:
double driveCmd = Joystick1.getY(); // Convert the Y axis value into a velocity relative to the robot's maximum speed 
double turnCmd  = Joystick1.getX() * MaxTurnRate; //Convert the X axis value into a turning velocity relative to the robot's maximum rotation speed

double turnRate = (leftEncoder.getRate() - rightEncoder.getRate()) / robotWidth; // Based on Kinematics of a differential (tank) driven vehicle
double turn = P * (turnCmd - turnRate); //Proportional control; Expand to PID if needed

RobotDrive.arcadeDrive(driveCmd, turn);
The only change needed for driving it with 2 joysticks (tank drive) is:
Code:
double driveCmd = (Joystick1.getY() + Joystick2.getY()) / 2.0; // Average the 2 sticks to get an overall Speed for the robot to drive  
double turnCmd  = ((Joystick1.getY() - Joystick2.getY()) / 2.0) * MaxTurnRate; // Convert the difference of the 2 sticks to get a turn velocity command
__________________
FTC Team 72 - No site
FRC Team 399 - http://www.team399.org
2010 Rockwell Collins Innovation in Control Award - (Use of the CAN bus, among other reasons) Phoenix, Arizona!
Reply With Quote