首页 > 其他分享 >ROS 2 自定义接口(消息、服务和动作)

ROS 2 自定义接口(消息、服务和动作)

时间:2024-08-12 14:52:43浏览次数:13  
标签:自定义 msgs 接口 custom srv msg ROS my

ROS 2 自定义接口(消息、服务和动作)

在 ROS 2 中,自定义接口是构建复杂机器人系统的核心。自定义接口使开发者能够定义特定于应用的数据结构和通信模式,包括消息(Message)、服务(Service)和动作(Action)。本文将介绍如何在 ROS 2 中创建和使用这些自定义接口。

1. 自定义消息(Message)

自定义消息用于定义节点之间传递的数据结构。消息类型可以包含多个字段,这些字段定义了数据的结构。

1.1 创建自定义消息

  1. 创建包
    首先,创建一个新的 ROS 2 包用于存放自定义消息:

    ros2 pkg create my_custom_msgs --build-type ament_cmake --dependencies rosidl_default_generators
    
  2. 添加消息目录
    在包目录下创建 msg 目录,并在其中添加 .msg 文件。例如,我们定义一个包含位置和速度的消息类型:

    mkdir -p my_custom_msgs/msg
    

    创建文件 PositionSpeed.msg

    float64 position
    float64 speed
    
  3. 修改 CMakeLists.txtpackage.xml
    CMakeLists.txt 中添加对消息的支持:

    rosidl_generate_interfaces(${PROJECT_NAME}
      "msg/PositionSpeed.msg"
      DEPENDENCIES # Add packages that above messages depend on
    )
    

    package.xml 中添加对消息的依赖:

      <buildtool_depend>ament_cmake</buildtool_depend>
      <!-- <depend>rosidl_default_generators</depend> -->
      <!-- 添加下面三行 -->
      <build_depend>rosidl_default_generators</build_depend>
      <exec_depend>rosidl_default_runtime</exec_depend>
      <member_of_group>rosidl_interface_packages</member_of_group> 
    
      <test_depend>ament_lint_auto</test_depend>
      <test_depend>ament_lint_common</test_depend>
    
  4. 构建包

    使用以下命令构建包:

    colcon build --packages-select my_custom_msgs
    
  5. 验证

    ros2 interface show my_custom_msgs/msg/PositionSpeed
    

    在这里插入图片描述

2. 自定义服务(Service)

自定义服务定义了节点之间的请求和响应数据结构。服务类型使用 .srv 文件定义。

2.1 创建自定义服务

  1. 添加服务目录
    在包目录中创建 srv 目录,并添加 .srv 文件。例如,定义一个计算圆面积的服务:

    mkdir -p my_custom_msgs/srv
    

    创建文件 ComputeArea.srv

    float64 radius
    ---
    float64 area
    
  2. 修改 CMakeLists.txtpackage.xml
    CMakeLists.txt 中添加对服务的支持:

    rosidl_generate_interfaces(${PROJECT_NAME}
      "msg/PositionSpeed.msg"
      "srv/ComputeArea.srv"
      DEPENDENCIES # Add packages that above messages depend on
    )
    
  3. 构建包

    colcon build --packages-select my_custom_msgs
    
  4. 验证

    ros2 interface show my_custom_msgs/srv/ComputeArea
    

    在这里插入图片描述

3. 自定义动作(Action)

自定义动作允许节点执行长期运行的任务,并提供进度和结果反馈。动作类型使用 .action 文件定义。

3.1 创建自定义动作

  1. 添加动作目录
    在包目录中创建 action 目录,并添加 .action 文件。例如,定义一个计算阶乘的动作:

    mkdir -p my_custom_msgs/action
    

    创建文件 Factorial.action

    int32 number
    ---
    int32 result
    ---
    string status
    
  2. 修改 CMakeLists.txtpackage.xml
    CMakeLists.txt 中添加对动作的支持:

    rosidl_generate_interfaces(${PROJECT_NAME}
      "msg/PositionSpeed.msg"
      "srv/ComputeArea.srv"
      "action/Factorial.action"
      DEPENDENCIES # Add packages that above messages depend on
    )
    
  3. 构建包

    使用以下命令构建包:

    colcon build --packages-select my_custom_msgs
    
  4. 验证

    ros2 interface show my_custom_msgs/action/Factorial
    

    在这里插入图片描述

结论

自定义接口在 ROS 2 中是非常重要的,它们使得节点能够以更灵活和高效的方式进行通信。通过定义自定义消息、服务和动作类型,开发者可以构建符合特定需求的机器人系统,提升系统的功能性和可维护性。

希望这篇文章能够帮助你更好地理解和使用 ROS 2 的自定义接口。

标签:自定义,msgs,接口,custom,srv,msg,ROS,my
From: https://blog.csdn.net/weixin_44318762/article/details/141131656

相关文章

  • PHP身份证三要素核验接口集成-身份证三要素查询真伪-身份证三要素实名认证
    身份证三要素实名认证接口简介:身份证三要素实名认证是核验身份证号、姓名、证件头像是否一致,以此来验证身份证的真伪,现已被广泛应用于电商、银行、保险等各种需要对身份真伪进行核查的场景。身份证三要素实名认证接口核验返回参数说明如下:序号 名称 类型 说明1 user_check_res......
  • 翔云PHP身份证识别接口集成示例-护照识别-港澳台通行证识别
    证件识别接口简介:证件识别接口一般是指针对各类证件进行识别,其中包含但不限于身份证识别、护照识别、港澳台通行证识别、户口页识别、驾驶证识别、行驶证识别、台湾健保卡等,其​多应用于需要进行实名认证与证件信息登记的场景。证件身份证识别接口返回结果示例如下:证件识别接......
  • Email接口如何与现有的CRM系统或平台集成?
    Email接口安全策略有哪些?如何选合适的Email接口?通过集成Email接口,企业可以更加高效地处理客户沟通,简化操作流程,并提升客户体验。AokSend将探讨Email接口如何与现有的CRM系统或平台集成,以及这种集成带来的优势。Email接口:主要重要Email接口不仅能够自动捕获和记录客户的沟......
  • 硬件接口之MIPI
    硬件接口之MIPIMIPI定义MIPI联盟定义了一套接口标准,把移动设备内部的接口如摄像头、显示屏、基带、射频接口等标准化,从而增加设计灵活性,同时降低成本、设计复杂度、功耗和EMI。MIPI特点高速:1Gbps/Lane,4Gbps吞吐量低功耗:200mV差分摆幅,200mv共模电压噪声抑制更少的pin,PCB......
  • vue2 - element弹框自定义指令 实现拖动、缩放
    directive/dialogDrag.jsimportVuefrom"vue";Vue.directive('dialogDrag',{bind(el,binding,vnode,oldVnode){//弹框可拉伸最小宽高letminWidth=400;letminHeight=300;//初始非全屏letisFullScreen......
  • 排序算法 内省排序(STL sort) IntroSort --C/C++
    内观排序/内省排序内省排序-维基百科,自由的百科全书(wikipedia.org)内省排序(英语:Introsort)是由大卫·穆塞尔在1997年设计的排序算法。这个排序算法首先从快速排序开始,当递归深度超过一定深度(深度为排序元素数量的对数值)后转为堆排序。采用这个方法,内省排序既能在常规数据集......
  • el-tree 组件自定义样式 最后一级flex,其余级别正常block
    先上需求的效果图el-tree的样式一般全都是block换行的,如下图先分析一下,1.树结构的级别是不确定的,但是样式上要求最后一个层级需要横着排列,其余竖着排,超出需要换行2.如何找到每一个数据项的最后一级呢?3.找到之后怎么办?ok,then,1.先通过插槽吧,因为这样咱们可以自定义最后一......
  • 使用API Monitor探测QQ安装包在创建桌面快捷方式时都调用了哪些API及COM接口,去解决C++
    目录1、通过代码制作安装包程序,不再使用专用的打包工具2、问题说明3、为啥路径中包含环境变量%ProgramFiles%会报找不到路径呢?4、使用APIMonitor监测QQ安装包在创建桌面快捷方式时都调用哪些COM组件的接口5、同时勾选IShelllinkDatalist接口类的接口,重新开启监测6、最后......
  • Vue自定义指令——函数式与对象式以及注意事项
    作者:CSDN-PleaSure乐事欢迎大家阅读我的博客希望大家喜欢使用环境:vscodeChrome浏览器目录1.什么是自定义指令1.1定义2.函数式自定义指令2.1定义2.2书写格式与效果3.对象式自定义指令3.1定义3.2书写格式与效果4.需要注意的坑4.1命名4.1.1问题4.1.2原因4.1.3......
  • Realtek 网卡驱动程序是用于操作系统与 Realtek 网络适配器之间的通信软件。这些驱动
    Realtek网卡,特别是用于个人电脑和服务器的网卡,曾经发现过一些安全漏洞。以下是一些常见的Realtek网卡漏洞及其相关信息:CVE-2020-28015:这个漏洞存在于RealtekRTL8188EU驱动程序中,影响了在特定情况下的无线网络连接。攻击者可以利用这个漏洞执行任意代码或引发系统崩溃。......