|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
Perfect driving using encoders?
What would be the best way to make your robot drive perfectly straight using encoders while still being able to drive it with a joystick?
|
|
#2
|
||||
|
||||
|
Re: Perfect driving using encoders?
By encoders, are you referring to encoders on, say, Supershifters? You could set a gain running on the encoder voltage, use the joystick value, and somehow compare the two, possibly using a coerce, to keep it within a certain range.
|
|
#3
|
|
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); 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 |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|