mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-26 09:26:25 +08:00
add FF to FW rate controllers
This commit is contained in:
committed by
Mathieu Bresciani
parent
55f0860c31
commit
6af0856558
@@ -80,7 +80,7 @@ public:
|
||||
virtual ~ECL_Controller() = default;
|
||||
|
||||
virtual float control_attitude(const float dt, const ECL_ControlData &ctl_data) = 0;
|
||||
virtual float control_euler_rate(const float dt, const ECL_ControlData &ctl_data) = 0;
|
||||
virtual float control_euler_rate(const float dt, const ECL_ControlData &ctl_data, float bodyrate_ff) = 0;
|
||||
virtual float control_bodyrate(const float dt, const ECL_ControlData &ctl_data) = 0;
|
||||
|
||||
/* Setters */
|
||||
|
||||
@@ -111,11 +111,11 @@ float ECL_PitchController::control_bodyrate(const float dt, const ECL_ControlDat
|
||||
return math::constrain(_last_output, -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
float ECL_PitchController::control_euler_rate(const float dt, const ECL_ControlData &ctl_data)
|
||||
float ECL_PitchController::control_euler_rate(const float dt, const ECL_ControlData &ctl_data, float bodyrate_ff)
|
||||
{
|
||||
/* Transform setpoint to body angular rates (jacobian) */
|
||||
_bodyrate_setpoint = cosf(ctl_data.roll) * _rate_setpoint +
|
||||
cosf(ctl_data.pitch) * sinf(ctl_data.roll) * ctl_data.yaw_rate_setpoint;
|
||||
cosf(ctl_data.pitch) * sinf(ctl_data.roll) * ctl_data.yaw_rate_setpoint + bodyrate_ff;
|
||||
|
||||
set_bodyrate_setpoint(_bodyrate_setpoint);
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ public:
|
||||
~ECL_PitchController() = default;
|
||||
|
||||
float control_attitude(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
float control_euler_rate(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
float control_euler_rate(const float dt, const ECL_ControlData &ctl_data, float bodyrate_ff) override;
|
||||
float control_bodyrate(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
|
||||
/* Additional Setters */
|
||||
|
||||
@@ -108,10 +108,10 @@ float ECL_RollController::control_bodyrate(const float dt, const ECL_ControlData
|
||||
return math::constrain(_last_output, -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
float ECL_RollController::control_euler_rate(const float dt, const ECL_ControlData &ctl_data)
|
||||
float ECL_RollController::control_euler_rate(const float dt, const ECL_ControlData &ctl_data, float bodyrate_ff)
|
||||
{
|
||||
/* Transform setpoint to body angular rates (jacobian) */
|
||||
_bodyrate_setpoint = ctl_data.roll_rate_setpoint - sinf(ctl_data.pitch) * ctl_data.yaw_rate_setpoint;
|
||||
_bodyrate_setpoint = ctl_data.roll_rate_setpoint - sinf(ctl_data.pitch) * ctl_data.yaw_rate_setpoint + bodyrate_ff;
|
||||
|
||||
set_bodyrate_setpoint(_bodyrate_setpoint);
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
~ECL_RollController() = default;
|
||||
|
||||
float control_attitude(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
float control_euler_rate(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
float control_euler_rate(const float dt, const ECL_ControlData &ctl_data, float bodyrate_ff) override;
|
||||
float control_bodyrate(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
};
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
|
||||
float control_bodyrate(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
|
||||
float control_euler_rate(const float dt, const ECL_ControlData &ctl_data) override { (void)ctl_data; return 0; }
|
||||
float control_euler_rate(const float dt, const ECL_ControlData &ctl_data, float bodyrate_ff) override { (void)ctl_data; return 0; }
|
||||
};
|
||||
|
||||
#endif // ECL_HEADING_CONTROLLER_H
|
||||
|
||||
@@ -142,11 +142,11 @@ float ECL_YawController::control_bodyrate(const float dt, const ECL_ControlData
|
||||
return math::constrain(_last_output, -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
float ECL_YawController::control_euler_rate(const float dt, const ECL_ControlData &ctl_data)
|
||||
float ECL_YawController::control_euler_rate(const float dt, const ECL_ControlData &ctl_data, float bodyrate_ff)
|
||||
{
|
||||
/* Transform setpoint to body angular rates (jacobian) */
|
||||
_bodyrate_setpoint = -sinf(ctl_data.roll) * ctl_data.pitch_rate_setpoint +
|
||||
cosf(ctl_data.roll) * cosf(ctl_data.pitch) * _rate_setpoint;
|
||||
cosf(ctl_data.roll) * cosf(ctl_data.pitch) * _rate_setpoint + bodyrate_ff;
|
||||
|
||||
set_bodyrate_setpoint(_bodyrate_setpoint);
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
~ECL_YawController() = default;
|
||||
|
||||
float control_attitude(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
float control_euler_rate(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
float control_euler_rate(const float dt, const ECL_ControlData &ctl_data, float bodyrate_ff) override;
|
||||
float control_bodyrate(const float dt, const ECL_ControlData &ctl_data) override;
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user