diff --git a/robot_controller/constants.h b/robot_controller/constants.h index 88ec2cd..4956d8d 100644 --- a/robot_controller/constants.h +++ b/robot_controller/constants.h @@ -5,7 +5,7 @@ const float VEL_LIMIT = 10.0; // cm/s const float BACKLASH_RIGHT = 0.0; // degrees const float BACKLASH_LEFT = 0.0; // degrees const float WHEEL_DIAMETER = 10.00; // cm -const float WHEEL_TO_WHEEL = 0.0; // cm +const float WHEEL_TO_WHEEL = 10.0; // cm // centimeters per second to rpm const float CMS_RPM = 60.0 / (PI*WHEEL_DIAMETER); @@ -13,8 +13,9 @@ const float CMS_RPM = 60.0 / (PI*WHEEL_DIAMETER); // degrees to centimeters const float DEG_CM = (PI*WHEEL_DIAMETER) / 360.0; -const float FORWARD_DISTANCE = 30.0; // cm +const float FORWARD_DISTANCE = 100.0; // cm const float TURN_AMOUNT = 180.0; // degrees +const float TURN_DISTANCE = (TURN_AMOUNT / 360.0) * WHEEL_TO_WHEEL * PI; const float RETURN_DISTANCE = 100.0; // cm const float FF_ACCEL = 0.7; // motor acceleration feedforward diff --git a/robot_controller/robot_controller.ino b/robot_controller/robot_controller.ino index e2340da..e5251ad 100644 --- a/robot_controller/robot_controller.ino +++ b/robot_controller/robot_controller.ino @@ -25,6 +25,7 @@ float phase_start; enum ROBOT_STATE robot_state; struct Trapezoidal forward = {VEL_LIMIT, ACCEL_LIMIT, FORWARD_DISTANCE}; +struct Trapezoidal turn = {VEL_LIMIT, ACCEL_LIMIT, TURN_DISTANCE}; void write_rpm_ff(SmartMotor* motor, int32_t rpm, float ff) { if (rpm == 0) {rpm = 1;}; @@ -57,11 +58,11 @@ void loop() { float time = (float)millis() / 1000.0 - phase_start; switch (robot_state) { case FORWARD: + case RETURN: setpoint = trapezoidal_planner(&forward, time); break; case TURN: - break; - case RETURN: + setpoint = trapezoidal_planner(&forward, time); break; } @@ -106,16 +107,19 @@ void loop() { case FORWARD: robot_state = TURN; phase_start = (float)millis() / 1000.0; - - // end (temp) - left_motor.write_rpm(0.0); - delay(10); - right_motor.write_rpm(0.0); - for (;;) {}; break; case TURN: + robot_state = RETURN; + phase_start = (float)millis() / 1000.0; + break; case RETURN: + + // end + left_motor.write_rpm(0.0); + delay(1); + right_motor.write_rpm(0.0); + for (;;) {}; break; } }