mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-18 07:43:33 +08:00
rover: replace RX_MAX_THR_YAW_R with a correction factor RO_YAW_RATE_CORR
This commit is contained in:
committed by
chfriedrich98
parent
3e8f054a1c
commit
f35b92a487
@@ -161,7 +161,8 @@ float speedControl(SlewRate<float> &speed_with_rate_limit, PID &pid_speed, const
|
||||
}
|
||||
|
||||
float rateControl(SlewRate<float> &adjusted_yaw_rate_setpoint, PID &pid_yaw_rate, const float yaw_rate_setpoint,
|
||||
const float vehicle_yaw_rate, const float max_thr_yaw_r, const float max_yaw_accel, const float max_yaw_decel,
|
||||
const float vehicle_yaw_rate, const float max_thr_speed, const float yaw_rate_corr, const float max_yaw_accel,
|
||||
const float max_yaw_decel,
|
||||
const float wheel_track, const float dt)
|
||||
{
|
||||
// Apply acceleration and deceleration limit
|
||||
@@ -194,11 +195,11 @@ float rateControl(SlewRate<float> &adjusted_yaw_rate_setpoint, PID &pid_yaw_rate
|
||||
// Transform yaw rate into speed difference
|
||||
float speed_diff_normalized{0.f};
|
||||
|
||||
if (wheel_track > FLT_EPSILON && max_thr_yaw_r > FLT_EPSILON) { // Feedforward
|
||||
const float speed_diff = adjusted_yaw_rate_setpoint.getState() * wheel_track /
|
||||
2.f;
|
||||
speed_diff_normalized = math::interpolate<float>(speed_diff, -max_thr_yaw_r,
|
||||
max_thr_yaw_r, -1.f, 1.f);
|
||||
if (wheel_track > FLT_EPSILON && max_thr_speed > FLT_EPSILON) { // Feedforward
|
||||
const float speed_diff = (adjusted_yaw_rate_setpoint.getState() * wheel_track /
|
||||
2.f) * yaw_rate_corr;
|
||||
speed_diff_normalized = math::interpolate<float>(speed_diff, -max_thr_speed,
|
||||
max_thr_speed, -1.f, 1.f);
|
||||
}
|
||||
|
||||
// Feedback control
|
||||
|
||||
@@ -100,7 +100,8 @@ float speedControl(SlewRate<float> &speed_with_rate_limit, PID &pid_speed, float
|
||||
* @param pid_yaw_rate Yaw rate PID (Updated by this function).
|
||||
* @param yaw_rate_setpoint Yaw rate setpoint [rad/s].
|
||||
* @param vehicle_yaw_rate Measured vehicle yaw rate [rad/s].
|
||||
* @param max_thr_yaw_r Yaw rate turning left/right wheels at max speed in opposite directions [m/s].
|
||||
* @param max_thr_speed Speed at maximum throttle [m/s].
|
||||
* @param yaw_rate_corr Yaw rate correction factor to convert yaw rate to speed difference.
|
||||
* @param max_yaw_accel Maximum allowed yaw acceleration [rad/s^2].
|
||||
* @param max_yaw_decel Maximum allowed yaw deceleration [rad/s^2].
|
||||
* @param wheel_track Distance from the center of the right wheel to the center of the left wheel [m].
|
||||
@@ -108,7 +109,8 @@ float speedControl(SlewRate<float> &speed_with_rate_limit, PID &pid_speed, float
|
||||
* @return Normalized speed difference setpoint [-1, 1].
|
||||
*/
|
||||
float rateControl(SlewRate<float> &adjusted_yaw_rate_setpoint, PID &pid_yaw_rate,
|
||||
float yaw_rate_setpoint, float vehicle_yaw_rate, float max_thr_yaw_r, float max_yaw_accel, float max_yaw_decel,
|
||||
float yaw_rate_setpoint, float vehicle_yaw_rate, float max_thr_speed, float yaw_rate_corr, float max_yaw_accel,
|
||||
float max_yaw_decel,
|
||||
float wheel_track, float dt);
|
||||
|
||||
/**
|
||||
|
||||
@@ -131,6 +131,22 @@ PARAM_DEFINE_FLOAT(RO_YAW_ACCEL_LIM, -1.f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(RO_YAW_DECEL_LIM, -1.f);
|
||||
|
||||
/**
|
||||
* Yaw rate correction factor
|
||||
*
|
||||
* Multiplicative correction factor for the feedforward mapping of the yaw rate controller.
|
||||
* Increase this value (x > 1) if the measured yaw rate is lower than the setpoint, decrease (0 < x < 1) otherwise.
|
||||
* Note: Tuning this is particularly useful for skid-steered rovers, or rovers with misaligned wheels/steering axes
|
||||
* that cause a lot of friction when turning.
|
||||
*
|
||||
* @min 0.01
|
||||
* @max 10000
|
||||
* @increment 0.01
|
||||
* @decimal 2
|
||||
* @group Rover Rate Control
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(RO_YAW_RATE_CORR, 1.f);
|
||||
|
||||
/**
|
||||
* Proportional gain for closed loop yaw controller
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user