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二次开发(二)(三)添加自定义消息 的相关文章

  • 无人机仿真搭建:ROS,Gazebo,SITL,MAVROS,PX4

    写在前面 最近一直在搭建无人机仿真的环境 xff0c 系统都卸载安装了很多次才安装好 xff0c 所以写下这篇博客来记录一下 xff0c 万一以后还要再搭也可以有个参考 xff0c 也可以给大家做个参考 这个是结合我自己系统来安装的 xff
  • ubuntu20.04版本 安装ros1与px4、mavros、QGroundControl

    基于个人安装时的操作以及所浏览的链接 xff0c 仅供参考 文章目录 前言一 pandas是什么 xff1f 二 使用步骤 1 引入库2 读入数据总结 前言 使用ubuntu下载ros px4似乎是一件十分繁琐以及困难的事情 xff0c 但
  • 步骤四:T265和Mavros通讯

    阿木的volans项目连接t265与px4是在2022年暑假实验的 但是随后在九月初再试实验时 由于一些暂时不知明的原因 无法联机 于是 我们改用了官网的连接方法 下面附上官网链接 T265 Intel Realsense Tracking
  • 【Mavros解析 】02 ROS服务以及在mavros中体现

    Mavros解析 02 ROS服务以及在mavros中体现 简介实现步骤步骤 1 xff1a 连接服务步骤 2 xff1a 实例化服务参数 xff1a 步骤 3 xff1a 请求服务 Demo头文件订阅回调函数主函数初始化订阅mavrso
  • odroid上mavros指定版本安装

    mavros 安装 指定版本 xff1a 0 16 0 https github com mavlink mavros 以下是可能出现的错误 error1 can t find mavlinkConfig cmake solution ht
  • 树莓派4b 安装buster系统 安装ROS与MAVROS 连接pixhawk飞控

    手把手教程 无屏幕的树莓派4b 安装Rapbian buster系统 安装ROS与MAVROS 连接pixhawk飞控 xff08 1 xff09 准备 xff1a 树莓派4b 1 32G内存卡 1 树莓派官方raspbian buster
  • Mavros Client md5sum Error

    Mavros Client md5sum Error 运行阿木实验室px4 commander包里vio fly sh的 roslaunch px4 command px4 pos estimator launch 时报错 xff1a ER
  • Python_mavros_manual_contoller

    利用python完成mavros与PX4的通信工程 xff0c 同时也完成了对应的PX4中对应消息代码的调试查看 span class token keyword from span future span class token keyw
  • 树莓派安装MAVROS的一些坑

    一 基于原生系统安装ROS 详见文章https blog csdn net qq 33662995 article details 98645837 xff0c 写的很详细了 二 源码安装MAVROS 由于树莓派环境下不能直接从二进制安装
  • 提高mavros中IMU话题的发布频率

    提高mavros中IMU话题的发布频率 提高波特率提高方法命令行方式原始IMU数据飞控计算过后的IMU数据总结 更改启动文件 在上位机上很多时候都需要用到无人机的IMU信息 xff0c 我用的飞控硬件是Pixhawk 4 xff0c 感觉I
  • 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插件所在路径 xff1a catkin ws src mavros mavros src plugins 1 自定义消息处理插件的编写 参考代码 xff1a catkin ws src
  • MAVROS二次开发(五)进行测试

    MAVROS二次开发 五 进行测试 1 测试环境 PX4 xff1a v1 10 1 xff08 含自定义mavlink消息收发 xff09 ROS xff1a KineticUbuntu xff1a 16 04LTSQGC xff1a S
  • mavros操作飞机时方向位置改为机体坐标系下指令

    前面试了很多 xff0c 看官网里的说明 用 mavros setpoint raw local 34 里的frame id改为 34 base link 34 不行 又直接发mavros msgs PositionTarget 修改里面的
  • Mavros与无人机

    记录一些mavros与无人机的指令 xff0c 这篇博客只是起备忘录的作用 飞控接口赋权 span class token function sudo span span class token function chmod span 77
  • PX4 Offboard Control Using MAVROS on ROS

    这篇是下面这位大神推荐的 xff0c 我看了下确实也不错 https blog csdn net zhengyuxin0507 article details 80357405 摘自 xff1a https 404warehouse net
  • px4通过mavros+wifi+板载计算机连接地面站

    px4通过mavros 43 wifi 43 板载计算机连接地面站 https blog csdn net zouxu634866 article details 106835967
  • mavros_msgs的type_mask用法

    这几天在看自主无人机的一些代码 xff0c 如下 xff1a mavros msgs PositionTarget PositionSetpoint PositionSetpoint type mask 61 0b100111000000
  • QGC4.1.2二次开发(2)QGC连接与数据收发

    文章目录 前言一 连接原理二 连接过程与数据收发1 连接过程 xff08 以串口为例 xff09 2 数据发送 总结 前言 QGC连接无人机飞控时支持多种连接方式 xff0c 并且可以自动连接 xff0c 不由让人好奇它的实现原理 xff0
  • mavros连接px4失败的usb-ttl原因

    问题描述 xff1a 最近在搞mavros xff0c 以方便协处理器和pixhawk通讯 xff0c 在按照官网教程安装mavros xff0c 设置px4 xff0c 连接硬件之后发现mavros卡在中间下不去 xff1a MAVROS

随机推荐

  • 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