话题通讯自定义msg

发布于:2023-01-16 ⋅ 阅读:(691) ⋅ 点赞:(0)

前言

 

在ROS通信协议中,ROS中通过std_msgs封装了一些原生的数据类型,比如:String,Int32,Char,Bool,Int64,Empty

但是这些数据一般只包含一个data字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如:激光雷达的信息,std_msgs由于描述性就会不理想,这种场景下可以使用自定义的消息类型。

msgs只是简单的文本文件,每行具有字段类型和字段名称,可以使用的字段类型有:

string

float32 float64

time duration

int8 int16 int32 int64

other msg files

variable-length array[] and fixed-length array[C] (数组)

ROS中还有一种特殊类型:Header,标头包含时间戳(消息被发出去的那一刻的时间值)和ROS中常用的坐标帧信息。会经常看到msg文件的第一行具有Header标头。

流程简介:

1、按照固定格式创建msg文件

2、编辑配置文件

3、编译生成可以被Python或C++调用的中间文件

1、定义msg文件(类似结构体)

功能包下新建msg目录,添加文件Person.msg

string name
uint16 age
float height

2、编辑配置文件

package.xml 中添加编译依赖与执行依赖


<build_depend>message_generation</build_depend>

<exec_depend>message_runtime</exec_depend>

<!--

exec_depend以前对应的是 run_depend 现在非法

-->

CmakeList.txt 编辑msg相关配置


find_package(catkin REQUIRED COMPONENTS

        roscpp

        rospy

        std_msgs

        message_generation

)
#需要加入 message_generation,必须有 std_msgs

##配置msg源文件
 

add_message_files(

        FILES

        Person.msg

)

##生成消息时依赖于 std_msgs
 

generate_messages(

        DEPENDENCIES

        std_msgs

)

##执行时依赖
 

catkin_package(

 #       INCLUDE_DIRS include

#        LIBRARIES demo02_talker_listener

        CATKIN_DEPENDS roscpp rospy std_msgs message_runtime

#        DEPENDS system_lib

)

演示

1、在plumbing_pub_sub中新建文件夹msg

2、在msg中间中新建Person.msg文件

3、打开Person.msg文件

在里面输入

string name
int32 age
float32 height

 配置相关文件

打开package.xml

在<build_depend>std_msgs</build_depend>后面添加

<build_depend>message_generation</build_depend>

在<exec_depend>std_msgs</exec_depend>后面添加

<exec_depend>message_runtime</exec_depend>

打开CMakeLists.txt文件

找到

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

将其替换成

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)

找到

# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )

将其替换成

add_message_files(
  FILES
  Person.msg
)

找到

# generate_messages(
#   DEPENDENCIES
#   std_msgs
# )

将其注释去掉

generate_messages(

DEPENDENCIES

std_msgs

)

找到

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES plumbing_pub_sub
#  CATKIN_DEPENDS roscpp rospy std_msgs
#  DEPENDS system_lib
)

将其替换成

catkin_package(

# INCLUDE_DIRS include

# LIBRARIES plumbing_pub_sub

CATKIN_DEPENDS roscpp rospy std_msgs message_runtime

# DEPENDS system_lib

)

然后编译一下

看到 项目名称/devel/include下面出现Person.h

和 项目名称/devel/lib/python3/msg下面出现_Person.py

则证明你的自定义消息类型已经实现了

53. 54. 052话题通信_自定义msg_实现_Chapter2-ROS通信机制_哔哩哔哩_bilibili

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到