# 飞行任务

飞行任务 内使用 飞行模式 提供特定的运动行为:如跟随我或平滑飞行。

# 概述

飞行任务是飞行任务框架中的一个类,由基类 飞行任务 (打开新窗口).它的目标是根据任意输入数据为控制器生成设定点,其中每个任务都为特定模式实现所需的载具行为。程序员通常会覆盖 激活()更新() 虚拟方法,方法是调用基本任务的最小实现,然后用所需行为的实现进行扩展。虚拟方法 激活() 方法在切换到任务时被调用,该方法允许初始化任务状态,并从上一个任务刚刚应用的已传递设定点中轻轻接管任务。

更新() 在执行过程中的每次循环迭代中都会被调用,其中包含产生设定点的核心行为执行。

按照惯例,任务包含在 PX4-Autopilot/src/modules/flight_mode_manager/tasks (打开新窗口) 以任务命名,源文件则以"FlightTask"前缀命名。

备注

PX4 开发人员峰会的视频概述如下 提供如下.

# 创建飞行任务

下面的说明可用于创建名为 我的任务:

  1. 为新飞行任务创建一个目录,位于 PX4-Autopilot/src/modules/flight_mode_manager/tasks (打开新窗口).按照惯例,该目录以任务命名,因此我们将其称为 /我的任务.

    mkdir PX4-Autopilot/src/modules/flight_mode_manager/tasks/MyTask
    
  2. 创建空源代码并 cmake 中新飞行任务的文件 我的任务 目录,使用前缀"FlightTask":

    • CMakeLists.txt
    • FlightTaskMyTask.hpp
    • FlightTaskMyTask.cpp
  3. 更新 CMakeLists.txt 为新任务

    • 复制 CMakeLists.txt 用于另一项任务,例如 Orbit/CMakeLists.txt (打开新窗口)
    • 将版权更新为当年
      ############################################################################
      #
      # 版权 (c) 2021 年 PX4 开发团队。保留所有权利。
      #
      
    • 修改代码以反映新任务,例如替换 飞行任务轨道FlightTaskMyTask.代码将如下所示:
      px4_add_library(FlightTaskMyTask FlightTaskMyTask.cpp
      )
      
      目标链接库(FlightTaskMyTask 公众 飞行任务)
      目标包含目录(FlightTaskMyTask 公众 ${cmake_current_source_dir})
      
  4. 更新头文件(此处为 FlightTaskMyTask.hpp):大多数任务重新实现虚拟方法 激活()更新()在这个例子中,我们还有一个私有变量。

    #实用程序 一次
    
    #包括 "FlightTask.hpp";
    
     FlightTaskMyTask :  飞行任务
    {
    :
      FlightTaskMyTask() = 默认;
      虚拟 ~FlightTaskMyTask() = 默认;
    
      bool 更新();
      bool 启动(载具本地位置设置点 last_setpoint_s);
    
    私人:
      浮动 _原产地_z{0.f};
    };
    
  5. 适当更新 cpp 文件。本例提供了 FlightTaskMyTask.cpp 表示任务方法已被调用。

    #包括 "FlightTaskMyTask.hpp";
    
    bool FlightTaskMyTask::启动(载具本地位置设置点 last_setpoint_s)
    {
      bool 重新 = 飞行任务::启动(last_setpoint);
      PX4_INFO("已调用 FlightTaskMyTask 激活!返回:%d";, 重新); // 报告激活是否成功
      返回 重新;
    }
    
    bool FlightTaskMyTask::更新()
    {
      PX4_INFO(调用了 FlightTaskMyTask 更新!";); // 报告更新
      返回 ;
    }
    
  6. 将新任务添加到待建任务列表中 PX4-Autopilot/src/modules/flight_mode_manager/CMakeLists.txt (打开新窗口):

    list(APPEND flight_tasks_too_add Orbit MyTask )
    
  7. 更新飞行模式,确保任务被调用。通常使用一个参数来选择何时使用特定的飞行任务。

    例如,为了使我们的新 我的任务 在多旋翼定位模式下:

    • 更新 MPC_POS_MODE (mc_pos_control_params.c (打开新窗口)) 添加一个选项,以便在参数有像 5 这样的未使用值时选择 "我的任务":
      ...* @value 4 基于加速度的输入 * @value 5 MyTask 位置模式实现 * @group Multicopter Position Control */ PARAM_DEFINE_INT32(MPC_POS_MODE, 4);
      
    • 在参数的开关中为新选项添加一个案例 FlightModeManager.cpp (打开新窗口) 时启用该任务 参数 MPC_pos_mode 具有正确的值。
      ...
      // 手动位置控制
      ...
      开关 (参数 MPC_pos_mode.获取()) {
        ...
        个案 3:
           错误 = 切换任务(飞行任务索引::手动位置平滑曲线);
           断裂;
        个案 5: // 为新任务添加案例:我的任务
           错误 = 切换任务(飞行任务索引::我的任务);
           断裂;
      

    案例 4:.... ...

    
    
    

# 测试新飞行任务

要测试飞行任务,需要在启用任务后运行飞行器。在上面的例子中,这意味着设置参数 MPC_POS_MODE 到 5,起飞,并将载具切换到 位置模式.

备注

上述任务只能在模拟器上测试。代码不会实际创建设定点,因此飞行器不会飞行。

# 视频

以下视频概述了 PX4 中的飞行任务。第一个视频介绍了 PX4 v1.9 中飞行任务框架的状态。第二个是更新版,涵盖了 PX4 v1.11 中的变化。

# PX4 飞行任务架构概述(2019 年 PX4 开发人员峰会)

说明 PX4 v1.9 中飞行模式的工作原理(Dennis Mannhart、Matthias Grob)。

# 从传感器到电机的多旋翼飞行器控制概述(2020 年 PX4 开发人员虚拟峰会)

这段视频的相关部分是 PX4 v11.1 中飞行任务的更新(9 分 20 秒)。飞行任务 幻灯片请点击此处(PDF) (打开新窗口) - 幻灯片 9 和 12 与此相关。