飞行任务指的是PX4的modules/flight_mode_manager组件,用于控制指令平滑。PX4的FlightTask框架设计还是比较有趣的,不论从软件架构还是控制算法方面,都是值得好好学习的代码框架。
我们在 PX4-9-控制数据流 文章的控制数据流图中讲到了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的飞行任务的大致结构,每个飞行任务内的具体算法就不一一展开了,感兴趣的同学可以自行深入阅读。
图表采用plantuml绘制,关注我的公众号,在下方留言 PX4飞行任务 可以获取图表的源码。
往期分享:
AcmeGCS-12-地图与任务规划优化
AcmeIot-3-在嵌入式设备中运行ROS2
PX4-11-日志框架与常用日志消息
这里会不定期更新一些我整理的无人机相关知识,欢迎关注分享。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)