add wheel tick calib
This commit is contained in:
parent
4be754c1db
commit
9000316350
3 changed files with 47 additions and 12 deletions
|
@ -28,6 +28,8 @@ public:
|
|||
|
||||
void generate_tuned_step_response_data();
|
||||
|
||||
void calibrate_wheel_ticks(double turns, double ticks_per_turn);
|
||||
|
||||
private:
|
||||
enum ControlMode : uint8_t {
|
||||
NONE = 0,
|
||||
|
|
|
@ -149,3 +149,34 @@ void ClosedLoopMotorController::generate_tuned_step_response_data() {
|
|||
control_modes.at(ROBOT_ODOMETRY_CONTROLLER_LEFT_PORT) = ControlMode::NONE;
|
||||
control_modes.at(ROBOT_ODOMETRY_CONTROLLER_RIGHT_PORT) = ControlMode::NONE;
|
||||
}
|
||||
|
||||
void ClosedLoopMotorController::calibrate_wheel_ticks(double turns, double ticks_per_turn) {
|
||||
auto k_p = 0.0001;
|
||||
auto power = 40.0;
|
||||
auto min_power = 7.5;
|
||||
auto port = ROBOT_ODOMETRY_CONTROLLER_LEFT_PORT;
|
||||
|
||||
auto ticks = 0.0;
|
||||
auto target_ticks = ticks_per_turn * turns;
|
||||
while (ticks != target_ticks) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
|
||||
auto power_mult = fmax(-1.0, fmin(1.0, (target_ticks - ticks) * k_p));
|
||||
auto adjusted_power = power * power_mult;
|
||||
if (adjusted_power < 0 && adjusted_power > -min_power) {
|
||||
adjusted_power = -min_power;
|
||||
} else if (adjusted_power > 0 && adjusted_power < min_power) {
|
||||
adjusted_power = min_power;
|
||||
}
|
||||
|
||||
set_power(port, adjusted_power);
|
||||
|
||||
ticks = Encoders::getInstance().get_positions().at(port);
|
||||
spdlog::debug("{:03.4f}; {:03.4f}; {:03.4f};",
|
||||
ticks, target_ticks, adjusted_power);
|
||||
}
|
||||
|
||||
set_power(port, 0);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
int main(int argc, char *argv[]) {
|
||||
Reset::reset_robot();
|
||||
spdlog::set_pattern("%H:%M:%S.%e %^%-8l%$: %v");
|
||||
spdlog::set_level(spdlog::level::debug);
|
||||
|
@ -40,20 +40,22 @@ int main() {
|
|||
// GoToController::drive_distance(-4, 0.2);
|
||||
// GoToController::turn_degrees(-90, M_PI_2);
|
||||
|
||||
GoToController::drive_distance(2, 0.2);
|
||||
GoToController::turn_degrees(-90, M_PI_2);
|
||||
// GoToController::drive_distance(2, 0.2);
|
||||
// GoToController::turn_degrees(-90, M_PI_2);
|
||||
//
|
||||
// GoToController::drive_distance(2, 0.2);
|
||||
// GoToController::turn_degrees(-90, M_PI_2);
|
||||
//
|
||||
// GoToController::drive_distance(2, 0.2);
|
||||
// GoToController::turn_degrees(-90, M_PI_2);
|
||||
//
|
||||
// GoToController::drive_distance(2, 0.2);
|
||||
// GoToController::turn_degrees(-90, M_PI_2);
|
||||
|
||||
GoToController::drive_distance(2, 0.2);
|
||||
GoToController::turn_degrees(-90, M_PI_2);
|
||||
|
||||
GoToController::drive_distance(2, 0.2);
|
||||
GoToController::turn_degrees(-90, M_PI_2);
|
||||
|
||||
GoToController::drive_distance(2, 0.2);
|
||||
GoToController::turn_degrees(-90, M_PI_2);
|
||||
ClosedLoopMotorController::getInstance().calibrate_wheel_ticks(5, stoi(argv[1]));
|
||||
|
||||
// ClosedLoopMotorController::getInstance().generate_step_response_data();
|
||||
// ClosedLoopMotorController::getInstance().generate_tuned_step_response_data();
|
||||
std::this_thread::sleep_for(std::chrono::hours(12));
|
||||
// std::this_thread::sleep_for(std::chrono::hours(12));
|
||||
return 0;
|
||||
}
|
||||
|
|
Reference in a new issue