MAVROS二次开发(二)(三)添加自定义消息

2023-05-16

MAVROS二次开发

二、MAVROS消息添加

1、自定义rostopic消息

  • 路径:~/catkin_ws/src/mavros/mavros_msgs/msg

  • 自定义消息文件名称:CrawlControlStatus.msg

  • 消息内容:

    uint8 clamp_state
    uint8 crawl_state
    uint8 sw_state
    
    float32 clamp_speed
    float32 crawl_speed
    
    std_msgs/Header header
    

2、自定义rosservice消息

  • 路径:~/catkin_ws/src/mavros/mavros_msgs/srv

  • 自定义消息文件名称:CrawlControlSet.srv

  • 消息内容:

    uint8 clamp_set
    uint8 crawl_set
    float32 clamp_speed
    float32 crawl_speed
    
    ---
    bool send_success
    

3、更改CMakeLists.txt文件

  • 路径:~/catkin_ws/src/mavros/mavros_msgs/CMakeLists.txt

  • 作用:编译时生成消息头文件

  • 添加内容:

    add_message_files(
      CrawlControlStatus.msg #add
    )
    add_service_files(
      CrawlControlSet.srv #add
    )
    

MAVROS二次开发

三、MAVLINK自定义消息添加

1、MAVLINK消息产生机制

在这里插入图片描述

2、自定义消息xml文件

  • 文件名称:crawl_control_status.xml
  • 文件路径:~/catkin_ws/src/mavlink/message_definitions/v1.0/crawl_control_status.xml
  • 文件内容:
<?xml version="1.0"?>
<mavlink>
  <version>3</version>
  <messages>
    <message id="410" name="CRAWL_CONTROL_STATUS">
      <description>Crawl control system mavlink message</description>
      <field type="uint8_t" name="clamp_state">uint8_t</field>
      <field type="float" name="clamp_speed">float</field>
      <field type="uint8_t" name="crawl_state">uint8_t</field>
      <field type="float" name="crawl_speed">float</field>
      <field type="uint8_t" name="sw_state">uint8_t</field>
    </message>
  </messages>
</mavlink>
  • 文件名称:crawl_control_set.xml
  • 文件路径:~/catkin_ws/src/mavlink/message_definitions/v1.0/crawl_control_set.xml
  • 文件内容:
<?xml version="1.0"?>
<mavlink>
  <version>3</version>
  <messages>
    <message id="411" name="CRAWL_CONTROL_SET">
      <description>Crawl control system set param mavlink message</description>
      <field type="uint8_t" name="clamp_state_set">uint8_t</field>
      <field type="float" name="clamp_speed_set">float</field>
      <field type="uint8_t" name="crawl_state_set">uint8_t</field>
      <field type="float" name="crawl_speed_set">float</field>
    </message>
  </messages>
</mavlink>

3、查看CMakeLists.txt中有关消息生成的代码

  • 自定义消息的xml文件存放位置:~/catkin_ws/src/mavlink/message_definitions/v1.0/

  • MAVLINK消息生成位置:

    ~/catkin_ws/devel/include/mavlink/v1.0

    ~/catkin_ws/devel/include/mavlink/v2.0

  • ~/catkin_ws/src/mavlink/CMakeLists.txt中相关代码解释:

# mavlink generation
#mavgen.py为mavlink消息从xml转为头文件的工具
set(mavgen_path ${CMAKE_SOURCE_DIR}/pymavlink/tools/mavgen.py)
#设置读取xml文件的路径,所以我们将自定义的xml文件放到此路径下即可
set(common_xml_path ${CMAKE_SOURCE_DIR}/message_definitions/v1.0/common.xml)
#定义了mavlink v1.0消息的生成函数
macro(generateMavlink_v10 definitions)
    foreach(definitionAbsPath ${definitions})
        get_filename_component(definition ${definitionAbsPath} NAME_WE)
        message(STATUS "processing v1.0: ${definitionAbsPath}")
        add_custom_command(
            OUTPUT include/v1.0/${definition}/${definition}.h
            COMMAND /usr/bin/env PYTHONPATH="${CMAKE_SOURCE_DIR}:$ENV{PYTHONPATH}"
                ${Python_EXECUTABLE} ${mavgen_path} --lang=C --wire-protocol=1.0
                --output=include/v1.0 ${definitionAbsPath}
            DEPENDS ${definitionAbsPath} ${common_xml_path} ${mavgen_path}
            )
        add_custom_target(${definition}.xml-v1.0
            ALL DEPENDS include/v1.0/${definition}/${definition}.h
            )
    endforeach()
