PX4模块设计之二十三:自定义FlightTask

2023-05-16

PX4模块设计之二十三:自定义FlightTask

  • Step1 创建飞行模式文件夹
  • Step2 创建飞行模式源代码和CMakeLists.txt文件
  • Step3 更新CMakeLists.txt文件
  • Step4 更新FlightTaskOrbit.hpp
  • Step5 更新FlightTaskOrbit.cpp
  • Step6 新增飞行模式到编译系统
  • Step7 确定使用该飞行模式的位置
  • Step8 MAVLink命令触发飞行模式
  • 参考资料

目前已经有大量的飞控模式在PX4系统中实现,且成熟应用。详见以下章节介绍:
【1】PX4模块设计之九:PX4飞行模式简介
【2】PX4模块设计之二十二:FlightModeManager模块

实际应用时,各有各的需求以及硬件配置等情况,导致PX4系统内部的已有飞行模式并不满足需求。因此需要增加自定义的飞行模式。

这里就以PX4代码自带的Orbit飞行模式作为假设“新增”自定义飞行模式的角度来分析,如何自定义FlightTask(如何新增以及触发飞行模式)。

Step1 创建飞行模式文件夹

新建Orbit文件夹,PX4-Autopilot/src/modules/flight_mode_manager/tasks/Orbit

$ mkdir PX4-Autopilot/src/modules/flight_mode_manager/tasks/Orbit

Step2 创建飞行模式源代码和CMakeLists.txt文件

新建以"FlightTask"为前缀的飞行模式空文件源代码

  1. FlightTaskOrbit.hpp
  2. FlightTaskOrbit.cpp
  3. CMakeLists.txt
$ touch PX4-Autopilot/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.hpp
$ touch PX4-Autopilot/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp
$ touch PX4-Autopilot/src/modules/flight_mode_manager/tasks/Orbit/CMakeLists.txt

注:这里是PX4系统已经实现了,而刚新增的时候是空文件,实现代码在后。

Step3 更新CMakeLists.txt文件

从其他飞行模式中复制CMakeLists.txt文件,比如:Descend/CMakeLists.txt

主要修改这几行内容:

