目的和范围
本页面介绍了ArduPilot用于姿态(方向)和位置管理的级联控制架构。它解释了如何通过一系列控制回路将高级位置指令转换为电机输出,这些控制回路逐步细化期望状态,顺序为:位置→速度→加速度→姿态→角速率→电机指令。
控制架构概述
ArduPilot 采用级联控制系统,每一层都接收高层指令,并将其逐步转换为更低层级的目标。这种架构既能提供稳健的控制,又能实现平滑的轨迹跟踪。

主要特点:
- 级联循环:每一层都接收来自上一层的目标值,并向下一层提供修正值。
- 前馈:期望值直接传递,同时在每个阶段添加修正值。
- 运动学整形:通过速度、加速度和加加速度限制来整形位置指令,以实现平滑的轨迹。
- 解耦控制:水平轴 (NE) 和垂直轴 (U) 采用不同的增益独立控制。
位置控制 (AC_PosControl)
该类AC_PosControl实现了三维位置控制,具有独立的水平(东北平面)和垂直(上轴)控制器。每个轴都采用级联控制结构:位置误差驱动速度控制器,速度控制器再驱动加速度控制器。
级联控制结构

关键控制器类
| 控制器 | 类型 | 输入 | 输出 | 目的 |
|---|---|---|---|---|
_p_pos_ne_m |
AC_P_2D | 位置误差(米) | 速度目标(米/秒) | 将水平位置误差转换为速度指令 |
_pid_vel_ne_cm |
AC_PID_2D | 速度误差(厘米/秒) | 加速度目标值(厘米/秒²) | 将水平速度误差转换为加速度 |
_p_pos_u_m |
AC_P_1D | 垂直位置误差(米) | 速度目标(米/秒) | 将高度误差转换为爬升率 |
_pid_vel_u_cm |
AC_PID_Basic | 垂直速度误差(厘米/秒) | 加速度目标值(厘米/秒²) | 将爬升率误差转换为垂直加速度 |
_pid_accel_u_cm_to_kt |
AC_PID | 垂直加速度误差(厘米/秒²) | 油门输出 | 将垂直加速度转换为油门指令 |
输入整形和运动学路径生成
它不接受原始位置指令,而是AC_PosControl通过可配置的速度、加速度和加加速度限制来实现运动学路径整形。这确保了平滑的轨迹,避免了突变。
核心输入功能:

成形函数(位于库/AC_AttitudeControl/AC_PosControl.cpp2413-2682计算平滑轨迹的方法如下:
- 计算达到目标所需的加加速度需在加速度限制范围内
- 对加速度变化应用加加速度限制
- 对加速度进行积分即可得到速度
- 对速度进行积分以获得位置


1万+

被折叠的 条评论
为什么被折叠?



