# 飞行任务
飞行任务 内使用 飞行模式 提供特定的运动行为:如跟随我或平滑飞行。
# 概述
飞行任务是飞行任务框架中的一个类,由基类 飞行任务 (打开新窗口).它的目标是根据任意输入数据为控制器生成设定点,其中每个任务都为特定模式实现所需的载具行为。程序员通常会覆盖 激活()
和 更新()
虚拟方法,方法是调用基本任务的最小实现,然后用所需行为的实现进行扩展。虚拟方法 激活()
方法在切换到任务时被调用,该方法允许初始化任务状态,并从上一个任务刚刚应用的已传递设定点中轻轻接管任务。
更新()
在执行过程中的每次循环迭代中都会被调用,其中包含产生设定点的核心行为执行。
按照惯例,任务包含在 PX4-Autopilot/src/modules/flight_mode_manager/tasks (打开新窗口) 以任务命名,源文件则以"FlightTask"前缀命名。
备注
PX4 开发人员峰会的视频概述如下 提供如下.
# 创建飞行任务
下面的说明可用于创建名为 我的任务:
为新飞行任务创建一个目录,位于 PX4-Autopilot/src/modules/flight_mode_manager/tasks (打开新窗口).按照惯例,该目录以任务命名,因此我们将其称为 /我的任务.
mkdir PX4-Autopilot/src/modules/flight_mode_manager/tasks/MyTask
创建空源代码并 cmake 中新飞行任务的文件 我的任务 目录,使用前缀"FlightTask":
- CMakeLists.txt
- FlightTaskMyTask.hpp
- FlightTaskMyTask.cpp
更新 CMakeLists.txt 为新任务
- 复制 CMakeLists.txt 用于另一项任务,例如 Orbit/CMakeLists.txt (打开新窗口)
- 将版权更新为当年
############################################################################ # # 版权 (c) 2021 年 PX4 开发团队。保留所有权利。 #
- 修改代码以反映新任务,例如替换
飞行任务轨道
与FlightTaskMyTask
.代码将如下所示:px4_add_library(FlightTaskMyTask FlightTaskMyTask.cpp ) 目标链接库(FlightTaskMyTask 公众 飞行任务) 目标包含目录(FlightTaskMyTask 公众 ${cmake_current_source_dir})
更新头文件(此处为 FlightTaskMyTask.hpp):大多数任务重新实现虚拟方法
激活()
和更新()
在这个例子中,我们还有一个私有变量。#实用程序 一次 #包括 "FlightTask.hpp"; 类 FlightTaskMyTask : 公 飞行任务 { 公: FlightTaskMyTask() = 默认; 虚拟 ~FlightTaskMyTask() = 默认; bool 更新(); bool 启动(载具本地位置设置点 last_setpoint_s); 私人: 浮动 _原产地_z{0.f}; };
适当更新 cpp 文件。本例提供了 FlightTaskMyTask.cpp 表示任务方法已被调用。
#包括 "FlightTaskMyTask.hpp"; bool FlightTaskMyTask::启动(载具本地位置设置点 last_setpoint_s) { bool 重新 = 飞行任务::启动(last_setpoint); PX4_INFO("已调用 FlightTaskMyTask 激活!返回:%d";, 重新); // 报告激活是否成功 返回 重新; } bool FlightTaskMyTask::更新() { PX4_INFO(调用了 FlightTaskMyTask 更新!";); // 报告更新 返回 真; }
将新任务添加到待建任务列表中 PX4-Autopilot/src/modules/flight_mode_manager/CMakeLists.txt (打开新窗口):
list(APPEND flight_tasks_too_add Orbit MyTask )
更新飞行模式,确保任务被调用。通常使用一个参数来选择何时使用特定的飞行任务。
例如,为了使我们的新
我的任务
在多旋翼定位模式下:- 更新
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 与此相关。