软件架构分层模型
为了清晰地组织代码和功能,无人机软件通常采用分层架构,从上到下可以分为:

(图片来源网络,侵删)
- 应用层
- 中间件/决策层
- 控制层
- 驱动层/硬件抽象层
- 硬件层
各层详细模块解析
应用层
这是最高层的软件,直接与用户交互,负责执行高级任务。
-
通信模块
- 功能: 负责无人机与地面站、遥控器以及其他无人机之间的通信。
- 协议: 常用协议有 MAVLink (最主流)、自定义协议等。
- 数据: 传输遥测数据(位置、速度、电量、姿态等)、控制指令(油门、偏航、滚转、俯仰)、任务指令等。
- 实现: 通常通过串口、Wi-Fi、蓝牙、数传电台等物理接口实现。
-
任务规划与管理模块
- 功能: 解析和执行预设的飞行任务。
- 任务类型: 点对点飞行、航线飞行(航点)、跟随模式、兴趣点环绕、自动起降等。
- 实现: 接收地面站上传的航线(如一系列经纬度坐标),将其分解为一系列的子目标,并传递给导航模块,也可以在无人机上实现简单的任务规划逻辑。
-
用户接口模块
(图片来源网络,侵删)- 功能: 提供人机交互界面。
- 形式:
- 地面站软件: 在电脑或平板上运行的软件,用于显示实时数据、规划航线、配置参数、接收视频流等。
- 遥控器: 物理的遥控设备,用于手动控制无人机。
- 机载显示屏/指示灯: 在无人机本体上显示状态信息。
-
数据记录与日志模块
- 功能: 记录飞行过程中的关键数据,用于事后分析、调试和故障排查。
- : 传感器数据(IMU、GPS)、控制指令、电机PWM值、错误代码等。
- 实现: 数据通常存储在机载SD卡中,格式可以是CSV、Ulog或自定义二进制格式。
中间件/决策层
这一层是无人机的“大脑”,负责处理高级决策和状态管理。
-
状态机模块
- 功能: 管理无人机的整体运行状态,确保状态转换的合法性和安全性。
- 典型状态: 待机、解锁、手动模式、自动模式、失控、紧急着陆、任务结束、上锁等。
- 作用: 状态机确保了在不同模式下,正确的控制模块被激活,在手动模式下,控制指令直接来自遥控器;在自动模式下,控制指令来自导航模块。
-
导航与路径规划模块
(图片来源网络,侵删)- 功能: 根据当前状态和任务目标,规划出一条从当前位置到目标位置的安全、平滑路径。
- 算法: A*、Dijkstra、RRT(快速扩展随机树)等路径搜索算法,结合 Dubins 或 Reeds-Shepp 路径模型进行平滑处理。
- 输入: 当前位置(来自传感器融合模块)、目标位置(来自任务模块)、地图信息(如果有)。
- 输出: 速度或位置指令,传递给姿态控制模块。
-
避障模块
- 功能: 实时检测并规避飞行路径上的障碍物,是安全飞行的关键。
- 传感器: 激光雷达、超声波传感器、双目摄像头、ToF传感器等。
- 实现: 将传感器数据点云进行处理,构建局部地图,然后使用路径规划算法(如VFH Vector Field Histogram)重新规划路径,生成避障指令。
控制层
这一层是无人机的“小脑”,负责实现高精度的稳定飞行和轨迹跟踪,这是无人机控制的核心。
-
传感器融合模块
- 功能: 融合来自多个传感器的数据,得到最准确、最可靠的无人机状态估计(位置、速度、姿态)。
- 传感器:
- IMU (惯性测量单元): 提供加速度计和陀螺仪数据,高频更新,但存在积分漂移。
- GPS (全球定位系统): 提供绝对位置和速度,低频更新,易受干扰。
- 磁力计: 提供航向角(机头朝向),易受磁场干扰。
- 气压计: 提供高度信息,易受气压变化影响。
- 视觉里程计/激光雷达里程计: 提供更精确的局部位置和姿态。
- 算法: 卡尔曼滤波 是最经典和常用的融合算法,尤其是其扩展形式 EKF (Extended Kalman Filter) 和 UKF (Unscented Kalman Filter)。
-
姿态控制器
- 功能: 根据期望的姿态(来自上层指令)和当前的实际姿态(来自传感器融合),计算出维持该姿态所需的电机力矩。
- 结构: 通常是串级PID控制器。
- 外环(位置环): 输入是期望的滚转角/俯仰角,输出是期望的横轴/纵轴角速度。
- 内环(速度环): 输入是期望的角速度,输出是控制电机差速的力矩指令。
- 控制目标: 稳定机身,抵抗风扰。
-
位置控制器
- 功能: 根据期望的位置/速度(来自导航模块)和当前的实际位置/速度(来自传感器融合),计算出期望的姿态。
- 结构: 同样是串级PID控制器。
- 外环(位置环): 输入是期望的经纬度/高度,输出是期望的北向/东向/垂直方向速度。
- 内环(速度环): 输入是期望的速度,输出是期望的滚转角/俯仰角/油门。
- 控制目标: 实现精确的悬停和轨迹跟踪。
-
混合控制器
- 功能: 这是更高级的控制方法,直接将位置/速度指令映射到电机输出,无需先解算出姿态,它将位置控制和姿态控制解耦,性能更好,实现更复杂,常用于高性能竞速无人机或需要精确轨迹控制的无人机。
驱动层/硬件抽象层
这一层是软件与硬件之间的桥梁,提供了统一的接口。
-
传感器驱动
- 功能: 驱动具体的硬件传感器,如MPU6050 (IMU), Ublox (GPS), BMP280 (气压计) 等。
- 实现: 通过I2C, SPI, UART等总线协议与传感器通信,读取原始数据并进行初步校准。
-
电机驱动
- 功能: 接收来自控制器的PWM(脉冲宽度调制)信号,并将其转换为驱动电机的功率。
- 实现: 通常通过电子调速器 实现,软件生成50Hz的PWM信号,其脉宽(通常在1000-2000us之间)决定了电机的转速。
-
PWM/GPIO驱动
- 功能: 控制通用的输入输出引脚,用于读取遥控器信号、控制LED灯、读取按钮状态等。
硬件层
这是物理实体,包括所有电子元件和机械结构。
- 核心计算单元: 主控板,如STM32系列、NXP系列处理器,或运行Linux的树莓派/Jetson Nano。
- 传感器: IMU, GPS, 摄像头, 激光雷达等。
- 执行器: 无刷电机, 螺旋桨, 电子调速器。
- 通信模块: 数传, Wi-Fi模块, 蓝牙模块。
- 电源: 锂电池, 电源管理模块。
开发框架与示例
- PX4 Autopilot: 目前最流行、功能最全的开源飞控软件栈,它本身就实现了上述大部分模块,提供了强大的固件和地面站软件QGroundControl,开发者可以在其基础上进行二次开发。
- ArduPilot: 另一个主流的开源飞控项目,历史更悠久,支持的平台和机型非常广泛。
- ROS (Robot Operating System): 在研究和开发中非常流行,开发者可以将上述的各个模块(如导航、避障、通信)封装成ROS的节点,通过话题进行通信,便于模块化开发和算法验证。
一个完整的四旋翼无人机软件系统是一个高度集成的复杂系统,各模块之间紧密协作,形成一个从感知(传感器) -> 估计(融合) -> 决策(导航/避障) -> 控制(PID) -> 执行(电机)的完整闭环,理解这些模块的功能和它们之间的数据流向,是进行无人机软件开发、调试和优化的基础。
标签: 四旋翼无人机软件模块协同优化 无人机多模块高效协同实现 四旋翼软件模块协同控制技术
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。