Contents — find the section you need

ArduPilot 并非仅适用于无人机的“自动驾驶应用程序”。从固定翼飞机(Plane)、多旋翼飞行器(Copter)到地面车辆(Rover),甚至潜水器/船舶(混合配置),它都是一个嵌入式平台,能够读取传感器数据、评估状态、发出执行器指令,并在发生故障时切换到安全状态。在操控飞行器之前,必须全面了解状态评估、控制、通信、电源和地面站,将其视为一个完整的安全保障。

Skydio X2D 无人机用于飞机检查自主飞行器示例

图片:Skydio X2D 检查飞机(Mauricio Campino,公共领域),Wikimedia Commons。并非 ArduPilot 飞行器;它用于说明机载计算和自主飞行场景。

30 秒概要

  • ArduPilot 通过扩展卡尔曼滤波器 (EKF) 融合惯性测量单元 (IMU)、全球导航卫星系统 (GNSS)、磁力计、气压计和测距仪数据,以估计姿态、速度、位置和偏差。

  • 旋翼机侧重于推力分配和姿态控制,平面飞机侧重于空气动力学和能量管理,漫游车侧重于轮式/转向和路径跟踪——它们的参数并不相同。

  • 内部角速率/姿态控制环路以高频率运行,而外部位置/速度/任务控制环路生成目标。请在实际飞行器上验证 PID 参数及其单位。

  • MAVLink 是连接飞行器与地面站、配套计算机和外围设备的通信协议。通信中断、低电压、GNSS 信号丢失和地理围栏入侵等情况均通过故障保护机制进行处理。

  • 测试分阶段进行:SITL(系统集成测试)、日志回放、拆除螺旋桨的台架测试、系留测试和低空测试。即使仿真成功,实际飞行器的振动、电磁噪声和电源电压下降等问题也需要单独解决。

1. 架构

Diagram 1 · Use the button to switch views
SensorsIMU / GNSSMag / BaroRange / Voltage EKF3Attitude/position est.Bias / qualityInnovation check Attitude/rate control Mixer / output MotorsServosVehicle motion MAVLink / GCS100–1000 Hz estimation and control

图 1 — 传感器数据通过扩展卡尔曼滤波器 (EKF) 进行融合;内部姿态/速度控制回路驱动混频器,混频器的输出控制电机和伺服机构。MAVLink 构成与地面站和外部计算机的边界。

飞行器的主回路按固定周期处理传感器数据采集、估计、控制、输出、通信和日志记录。高采样率的惯性测量单元 (IMU) 数据用于预测姿态,而全球导航卫星系统 (GNSS)、磁力计、气压计和外部视觉则提供低采样率的修正。当估计质量下降时,控制器不会继续追踪目标,而是切换到安全操作——保持、返航或着陆。

2. 基于扩展卡尔曼滤波器 (EKF) 的状态估计

一个状态向量示例为:位置 p、速度 v、姿态 R 和陀螺仪/加速度计偏差 b_g,b_a。预测值来自惯性测量单元 (IMU),更新值来自外部观测。

\dot p=v,\qquad \dot v=R(a_m-b_a-n_a)+g,
\dot R=R[\omega_m-b_g-n_g]_{\times}

其中,a_m,\omega_m 为测量值,g 为重力,[\cdot]_{\times} 为叉积矩阵。EKF 传播协方差 P,并在观测残差(新息)超出预期范围时暂时拒绝该传感器——这是一种避免盲目接受磁干扰或多径 GNSS 的机制。

车辆振动会给加速度计增加高频成分,从而影响估计和控制的稳定性。需要从机械和软件两方面调整机架刚度、螺旋桨平衡、阻尼器和滤波器延迟。将日志中的振动频谱与同一时间戳的扩展卡尔曼滤波器 (EKF) 创新点叠加,可以更轻松地找出振动原因。

3. 旋翼机、固定翼飞机和漫游车的控制

旋翼机

多旋翼飞行器通过总推力 T 和每个电机的转速产生姿态扭矩。大约,

T=k_f\sum_i\omega_i^2,\qquad \tau_z=k_m(\omega_1^2-\omega_2^2+\cdots)

