ROS的学习(十一)ROS的msg和srv
2013-10-30 18:45
281 查看
msg是一个描述ROS中消息的域的简单的文本文件,它用来为消息产生不同语言的源代码。
一个srv文件描述一个服务,它由两部分组成,请求和服务。
msg文件被存储在一个包的msg目录下,srv文件被存储在srv目录下。msg是简单的文本文件,它的每一行由一个与的类型和域的名字组成。你可以使用的域的类型有:
ROS中还有一个特殊的类型Header,header包括了一个时间戳和一个经产在ROS中使用的坐标框架信息。你经常会看到在msg文件的第一行代码是:
下面是一个使用了Header的msg的例子:
srv文件和msg文件是一样的,除了它们包括两部分:请求和响应,这两部分通过'---'分隔。下面是一个srv文件的例子:
在上面的例子中A和B是请求,sum是响应。
打开之前,我们所建立的包:
在里面创建一个msg目录:
新建一个msg文件,并写入数据:
这是一个最简单的例子,msg文件只包括一行,当然也可以在文件中写入更多的数据,打开package.xml:
在里面添加下面两行:
之后保存退出。打开CMakeLists.txt:
添加message_generation到如下代码片,添加后结果如下:
添加CATKIN_DEPENDS message_runtime,如下:
找到下面的代码片:
将它修改为:
确保文件中有如下代码:
我们可以使用rosmsg show命令来查看,消息的详细类型,rosmsg show的使用方法如下:
查看Num消息类型如下:
你将会看到:
下面介绍如何使用srv,打开一个终端,在里面输入:
除了可以手工创建一个srv包以外,我们还可以从其他的包中复制,这时候roscp是一个非常有用的命令,它的使用方法如下:
我们从rospy_tutorials这个包中复制,命令如下:
接下来就是配置CMakeLists.txt文件,打开CMakeLists.txt:
在里面添加message_generation,我们之前已经添加过了,如下:
找到下面的代码片段:
将其修改为:
保存退出。
使用rossrv show可以查看我们刚刚建立的服务类型,它的使用方法和rosmsg show相似,用法如下:
例如:
你将会看到返回的结果如下:
接下来我们看一下如何将上述的文件生成为ros支持的语言代码,打开CMakeLists.txt:
找到下面这部分代码:
将起修改为如下:
将我们之前的generate_messages()去掉,保存退出。
现在重新构建一下这个包:
所有在msg目录下的.msg文件都会产生ros所支持的语言的源文件。C++消息的头文件产生在:
python的脚本产生在:
lisp文件产生在:
一个srv文件描述一个服务,它由两部分组成,请求和服务。
msg文件被存储在一个包的msg目录下,srv文件被存储在srv目录下。msg是简单的文本文件,它的每一行由一个与的类型和域的名字组成。你可以使用的域的类型有:
int8, int16, int32, int64 (plus uint*) float32, float64 string time, duration other msg files variable-length array[] and fixed-length array[C]
ROS中还有一个特殊的类型Header,header包括了一个时间戳和一个经产在ROS中使用的坐标框架信息。你经常会看到在msg文件的第一行代码是:
Header header
下面是一个使用了Header的msg的例子:
Header header string child_frame_id geometry_msgs/PoseWithCovariance pose geometry_msgs/TwistWithCovariance twist
srv文件和msg文件是一样的,除了它们包括两部分:请求和响应,这两部分通过'---'分隔。下面是一个srv文件的例子:
int64 A int64 B --- int64 Sum
在上面的例子中A和B是请求,sum是响应。
打开之前,我们所建立的包:
cd ~/catkin_ws/src/beginner_tutorials
在里面创建一个msg目录:
mkdir msg
新建一个msg文件,并写入数据:
echo "int64 num" > msg/Num.msg
这是一个最简单的例子,msg文件只包括一行,当然也可以在文件中写入更多的数据,打开package.xml:
vim package.xml
在里面添加下面两行:
<build_depend>message_generation</build_depend> <run_depend>message_runtime</run_depend>
之后保存退出。打开CMakeLists.txt:
vim CMakeLists.txt
添加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)
添加CATKIN_DEPENDS message_runtime,如下:
catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)
找到下面的代码片:
# add_message_files( # FILES # Message1.msg # Message2.msg # )
将它修改为:
add_message_files( FILES Num.msg )
确保文件中有如下代码:
generate_messages()
我们可以使用rosmsg show命令来查看,消息的详细类型,rosmsg show的使用方法如下:
rosmsg show [message type]
查看Num消息类型如下:
rosmsg show Num
你将会看到:
[beginner_tutorials/Num]: int64 num
下面介绍如何使用srv,打开一个终端,在里面输入:
roscd beginner_tutorials
mkdir srv
除了可以手工创建一个srv包以外,我们还可以从其他的包中复制,这时候roscp是一个非常有用的命令,它的使用方法如下:
roscp [package_name] [file_to_copy_path] [copy_path]
我们从rospy_tutorials这个包中复制,命令如下:
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
接下来就是配置CMakeLists.txt文件,打开CMakeLists.txt:
vim CMakeLists.txt
在里面添加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)
找到下面的代码片段:
# add_service_files( # FILES # Service1.srv # Service2.srv # )
将其修改为:
add_service_files( FILES AddTwoInts.srv )
保存退出。
使用rossrv show可以查看我们刚刚建立的服务类型,它的使用方法和rosmsg show相似,用法如下:
rossrv show <service type>
例如:
rossrv show beginner_tutorials/AddTwoInts
你将会看到返回的结果如下:
int64 a int64 b --- int64 sum
接下来我们看一下如何将上述的文件生成为ros支持的语言代码,打开CMakeLists.txt:
vim CMakeLists.txt
找到下面这部分代码:
# generate_messages( # DEPENDENCIES # # std_msgs # Or other packages containing msgs # )
将起修改为如下:
generate_messages( DEPENDENCIES std_msgs )
将我们之前的generate_messages()去掉,保存退出。
现在重新构建一下这个包:
cd ../..
catkin_make
cd -
所有在msg目录下的.msg文件都会产生ros所支持的语言的源文件。C++消息的头文件产生在:
~/catkin_ws/devel/include/beginner_tutorials/
python的脚本产生在:
~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg
lisp文件产生在:
~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/
相关文章推荐
- 机器人操作系统ROS Indigo 入门学习(11)——创建一个ROS msg和srv
- ROS学习第四弹 (ROS编辑器及配置/ROS msg/srv 消息和服务)
- 机器人操作系统ROS Indigo 入门学习(11)——创建一个ROS msg和srv
- 机器人操作系统ROS Indigo 入门学习(11)——创建一个ROS msg和srv
- 机器人操作系统ROS Indigo 入门学习(11)——创建一个ROS msg和srv
- ROS学习手记 - 7 创建ROS msg & srv
- ROS学习--(十一)创建ROS的信息和服务
- 创建ROS的msg和srv
- 【ROS学习】(十一)常见问题及解决方案
- ROS的msg和srv
- Creating a ROS msg and srv
- Ros中创建msg和srv遇到的问题
- ROS学习(十一):ROS URDF->model
- ros中创建msg和srv文件时,配置CMakeLists.txt文件问题
- ROS的初步学习(九)--创建一个简单的文本文件msg
- ROS学习笔记十一:ROS中数据的记录与重放
- ROS入门之主题和服务、msg和srv(C++)
- ROS学习(十一)—— msg srv
- ROS学习笔记八:创建ROS msg和srv
- ros_fuerte创建工作空间、创建ROS功能包、编译ROS功能包、创建节点(cpp)、编译节点、使用launch文件、创建srv和msg文件、使用新建的srv和msg文件