P:
|-------------|---|---|---|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| PSC_D_POS_P | 1 | 1 | | 0.50 4.00 | Position (vertical) controller P gain. Converts the difference between the desired altitude and actual altitude into a climb or descent rate which is passed to the throttle rate controller. Previously _POSZ_P. |
|-------------|---|---|---|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| PSC_D_VEL_P | 5 | 5 | | 1.0 10.0 | Velocity (vertical) controller P gain. Converts the difference between desired vertical speed and actual speed into a desired acceleration that is passed to the throttle acceleration controller. Previously _VELZ_P. |
|-------------|------|------|---|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| PSC_D_ACC_P | 0.05 | 0.05 | | 0.010 0.250 | Acceleration (vertical) controller P gain. Converts the difference between desired vertical acceleration and actual acceleration into a motor output. If upgrading from 4.6 this is _ACCZ_P * 0.1. |
pid的算法函数在
// Runs the vertical (U-axis) position controller.
// Computes output acceleration based on position and velocity errors using PID correction.
// Feedforward velocity and acceleration are combined with corrections to produce a smooth vertical command.
// Desired position, velocity, and acceleration must be set before calling.
void AC_PosControl::D_update_controller()
{
// check for ekf z-axis position reset
D_handle_ekf_reset();
// Check for z_controller time out
if (!D_is_active()) {
D_init_controller();
if (has_good_timing()) {
// call internal error because initialisation has not been done
INTERNAL_ERROR(AP_InternalError::error_t::flow_of_control);
}
}
_last_update_d_ticks = AP::scheduler().ticks32();
| 参数名称 | 所属控制器(类成员变量) | 核心作用 |
|---|---|---|
PSC_D_POS_P |
位置环 (P Controller) 对应代码中的 _p_pos_d_m |
将位置误差转换为期望速度,代码为 _p_pos_d_m.update_all() |
PSC_D_VEL_P |
速度环 (PID Controller) 对应代码中的 _pid_vel_d_m |
将速度误差转换为期望加速度,代码为 _pid_vel_d_m.update_all() |
PSC_D_ACC_P |
加速度环 (PID Controller) 对应代码中的 _pid_accel_d_m |
将加速度误差转换为电机推力(油门),代码为 _pid_accel_d_m.update_all() |
