PX4-12-飞行任务框架

飞行任务指的是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的飞行任务的大致结构,每个飞行任务内的具体算法就不一一展开了,感兴趣的同学可以自行深入阅读。

我的微信公众号,文章同步更新,欢迎关注。

微信公众号