飞行任务
飞行任务 内使用 飞行模式 提供特定的运动行为:如跟随我或平滑飞行。
概述
飞行任务是飞行任务框架中的一个类,由基类 飞行任务.它的目标是根据任意输入数据为控制器生成设定点,其中每个任务都为特定模式实现所需的载具行为。程序员通常会覆盖 激活()
和 更新()
通过调用基本任务的最小实现,并使用所需行为的实现来扩展虚拟方法。任务 激活()
方法在切换到任务时被调用,该方法允许初始化任务状态,并从上一个任务刚刚应用的已传递设定点中轻轻接管任务。
更新()
在执行过程中的每次循环迭代中都会被调用,其中包含产生设定点的核心行为执行。
按照惯例,任务包含在 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
将版权更新为当年
cmake############################################################################ # # 版权 (c) 2021 年 PX4 开发团队。保留所有权利。 #
修改代码以反映新任务,例如替换
飞行任务轨道
与FlightTaskMyTask
.代码将如下所示:cmakepx4_add_library(FlightTaskMyTask FlightTaskMyTask.cpp ) 目标链接库(飞行任务 公众 FlightTask) 目标包含目录(飞行任务 公众 ${cmake_current_source_dir})
更新头文件(此处为 FlightTaskMyTask.hpp):大多数任务重新实现虚拟方法
激活()
和更新()
在这个例子中,我们还有一个私有变量。cpp#pragma 一次 #include "FlightTask.hpp"; 类 FlightTaskMyTask : 公 飞行任务 { 公众: FlightTaskMyTask() = 默认; 虚拟 ~FlightTaskMyTask() = 默认; bool 更新(); bool 启动(缢 trajectory_setpoint_s 及样品;last_setpoint) 否决; 私人 浮动 _origin_z{0.f}; };
适当更新 cpp 文件。本例提供了 FlightTaskMyTask.cpp 表示任务方法已被调用。
cpp#include "FlightTaskMyTask.hpp"; bool FlightTaskMyTask::启动(缢 trajectory_setpoint_s 及样品;last_setpoint) { bool 重新 = 飞行任务::启动(最后一个设定点); PX4_INFO("FlightTaskMyTask 激活已调用!返回: %d";, ret); // 报告激活是否成功 返回 保留; } bool FlightTaskMyTask::更新() { PX4_INFO(调用了 FlightTaskMyTask 更新!";); // 报告更新 返回 真; }
将新任务添加到待建任务列表中 PX4-Autopilot/src/modules/flight_mode_manager/CMakeLists.txt:
cmake... 如果(不是 px4_constrained_flash_build) 清单(APPEND flight_tasks_all 自动跟踪目标 轨道 我的任务 ) endif() ...
更新飞行模式,确保任务被调用。通常使用一个参数来选择何时使用特定的飞行任务。
例如,为了使我们的新
我的任务
在多旋翼定位模式下:更新
MPC_POS_MODE
(multicopter_position_mode_params.c) 添加一个选项,以便在参数有像 5 这样的未使用值时选择 "我的任务":c... * @value 0 直接速度 * @value 3 平滑速度 * @value 4 基于加速度 * @value 5 我的任务 * @group 多旋翼飞行器定位控制 */ 参数define_int32(MPC_POS_MODE、 5);
在参数的开关中为新选项添加一个案例 FlightModeManager.cpp 时启用该任务
参数 MPC_pos_mode
具有正确的值。cpp... // 手动位置控制 ... 开关 (_param_mPC_pos_mode。获取()) { ... 个案 3: 错误 = 切换任务(飞行任务索引::ManualPositionSmoothVel); 断裂; 个案 5: // 为新任务添加案例:我的任务 错误 = 切换任务(飞行任务索引::MyTask); 断裂; 个案 4: .... ...
测试新飞行任务
要测试飞行任务,需要在启用任务后运行飞行器。在上面的例子中,这意味着设置参数 MPC_POS_MODE
到 5,起飞,并将载具切换到 位置模式.
信息
上述任务只能在模拟器上测试。代码不会实际创建设定点,因此载具不会飞行。
建立 SITL 仿真(gazebo-classic)
生产 px4_sitl 古董
打开 QGroundControl(如果未打开,则不会打印信息)。在控制台中,起飞并切换到定位模式:
pxh>; 司令员 起飞
pxh>; 司令员 模式 posctl
控制台将持续显示: INFO [FlightTaskMyTask] 已调用 FlightTaskMyTask 更新!
.如果您想切换到另一种飞行模式,可以键入命令来更改模式,例如 指挥官模式 altctl
.
视频
以下视频概述了 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 与此相关。