ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 10 创建ROS消息和ROS服务
2017-07-27 11:24
459 查看
0. 引言
本节讲述ROS消息和服务,以及rosmsg、rossrv和roscp工具。0.1 消息(msg)和服务(srv)介绍
消息(msg):msg文件是一个描述ROS中所使用消息类型的简单文本。它们会被catkin_make用来生成不同语言的源代码。服务(srv):一个srv文件描述一项服务。它包含请求和响应两部分(使用—分隔)。
msg文件实际上就是每行声明一个数据类型和变量名。可以使用以下类型:
int8,int16,int32,int64
float32,float64
string
time,duration
other msg file
定长数组array[x],可变长度数组arra[]
特殊类型Header(包含时间戳回绕坐标信息)
1. 使用msg
1.1 创建一个msg
首先切换到包目录下:$ roscd beginner_tutorials //切换到包中 $ mkdir msg //在包下创建msg文件夹 $ rosed beginner_tutorials Num.msg //创建一个Num.msg文件
在.msg文件中添加消息变量:
string first_name string last_name uint8 age uint32 score
以下的操作确保了msg文件可以被转换成C++、python或其他语言的源代码:
1.1.1 修改package.xml
确保package.xml中包含以下两句。<build_depend>message_generation</build_depend> <run_depend>message_runtime</run_depend>
意思是编译依赖message_generation包,而运行时依赖message_runtime包。
1.1.2 修改CMakeList.txt
1.1.2.1 添加编译依赖:
在 CMakeLists.txt文件中,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了。 你可以直接在COMPONENTS的列表里增加message_generation,就像这样:# Do not just add this line to your CMakeLists.txt, modify the existing line find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
1.1.2.2 添加运行依赖:
catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)
1.1.2.3 添加.msg文件
这里添加.msg文件,使得在msg文件夹中生产消息。//修改 # add_message_files( # FILES # Message1.msg # Message2.msg # ) //为 add_message_files( FILES Num.msg )
1.1.2.4 添加消息、服务生成指令
generate_messages()
1.1.3 小结
由于对cmake的使用不熟,目前对以上操作的理解是:find_package用于查找catkin宏和库,如果添加了COMPENTS 列表(例如我们添加的generate_messages),catkin还会寻找其他的依赖。
在add_message_files中添加我们需要编译的msg文件。通过查看CMkaeList文件,还可以看到add_service_files和add_action_files,这些都是用来添加我们自己的消息、服务和动作文件的。
generate_message()用来处理以上添加的3中文件。根据在此列出的任何依赖来生产消息、服务和动作。
1.2 使用rosmsg
可以使用rosmsg show命令来检查ROS是否能够识别我们添加的消息(只要在package下包含了smg文件夹并在其中存放了.msg文件就可以识别)。$ rosmsg show [message type]
可以直接输入消息名,或者输入消息所在的包和消息名例如:
$ rosmsg show beginner_tutorials/Num //或 $ rosmsg show Num
2. 使用srv
2.1 创建一个srv
类似msg的创建,需要在一个包中创建一个srv目录用于存放.srv文件。这里我们不手动编写了,而是使用roscd工具从一个包中复制到另一个包中(roscd实现了将文件从一个package复制到另一个package中的功能):
$ roscp [package_name] [file_to_copy_path] [copy_path]
我们使用以下命令从从rospy_tutorials包中copy AddTwoInts.srv文件到当前的srv文件夹中:
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
以下的操作确保了msg文件可以被转换成C++、python或其他语言的源代码:
2.1.1 添加对message_generation的依赖
# Do not just add this line to your CMakeLists.txt, modify the existing line find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
可以看出 message_generation对msg和srv都起作用。
2.1.2 添加.srv文件
# add_service_files( # FILES # Service1.srv # Service2.srv # ) //改成 add_service_files( FILES AddTwoInts.srv )
以上就是创建一个服务需要的步骤,请注意,因为之前已经创建了消息,所以一些相同的操作就不需要再次重复了。
2.2 使用rossrv
可以通过rossrv show命令来检查ROS是否能够识别我们添加的服务(只要在pacakge下的srv目录中存在.srv文件就可以)。$ rossrv show <service type>
可以仅仅指定服务名,或指定package和服务名,来查看服务参数。
如果仅仅指定服务名,那么拥有相同服务的包都会被列出。
3. msg和srv都需要的步骤
由于增加了消息和服务,现在我们可以编译了package了。在workspace中使用catkin_make编译。
$ catkin_make
现在所有msg路径下的.msg文件都将转换成ROS所支持语言的源代码。生成的C++头文件放置在~/catkin_ws/devel/include/beginner_tutorials/。其他语言有所不同。
4. 获得帮助
有时候很难记住所有的ROS工具的参数,这是可以使用-h选项来获得帮助信息。5. REVIEWS
rospack = ros+pack(age) : provides information related to ROS packagesrosstack = ros+stack : provides information related to ROS stacks
roscd = ros+cd : changes directory to a ROS package or stack
rosls = ros+ls : lists files in a ROS package
roscp = ros+cp : copies files from/to a ROS package
rosmsg = ros+msg : provides information related to ROS message definitions
rossrv = ros+srv : provides information related to ROS service definitions
rosmake = ros+make : makes (compiles) a ROS package (现在是catkin_make)
相关文章推荐
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 3 创建一个ROS包
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 12 测试消息发布器和订阅器
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 11 编写简单的消息发布器和订阅器 (C++)
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 8 学习ROS的rqt_console和roslaunch命令
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 5 理解ROS节点
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 1 安装和配置你的ROS环境
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 4 构建一个包
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 14 测试简单的Service和Client
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 13 编写简单的服务器和客户端
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 2 浏览ROS的文件系统
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 6 理解ROS话题
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 7 理解ROS服务和参数
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 15 录制与回放数据
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 16 roswtf入门
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 9 使用rosed编辑ROS中的文件
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第一章 安装ROS到Ubuntu主机
- ROS教程(十):创建ROS消息和ROS服务
- 基于ubuntu对于CIFRA-10进行训练学习
- ROS Jade配置Gazebo5:jade官方教程+gazebo官方教程的汇总——Ubuntu系统14.04
- ROS官网初级教程学习总结(10-16)