ROS实操入门系列(六)ROS topic通讯之自定义复杂msg消息类型解决实际需求一
- 常见Msg消息
- 需求一
- 自定义消息
- 编写代码
- 需求一升级,需要定义更多的复杂消息(下一章)
- https://www.lanqiao.cn/courses/2947,提供准备好的云主机ros环境,进行实操,课程包括了 Topic 通讯, Service 通讯,ROS 自定义消息,URDF可视化,TF坐标转换等技术要点。每个技术点都会结合例子先把原理讲解清楚,为了达到学以致用的目的,我们会再进行知识拓展,针对每个技术点实现对应的生动有趣的需求,保证学完后会有很大的收获。
msg消息 是ROS topic通讯节点间传递的内容。msg消息描述的是业务间传递数据,也可以理解为业务间数据的抽象化。
常见Msg消息
-
std消息 (std消息属于基本数据类型消息,和python类似,描述的是数字,字符串,布尔类型等。)
-
geometry消息 (空间数据描述)
-
sensor消息 (传感器消息)
需求一
- 已知有两个节点,其中一个节点是Publisher,另外一个节点是Subscriber。Publisher发布的消息是 学生数据 ,包含了学生的 姓名 和 年龄 。要求实现这个两个节点,并且模拟数据发布和订阅
- Publisher和Subscriber的编写我们已经会了。但是中间传输的数据类型,默认系统是没有提供的。这个时候我们需要自己定制消息格式。总的来说,这个自定义的消息格式中,需要包含name和age。通常在编程语言中,我们还是要去确定消息字段中的类型。例如,Python程序,表达数据类型是这样的:
name = ‘’
age = 0
自定义消息
在Ros中,如果没有现成的消息类型来描述要去传递的消息时,我们会自定义消息。
通常我们会新建一个Package来去自定义消息,这个Package一般不去写任何的业务逻辑,只是用来声明自定义的消息类型,可以只定义一种消息类型,也可以定义多种消息类型,根据业务需求来定。所以,我们会单独的创建一个package,用来定义消息.
-
创建package
包名取名也是有讲究的,业务名_msgs。大家可以看看std_msgs,geometry_msgs,都是遵循这个规则。 -
创建msg目录
在package包下新建msg文件夹 -
创建msg文件
在msg文件夹下创建.msg文件. .msg文件就是自定义消息文件,用来描述消息格式的。例如案例中, 我们会去创建 student.msg文件, 内容如下图,这个自定义的消息包含两个数据形式,name和age,name的类型 是string,age的类型是int64。这个msg文件其实遵循一定规范的,每一行表示一种数据。前面是类型,后面是名称。 -
在package.xml种添加如下配置:
-
配置CMakeLists.txt
(1) 在find_package添加message_generation,结果如下:find_package(catkin REQUIRED COMPONENTS
roscpp
rosmsg
rospy
message_generation
)(2) 添加add_message_file,这里的student.msg要和你创建的msg文件名称一致,且必须时在msg目录下,否则编译会出现问题,结果如下:
add_message_files(
FILES
student.msg
)(3)generation_msg 配置:
(4) 修改catkin_package,为catkin编译提供了依赖 message_runtime,结果如下:
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo_msg
CATKIN_DEPENDS roscpp rosmsg rospy message_runtime
# DEPENDS system_lib
)(5) 编译项目(在下一章的升级需求中,因为添加了其他的消息类型,所以会遇到编译报错的问题,下一章会为大家进行讲解。)
cd 工作空间
catkin_make(5) 命令校验
rosmsg show student_msgs/student
编写代码
-
这一步很重要!!!退出clion, 在运行clion的窗口进入到工作空间目录执行 source devel/setup.bash, 需要重新把环境加载,不然写代码时找不到刚才写的消息类
-
编写publisher,如果执行了第一步还是不能导入student_msgs,仍需要再重复第一步,直到可以找到为止
-
编写subscriber
-
运行上面的两个文件查看结果
=============================================================================
需求一升级,需要定义更多的复杂消息(下一章)
自定义msg消息类型至此已经讲解完毕,下一章将会把需求升级,需要定义更多的复杂消息
评论(0)
您还未登录,请登录后发表或查看评论