ROS基础教程学习笔记8-创建ROS msg 和srv
1.消息(msg)和服务(srv)介绍
-
消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码。
-
服务(srv): 一个srv文件描述一项服务。它包含两个部分:请求和响应。
msg文件存放在package的msg目录下,srv文件则存放在srv目录下。
msg文件样例:
[code] Header header string child_frame_id geometry_msgs/PoseWithCovariance pose geometry_msgs/TwistWithCovariance twist
srv文件样例:
[code] int64 A //A和B为请求 int64 B --- int64 Sum //响应
2.使用msg
(1)先在之前创建的package文件下创建信息
[code]$ cd ~/catkin_ws/src/beginner_tutorials $ mkdir msg $ echo "int64 num" > msg/Num.msg
这样在msg文件夹中会生成一个名为Num.msg的文本,里面只有一行信息:int 64 num
还有关键的一步:我们要确保msg文件被转换成为C++,Python和其他语言的源代码:
查看package.xml, 确保它包含以下两条语句:
[code]<build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend>
如果没有的话就添加进去。
package.xml修改完成之后,需要对CMakeLists.txt文件简单修改,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了,可以直接在COMPONENTS的列表里增加message_generation,
CATKIN_DEPENDS message_runtime同时,你需要设置运行依赖项,找到catkin_package(),添加CATKIN_DEPENDS message_runtime
[code]catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)
找到如下代码块:
[code]# add_message_files( # FILES # Message1.msg # Message2.msg # )
去掉注释符号#,用你的.msg文件替代Message*.msg,就像下边这样:
[code]add_message_files( FILES Num.msg )
手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。 确保添加了如下代码:
[code]generate_messages( DEPENDENCIES std_msgs )
(2)使用rosmsg
[code]$ rosmsg show beginner_tutorials/Num
就会显示Num.msg文件中的内容:
[code]int64 num
如果忘了所在的package名字,可以输入:
[code]$ rosmsg show Num
此时会显示:
[code][beginner_tutorials/Num]: int64 num
3.使用srv
(1)在之前的package中创建一个src文件
[code]$ roscd beginner_tutorials $ mkdir srv
使用roscp命令从package文件中复制一个服务文件:
[code]$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
还有很关键的一步:我们要确保srv文件被转换成C++,Python和其他语言的源代码。
现在认为,你已经如前边所介绍的,在CMakeLists.txt文件中增加了对message_generation的依赖。:
[code]find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
这一步前面msg信息已经修改了。msg srv都起作用
同样,跟msg文件类似,你也需要在CMakeLists.txt文件中做一些修改。查看上边的说明,增加额外的依赖项。
删掉#,去除对下边语句的注释:
[code]# add_service_files( # FILES # Service1.srv # Service2.srv # )
用你自己的srv文件名替换掉那些Service*.srv文件:
[code]add_service_files( FILES AddTwoInts.srv )
(2)使用rossrv
[code]$ rossrv show beginner_tutorials/AddTwoInts
将会显示:
[code]int64 a int64 b --- int64 sum
和rosmsg一样,可以不用package查看:
[code]$ rossrv show AddTwoInts [beginner_tutorials/AddTwoInts]: int64 a int64 b --- int64 sum [rospy_tutorials/AddTwoInts]: int64 a int64 b --- int64 sum
4.msg和srv都需要的步骤
在CMakeLists.txt文件中找到下面这部分:
[code]# generate_messages( # DEPENDENCIES # # std_msgs # Or other packages containing msgs # )
去掉注释并附加上所有你消息文件所依赖的那些含有.msg文件的package
[code]generate_messages( DEPENDENCIES std_msgs )
由于增加了新的消息,所以我们需要重新编译我们的package:
[code]# In your catkin workspace $ cd ../.. $ catkin_make
5.总结-msg和srv的一般步骤
- 首先,需要先修改package中的package.xml文件,确保messgae相关语句没有被注释掉;
- 其次,修改CMakeLists.txt文件:
- 在find_package函数中加入message_generation依赖;
在catkin_package函数中加入message_runtime依赖;
修改add_message_file函数,添加入自己创建的Num.msg文件;或者在add_service_file函数中添加入自己创建的srv文件;
确保generate_messages函数被调用运行,去掉注释符号#; - 最后重现编译
参考文献:http://wiki.ros.org/cn/ROS/Tutorials/CreatingMsgAndSrv
https://www.geek-share.com/detail/2683206823.html
- ROS基础教程学习笔记3-创建并编译ros程序包
- ROS学习笔记八:创建ROS msg和srv
- ROS基础教程学习笔记4-理解ROS的节点
- ROS中级教程学习笔记1-手动创建ROS package
- ROS基础教程学习笔记9-编写简单的消息发布器和订阅器C++
- ROS学习笔记一:基础教程(上)
- ROS基础教程学习笔记13-roswtf入门
- ROS基础教程学习笔记11-编写简单的服务器和客户端并测试
- ROS基础教程学习笔记2-ROS文件系统的学习
- ROS基础教程学习笔记10-测试消息发布器和订阅器
- ROS基础教程学习笔记5-理解ROS的话题
- ROS基础教程学习笔记6-理解ROS的服务和参数
- ROS学习笔记一:基础教程(下)
- ROS基础教程学习笔记1-安装并配置ROS环境
- ROS基础教程学习笔记7-使用roscd编辑ROS中的文件
- Silverlight学习笔记(二):创建Hello World 简单基础应用
- Python基础教程学习笔记----第五章 条件、循环和其他语句
- 黑马程序员_毕向东_Java基础视频教程学习笔记(二十二)
- python基础教程_学习笔记18:标准库:一些最爱——shelve
- IOS开发基础教程学习笔记4 在storyboard的场景之间传递数据