added feed forward term to pid
This commit is contained in:
parent
6066594f6a
commit
0336639c9c
4 changed files with 10 additions and 1 deletions
|
@ -7,6 +7,7 @@ Romi32U4EncodedMotor<RIGHT_XOR, RIGHT_B, PWM_R, DIR_R, OCR_R> rightMotor;
|
||||||
void Chassis::SetMotorKp(float kp) {leftMotor.Kp = kp; rightMotor.Kp = kp;}
|
void Chassis::SetMotorKp(float kp) {leftMotor.Kp = kp; rightMotor.Kp = kp;}
|
||||||
void Chassis::SetMotorKi(float ki) {leftMotor.Ki = ki; rightMotor.Ki = ki; leftMotor.sumError = 0; rightMotor.sumError = 0;}
|
void Chassis::SetMotorKi(float ki) {leftMotor.Ki = ki; rightMotor.Ki = ki; leftMotor.sumError = 0; rightMotor.sumError = 0;}
|
||||||
void Chassis::SetMotorKd(float kd) {leftMotor.Kd = kd; rightMotor.Kd = kd;}
|
void Chassis::SetMotorKd(float kd) {leftMotor.Kd = kd; rightMotor.Kd = kd;}
|
||||||
|
void Chassis::SetMotorKf(float kf) {leftMotor.Kf = kf; rightMotor.Kf = kf;}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Because it's declared static, we initialize Chassis::loopFlag here.
|
* Because it's declared static, we initialize Chassis::loopFlag here.
|
||||||
|
|
|
@ -42,6 +42,7 @@ public:
|
||||||
void SetMotorKp(float kp);
|
void SetMotorKp(float kp);
|
||||||
void SetMotorKi(float ki);
|
void SetMotorKi(float ki);
|
||||||
void SetMotorKd(float kd);
|
void SetMotorKd(float kd);
|
||||||
|
void SetMotorKf(float kf);
|
||||||
|
|
||||||
bool CheckChassisTimer(void);
|
bool CheckChassisTimer(void);
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ protected:
|
||||||
float Kp = 1;
|
float Kp = 1;
|
||||||
float Ki = 0;
|
float Ki = 0;
|
||||||
float Kd = 0;
|
float Kd = 0;
|
||||||
|
float Kf = 0;
|
||||||
|
|
||||||
// Used to keep track of the target speed, in counts / interval.
|
// Used to keep track of the target speed, in counts / interval.
|
||||||
float targetSpeed = 0;
|
float targetSpeed = 0;
|
||||||
|
@ -129,7 +130,7 @@ protected:
|
||||||
prevError = error;
|
prevError = error;
|
||||||
|
|
||||||
// Calculate the effort from the PID gains
|
// Calculate the effort from the PID gains
|
||||||
int16_t effort = Kp * error + Ki * sumError + Kd * errorDiff;
|
int16_t effort = Kp * error + Ki * sumError + Kd * errorDiff + Kf * targetSpeed;
|
||||||
|
|
||||||
// Set the effort for the motor
|
// Set the effort for the motor
|
||||||
SetEffort(effort);
|
SetEffort(effort);
|
||||||
|
|
|
@ -119,6 +119,12 @@ void Robot::HandleKeyCode(int16_t keyCode)
|
||||||
chassis.SetMotorKd(k);
|
chassis.SetMotorKd(k);
|
||||||
keyString = "";
|
keyString = "";
|
||||||
break;
|
break;
|
||||||
|
case RIGHT_ARROW:
|
||||||
|
k = keyString.toInt() / 100.0;
|
||||||
|
Serial.print("Kf = "); Serial.println(k);
|
||||||
|
chassis.SetMotorKf(k);
|
||||||
|
keyString = "";
|
||||||
|
break;
|
||||||
case UP_ARROW:
|
case UP_ARROW:
|
||||||
if(!keyString.length()) chassis.SetWheelSpeeds(60, 0);
|
if(!keyString.length()) chassis.SetWheelSpeeds(60, 0);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue