ROS2—自定义话题及服务消息类型

2023-05-16

1. source ROS 2 环境

source ROS 2的基础工作空间可以使用下面的命令:

source /opt/ros/foxy/setup.bash

2. 创建一个新的文件夹

执行类似下面的命令:

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src

另外一个好的习惯是,将你的工作空间中所有的包都放在src文件夹下。上面的代码在dev_ws下创建一个src文件夹,并且进入到该文件夹下。

3 创建功能包

进入到dev_ws/src文件夹,运行创建功能包的指令创建一个新的功能包more_interfaces,并在其中为msg文件创建一个文件夹:

cd ~/dev_ws/src
ros2 pkg create --build-type ament_cmake more_interfaces
mkdir more_interfaces/msg

4 创建msg文件

more_interfaces/msg中,创建一个新文件A.msg,例如:

std_msgs/Header            header                  # Ros header
float32                     speed                   # 车速(km/h)
float32                     steerAngle              # 转角

如果Header前面没有加std_msgs,编译时会报下面的错误:

fatal error: more_interfaces/msg/detail/header__struct.h: 没有那个文件或目录
   22 | #include "more_interfaces/msg/detail/header__struct.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/more_interfaces__rosidl_generator_c.dir/build.make:124:CMakeFiles/more_interfaces__rosidl_generator_c.dir/rosidl_generator_c/more_interfaces/msg/detail/A__functions.c.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:206:CMakeFiles/more_interfaces__rosidl_generator_c.dir/all] 错误 2
make[1]: *** 正在等待未完成的任务....

域名必须是由小写的字母或数字的字符以及下划线组成。必须以字母字符开头,不能以下划线结尾,而且不能有连续的两个下划线。因此用steerAngle会报下面错误:

Error processing 'float32 steerAngle' of
  'more_interfaces/A': ''steerAngle' is an invalid
  field name.  It should have the pattern
  '^(?!.*__)(?!.*_$)[a-z][a-z0-9_]*$''

5 编译msg文件

打开package.xml,并添加以下行:

<buildtool_depend>rosidl_default_generators</buildtool_depend>
  <build_depend>std_msgs</build_depend>
  <exec_depend>rosidl_default_runtime</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <member_of_group>rosidl_interface_packages</member_of_group>

请注意,在编译时,我们需要rosidl_default_generators,而在运行时,我们只需要rosidl_default_runtime。

打开CMakeLists.txt并添加以下行,找到从msg文件中生成消息代码的包::

find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(std_msgs REQUIRED)

set(msg_files
"msg/A.msg"
)
rosidl_generate_interfaces(${PROJECT_NAME}
  ${msg_files}
  DEPENDENCIES std_msgs
 )
if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  find_package(std_msgs REQUIRED)
  ament_lint_auto_find_test_dependencies()
endif()

  返回工作空间根目录,编译功能包:

cd ~/dev_ws
colcon build --packages-up-to more_interfaces

  然后开启一个新终端,运行:

. install/local_setup.bash
ros2 interface show more_interfaces/msg/A

  此时会看到消息A的内部定义。

或者运行:

 ros2 interface list

可以看到msg里面有我们自定义的more_interfaces/msg/A

参考链接:

ROS2教程(入门级):创建ROS2工作空间_车库109的博客-CSDN博客_ros2教程

ROS2入门教程——19. 自定义话题及服务消息类型 - 古月居

ROS2入门教程—自定义话题及服务消息类型_拓展_Roar冷颜的博客-CSDN博客

https://www.csdn.net/tags/NtjakgxsMTIwNDMtYmxvZwO0O0OO0O0O.htmlhttps://www.csdn.net/tags/NtjakgxsMTIwNDMtYmxvZwO0O0OO0O0O.html

ROS2 编译错误和警告_shadowsland的博客-CSDN博客
ROS2官方教程:关于ROS2接口_P2Tree的博客-CSDN博客_ros2 接口

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

ROS2—自定义话题及服务消息类型 的相关文章

  • 解决android studio 控制台乱码

    双击shift键 xff0c 输入vmoption xff0c 选择Edit Custom CM Options 如果没有配置过 xff0c 就会弹出窗口问是否创建配置文件 xff0c 点击Create xff0c 输入 Dfile enc