endmacro()
#定义了mavlink v2.0消息的生成函数
macro(generateMavlink_v20 definitions)
    foreach(definitionAbsPath ${definitions})
        get_filename_component(definition ${definitionAbsPath} NAME_WE)
        message(STATUS "processing v2.0: ${definitionAbsPath}")

        # mavgen C++ also do C gen
        add_custom_command(
            OUTPUT ${definition}-v2.0-cxx-stamp
            #OUTPUT include/v2.0/${definition}/${definition}.hpp
            COMMAND /usr/bin/env PYTHONPATH="${CMAKE_SOURCE_DIR}:$ENV{PYTHONPATH}"
                ${Python_EXECUTABLE} ${mavgen_path} --lang=C++11 --wire-protocol=2.0
                --output=include/v2.0 ${definitionAbsPath}
            COMMAND touch ${definition}-v2.0-cxx-stamp
            DEPENDS ${definitionAbsPath} ${common_xml_path} ${mavgen_path}
            )
        add_custom_target(${definition}.xml-v2.0
            ALL DEPENDS
                ${definition}-v2.0-cxx-stamp
                #include/v2.0/${definition}/${definition}.hpp
            )
    endforeach()

    # XXX NOTE: that is workaround v2.0 mavgen bug:
    #           when it generate other dialect than common.xml
    #           resulting common.h/.hpp does not have extended enums like MAV_CMD
    #
    #           So we use stamp file to force run of mavgen and add all other xml to common.xml dependencies.
    foreach(definitionAbsPath ${definitions})
        get_filename_component(definition ${definitionAbsPath} NAME_WE)
        add_dependencies(common.xml-v2.0 ${definition}.xml-v2.0)
    endforeach()
endmacro()

