飞行任务指的是PX4的modules/flight_mode_manager组件,用于控制指令平滑。PX4的FlightTask框架设计还是比较有趣的,不论从软件架构还是控制算法方面,都是值得好好学习的代码框架。
我们在 PX4-9-控制数据流.md 文章的控制数据流图中讲到了FlightTask,从图中可以发现FlightTask在PX4的控制流中发挥的作用。这里我们更加深入的分析以下FlightTask的框架。
我们从类的继承关系和任务切换流程两方面来分析PX4的FlightTask框架。
类的继承关系
PX4的飞行任务类包括以下几类:
enum class FlightTaskIndex : int {
None = -1,
AutoFollowMe,
AutoLineSmoothVel,
Descend,
Failsafe,
ManualAcceleration,
ManualAltitude,
ManualAltitudeSmoothVel,
ManualPosition,
ManualPositionSmoothVel,
Transition,
Orbit,
Count // number of tasks
};
与上图的类的继承关系对应,分别用于处理自主跟随、自主飞行、降落、故障保护、手动飞行、飞行模型切换等状态下的控制指令平滑等。
任务切换流程
PX4在FlightModeManager.cpp中对各个飞行任务进行初始化、运行与切换。其流程如图:
以上为PX4的飞行任务的大致结构,每个飞行任务内的具体算法就不一一展开了,感兴趣的同学可以自行深入阅读。
–
我的微信公众号,文章同步更新,欢迎关注。