Fix goToAngle with new odom
This commit is contained in:
parent
80ed5e5bf9
commit
2c5f283a46
5 changed files with 71 additions and 62 deletions
|
@ -22,10 +22,11 @@ if (UNIX AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL armv7l)
|
||||||
set(LIBRARIES "pigpio" "spdlog::spdlog")
|
set(LIBRARIES "pigpio" "spdlog::spdlog")
|
||||||
set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-psabi")
|
set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-psabi")
|
||||||
|
|
||||||
set(IS_RASPI)
|
set(IS_RASPI true)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT IS_RASPI)
|
if (NOT IS_RASPI)
|
||||||
|
message("NOT Running on RaspberryPi")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -gdwarf-3")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -gdwarf-3")
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -Wextra -gdwarf-3")
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -Wextra -gdwarf-3")
|
||||||
|
|
|
@ -34,9 +34,9 @@
|
||||||
|
|
||||||
#define ROBOT_GO_TO_DISTANCE_RATE_HZ 200
|
#define ROBOT_GO_TO_DISTANCE_RATE_HZ 200
|
||||||
#define ROBOT_GO_TO_DISTANCE_ALPHA_P 2.0
|
#define ROBOT_GO_TO_DISTANCE_ALPHA_P 2.0
|
||||||
#define ROBOT_GO_TO_DISTANCE_VELOCITY_P 4.0
|
#define ROBOT_GO_TO_DISTANCE_VELOCITY_P 10.0
|
||||||
#define ROBOT_GO_TO_DISTANCE_END_M 0.01 // stop approx 1 cm before target
|
#define ROBOT_GO_TO_DISTANCE_END_M 0.01 // stop approx 1 cm before target
|
||||||
#define ROBOT_GO_TO_DISTANCE_MIN_VEL 0.025
|
#define ROBOT_GO_TO_DISTANCE_MIN_VEL 0.075
|
||||||
|
|
||||||
#define ROBOT_GO_TO_ANGLE_RATE_HZ 200
|
#define ROBOT_GO_TO_ANGLE_RATE_HZ 200
|
||||||
#define ROBOT_GO_TO_ANGLE_END_RAD (0.5 * (M_PI / 180.0)) // stop 0.5 deg before target
|
#define ROBOT_GO_TO_ANGLE_END_RAD (0.5 * (M_PI / 180.0)) // stop 0.5 deg before target
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
// Source: http://faculty.salina.k-state.edu/tim/robot_prog/MobileBot/Steering/unicycle.html#calculating-wheel-velocities
|
// Source: http://faculty.salina.k-state.edu/tim/robot_prog/MobileBot/Steering/unicycle.html#calculating-wheel-velocities
|
||||||
// Source: https://www.roboticsbook.org/S52_diffdrive_actions.html#kinematics-in-code
|
// Source: https://www.roboticsbook.org/S52_diffdrive_actions.html#kinematics-in-code
|
||||||
void GoToController::diff_drive_inverse_kinematics(double v_m_s, double w_rad_s) {
|
void GoToController::diff_drive_inverse_kinematics(double v_m_s, double w_rad_s) {
|
||||||
auto vr_rad_s = (2 * v_m_s - w_rad_s * ROBOT_ARBOR_LENGTH_M) / (2.0 * ROBOT_WHEEL_RADIUS_M) * ROBOT_ODOMETRY_CONTROLLER_RIGHT_MULT;
|
auto vr_rad_s = (2 * v_m_s + w_rad_s * ROBOT_ARBOR_LENGTH_M) / (2.0 * ROBOT_WHEEL_RADIUS_M) * ROBOT_ODOMETRY_CONTROLLER_RIGHT_MULT;
|
||||||
auto vl_rad_s = (2 * v_m_s + w_rad_s * ROBOT_ARBOR_LENGTH_M) / (2.0 * ROBOT_WHEEL_RADIUS_M) * ROBOT_ODOMETRY_CONTROLLER_LEFT_MULT;
|
auto vl_rad_s = (2 * v_m_s - w_rad_s * ROBOT_ARBOR_LENGTH_M) / (2.0 * ROBOT_WHEEL_RADIUS_M) * ROBOT_ODOMETRY_CONTROLLER_LEFT_MULT;
|
||||||
|
|
||||||
ClosedLoopMotorController::getInstance().set_speed(ROBOT_ODOMETRY_CONTROLLER_RIGHT_PORT, vr_rad_s);
|
ClosedLoopMotorController::getInstance().set_speed(ROBOT_ODOMETRY_CONTROLLER_RIGHT_PORT, vr_rad_s);
|
||||||
ClosedLoopMotorController::getInstance().set_speed(ROBOT_ODOMETRY_CONTROLLER_LEFT_PORT, vl_rad_s);
|
ClosedLoopMotorController::getInstance().set_speed(ROBOT_ODOMETRY_CONTROLLER_LEFT_PORT, vl_rad_s);
|
||||||
|
@ -100,6 +100,11 @@ void GoToController::turn_degrees(double angle_deg, double v_rad_s) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClosedLoopMotorController::getInstance().set_speed(ROBOT_ODOMETRY_CONTROLLER_RIGHT_PORT, 0);
|
||||||
|
ClosedLoopMotorController::getInstance().set_speed(ROBOT_ODOMETRY_CONTROLLER_LEFT_PORT, 0);
|
||||||
|
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||||
|
|
||||||
ClosedLoopMotorController::getInstance().set_power(ROBOT_ODOMETRY_CONTROLLER_RIGHT_PORT, 0);
|
ClosedLoopMotorController::getInstance().set_power(ROBOT_ODOMETRY_CONTROLLER_RIGHT_PORT, 0);
|
||||||
ClosedLoopMotorController::getInstance().set_power(ROBOT_ODOMETRY_CONTROLLER_LEFT_PORT, 0);
|
ClosedLoopMotorController::getInstance().set_power(ROBOT_ODOMETRY_CONTROLLER_LEFT_PORT, 0);
|
||||||
|
|
||||||
|
|
|
@ -80,10 +80,10 @@ OdometryController::OdometryController() {
|
||||||
current_odometry = Odometry(new_x, new_y, new_theta);
|
current_odometry = Odometry(new_x, new_y, new_theta);
|
||||||
|
|
||||||
|
|
||||||
// spdlog::info("{:03.4f} {:03.4f} {:03.4f} {:03.4f} {:03.4f} {:03.4f}",
|
spdlog::info("{:03.4f} {:03.4f} {:03.4f} {:03.4f} {:03.4f} {:03.4f}",
|
||||||
// current_position_left, current_position_right,
|
current_position_left, current_position_right,
|
||||||
// distance_left, distance_right,
|
distance_left, distance_right,
|
||||||
// dist_forward, dist_rot);
|
v, w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
// GoToGoalController::go_to_point(2, 0, 0.2);
|
// GoToGoalController::go_to_point(2, 0, 0.2);
|
||||||
// GoToController::drive_distance(-4, 0.2);
|
// GoToController::drive_distance(-4, 0.2);
|
||||||
// GoToController::turn_degrees(90, M_PI);
|
// GoToController::turn_degrees(180, M_PI);
|
||||||
// while (true) {
|
// while (true) {
|
||||||
// this_thread::sleep_for(std::chrono::milliseconds(10));
|
// this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||||
// ClosedLoopMotorController::getInstance().set_power(0, 100);
|
// ClosedLoopMotorController::getInstance().set_power(0, 100);
|
||||||
|
@ -50,17 +50,20 @@ int main(int argc, char *argv[]) {
|
||||||
// std::this_thread::sleep_for(std::chrono::seconds(2));
|
// std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||||
// GoToController::drive_distance(-2, 0.3);
|
// GoToController::drive_distance(-2, 0.3);
|
||||||
|
|
||||||
// GoToController::drive_distance(2, 0.2);
|
// while (true) {
|
||||||
// GoToController::turn_degrees(-90, M_PI_2);
|
// GoToController::drive_distance(0.2, 0.4);
|
||||||
|
// GoToController::turn_degrees(90, M_PI_2);
|
||||||
//
|
//
|
||||||
// GoToController::drive_distance(2, 0.2);
|
// GoToController::drive_distance(0.2, 0.4);
|
||||||
// GoToController::turn_degrees(-90, M_PI_2);
|
// GoToController::turn_degrees(90, M_PI_2);
|
||||||
//
|
//
|
||||||
// GoToController::drive_distance(2, 0.2);
|
// GoToController::drive_distance(0.2, 0.4);
|
||||||
// GoToController::turn_degrees(-90, M_PI_2);
|
// GoToController::turn_degrees(90, M_PI_2);
|
||||||
//
|
//
|
||||||
// GoToController::drive_distance(2, 0.2);
|
// GoToController::drive_distance(0.2, 0.4);
|
||||||
// GoToController::turn_degrees(-90, M_PI_2);
|
// GoToController::turn_degrees(90, M_PI_2);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
// ClosedLoopMotorController::getInstance().calibrate_wheel_ticks(10, stoi(argv[1]));
|
// ClosedLoopMotorController::getInstance().calibrate_wheel_ticks(10, stoi(argv[1]));
|
||||||
|
|
||||||
|
|
Reference in a new issue