平台支持
PX4飞控固件不针对特定的车辆/机体模型进行开发,所以支持的平台的数量是无限的。目前主要有多旋翼、固定翼、垂直起降三类机型的固件。
软件结构
可分为三大部分:实时操作系统、中间件和飞行控制栈。
1.Nuttx实时操作系统
提供POSIX-style的用户操作环境(如printf(), pthreads,/dev/ttyS1,open(),write(),poll(),ioctl()),进行底层的任务调度。
2.中间件
pixhawk中间件运行于操作系统之上,提供设备驱动和一个微对象请求代理(micro object request broker ,uORB)用于飞控上运行的单个任务之间的异步通信。
3.飞行控制栈
飞行控制栈可以使用pixhawk的控制软件栈,也可以使用其他的控制软件,如APM:Plane、APM:Copter,但必须运行于PX4中间件之上。
飞控软件设计
飞行控制需要可靠的定时和清晰的优先级。通过使用多线程操作系统和运行高效的驱动程序与中断优先级的正确调度可以保证控制循环执行。如果一个运行较慢的循环,需要更长的时间来处理,飞控系统并没有丢失。新的控制应用程序也可以添加,而不需要把应用程序加在主循环中。
模块设计
在每一层,每个驱动程序或控制器/状态估计程序都是一个独立模块,能够在运行期间互相通信。 这种清晰和模块化的设计不仅有助于支持更多机型(因为不存在特定机型的主循环),同时使得代码具有高度的可移植性。
Publish / Subscribe设计模式ORB
飞控中每个进程都可以通过Publish/Subscribe模式与其他进程以及驱动进行连接。该模式允许进程在无锁模式下通信,或者简化添加一个新的进程/应用,有很显著的效果。
飞行器上应用程序列表
以下应用程序随着在系统运行启动,其他的应用程序可以通过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 –垂直起降姿态控制器