
13-11-2015, 11:26
|
 |
Registered User
AKA: Matt Schwabenbauer
 FRC #0291
Team Role: College Student
|
|
Join Date: Jan 2012
Rookie Year: 2008
Location: Erie, PA
Posts: 87
|
|
|
Re: Driving Straight
Quote:
Originally Posted by Chris Hibner
You can use the encoders to emulate a gyro for driving straight. Here is some psuedo-code for how to do it:
Code:
heading = 57.3*(leftEncDist - rightEncDist) / trackWidth;
if (abs(driverTurnCmd) < turnDeadZone)
{
if (headingCaptured == FALSE)
{
desiredHeading = heading;
headingCaptured = TRUE;
}
turnCmdPID = PID(heading, desiredHeading);
arcadeDrive(driverThrottleCmd, turnCmdPID);
}
else
{
headingCaptured = FALSE;
arcadeDrive(driverThrottleCmd, driverTurnCmd);
}
When we've done this in the past, it makes it a little smoother if you lead your desired heading with your turn rate. So instead of "desiredHeading = heading" in the above code, we've done "desiredHeading = Heading + robotTurnSpeed * leadFactor", where "leadFactor" is a calibration that you tune to make the stopping of the turn smooth.
|
I'm currently trying to implement a very similar system and was wondering if you had any recommendations for tuning the PID constants and the "leadFactor" at the same time
__________________
2013 Pittsburgh- Gracious Professionalism award, 7th seed, 6th alliance captian, quarter-finalist(291,3492,4601)
2013 Queen CIty- Chairman's Award, 39th seed
2012 Pittsburgh- 23rd seed
2012 Buckeye- 34th seed, 2nd alliance, quarter-finalist(291,1241,4085)
2011 Pittsburgh- 13th seed, 5th alliance, quarter-finalist(291,337,3504)
2011 Buckeye- 18th seed, 8th alliance, quarter-finalist(279,291,3496)
2010 Finger Lakes- 15th seed, 5th alliance, quarter-finalist(291,1507,1559)
2010 Buckeye- Chairman's Award, Imagery Award, Quality Award, 4th seed, 1st pick, 1st alliance, semi-finalist(291,1014,1629)
|