fix speedometer for new encoder
This commit is contained in:
+35
-6
@@ -112,18 +112,32 @@ void MoveControl::setDrivingStatus(DrivingStatus status) {
|
||||
// }
|
||||
}
|
||||
|
||||
void MoveControl::emergencyStop() {
|
||||
this->left_motor->emergencyStop();
|
||||
this->right_motor->emergencyStop();
|
||||
this->setSpeed(0);
|
||||
this->setRotationSpeed(0);
|
||||
this->setRawPowerLeft(0);
|
||||
this->setRawPowerRight(0);
|
||||
this->driving_status = DrivingStatus::stop;
|
||||
}
|
||||
|
||||
void MoveControl::setSpeed(double speed) {
|
||||
if (speed < 0.1 && speed > -0.1)
|
||||
if (speed < 0.1 && speed > -0.1) {
|
||||
this->x_speed = 0;
|
||||
else
|
||||
this->x_speed = speed;
|
||||
return;
|
||||
}
|
||||
|
||||
this->x_speed = speed;
|
||||
}
|
||||
|
||||
void MoveControl::setRotationSpeed(double speed) {
|
||||
if (speed < 0.1 && speed > -0.1)
|
||||
if (speed < 0.1 && speed > -0.1){
|
||||
this->rotation_speed = 0;
|
||||
else
|
||||
this->rotation_speed = speed;
|
||||
return;
|
||||
}
|
||||
|
||||
this->rotation_speed = speed;
|
||||
}
|
||||
|
||||
void MoveControl::setRawPowerLeft(int16_t power) {
|
||||
@@ -155,6 +169,15 @@ PID* MoveControl::getPID(uint8_t side) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void MoveControl::setSpeedometerDirection(Speedometer *speedometer, double value) {
|
||||
if (value > 0)
|
||||
speedometer->setDirection(Speedometer::Direction::Forward);
|
||||
else if (value < 0)
|
||||
speedometer->setDirection(Speedometer::Direction::Backward);
|
||||
else
|
||||
speedometer->setDirection(Speedometer::Direction::None);
|
||||
}
|
||||
|
||||
void MoveControl::calcTargetWheelSpeed() {
|
||||
/* original formula:
|
||||
(1 / r) / 1 b \ / x \ = / Xl \
|
||||
@@ -174,16 +197,22 @@ void MoveControl::regulateMotors() {
|
||||
case DrivingStatus::stop :
|
||||
this->left_motor->setTargetPower(0);
|
||||
this->right_motor->setTargetPower(0);
|
||||
this->setSpeedometerDirection(this->left_speedometer, 0);
|
||||
this->setSpeedometerDirection(this->right_speedometer, 0);
|
||||
break;
|
||||
|
||||
case DrivingStatus::drive :
|
||||
this->left_motor->setTargetPower( (int8_t) this->left_pid_out);
|
||||
this->right_motor->setTargetPower( (int8_t) this->right_pid_out);
|
||||
this->setSpeedometerDirection(this->left_speedometer, this->left_pid_out);
|
||||
this->setSpeedometerDirection(this->right_speedometer, this->right_pid_out);
|
||||
break;
|
||||
|
||||
case DrivingStatus::raw :
|
||||
this->left_motor->setTargetPower(this->rawPowerLeft);
|
||||
this->right_motor->setTargetPower(this->rawPowerRight);
|
||||
this->setSpeedometerDirection(this->left_speedometer, this->rawPowerLeft);
|
||||
this->setSpeedometerDirection(this->right_speedometer, this->rawPowerRight);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user