# build v1.0
#读取xml文件至列表
file(GLOB V10DEFINITIONS ${CMAKE_SOURCE_DIR}/message_definitions/v1.0/*.xml)

# do not generate testing dialects
#从xml文件列表中去除某些不生成头文件的xml
foreach(definition minimal test python_array_test)
    list(REMOVE_ITEM V10DEFINITIONS "${CMAKE_SOURCE_DIR}/message_definitions/v1.0/${definition}.xml")
endforeach()
list(SORT V10DEFINITIONS)

generateMavlink_v10("${V10DEFINITIONS}")

# build v2.0 if it is supported. for now it uses same definitions as v1.0
if(EXISTS "${CMAKE_SOURCE_DIR}/pymavlink/generator/C/include_v2.0")
    set(V20DEFINITIONS "${V10DEFINITIONS}")
    generateMavlink_v20("${V20DEFINITIONS}")
endif()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MAVROS二次开发(二)(三)添加自定义消息 的相关文章

  • t265 通过mavros传递定位信息px4

    https github com thien94 vision to mavros 通过话题 mavros vision pose pose 向PX4发送位置数据 t265两种安装方式 xff1a USB口朝右镜头向前和向下安装 如需其它方
  • 【PX4 二次开发 初级】 02 飞控软硬件体系

    PX4 二次开发初级 PX4 飞控软硬件体系 飞控硬件体系PIXHAWK 控制硬件 软件体系PX4 体系原生固件原生固件官网原生固件地面站 APM 体系APM官网 xff1a 原生固件地面站 特点 标题 xff1a PX4二次开发教程 xf
  • 【PX4 二次开发 初级】 03 飞控调试以及地面站使用

    PX4 二次开发 初级 03 飞控调试以及地面站使用 前言IMU三轴稳定性内部构成陀螺仪加速度计磁力计 误差加速度 amp 陀螺仪 磁力计干扰测试 标题 xff1a PX4二次开发教程 xff1a 起源 xff1a 根据阿木实验室讲解课程整
  • odroid上mavros指定版本安装

    mavros 安装 指定版本 xff1a 0 16 0 https github com mavlink mavros 以下是可能出现的错误 error1 can t find mavlinkConfig cmake solution ht
  • 树莓派+ubuntu18.04+ROS-melodic+MAVROS+librealsense+vio+realsense_ros

    目录 一 树莓派安装ubuntu18 04 1 下载ubuntu系统文件 2 将系统文件烧入SD卡 3 强制修改HDMI输出分辨率 xff08 此步骤可忽略 xff09 4 设置wifi xff08 此步骤也可忽略 xff0c 后续连接网线
  • PX4二次开发——uorb订阅

    PX4二次开发 uorb订阅 一 写在前面 我们写了一个一个功能的模块 xff0c 这些模块并不是独立的 模块之间是有数据传递的 xff0c 这样才能组合到一起实现飞行控制的目的 那么解决模块之间的数据传递的方式就是通过uorb订阅的方式
  • kvaser二次开发

    总结归纳 xff1a 实施步骤 xff1a 通过浏览网上的大量关于can总线开发的资料 xff0c 建立起对can总线软件开发的大致流程记录优质资料将开发过程流程化通过官方资料研究技术细节开工 技术要点 xff1a can协议 xff0c
  • Windows10下Airsim+PX4(WSL2)+MAVROS仿真环境搭建

    一 Windows10下WSL2安装 1 1 WSL2的安装与配置 首先在Windows10下启用WSL xff0c 以管理员身份打开 PowerShell 工具并运行以下命令 dism span class token punctuati
  • PX4+ROS+gazebo+mavros,Ubuntu18.04搭建SITL仿真环境

    前言 介绍 SITL Software in the Loop 软件在环仿真平台 xff0c 与之对应的有 HITL 硬件在环仿真 本文目的是搭建一个无人机软件仿真环境 xff0c 使用PX4开源飞控 xff0c gazebo作为仿真器 x
  • 安装MAVROS过程 catkin:未找到命令 的问题

    PX4官网安装教程 源码方式安装 1 第一步执行 xff0c 创建文件夹 xff1b 移到创建文件夹中 mkdir p catkin ws src cd catkin ws 2 执行 catkin init 出错如下图 解决方法 xff1a
  • APM-SITL Gazebo MAVROS 仿真

    1 配置APM SITL环境 1 下载安装Ardupilot 参考链接 xff1a 官方教程 注意 xff1a 文件install prereqs ubuntu sh路径在 ardupilot Tools environment insta
  • 从 MAVROS 到 PX4 飞控的数据流向

    摘自 xff1a https blog csdn net SIR wkp article details 87870471 从 MAVROS 到 PX4 飞控的数据流向 SIR wkp 2019 02 21 23 54 09 2059 收藏
  • vue-element-admin的二次开发

    最近也是完成了公司招聘管理系统后台的前端开发 xff0c 项目已经开始测试了近期估计就会交付使用 一直是一个人在做 xff0c 配合两个后端 xff0c 说实话这种从很多不会到一个个独立debug解决问题到最后终于完成项目的感觉真的太有成就
  • Gazebo仿真PX4运行roslaunch PX4 mavros_posix_sitl.launch时报错Required process [sitl-2] has died 解决方法

    报错如图 解决方法为卸载Gazebo9安装Gazebo9 19 参考下文中4 4部分 xff0c 问题类似但解决方法相同 xff1a https blog csdn net qq 38768959 article details 10604
  • mavros_msgs的type_mask用法

    这几天在看自主无人机的一些代码 xff0c 如下 xff1a mavros msgs PositionTarget PositionSetpoint PositionSetpoint type mask 61 0b100111000000
  • 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
  • mavros连接px4失败的usb-ttl原因

    问题描述 xff1a 最近在搞mavros xff0c 以方便协处理器和pixhawk通讯 xff0c 在按照官网教程安装mavros xff0c 设置px4 xff0c 连接硬件之后发现mavros卡在中间下不去 xff1a MAVROS
  • 步骤三:PX4,Mavros的下载安装及代码测试

    1 安装Mavros sudo apt install ros melodic mavros ros melodic mavros extras 2 安装Mavros相关的 geographiclib dataset 此处已经加了ghpro
  • 无人机PX4使用动捕系统mocap的位置实现控制+MAVROS

    动捕系统Optitrack xff0c 有很高的定位精度 xff0c 能够给无人机提供比较精确的位置信息 xff0c 因此如果实验室有条件 xff0c 都可以买一套动捕系统 动捕系统的原理 xff1a 光学式动作捕捉依靠一整套精密而复杂的光
  • 关于OpenAI的Gym中的step方法

    文章目录 导读 Gym的step方法 最后的话 导读 本文就只是关于step方法的参数与返回值的一个小小的学习笔记 这也是没有第一时间查官方文档而造成的时间消耗 所以 这篇博客就是逼自己查一下 Gym的step方法 既然都已经用pip下载了

随机推荐

  • ubuntu安装和卸载python3.8

    背景 xff1a 工作中 xff0c 可能会分配虚拟机给到开发者 xff0c 开发者需要在上面调试 xff0c 开发 xff0c 打包等操作 xff0c 依赖python环境 操作 网上安装步骤很多 xff0c 但很多文章描述的不够清晰 x
  • golang单例模式加载服务配置

    golang中单例模式体现在很多地方 xff0c 比如init函数 xff0c 当包被导入的时候只会被执行一次 实现单例模式有很多种方式 xff0c 这里给出几种简单的实现 xff1a 互斥锁 对全局共享变量加锁 xff0c 如果该变量不是
  • go面试题

    1 json包在使用的时候 xff0c 结构体里的变量不加tag能不能正常转成json里的字段 xff1f 如果变量首字母小写 xff0c 则为private 无论如何不能转 xff0c 因为取不到反射信息 如果变量首字母大写 xff0c
  • golang windows弹窗功能实现

    代码示例 span class token keyword package span main span class token keyword import span span class token punctuation span s
  • golang获取windows系统有线活跃网卡及IP配置

    代码 span class token keyword package span network span class token keyword import span span class token punctuation span
  • !!!Chapter 2 The Physical Layer

    2 1 The Theoretical Basis for Data Communication Fourier Analysis Any reasonably behaved periodic function g t with peri
  • 启动golang项目编译的exe可执行文件获取windows管理员权限(UAC)

    背景 xff1a go代码启动以后里面涉及到修改ip地址等操作 xff0c 需要管理员权限 打包好的exe文件双击执行默认是没有管理员权限的 xff0c 那么修改ip就会提示需要管理员权限 解决方法1 xff1a 右键以管理员权限运行exe
  • k8s外部访问pod内部容器的端口-NodePort

    一 如何从外部网络访问 Kubernetes的Pod IP和Cluster IP都只能在集群内部访问 xff0c 而我们通常需要从外部网络上访问集群中的某些服务 xff0c Kubernetes提供了下述几种方式来为集群提供外部流量入口 二
  • python断点下载文件

    使用pytohn编码实现文件的断点下载 span class token keyword import span os span class token keyword import span json span class token k
  • 异常检测(1)—初识异常检测

    1 概念 异常一般是指与标准值 xff08 预期值 xff09 有偏离的样本点 xff0c 也就是跟绝大部分数据 长的不一样 异常往往是 有价值 的事情 xff0c 我们对异常的成因感兴趣 2 类别 有监督 xff1a 数据集有标签无监督
  • 【git】在GitHub上下载历史版本

    GitHub上的项目很多都是从简单到复杂 xff0c 一点点迭代的 当我们需要看懂别人的代码时 xff0c 按照别人commit的历史版本一步一步跟踪 xff0c 或许是个好办法 这时候我们就要用到下载历史版本功能了 1 git clone
  • 实时操作系统UCOS学习笔记1----UCOSII简介

    前面我们所有的实验都是跑的裸机程序 xff08 裸奔 xff09 xff0c 从本章开始 xff0c 我们开始介绍UCOSII xff08 实时多任务操作系统内核 xff09 UCOSII简介 UCOSII的前身是UCOS xff0c 最早
  • 欢聚时代YY/测试实习面试

    去到YY大楼 xff0c 虽然在番禺但是附近很多楼在施工中了 大楼就在万达后面 前台登记 xff0c 小姐姐会让你出示邀请邮件 xff0c 然后直接上去就行了 达到楼层 xff0c 二维码签到 然后找地方坐一下等待面试 一轮是技术面 xff
  • 基于卡尔曼滤波的气压计高度解算

    ax ay az为归一化的加速度数据 1代表重力加速度 gx gy gz 为加速度数据 单位rad s altitude为气压计测量得到的海拔数据 欧拉角 float pitch roll yaw 世界坐标系下机体加速度 float ax
  • Kali安装Xfce4

    Kali安装Xface4 一 配置kali源并更新二 解决报错1 签名无效2 依赖报错 三 安装xfce4 一 配置kali源并更新 此处使用的是gedit编辑器 xff0c gedit etc apt sources list xff0c
  • 串口转WIFI的工作方式理解

    串口无线 AP xff08 COM AP xff09 串口无线 STA xff08 COM STA xff09 和 串口无线 AP 43 STA xff08 COM AP 43 STA xff09 3 个模式 串口WIFI模块是基于Uart
  • 典型环节的频率特性(建议收藏)

    自控笔记 5 3典型环节频率特性 控制系统种类繁多 xff0c 传递函数复杂 xff0c 但任何形式的传递函数都是由有限的典型环节组成 因此 xff0c 掌握典型环节的频率特性是使用频域法分析系统的基础 如下表所示 xff0c 构成系统的最
  • 【WINAPI】CreateSemaphore_信号量

    WINAPI CreateSemaphore 信号量 1 注册信号量函数1 1 参数1 2 返回值 2 释放信号量函数2 1 参数2 2 返回值 3 WaitForSingleObject3 2 参数3 3 返回值 4 例子4 1 运行结果
  • MAVROS二次开发(一)MAVROS的安装

    MAVROS二次开发 一 MAVROS的安装 1 参考网址 https dev px4 io v1 10 en ros mavros installation html https github com mavlink mavros tre
  • MAVROS二次开发(二)(三)添加自定义消息

    MAVROS二次开发 二 MAVROS消息添加 1 自定义rostopic消息 路径 xff1a catkin ws src mavros mavros msgs msg 自定义消息文件名称 xff1a CrawlControlStatus