pixhawk软件架构



平台支持

PX4飞控固件不针对特定的车辆/机体模型进行开发,所以支持的平台的数量是无限的。目前主要有多旋翼、固定翼、垂直起降三类机型的固件。

软件结构

可分为三大部分:实时操作系统、中间件和飞行控制栈

1.Nuttx实时操作系统

         提供POSIX-style的用户操作环境(printf(), pthreads,/dev/ttyS1,open(),write(),poll(),ioctl()),进行底层的任务调度。

2.中间件

         pixhawk中间件运行于操作系统之上,提供设备驱动和一个微对象请求代理micro object request broker uORB)用于飞控上运行的单个任务之间的异步通信

3.飞行控制栈

         飞行控制栈可以使用pixhawk的控制软件栈,也可以使用其他的控制软件,如APM:PlaneAPM:Copter,但必须运行于PX4中间件之上。

飞控软件设计

飞行控制需要可靠的定时和清晰的优先级。通过使用多线程操作系统和运行高效的驱动程序与中断优先级的正确调度可以保证控制循环执行。如果一个运行较慢的循环,需要更长的时间来处理,飞控系统并没有丢失。新的控制应用程序也可以添加,而不需要把应用程序加在主循环中。pixhawk软件架构

模块设计

在每一层,每个驱动程序或控制器/状态估计程序都是一个独立模块,能够在运行期间互相通信。 这种清晰和模块化的设计不仅有助于支持更多机型(因为不存在特定机型的主循环),同时使得代码具有高度的可移植性。pixhawk软件架构

Publish / Subscribe设计模式ORB

飞控中每个进程都可以通过Publish/Subscribe模式与其他进程以及驱动进行连接。该模式允许进程在无锁模式下通信,或者简化添加一个新的进程/应用,有很显著的效果。pixhawk软件架构

飞行器上应用程序列表

以下应用程序随着在系统运行启动,其他的应用程序可以通过NuttShell命令来启动。为了得到完整的应用程序列表,可以在shell终端中输入help指令。另外可以在终端中输入top或者ps 命令来确定哪个当前哪个应用程序正在运行。

应用程序随着在系统启动时自动运行,所有的程序都记录在系统启动记录页面上。

shell命令

下面的是部分nuttshell命令。

显示帮助信息

free–显示内存的使用情况

kill–终止一个进程

LS–目录列表

系统命令程序

mavlink 通过串口发送和接收mavlink信息

sdlog2 保存系统日志/飞行数据到SD

tests  测试系统中的测试程序

top 列出当前的进程和CPU负载

uORB – 微对象请求代理器分发其他应用程序之间的信息

驱动

mkblctrl–blctrl电子模块驱动

esc_calib –ESC的校准工具

fmu –FMU引脚输入输出定义

gpio_led –GPIO LED驱动

gps –GPS接收器驱动

pwm –PWM的更新速率命令

sensors 传感器应用

px4io –px4io驱动

uavcan –uavcan驱动

飞行控制的程序

飞行安全和导航

commander 主要飞行安全状态机

navigator 任务,失效保护和RTL导航仪

估计姿态和位置

attitude_estimator_ekf 基于EKF的姿态估计

ekf_att_pos_estimator 基于EKF的姿态和位置估计

position_estimator_inav惯性导航的位置估计

multirotor姿态和位置控制器

mc_att_control–multirotor姿态控制器

mc_pos_control –multirotor位置控制器

fixedwing姿态和位置控制器

fw_att_control 固定翼飞机的姿态控制

fw_pos_control_l1 固定翼位置控制器

垂直起降姿态控制器

vtol_att_control 垂直起降姿态控制器

Published by

风君子

独自遨游何稽首 揭天掀地慰生平