混控器将横滚、俯仰、偏航和油门需求分配到每个电机上。在姿态角回路之外,还有一个速度/位置回路,用于监测推力裕度以应对风和有效载荷的变化。

固定翼飞机

固定翼飞机利用机翼的升力和阻力、空速、迎角和能量状态进行飞行。它通过横滚角转向,并通过俯仰角调整速度/高度,因此无法直接复用多旋翼飞行器的增益。自动着陆需要进行专门的测试,以考虑风、跑道和传感器延迟等因素。

漫游车

漫游车融合了轮速、转向角、GNSS、罗盘、激光雷达和类似传感器的数据,以跟踪航点和速度目标。由于车轮打滑和坡度会影响航位推算,因此协方差和重定位的设计方式与robotics-dead-reckoning文章中介绍的里程计相同。

4. 任务和MAVLink

任务是一系列指令——航点、速度、高度、相机触发、着陆等等。MAVLink是一种小型二进制消息协议,用于交换心跳(HEARTBEAT)、位置、姿态、参数、任务数据和指令确认。SITL和地面站通过UDP连接;在实际硬件上,必须评估无线电链路的延迟、带宽、加密和认证。

在自动化任务时,未经确认不得执行下一个指令。定义确认 (ACK)、超时、重试、取消以及断电重启后的恢复位置。通信绝不应成为控制的单点故障——设计时应确保即使地面站断开连接,飞行器也能安全返回并着陆。

5. 故障保护和安全测试

检测低电压、遥控链路丢失、GNSS 信号质量下降、扩展卡尔曼滤波器 (EKF) 故障、地理围栏越界和电机故障,并切换到适合飞行器类型的行为。旋翼机的“返回起飞”并非总是安全的选择——在强风、障碍物附近或返航位置未确认的情况下,着陆或悬停可能更合适。一旦设定了阈值,应在低风险环境下实际测试跨越这些阈值的情况。

测试应分阶段进行:SITL(系统集成测试)→硬件在环测试→移除螺旋桨→系绳测试→低空测试→运行高度测试。运行记录故障注入测试——突然断电、屏蔽GNSS天线、切断通信、移除单个传感器。飞行许可、当地航空法规、隐私和无线电法规与任何其他技术要求一样重要。

6. 参数调整建议顺序

  1. 确认传感器方向、校准、时序和供电电压。

  2. 在飞行器固定的情况下,测量陀螺仪/加速度计/罗盘的偏差和振动。

  3. 从小增益开始调整内部姿态环,注意饱和和振荡。

  4. 添加速度/位置/高度环,并在不同风速和有效载荷下评估跟踪性能。

  5. 运行完整的端到端任务测试,包括故障保护、重启和日志记录。

如果螺旋桨、转动惯量、推力裕度或采样周期不同,从另一架飞行器复制增益值无法保证稳定性。将目标值、测量值、输出饱和度和创新值叠加在日志中,以确定哪个回路引入了延迟。

7. 当前应用和研究

ArduPilot 已应用于多个领域,涉及多种类型的飞行器,例如农业喷洒、测绘、灾害评估、研究型垂直起降飞行器和自主航行器。某些配置通过 MAVLink 从配套计算机发送目标值,并将 ROS 2 或计算机视觉估计作为辅助观测值输入。目前,视觉导航、多传感器故障诊断、基于学习的风力估计和多飞行器协同等方面的研究正在取得进展,但最佳实践仍然是确保最终输出能够通过现有的限制和故障保护机制。

总结

ArduPilot 的核心在于将传感器融合、分层控制、任务执行、通信和故障保护机制整合到一个嵌入式系统中。在编写控制车辆移动的代码之前,请先指定估计的状态和坐标系、控制周期、输出限制以及故障时的转换。利用系统集成生命周期管理 (SITL) 和日志,并在真实车辆上仔细进行安全测试。开源软件能够帮助项目从研究阶段过渡到实际运行阶段。

检查你的理解
输入路线是否足以实现自主飞行?

车辆设置、估计、控制和故障保护必须协同工作。

将航线规划与执行命令的条件分开。

参考资料

What to read next

Review the background液压系统入门——从帕斯卡原理到机器人力控制Continue the series群体控制(多机器人)入门——构建集群、队形和共识Explore another aspect of this fieldICP 失败的原因:初始化、异常值和对称几何