34 px4_add_library(FlightTaskOrbit
35 	FlightTaskOrbit.cpp
36 )
37 
38 target_link_libraries(FlightTaskOrbit PUBLIC FlightTaskManualAltitudeSmoothVel SlewRate)
39 target_include_directories(FlightTaskOrbit PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

注1:新增FlightTaskOrbit依赖哪些库文件后面就跟链接库。由于Orbit依赖的是FlightTaskManualAltitudeSmoothVel+SlewRate类,且两个类均有对应的库文件,所以这里38行的写法与最纯粹的飞行模式的写法有所差异。
注2:通常来说新增最纯粹的飞行模式38行可以这样写:target_link_libraries(FlightTaskMyFlight PUBLIC FlightTask)。

Step4 更新FlightTaskOrbit.hpp

大部分飞行模式需要实现以下两个函数:

  1. bool activate(const trajectory_setpoint_s &last_setpoint) override;
  2. bool update() override;

Orbit飞行模式需要可以调整:半径、速度、高度
3. bool applyCommandParameters(const vehicle_command_s &command) override;

详细代码不再罗列,详见FlightTaskOrbit.hpp。

Step5 更新FlightTaskOrbit.cpp

详细代码不再罗列,详见FlightTaskOrbit.cpp。

注:早先这个飞行模式下代码只有三个文件,最新代码看到有flight_task_orbit_params.c,但是在px4_add_library里面确缺少这个c代码文件。这里只是介绍,如果文件数量有所变动,大家自行琢磨。

Step6 新增飞行模式到编译系统

通过在PX4-Autopilot/src/modules/flight_mode_manager/CMakeLists.txt新增Orbit目录到flight_tasks_all。

注:这里Orbit实际上PX4系统中已经有,且增加在NOT px4_constrained_flash_build中。如果自己新增的可以放在41行的位置。

Step7 确定使用该飞行模式的位置

通过start_flight_task找到一个可以放置该Orbit飞行模式的位置。

比如:放在vehicle_status_s::NAVIGATION_STATE_ORBIT

修改FlightModeManager.cpp代码如下:

304 	if (_vehicle_status_sub.get().nav_state == vehicle_status_s::NAVIGATION_STATE_ORBIT) {
305 #if !defined(CONSTRAINED_FLASH)
306 		error = switchTask(FlightTaskIndex::Orbit);
307 #endif // !CONSTRAINED_FLASH
306 	}

注:鉴于holybro_kakuteF7使用了CONFIG_BOARD_CONSTRAINED_FLASH=y,所以没有编译相关代码,如果需要可以打开这个功能。(不同的板子或者编译目标对象,请结合实际情况调整,比如:px4_sitl_default是默认编译的,但是Orbit这个代码目前确实已经从PX4系统调用中删除了。

Step8 MAVLink命令触发飞行模式

这个具体可以参考Flight task architecture overview视频 – by Matthias Grob, Dennis Mannhart,PDF资料详见参考【5】。

大体分以下几个小步骤(PX4代码已经实现,大家可以自行参考)

  1. Create a new Mavlink MAV_CMD command: MAV_CMD_DO_ORBIT
  2. Add new mode to uORB messages
    vehicle_command.msg: VEHICLE_CMD_DO_ORBIT
    commander_state.msg: MAIN_STATE_ORBIT
    vehicle_status.msg: NAVIGATION_STATE_ORBIT
  3. Commander.cpp handle_command(): add case vehicle_command_s::VEHICLE_CMD_DO_ORBIT
  4. statemachine_helper.cpp main_state_transition(): case MAIN_STATE_ORBIT
  5. statemachine_helper.cpp set_nav_state(): case commander_state_s::MAIN_STATE_ORBIT
  6. Commander.cpp set_control_mode(): case vehicle_command_s::NAVIGATION_STATE_ORBIT
  7. mc_pos_control_main.cpp start_flight_task(): add case vehicle_status_s::NAVIGATION_STATE_ORBIT

注:7已经在上面Step7中介绍过。

参考资料

【1】PX4开源软件框架简明简介
【2】PX4模块设计之九:PX4飞行模式简介
【3】PX4模块设计之二十二:FlightModeManager模块
【4】PX4 Creating a Flight Task
【5】Slides-PX4-Dev-Summit-FlightTasks.pdf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4模块设计之二十三:自定义FlightTask 的相关文章

  • 下载并构建PX4

    根据官方的文档 xff0c PX4下载和构建的方式有两种 xff1a Linux系列的Console模式 xff08 当然也支持Windows下的MINGW32 xff09 和Windows模式 在Windows平台下 xff0c 我们习惯
  • px4自定义mavlink收不到消息的问题

    px4版本1 12稳定版 最近在做px4二次开发相关工作 按照网上的一些教程自定义了一个mavlink消息用来控制无人机 按照教程里面的单独开了一个xml来定义消息 最后生成的消息在px4端通过流传输的方式自己写的客户端可以收到消息 但是客
  • px4: v2的主板刷写v2的固件

    v2的主板刷写v2的固件 fengxuewei 64 fengxuewei Legion Y7000 2019 PG0 src Firmware changwei rc span class token function make span
  • PX4 SITL Gazebo 仿真时 libgazebo_multirotor_base_plugin 插件运行时出错

    PX4 SITL Gazebo 仿真时 libgazebo multirotor base plugin 插件运行时出错 问题描述原因分析解决办法总结 问题描述 在 Gazebo 中进行 PX4 的软件在环仿真时 xff0c 执 make
  • 关于PX4中的高度若干问题

    飞行的高度是如何测量的 xff1f 地面的高度和海平面的高度差别很大 xff0c 飞控又是如何有效判别进行降落的 xff1f 这是我脑子里的疑问 搜索的一圈发现很少有人讨论这方面的问题 xff0c 于是本次我就直接看一下源代码 xff0c
  • Ubuntu20.04+MAVROS+PX4+Gazebo保姆级安装教程

    Ubuntu20 04 43 MAVROS 43 PX4 43 Gazebo 安装PX4步骤安装MAVROS安装QGCPX4仿真 安装PX4步骤 从github上clone源码 span class token function git s
  • 基于F4/F7/H7飞控硬件和px4飞控固件的廉价自主无人机系统(1)-飞控

    前言 穿越机F4 F7 H7飞控是一系列采用stm32系列F4xx和F7xx处理器的飞控的统称 xff0c 是目前穿越机爱好者非常喜欢使用的飞控硬件 xff0c 其价格也非常便宜180 xff5e 410 而px4则是一款常见的开源飞控固件
  • PX4代码学习系列博客(5)——在px4中添加自己的模块

    怎么在px4中添加自己的模块 在 px4固件目录结构和代码风格 这一节 xff0c 曾经说过NuttX是一个实时的嵌入式系统 xff0c 上面可以像windows那样运行程序 那既然是应用程序 xff0c 那我们应该也能写一些可以在Nutt
  • PX4代码学习系列博客(6)——offboard模式位置控制代码分析

    分析offboard模式的代码需要用到以下几个模块 local position estimator mavlink mc pos control mc att control mixer 程序数据走向 mavlink 一般的offboar
  • Ubuntu下构建PX4软件

    本搭建过程基于http dev px4 io starting building html xff0c 希望大家互相交流学习 原文 xff1a Building PX4 Software xff08 构建PX4软件 xff09 PX4 ca
  • px4源码编译指南

    px4源码编译指南 强烈推荐大家去看官网的英文文档 xff0c 国内的博客杂七杂八 xff0c 官网的中文也很久没有更新 xff0c 这几天自己踩了很多坑 xff0c 写个教程希望能帮助到大家 xff08 本文选用平台是pixhawk1 1
  • PX4 ---- Indoor Flight

    文章目录 室内飞行ROS amp PX4Pose Data 飞机配置MAVROS 基于工训赛 VIO 飞行总结 室内飞行 ROS amp PX4 Pose Data 飞机配置 VIO 参考此处 xff0c 采用 T265 配置 相机与飞控机
  • PX4 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • PX4模块设计之九:PX4飞行模式简介

    PX4模块设计之九 xff1a PX4飞行模式简介 关于模式的探讨1 需求角度1 1 多旋翼 MC multi copter 1 1 1 RC控制模式1 1 1 1 Position Mode1 1 1 2 Altitude Mode1 1
  • PX4模块设计之三十九:Commander模块

    PX4模块设计之三十九 xff1a Commander模块 1 Commander模块简介2 模块入口函数2 1 主入口commander main2 2 自定义子命令custom command 3 Commander模块重要函数3 1
  • PX4模块设计之四十六:dataman模块

    PX4模块设计之四十六 xff1a dataman模块 1 dataman模块简介2 模块入口函数dataman main3 dataman模块重要函数3 1 start3 2 stop3 3 status3 4 task main 4 A
  • 步骤三:PX4,Mavros的下载安装及代码测试

    1 安装Mavros sudo apt install ros melodic mavros ros melodic mavros extras 2 安装Mavros相关的 geographiclib dataset 此处已经加了ghpro
  • PX4通过参数脚本给飞控导入参数

    PX4通过参数脚本给飞控导入参数 先找一架正常能飞的无人机连接地面站 在参数页面右上角点击工具 gt 保存到文件 保存的时候文件名注明参数的相关信息 然后将需要加载参数的无人机连接至地面站 xff0c 注意需要加载参数的无人机必须和保存的参
  • 无人机PX4使用动捕系统mocap的位置实现控制+MAVROS

    动捕系统Optitrack xff0c 有很高的定位精度 xff0c 能够给无人机提供比较精确的位置信息 xff0c 因此如果实验室有条件 xff0c 都可以买一套动捕系统 动捕系统的原理 xff1a 光学式动作捕捉依靠一整套精密而复杂的光
  • 大神浅谈无人机飞控软件设计 系统性总结

    写在前面 深感自己对飞控软件 算法的知识点过于杂乱 很久没有进行系统的总结了 因此决定写几篇文章记录一些飞控开发过程的知识点 主要是针对一些软件 算法部分进行讨论 如内容有错误 欢迎指出 1 飞控软件的基本模块 无人机能够飞行主要是依靠传感

随机推荐

  • PX4开源工程结构简明介绍

    PX4开源工程结构简明介绍 Step1 获取开源代码1 1 开源代码版本1 2 克隆开源代码 Step2 了解工程情况2 1 支持模型类型2 2 支持特性 amp 功能2 3 安装 amp 文档链接2 4 配置工具下载2 5 其他介绍 xf
  • PX4开源软件框架简明简介

    PX4开源软件框架简明简介 1 PX4系统构架1 1 飞控 43 地面站 RC控制1 2 飞控 43 伴飞电脑 43 地面站 集成RC控制 2 PX4软件构架2 1 设计概念2 2 软件构架2 1 中间件2 2 飞控代码 3 PX4运行环境
  • PX4模块设计之一:SITL & HITL模拟框架

    PX4模块设计之一 xff1a SITL amp HITL模拟框架 1 模拟框架1 1 SITL模拟框架1 2 HITL模拟框架 2 模拟器类型3 MAVLink API4 总结 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分
  • PX4模块设计之二:uORB消息代理

    PX4模块设计之二 xff1a uORB消息代理 1 uORB模块接口1 1 uORB服务接口1 2 uORB消息注册 去注册接口1 3 uORB消息发布接口1 4 uORB消息订阅 去订阅接口1 5 uORB辅助功能接口2 Hello W
  • PX4模块设计之三:自定义uORB消息

    PX4模块设计之三 xff1a 自定义uORB消息 1 新增自定义uORB消息步骤2 应用ext hello world消息示例3 编译执行结果4 参考资料 基于PX4开源软件框架简明简介和PX4模块设计之二 xff1a uORB消息代理
  • PX4模块设计之四:MAVLink简介

    PX4模块设计之四 xff1a MAVLink简介 1 MAVLink PX4 应用简介2 MAVLink v2 0新特性3 MAVLink协议版本4 MAVLink通信协议帧4 1 MAVLink v1 0 帧格式4 2 MAVLink
  • PX4模块设计之五:自定义MAVLink消息

    PX4模块设计之五 xff1a 自定义MAVLink消息 1 MAVLink Dialects1 1 PX4 Dialects1 2 Paprazzi Dialects1 3 MAVLink XML File Format 2 添加自定义M
  • PX4模块设计之六:PX4-Fast RTPS(DDS)简介

    64 TOC PX4模块设计之六 xff1a PX4 Fast RTPS DDS 简介 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分析内部模块功能设计 PX4 Fast RTPS DDS 具有实时发布 订阅uORB消息接口
  • PX4模块设计之九:PX4飞行模式简介

    PX4模块设计之九 xff1a PX4飞行模式简介 关于模式的探讨1 需求角度1 1 多旋翼 MC multi copter 1 1 1 RC控制模式1 1 1 1 Position Mode1 1 1 2 Altitude Mode1 1
  • PX4模块设计之十:PX4启动过程

    PX4模块设计之十 xff1a PX4启动过程 1 硬件 飞控硬件上电2 硬件 飞控硬件初始化3 硬件 43 软件 飞控bootloader初始化4 硬件 43 软件 飞控系统初始化5 软件 飞控应用初始化6 配置 SD卡配置文件6 1 e
  • atop安装和使用

    atop就是一款用于监控Linux系统资源与进程的工具 xff0c 它以一定的频率记录系统的运行状态 xff0c 所采集的数据包含系统资源 CPU 内存 磁盘和网络 使用情况和进程运行情况 xff0c 并能以日志文件的方式保存在磁盘中 at
  • PX4模块设计之十一:Built-In框架

    PX4模块设计之十一 xff1a Built In框架 1 Nuttx Built In框架2 PX4 Built In框架2 1 NSH Built In关联文件2 2 NSH Built In关联文件生成2 3 NSH Built In
  • PX4模块设计之十二:High Resolution Timer设计

    PX4模块设计之十二 xff1a High Resolution Timer设计 1 HRT模块特性2 HRT模块基本功能2 1 循环触发接口2 2 延迟触发接口2 3 定时触发接口2 4 其他功能 3 HRT模块精度3 1 精度粒度3 2
  • PX4模块设计之十三:WorkQueue设计

    PX4模块设计之十三 xff1a WorkQueue设计 1 WorkQueue启动2 WorkQueue接口2 1 基本接口2 2 辅助接口2 3 WorkQueue任务函数2 3 1 Flat Build2 3 2 Protected
  • PX4模块设计之十六:Hardfault模块

    PX4模块设计之十六 xff1a Hardfault模块 1 Hardfault模块初始化2 Hardfault模块主程序3 Hardfault命令3 1 hardfault check status3 2 hardfault rearm3
  • PX4模块设计之十七:ModuleBase模块

    PX4模块设计之十七 xff1a ModuleBase模块 1 ModuleBase模块介绍2 ModuleBase类介绍3 ModuleBase类功能介绍3 1 模块入口3 2 模块启动3 3 模块停止3 4 状态查询3 5 任务回调3
  • PX4模块设计之十八:Logger模块

    PX4模块设计之十八 xff1a Logger模块 1 Logger模块简介2 模块入口函数2 1 主入口logger main2 2 自定义子命令Logger custom command2 3 日志主题uORB注册 3 重要实现函数3
  • PX4模块设计之二十:PX4应用平台初始化

    PX4模块设计之二十 xff1a PX4应用平台初始化 1 PX4应用平台介绍2 PX4应用平台初始化实现3 讨论和思考4 参考资料 在PX4启动过程章节的基础上 xff0c 可以深入分析下PX4应用平台 xff08 框架 xff09 的实
  • PX4模块设计之二十一:uORB消息管理模块

    PX4模块设计之二十一 xff1a uORB消息管理模块 1 uORB模块构建模式2 uORB消息管理函数2 1 状态查询2 2 资源利用2 3 模块启动2 4 模块停止3 uORB消息接口3 1 消息主题注册3 2 消息主题去注册3 3
  • PX4模块设计之二十三:自定义FlightTask

    PX4模块设计之二十三 xff1a 自定义FlightTask Step1 创建飞行模式文件夹Step2 创建飞行模式源代码和CMakeLists txt文件Step3 更新CMakeLists txt文件Step4 更新FlightTas