ROS学习手记 - 7 创建ROS msg & srv
来源:互联网 发布:编程语言趋势 编辑:程序博客网 时间:2024/06/16 04:59
至此,我们初步学习了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.
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
- 7、创建ROS msg和srv
- ROS学习笔记八:创建ROS msg和srv
- 创建ROS msg 和 srv
- (四)创建ROS msg 和 srv
- 创建ROS的msg和srv
- (四)创建ROS msg 和 srv
- ros 创建自己的msg srv 注意
- ROS Kinetic: msg & srv
- ROS(二) 创建一个ROS的msg和srv
- 机器人操作系统ROS Indigo 入门学习(11)——创建一个ROS msg和srv
- 机器人操作系统ROS Indigo 入门学习(11)——创建一个ROS msg和srv
- 机器人操作系统ROS Indigo 入门学习(11)——创建一个ROS msg和srv
- 机器人操作系统ROS Indigo 入门学习(11)——创建一个ROS msg和srv
- ROS的学习(十一)ROS的msg和srv
- ROS的msg和srv
- ROS系统下创建msg与srv文件过程
- ROS学习第四弹 (ROS编辑器及配置/ROS msg/srv 消息和服务)
- 浏览器兼容css设置
- Linux命令free详解
- 7月10日 使用CTE MSDN
- Sql Server 中一个非常强大的日期格式化函数
- sqlite3 not found的解决办法
- ROS学习手记 - 7 创建ROS msg & srv
- 使用UIAlertView
- JAVA 图片处理
- [图像]中值滤波(Matlab实现)
- Android View系统解析(上)
- function invoke objects DEMO
- 从设计到实现,一步步教你实现Android-Universal-ImageLoader-序
- 年轻程序员需要学习的5大经验
- Android通用圆点指示器——android-Universal-CircleIndicator