robot code for summer school
Dependencies: PM2_Libary Eigen
Fork of PM2_Example_Summer_School by
Revision 78:d53f1d68ca65, committed 2022-06-01
- Comitter:
- eversonrosed
- Date:
- Wed Jun 01 16:18:25 2022 +0200
- Parent:
- 77:19cf9072bc22
- Commit message:
- have we gone anywhere in 24 hours?
Changed in this revision
Robot_Library/robot.cpp | Show annotated file Show diff for this revision Revisions of this file |
Robot_Library/robot.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 19cf9072bc22 -r d53f1d68ca65 Robot_Library/robot.cpp --- a/Robot_Library/robot.cpp Wed Jun 01 08:18:10 2022 +0200 +++ b/Robot_Library/robot.cpp Wed Jun 01 16:18:25 2022 +0200 @@ -17,10 +17,11 @@ i2c2(PB_9, PB_8), // line sensor line_sensor(i2c2), enable_motors(PB_15), pwm_M1(PB_13), pwm_M2(PA_9), // motors + encoders - encoder_M1(PA_6, PC_7), encoder_M2(PB_6, PB_7), - theta(0.0f), target_theta(0.0f), - robot_x(0.0f), target_x(0.0f), - robot_y(0.0f), target_y(0.0f) { + encoder_M1(PA_6, PC_7), encoder_M2(PB_6, PB_7) + // theta(0.0f), target_theta(0.0f), + // robot_x(0.0f), target_x(0.0f), + // robot_y(0.0f), target_y(0.0f) +{ // initialize all variables wheel_to_robot << WHEEL_RADIUS / 2.0f, -WHEEL_RADIUS / 2.0f, -WHEEL_RADIUS / DISTANCE_BETWEEN_WHEELS, @@ -85,9 +86,6 @@ case FOLLOWING_LINE: FollowingLine(); break; - case TARGETING: - MoveToTarget(); - break; case AVOIDING_OBSTACLE: AvoidObstacle(); break; @@ -100,13 +98,6 @@ return; } - float dt = controller.Period(); - float v = robot_speed_actual(0); - float omega = robot_speed_actual(1); - theta += omega * dt; - robot_x += cos(theta) * v * dt; - robot_y -= sin(theta) * v * dt; // since theta increases clockwise - wheel_speed_desired = robot_to_wheel * robot_speed_desired; // smooth desired wheel_speeds @@ -149,17 +140,10 @@ void Robot::FollowingLine() // Updates once per cycle. { uint8_t raw = line_sensor.getRaw(); - // if ((raw & 0xF0) == 0xF0) { - // state = LEFT_TURN; - // target_x = robot_x + 40e-3; - // target_theta = theta + M_PI / 2; - // return; - // } else if ((raw & 0xF) == 0xF) { - // state = RIGHT_TURN; - // target_x = robot_x + 40e-3; - // target_theta = theta - M_PI / 2; - // return; - // } + if (raw == 0xFF) { + raw = 0x80; // turn left at crossroads + // raw = 0x01; // turn right at crossroads + } float angle = ComputeAngle(raw, previous_error_value); // if(IsSharpTurn(binary_sensor_data)) { return; } // check if the sensor @@ -171,31 +155,6 @@ // calculation and stuff? } -void Robot::MoveToTarget() -{ - float dx = target_x - robot_x; - float dy = target_y - robot_y; - float motion_angle = -atan2(dy, dx); - float diff = motion_angle - theta; - if (abs(robot_x - target_x) <= 0.005 && abs(robot_y - target_y) <= 0.005) { - if (abs(theta - target_theta) <= 0.05) { - state = FOLLOWING_LINE; - } else { - float orient = target_theta - theta; - int sign = (0 < orient) - (orient < 0); - robot_speed_desired(0) = 0.0f; - robot_speed_desired(1) = sign * ROTATIONAL_VELOCITY; - } - } else if (abs(theta - motion_angle) <= 0.05) { - robot_speed_desired(0) = TRANSLATIONAL_VELOCITY; - robot_speed_desired(1) = 0.0f; - } else { - robot_speed_desired(0) = 0.0f; - int sign = (0 < diff) - (diff < 0); - robot_speed_desired(1) = sign * ROTATIONAL_VELOCITY; - } -} - void Robot::AvoidObstacle() { // TODO }
diff -r 19cf9072bc22 -r d53f1d68ca65 Robot_Library/robot.h --- a/Robot_Library/robot.h Wed Jun 01 08:18:10 2022 +0200 +++ b/Robot_Library/robot.h Wed Jun 01 16:18:25 2022 +0200 @@ -20,7 +20,7 @@ INITIAL, IDLE, FOLLOWING_LINE, - TARGETING, + // TARGETING, AVOIDING_OBSTACLE, }; @@ -30,7 +30,7 @@ void Initial(); void Idle(); void FollowingLine(); // takes in rotational velocity? - void MoveToTarget(); + // void MoveToTarget(); void AvoidObstacle(); //PID @@ -92,12 +92,12 @@ Eigen::Vector2f robot_speed_actual; // Measured robot speed // tracking - float theta; - float target_theta; - float robot_x; - float target_x; - float robot_y; - float target_y; + // float theta; + // float target_theta; + // float robot_x; + // float target_x; + // float robot_y; + // float target_y; }; #endif \ No newline at end of file