ROSz中自定义消息,并将其放入topic中发布全过程

  • Post author:
  • Post category:其他


ros是机器人操作系统的简称,现多用于自动驾驶中的某些领域中,最近工作中会用到ros采集车辆操作信息,但ros包含的已有的消息类型不足以满足车辆所有操作信息的发布,故需在ros中重新定义消息类型并将其发布。

一、ros内部自带的消息类型:

1、std消息

std消息属于基本数据类型消息。

在这里插入图片描述
2、geometry消息

geometry消息属于空间数据描述。

在这里插入图片描述
3、sensor消息

sensor消息属于传感器消息

在这里插入图片描述
可以看到ros中自带的消息已经很全,但是还是不能够满足项目需求,因此需要自定义消息内容。现将其过程总结如下:

二:自定义消息类型

1、建立和消息相关的文件

该过程为定义自己即将定义的消息包含哪些数据内容,一般需要自己弄清楚具体包含哪些数据类型,该数据类型一定要包含在ros自带的数据类型中,如果自己使用的数据类型不包含在ros基本数据类型中,则在catkin_make的过程中报错。注意:ros中没有double型数据,如果使用可以用float64代替。

(1)第一步需要在自己工作空间中创建msg文件夹

cd workspace
mkdir msg

(2)在msg文件夹中新建一个XXX.msg文件,该文件就包含自定义消息数据。msg文件是ros中定义消息类型的文件,一般放置在工作空间下的msg文件夹中,在工作空间编译的过程中可以使用msg文件生成不同编程语言使用的代码文件。例子:

std_msgs/Header header
float64 speed
float64 acc

以上代码便是自己定义的消息类型,其中std_msgs/Header heade是一个标准格式的头信息。

2、修改CMakeList.txt和package.xml

当我们定义好自己需要的消息类型后,往往会根据工程需要对工程进行编译,此时就需要更改CMakeList.txt和package.xml,修改这两个文件是为了让工程顺利地编译通过。当我们重新定义消息类型后,在编译过程中应当把消息类型的文件包含进去。

(1)package.xml

在修改package.xml,需要将生成新消息的所需的依赖添加进去,需要添加以下内容。

#build 依赖
<build_depend>message_generation</build_depend>
#执行依赖
<exec_depend>message_runtime</exec_depend>

(2)CMakeList.txt

在该文件中需要修改的地方较多,具体如下:在修改过程中,创建工作工作空间时可能会生成一些预先注释好的,需要将其注释去除。

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)
## Generate messages in the 'msg' folder
add_message_files(
   FILES
   XXX.msg
)
generate_messages(
   DEPENDENCIES
   std_msgs
)
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES beginner_tutorials
#  CATKIN_DEPENDS roscpp rospy std_msgs
#  DEPENDS system_lib
   CATKIN_DEPENDS message_runtime
)

通过以上两个过程,创建自定义的消息类型便结束了,随后便是使用

catkin_make

对工程进行编译。在编译完成之后工作空间内部会自动生成XXX.h文件以利于在使用c++编程时进行include

在代码中使用新定义的消息类型时,应该将新生成的XXX.h include进自己的代码中,随后便可像使用其他已有的消息一样对其进行发布和订阅。

include "workspace/XXX.h"

以上便是在ros中添加或自定义消息类型的全过程



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