ROS学习手记 - 7 创建ROS msg & srv
至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理。
本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ffd4fad7a
Creating a ROS msg and srv
This tutorial covers how to create and build msg and srv files as well as therosmsg, rossrv and roscp commandline tools.
1. msg & srv 文件介绍
msg 文件 就是用来让不同语言能产生message的一个指导性文本文件。
srv file describes a service. It is composed of two parts: a request and a response.
2. msg & srv 文件存储位置:
<workspace>/packagename/msg/
&
<workspace>/packagename/srv/
| ==== msg file 说明 ==== 3. msgfile 的格式和生成 生成: $ cd ~/catkin_ws/src/beginner_tutorials $ mkdir msg $ echo "int64 num" > msg/Num.msg 格式: string first_name string last_name uint8 age uint32 score 4. msgfile 添加到package.xml的dependency中 <build_depend>message_generation</build_depend> <run_depend>message_runtime</run_depend> 5. 对CMakeLists.txt文件的修改: 5.1 添加message_generation dependency到CMakeLists.txt中: message_generation before the closing parenthesis find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation // add ’message_generation’ ) 5.2 export the message runtime dependency. catkin_package( ... CATKIN_DEPENDS message_runtime ... ...) 5.3 添加msg文件 add_message_files( FILES Num.msg ) 添加了.msg文件在CMake里,我们保证在你添加其他.msg文件时,CMake知道何时它需要reconfigure重新配置项目。 5.4 确保generate_messages 函数被调用 generate_messages( DEPENDENCIES std_msgs ) 6. rosmsg 工具的使用 make sure that ROS can see it using the rosmsg show command. Usage: $ rosmsg show [message type] Example: $ rosmsg show beginner_tutorials/Num $ rosmsg show Num =================== |
=== srv file 说明 === 1. srv的路径和生成 $ roscd beginner_tutorials $ mkdir srv Instead of creating a new srv definition by hand, we will copy an existing one from another package. For that, roscp is a useful commandline tool for copying files from one package to another. 使用roscp工具从一个package拷贝文件到另一个。 Usage: $ roscp [package_name] [file_to_copy_path] [copy_path] Now we can copy a service from the rospy_tutorials package: $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv 2. 保证package.xml里有dependency配置(可能独立修改了srv,确保一下) <build_depend>message_generation</build_depend> <run_depend>message_runtime</run_depend> 3.1 add the message_generation dependency to generate messages in CMakeLists.txt: # 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 ) 3.2 添加 srvice 文件 add_service_files( FILES AddTwoInts.srv ) 3.3 确保generate_messages 函数被调用 generate_messages( DEPENDENCIES std_msgs ) 4. 使用rossrv工具 添加以后,确保ROS can see it using the rossrv show command. Usage: $ rossrv show <service type> Example: $ rossrv show beginner_tutorials/AddTwoInts You will see: int64 a int64 b --- int64 sum Similar to rosmsg, you can find service files like this without specifying package name: $ rossrv show AddTwoInts [beginner_tutorials/AddTwoInts]: int64 a int64 b --- int64 sum [rospy_tutorials/AddTwoInts]: int64 a int64 b --- int64 sum |
无论是修改了msg还是srv,都需要做的步骤:
CMakeLists.txt文件的修改
1.
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation // add ’message_generation’
)
2. add any packages you depend on which contain .msg files that your messages use (in this case std_msgs), such that it looks like this:
generate_messages(
DEPENDENCIES
std_msgs
)
终于到了catkin_make出手的时候:
Now that we have made some new messages we need to make our package again:
# In your catkin workspace (by default:~/catkin_ws$)
$ cd ../..
$ catkin_make
$ cd -
至此,我们就编译完成了一套ROS 的 msg & srv
Any .msg file in the msg directory will generate code for use in all supportedlanguages.
The C++ message header file will be generated in ~/catkin_ws/devel/include/beginner_tutorials/.
The Python script will be created in ~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg.
The lisp file appears in ~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/.
The full specification for the message format is available at theMessage Description Language page.
Getting Help
We've seen quite a few ROS tools already. It can be difficult to keeptrack of what arguments each command requires. Luckily, most ROS tools providetheir own help.
Try:
$ rosmsg -h
You should see a list of different rosmsg subcommands.
Commands:
rosmsgshow Show message description
rosmsgusers Find files that use message
rosmsgmd5 Display message md5sum
rosmsgpackage List messages in a package
rosmsgpackages List packages that contain messages
You can also get help for subcommands
$ rosmsg show -h
- This shows the arguments that are needed for rosmsg show:
· Usage: rosmsg show[options] <message type>
·
· Options:
· -h, --help show this help message and exit
-r, --raw show raw message text, including comments
Review
Lets just list some of the commands we've used so far:
- rospack = ros+pack(age) : provides information related to ROS packages
- 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
- catkin_make : makes (compiles) a ROS package
- rosmake = ros+make : makes (compiles) a ROS package (if you're not using a catkin workspace)
Next Tutorial
Now that you've made a new ROS msg and srv, let's look at writing a simplepublisher and subscriber(python)(c++).
ROS学习手记 - 7 创建ROS msg & srv的更多相关文章
- ROS学习手记 - 8 编写ROS的Publisher and Subscriber
上一节我们完成了 message & srv 文件的创建和加入编译,这次我们要玩简单的Publisher 和 Subscriber 要玩 Publisher 和 Subscriber, 需要具 ...
- ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters
上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameters 我不理解为何 ROS wiki 要把service与parameter放在一起介绍, 很想分 ...
- ROS学习手记 - 6 使用ROS中的工具:rqt_console & roslaunch & rosed
http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch Using rqt_console and roslaunch This tuto ...
- ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python)
ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python) 时隔1年,再回来总结这个问题,因为它是ros+python开发中,太常用的一个操作,需要 ...
- ROS学习笔记二:ROS系统架构及概念
本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...
- ROS学习笔记9-创建ros消息和服务
该节内容主要来自于官方文档的两个小节:1.使用rosed来编辑2.创建ros消息的服务 先来看rosed: rosedrosed命令是rosbash的一部分,使用rosed可以直接编辑包中的一个文件, ...
- ROS学习笔记一(ROS的catkin工作空间)
在安装完成ROS indigo之后,需要查看环境变量是否设置正确,并通过创建一个简单的实例来验证ROS能否正常运行. 1 查看环境变量 在ROS的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...
- ROS学习笔记一:ROS安装与测试
1 Ubuntu和ROS版本的对应关系 Ubuntu 和 ROS 都存在不同的版本,其对应关系如下: 注:如果Ubuntu版本和ROS版本不对应的话,安装就不会成功了- 笔者安装的是Ubuntu14. ...
- ROS学习(一)Ros 中使用kinect
上的安装说明如下: 官网上明确写了如果安装windows kinect还需要安装一个驱动,但是有些ROS的书上并没有这么做,只提到了使用如下两步进行安装即可使用: sudo apt-get insta ...
随机推荐
- openwrt 无线中继
参考: https://wiki.openwrt.org/doc/recipes/relayclient 该方法可以实现中继AP,而不需要AP(WDS)模式.中继后,相当于该路由所有的LAN口以及AP ...
- FastReport 保存为文件
public void SaveToPDF<TModel>(List<TModel> model, string content, string saveFilePath) { ...
- 统计apk或jar中方法数量
一.apk中方法数量 ./android-sdk-linux/build-tools/23.0.2/dexdump -f apk路径 | grep method_ids_size 二.jar中方法数 ...
- bzoj4948: World Final2017 A
求简单多边形内的最长线段长度 显然存在一组最优解,使其所在直线经过多边形的两个端点,枚举这两个端点,求出直线和多边形的有效交点,从而得出直线有哪些部分在多边形内(含边界). 由于多边形的一些边可能与直 ...
- 2.C++语言特性
一.普遍编程语言的特征 任何常用的编程语言都具备一组公共的语法特征,不同的语言仅在特征的细节上有所区别.所以,要想掌握一门语言,需要理解其语法特征的实现细节是第一步. 最基本的特征包括: ...
- (转载)通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔
转载自:https://blog.csdn.net/lifetragedy/article/details/7708724 参考文章:tomcat以及常用web容器线程池的实现原理https://bl ...
- Web jsp开发学习——点击菜单页面切换
两个网页使用同一个head,在点击“首页”后,head的“首页”变成绿色,点击“新闻”后,head的“新闻”变成绿色,head的“首页”恢复原来的颜色 head.jsp <%@ page ...
- [转][C#]降级.net 源码4.5
来自:https://www.cnblogs.com/had37210/p/8057042.html 主要是 Task 的降级: 1.net4.5.2 引入了 async/await 关键字. 这个其 ...
- HTML5绘制饼图示例(一)
原文地址:http://www.2cto.com/kf/201108/100251.html HTML5引入Canvas元素,用于图形的绘制,我们可以仅仅基于HTML和JavaScript就能绘制出原 ...
- HDOJ 2007 平方和与立方和
#include<iostream> #include<algorithm> using namespace std; int main() { int m, n; while ...