至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理。

本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ffd4fad7a

  1. 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的更多相关文章

  1. ROS学习手记 - 8 编写ROS的Publisher and Subscriber

    上一节我们完成了 message & srv 文件的创建和加入编译,这次我们要玩简单的Publisher 和 Subscriber 要玩 Publisher 和 Subscriber, 需要具 ...

  2. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameters 我不理解为何 ROS wiki 要把service与parameter放在一起介绍, 很想分 ...

  3. ROS学习手记 - 6 使用ROS中的工具:rqt_console & roslaunch & rosed

    http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch Using rqt_console and roslaunch This tuto ...

  4. ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python)

    ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python) 时隔1年,再回来总结这个问题,因为它是ros+python开发中,太常用的一个操作,需要 ...

  5. ROS学习笔记二:ROS系统架构及概念

    本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...

  6. ROS学习笔记9-创建ros消息和服务

    该节内容主要来自于官方文档的两个小节:1.使用rosed来编辑2.创建ros消息的服务 先来看rosed: rosedrosed命令是rosbash的一部分,使用rosed可以直接编辑包中的一个文件, ...

  7. ROS学习笔记一(ROS的catkin工作空间)

    在安装完成ROS indigo之后,需要查看环境变量是否设置正确,并通过创建一个简单的实例来验证ROS能否正常运行. 1 查看环境变量 在ROS的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...

  8. ROS学习笔记一:ROS安装与测试

    1 Ubuntu和ROS版本的对应关系 Ubuntu 和 ROS 都存在不同的版本,其对应关系如下: 注:如果Ubuntu版本和ROS版本不对应的话,安装就不会成功了- 笔者安装的是Ubuntu14. ...

  9. ROS学习(一)Ros 中使用kinect

    上的安装说明如下: 官网上明确写了如果安装windows kinect还需要安装一个驱动,但是有些ROS的书上并没有这么做,只提到了使用如下两步进行安装即可使用: sudo apt-get insta ...

随机推荐

  1. 关于SQL Server 无法生成 FRunCM 线程(不完全)

    在五一的前一天,准备启动数据库完成我剩下的项目代码时,数据库配置管理器出现了一个让人蛋疼的问题sqlserv配置管理器出现请求失败或服务器未及时响应关于这个问题的处理方法,经过我两个小时的百度,网上对 ...

  2. CentOS6.5把MySQL从5.1升级到5.6后,MySQL不能启动

    解决了:进入mysql安装目录 cd /var/lib/mysql删除了如下三个文件:ibdata1  ib_logfile0  ib_logfile1 CentOS6.5把MySQL从5.1升级到5 ...

  3. git add , git commit 添加错文件 撤销

    1. git add 添加 多余文件 这样的错误是由于, 有的时候 可能 git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件 git add 如果添加了错误的文件的话 撤 ...

  4. Python中的self和init

    From: https://www.crifan.com/summary_the_meaning_of_self_and___init___in_python_and_why_need_them/ 背 ...

  5. 安装包制作工具 SetupFactory 详解

    Setup Factory 是一个强大的安装程序制作工具.提供了安装制作向导界面,即使你对安装制作不了解,也可以生成专业性质的安装程序.可建立快捷方式,也可直接在 Windows 系统的注册表加入内容 ...

  6. 一个关于WCF调用远程链接返回405错误不允许使用此方法的问题

    最近在调试WCF的接口时一直返回“405不允许使用此方法”,这个问题困扰了大半天,网上查了各种办法,但是每个人遇到的问题不同还是不能解决. 最后无意之中发现问题所在,记录一下帮助后面的同学解决问题. ...

  7. python 判断返回结果 in用法

    AA=data[0]["content"] if U"已签收" in AA:(判断 AA里面有没有包含 "已签收的字样") print &q ...

  8. es6 class函数的用法,及兼容程度

    //es6中 class的新特性:面向对象的方式 class name{ fram(){ var div=document.getElementById("div"); div.s ...

  9. go语言学习--指针数组和数组指针

    数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的 ...

  10. linux的cd、ls、chmod命令

    cd ls ls:查看权限  chmod:修改权限