建立一个ROS msg and srv
msg是一个描述ROS消息字段的简单的文本文件,它们经常用来为消息产生不同语言的源代码。
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
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
当然我们能够增加多一些信息到这个消息文件中:
string first_name
string last_name
uint8 age
uint32 score
然后确保我们的消息文件能够转换成C++的源代码。需要做的是:
(1)打开package.xml,确保小面的两行在其中:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
在构建的时候,我们需要“message_generation”在运行时我们需要”message_runtime”。
(2)打开CMakeLists.txt,可以使用我们前面学的rosed命令:
rosed beginner_tutorials CMakeLists.txt
添加message_generation依赖到find_package中,这样就能产生消息.
# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis
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
)
手动的加入这个.msg文件,我们就能让CMake知道什么时候需要重新配置我们的工程。
接下来我们必须确保generate_messages()函数被调用,我们要打开下面的代码:
generate_messages(
DEPENDENCIES
std_msgs
)
接下来我们就能从我们的消息定义中产生源码文件了。
不着急生产源码文件,先学习一些其他的命令,我们利用命令行工具rosmsg show来查看消息的详细信息:
$ rosmsg show [message type]
举个例子:
$ rosmsg show beginner_tutorials/Num
返回结果:
int64 num
这里我们看到一个消息的类型包括两个部分:
beginner_tutorials -- 消息被定义的包的名字
Num -- 消息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
roscp会在rospy_tutorials这个包中搜索AddTwoInts.srv文件。然后拷贝到指定的路径中去。
与前面的消息类似,服务文件也需要确保能够转换为C++或者其他语言的源代码。
(1)打开package.xml,确保小面的两行在其中:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
(2)打开CMakeLists.txt文件:
添加message_generation依赖到find_package中,其实前面我们已经配置过了,不管message_generation这个东东的名字怎样,它对msg和srv都起到作用。
add_service_files()修改成:
add_service_files(
FILES
AddTwoInts.srv
)
这样我们就能够从我们定义的服务中产生源码文件了。
下面还是先来看一下有关服务的一些命令行工具,如rossrv show命令行:
$ rossrv show <service type>
例如:
$ rossrv show beginner_tutorials/AddTwoInts
得到结果:
int64 a
int64 b
---
int64 sum
和rosmsg show 一样,如果忘记了包的名字,可以直接show服务的名字:
$ rossrv show AddTwoInts
[beginner_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum [rospy_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum
会自动给出srv的类型和详细的信息。
上面的所有的文件的配置都设置好了,接下来我们看一下如何将上述的文件生成为ros支持的语言代码,打开CMakeLists.txt:
首先在CMakeLists.txt文件中找到下面的代码:
# generate_messages(
# DEPENDENCIES
# # std_msgs # Or other packages containing msgs
# )
对这段代码取消注释,如果用到了一些.msg的文件,那么就把包含这些文件的包增加为依赖。
generate_messages(
DEPENDENCIES
std_msgs
)
现在我们增加了一些新的信息,然后就需要重新编译这些包:
# In your catkin workspace
$ 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/
到现在为止,我们完成了消息和服务的一些任务,最后说一些有关于命令的东西,这些命令都有帮助的提示。
例如:
$ rosmsg -h
或者:
rosmsg show -h
建立一个ROS msg and srv的更多相关文章
- 7、创建ROS msg和srv
一.msg和srv介绍 msg: msg文件使用简单的文本格式声明一个ROS message的各个域. 仅须要创建一个msg文件,就能够使用它来生成不同语言的message定义代码. srv:srv文 ...
- Creating a ROS msg and srv
msg: msg files are simple text files that describe the fields of a ROS message. They are used to gen ...
- ROS学习笔记五:创建和使用ROS msg和srv
1 msg和srv简介 1.1 msg文件 msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下: int8, int16, int32, int64 (plus uint* ...
- 创建一个ROS msg
1. msg •msg:msg文件是简单的文本文件,用于描述ROS中消息(消息的各个参数项).用于为不同的编程语言生成有关消息的源代码. •srv:描述服务的文件,由两部分组成:请求和反馈: msg文 ...
- ros msg和srv使用
在包文件中新建文件夹srv和msg,在这两个文件夹中新建test.msg,test.srv 修改apckage.xml 添加以下内容 <build_depend>:message_gene ...
- ROS学习手记 - 7 创建ROS msg & srv
至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理. 本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ff ...
- ROS中msg和srv文件的区别
1.msg和srv究竟有什么区别?? msg只是单向的发送和接受. srv包含两个部分:请求和响应. 2.msg和srv简介 msg:msg文件是描述ROS消息字段的简单文本文件.它们用于为不同语言( ...
- ROS学习(十一)—— msg srv
一.msg 和 srv介绍 1.定义 消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本.它们会被用来生成不同语言的源代码 服务(srv): 一个srv文件描述一项服务.它包含两 ...
- ROS学习记录(四)————怎样建立一个package包?
功能包是什么? 英文表述package,我可没有在炫英文啊,我的英文很烂的,只是在提醒大家,在ROS系统中,这个词使用的频率非常之高,你必须记住它,要不就没法正确的看懂信息.言归正传,package是 ...
随机推荐
- usb键鼠标驱动分析
一.鼠标 linux下的usb鼠标驱动在/drivers/hid/usbhid/usbmouse.c中实现 1.加载初始化过程 1.1模块入口 module_init(usb_mouse_init); ...
- vpn pptp配置
安装 yum install pptpd 配置pptpd 改动/etc/pptpd.conf设置 localip 192.168.20.1 remoteip 192.168.20.234-238,19 ...
- 传iWatch 将在7月投入生产,10月出货,支持无线充电、触控、測量脉搏
今天又有关于 iWatch 的传言传出.据路透社的线人消息称,台湾的广达电脑(Quanta Computer Inc.)将于 7 月開始生产 iWatch.10 月出货,估计推出后首年的出货量为 50 ...
- SqlServer之触发器
1.触发器之理论: 触发器(Trigger)是一种特殊类型的存储过程,是在用户对某一种表的数据进行UPDATE.INSERT 和 DELETE 操作时被触发执行的一段程序.触发器有助于强制引用完整性, ...
- SVN多次重复验证
在MyEclipse中使用svn checkout时,总是弹出密码验证信息,原因是在首次保存密码时与服务器的密码不一致,而每次都是读取的本地密码导致重复验证,这里我们可以删除本地 的密码信息,问题解除 ...
- Programming C#.Interfaces
类实现一个接口时,它必须实现该接口的所有部分(方法和属性等),效果相当于类要表明:“我同意履行这个接口所定义的协定.” 从抽象类继承实现了“is-a(是一种)”关系,实现接口时一种“implement ...
- C语言版推箱子
推箱子源代码初步: #include<stdio.h> #include<conio.h> #include<stdlib.h> #define boolean i ...
- jQuery简单前端表单验证
<!DOCTYPE html> <html> <head> <title>表单验证</title> <script src=" ...
- 环境配置与JBoss安装-EJB3.0入门经典学习笔记(1)
目录 1. JDK的安装 2. JBoss的安装 3. JBoss安装目录说明 1. JDK的安装 1) 下载JDK 下载地址:http://www.oracle.com/technetwork/ja ...
- 在Windows的CMD中如何设置支持UTF8编码
这个问题很多人开始都会不知道,当然包括曾经的我,当用到的时候,只好求助于伟大的股沟和度娘了.网上有设置的方法,但说明确不够详细系统,说设置字体为:Lucida Console.问题是,在默认方式下,只 ...