如前所述commander的作用主要处理各种事件,调度控制系统的运行,事件包括遥控输入、用户指令、状态变更等。调度的作用主要设置控制系统运行的变量和模式,以使控制系统按照用户期望的模式运行,实现不同的控制功能。控制系统主要由navigator,pos_control,att_control构成。这里引用的是PX4略早期的一个版本,不同版本的PX4处理流程略有不同,整体框架大致上应该是一样的。


commander的处理在commander.cpp中的Commander::run()函数中实现
在这里插入图片描述
在进行一系列的初始化程序之后,进入一个while循环,这个while循环为commander的工作流程。按照一定频率运行,每一个循环依次检查各种事件和信息,进行处理。每一个循环的主要处理流程如下所示。其中右边文字备注了对应的处理以及相关的状态和标志位。
在这里插入图片描述
进行的顺序为
1 参数更新(param update),检查已有的参数更新,如有更新则进行相应的处理
2 检查电源按钮状态(power button check),如果检测到按下状态,则执行关闭系统(shutdown)
3 更新手动输入(manual input),主要是用户通过遥控器(Radio Controller)的输入
4 离线控制检查(offboard control check),离线控制指通过上位机发送到飞控板的控制指令
5 数据通道检测(telemetry status check),检查所有的数据链通道
6 飞行检查(flight check),主要检查传感器(加速度计、陀螺仪、气压计等)的状态,设置对应的标志位(flag)
7 系统供电检查(system power check),这里主要是飞控板的供电检查
8 安全检查,这里主要检查ekf的输出安全性,如果通过则把arming state切换到standby
9 更新位置信息(position update)
10 位置准确性检查(position accuracy check)
11 着陆检查(land detect check)
12 CPU载荷检查(cpuload check)
13 电池状态检查(battery status check)
在这里插入图片描述
13 子系统检查(subsystem check),子系统包括传感器等
14 电机状态(arming state)从init切换到standby,standy状态允许电机启动
15 任务结果处理(mission result handle)
16 地理栅栏更新与处理(geofence update & handle)
17 摇杆拨动处理(stick move handle)
18 任务飞行结束检查(mission flight termination check)
19 遥控输入处理(rc input check & handle)
在这里插入图片描述
20 数据链检查(datalink check)
21 电机故障检查(actuator failure detect)
22 起飞完成处理(takeoff complete handle),起飞完成后切换到auto mission或auto loiter状态
23 遥控失联处理(rc signal lost handle),飞行状态切换到loiter
24 命令检查和处理(command check & handle),处理用户指令
25 故障检查(failure check)
26 返航位置检查和更新(home position check & update)
在这里插入图片描述
27 设置导航模式(set nav_state)
28 设置控制模式(set control_mode)
29 播放音调(play tunes),根据状态、发生的事件播放对应的音调
30 闪烁指示灯(blink LEDs),根据飞行器状态按对应模式闪烁指示灯


其中主要的处理任务用黄色的方框进行表示。