前言
最近有着手 Ardupilot 开源代码中 Arduplane 的相关项目,将官方网址关于 Arduplane 的架构介绍(Plane Architecture Overview — Dev documentation)翻译了一下,以供交流学习。
本页试图粗略地展示 ArduPlane 的架构。请注意它不是由 Plane 专家编写的,所以可能有一些不准确的地方。
以上是 ArduPlane 架构的高层图。Plane 与 Copter 和 Rover 之间的一个很大的区别是飞行模式没有被组织到一个单一的文件中(like they are in Copter)或类中(like they are in Rover)。相反,代码路径要经过几个阶段。每个阶段都会根据飞行模式决定它应该做什么。
这些阶段可以在上图中看到,包括:
ahrs_update:调用EKF来消耗最新的传感器数据,并产生一个姿态和位置估算;
read_radio:读取飞行员的输入并计算出适当的姿态或位置目标;
navigate:调用L1和TECS控制器(见下文),为横滚、俯仰和油门控制器转换位置目标;
update_flight_mode:将L1控制器的横滚和俯仰目标复制到 nav_roll_cd 和 nav_pitch_cd 全局变量中;
stabilize:执行低级别的横滚、俯仰和油门控制器;
set_servos:将横滚、俯仰和油门控制器的输出发送到适当的伺服输出。
固定翼控制器
固定翼有2个高级控制器和至少3个低级控制器,如下图所示。
L1 控制器将原点和目的地(分别以经纬度表示)转换为横向加速度,使无人机沿原点到目的地的路径水平行驶。
TECS(总能量守恒系统)控制无人机的动能(即速度)和势能(即高度)之间的交换。它的输入是目标速度和高度,它试图通过计算目标油门和俯仰值来达到这些目标,然后将这些值传递给低级俯仰和油门控制器
总结
以上就是 Arduplane 的代码架构,清晰明了,方便入门使用。