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

转载自:https://blog.csdn.net/qq_38981124/article/details/104861800?spm=1001.2014.3001.5501

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

小柏QAQ 2020-03-14 15:56:34 533 收藏 9 原力计划

文章标签: 自动驾驶

版权声明:本文为博主原创文章遵循 CC 4.0 BY-SA 版权协议转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_38981124/article/details/104861800

版权

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()
### 安装 MAVROS 的前提条件 为了在 Ubuntu 20.04 上成功安装 MAVROS,需要先确保系统已经配置好 ROS (Robot Operating System) 和 PX4 环境。这通常涉及到一系列依赖项的准备以及环境变量的设置[^1]。 ### 配置源和密钥 首先应当更新系统的软件包列表并添加必要的 GPG 密钥来验证下载的安全性: ```bash sudo apt update && sudo apt install curl gnupg2 lsb-release curl -s https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/apt_repo_add.sh | bash - ``` 上述命令会自动向 APT 源中加入 MAVLink/MAVROS 软件仓库,并导入相应的签名密钥以便后续可以安全地从该库获取所需资源。 ### 安装 MAVROS 当准备工作完成后,可以通过如下指令一次性完成 MAVROS 及其常用插件的部署: ```bash sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras ``` 这里假设使用的 ROS 版本为 Noetic,在 Ubuntu 20.04 中这是默认支持的长期稳定版本之一;如果使用其他版本,则需替换 `noetic` 关键字以匹配实际需求。 ### 编译自定义功能(可选) 对于那些希望进一步定制化 MAVROS 行为或者利用最新特性而不局限于官方发布的进制文件者来说,还可以考虑通过 Catkin 工具链来进行本地编译构建: #### 创建工作空间目录结构 ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ wstool init src ``` #### 获取源码并初始化子模块 ```bash git clone --recursive https://github.com/mavlink/mavros.git src/mavros ``` #### 构建项目 ```bash rosdep install --from-paths src --ignore-src -r -y catkin_make_isolated --install source ~/.bashrc ``` 以上过程能够帮助开发者获得更灵活可控的应用程序实例,同时也便于调试与开发新功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值