ArduPilot代码解析之四 — 姿态和位置控制

目的和范围

本页面介绍了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. 计算达到目标所需的加加速度需在加速度限制范围内
  2. 对加速度变化应用加加速度限制
  3. 对加速度进行积分即可得到速度
  4. 对速度进行积分以获得位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timmy-uav

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值