随机推荐

  • 无人机学习笔记

    硬件 首先从硬件开始说起把 xff0c 气压计 陀螺仪 磁力计 xff0c 这三个不用说肯定是必备的 xff0c 后面由于开发的需要还添加了激光测距 xff0c 以及光流 但是在开发过程中遇到了很多问题 xff0c 一个一个来说 气压计 气
  • 解决KEIL中ARM编译器不能编译的问题

    keil编译器出现问题 xff0c 根据提示意思就是ARM编译器选择不对的问题 Target 39 Printf 39 uses ARM Compiler 39 V5 06 update 6 build 750 39 which is no
  • linux 内核中strstr函数 功能

    在内核代码中看到strstr函数 xff1a mode 61 strstr boot command line 34 D 34 应该是一个字符串处理函数 xff0c 使用man命令查看下给出如下解释 xff1a SYNOPSIS inclu
  • KPI异常检测资料汇总

    文章目录 0 综述类1 KPI异常检测1 1 经典模型1 1 1 Donut 基于VAE的周期性无监督KPI异常检测1 1 1 1 论文解读1 1 1 2 源码分析 1 12 MAD 基于GANs的时间序列数据多元异常检测 1 2 行业落地
  • jupyter notebook:使用argparse包存在的问题及解决

    argparse模块 argparse是python用于解析命令行参数和选项的标准模块 导入argparse包 span class hljs keyword import span argparse 遇到的问题 parser 61 arg
  • Qt C++和Java相互调用

    Qt C 43 43 和Java相互调用 1 C 43 43 调用Java Test h span class token keyword class span span class token class name Test span s
  • 单片机HAL库使用HAL_UART_Receive_IT

    前言 由于本人第一次尝试开发单片机 xff0c 要实现的功能是信息转发 xff0c 需要调用HAL库方法 xff0c 中断接受信息转发给FPGA xff0c 这里没有用到DMA方式所以不做赘述 xff0c 特此记录分享希望帮到你们 发送信息
  • VLC播放gstreamer pipeline rtp流

    一 xff1a Gstreamer 下载gstreamer 编译等自行百度 pipeline命令 硬编码输出rtp gst launch 1 0 e videotestsrc 34 video x raw format 61 I420 wi
  • 【unity】Multiple plugins with the same name '...'解决方案

    Multiple plugins with the same name 39 ulua 39 found at 39 Assets Plugins uLua 1 22 x86 64 ulua dll 39 and 39 Assets Plu
  • CMAKE 环境变量

    CMAKE CXX FLAGS CMAKE C FLAGS 在cmake脚本中 xff0c 设置编译选项有两种方式 xff1a 1 1 add compile options命令 add compile options命令添加的编译选项是针
  • Gstreamer常见pipeline命令 - 持续更新中

    解码 xff1a xff08 根据码流类型自适应创建相应解码器 xff09 gst launch 1 0 filesrc location 61 home user DCIM Camera VID 20201001 103749 mov q
  • ubuntu18.04 安装包提示没有可安装候选

    sudo apt get install gcc 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 没有可用的软件包 gcc xff0c 但是它被其它的软件包引用了 这可能意味着这个缺失的软件包可能已被废弃 xf
  • D435在ROS下的使用

    本人电脑Ubuntu16 04 Ros 为kinetic D435可以用的ros源码下载地址 https github com intel ros realsense releases一定要仔细查看每一个版本基于的sdk的版本号 D435的
  • 在ros下使用D435出现问题ResourceNotFound: realsense2_camera

    在launch的文件内运行roslaunch rs rgbd launch出现错误 xff1a ResourceNotFound realsense2 camera 或运行 roslaunch realsense2 camera rs rg
  • 在ROS中发布IMU数据

    本文主要是来发布sensor msgs Imu类型的消息 xff0c 其中 xff29 xff2d xff55 的数据为虚拟的 xff11 xff0e 在自己的工作空间中创建ros程序包 这个包依靠std msgs roscpp rospy
  • 控制理论学习资料

    DR CAN 傅里叶分析之掐死教程 xff08 完整版 xff09 更新于2014 06 06
  • 卡尔曼滤波原理二:扩展卡尔曼

    1 理论部分 上一篇介绍了线性卡尔曼滤波器 xff0c 当系统为线性高斯模型时 xff0c 滤波器能给出最优的估计 xff0c 但是实际系统总是存在不同程度的非线性 xff0c 如平方 三角关系 开方等 对于非线性系统 xff0c 可以采用
  • PIXHAWK添加自定义消息存储到SD卡

    四旋翼调试阶段总会出现很多难以预见的现象 xff0c 这时为了找到所出问题的原因 xff0c 就需要获得原始相关数据进行分析 xff0c pixhawk代码提供了记录飞行日志的功能 xff0c 能够将飞行中的重要数据存入SD卡中 xff0c
  • reStructuredText介绍

    文档格式编辑 xff0c 目前主流最强大的要是latex xff0c 但是语法太复杂 xff0c 环境要求也多 xff0c 有的时候也是写文档往往选择markdown xff0c 常常怀疑文档编辑的markdown不是亲生的 xff0c 很
  • ROS2—自定义话题及服务消息类型

    1 source ROS 2 环境 source ROS 2的基础工作空间可以使用下面的命令 xff1a source opt ros foxy setup bash 2 创建一个新的文件夹 执行类似下面的命令 xff1a mkdir p