ROS 官网学习资料整理 1-初级阶段 
目        录 
目录 ................................................................................................................................................................. 1 
一、基本命令 ................................................................................................................................................. 3 
二、创建一个 WorkSpace .............................................................................................................................. 3 
三、创建一个 Package ................................................................................................................................... 3 
3.1  一个包的组成 .................................................................................................................................. 3 
3.2  包与 catkin WorkSpace 空间关系 ................................................................................................... 3 
3.3  创建一个 catkin Package ................................................................................................................. 4 
3.4  包的依赖 .......................................................................................................................................... 5 
3.4.1 First-order dependencies ........................................................................................................ 5 
3.4.2.Indirect dependencies ............................................................................................................. 5 
3.5  定制自己的包 .................................................................................................................................. 5 
3.5.1  认识 package.xml 文件各部分含义 ..................................................................................... 5 
四、编译一个 ROS 包 .................................................................................................................................... 6 
4.1 Building Packages ............................................................................................................................. 6 
五、理解 ROS 节点 ........................................................................................................................................ 6 
5.1  熟悉如下几个概念 .......................................................................................................................... 7 
5.2 Client Libraries .................................................................................................................................. 7 
5.3 roscore ............................................................................................................................................... 7 
5.4  开始使用 rosnode ............................................................................................................................ 8 
5.5  用 rosrun. .......................................................................................................................................... 9 
六、理解 ROS 中的 Topics ........................................................................................................................... 10 
6.1  键盘遥控乌龟 ................................................................................................................................ 11 
6.2 ROS Topics...................................................................................................................................... 11 
6.3  介绍 rostopic .................................................................................................................................. 12 
6.3.1 rostopic echo ........................................................................................................................ 12 
6.3.2 rostopic list ........................................................................................................................... 13 
6.4 ROS Messages................................................................................................................................. 13 
6.4.1  用 rostopic type ................................................................................................................... 14 
6.4.2  用 rostopic pub 命令 ........................................................................................................... 15 
6.4.3  用 rostopic hz 命令 ............................................................................................................. 16 
七、理解 ROS 中的 Services 和 Parameters ................................................................................................ 18 
7.1 ROS Services................................................................................................................................... 18 
7.2  用 rosservice 命令 .......................................................................................................................... 18 
7.2.1 rosservice list ........................................................................................................................ 19 
7.2.2 rosservice type ...................................................................................................................... 19 
7.2.3 rosservice call ....................................................................................................................... 20 
7.3  用 rosparam .................................................................................................................................... 21 
7.3.1 rosparam list ......................................................................................................................... 21 
7.3.2 rosparam set 和 get 命令 ...................................................................................................... 21 
7.3.3 rosparam dump 和 rosparam load 命令 ............................................................................... 23 
八、使用 rqt_console 和 roslaunch ............................................................................................................. 24 
8.1  安装 rqt 和 turtlesim 包。 ............................................................................................................. 24 
8.2 rqt_console 和 rqt_logger_level 的用法 ......................................................................................... 24 
1 
Version:1.0;Date:20140430;Author:LiGaofeng,NKU 
ROS 官网学习资料整理 1-初级阶段 
8.2.1  关于 logger 的输出等级。 ................................................................................................. 26 
8.2.2 roslaunch 的用法 ................................................................................................................. 27 
8.2.3 roslaunching ......................................................................................................................... 27 
九、用 rosed 编辑文件 ................................................................................................................................ 29 
9.1 rosed 的使用 ................................................................................................................................... 29 
9.2  用 tab 键编辑一个包下的所有文件。 ......................................................................................... 30 
9.3 Editor ............................................................................................................................................... 30 
十、创建一个 ROS msg 和 srv ..................................................................................................................... 31 
10.1 msg 和 srv 介绍 ............................................................................................................................ 31 
10.2 msg ................................................................................................................................................ 32 
10.2.1  创建一个 msg ................................................................................................................... 32 
10.2.2  使用 rosmsg ...................................................................................................................... 33 
10.3  使用 srv ........................................................................................................................................ 34 
10.3.1  创建一个 srv ..................................................................................................................... 34 
10.3.2  使用 rossrv ........................................................................................................................ 35 
10.4 msg 和 srv 的一般步骤 ................................................................................................................ 35 
10.5  一些帮助工具 .............................................................................................................................. 37 
十一、写一个简单的发布者 Publisher 和订阅者(Subscriber)(C++语言)............................................. 37 
11.1  写一个 Publisher 节点 ................................................................................................................. 37 
11.2  写一个 Subscriber 节点。 ........................................................................................................... 39 
11.3  编译你的节点 .............................................................................................................................. 40 
十二、测试发布节点和订阅节点。 ........................................................................................................... 41 
12.1  运行 Publisher .............................................................................................................................. 41 
12.2  运行 Subscriber ............................................................................................................................ 42 
十三、写一个简单的 Service 和 Client ....................................................................................................... 42 
13.1  写一个 Service 节点 .................................................................................................................... 42 
13.2  写一个 Client 节点 ...................................................................................................................... 43 
13.3  编译你的节点 .............................................................................................................................. 44 
十四、测试 Service 和 Client ....................................................................................................................... 45 
14.1  运行 Service(记得先运行 roscore) ........................................................................................ 45 
14.2  运行 Client ................................................................................................................................... 45 
十五、记录数据以及回复数据 ................................................................................................................... 46 
15.1  记录数据(创建 bag 文件) ...................................................................................................... 46 
15.1.1  记录所有发布的 topics .................................................................................................... 46 
15.2  查看 bag 文件及 playing bag 文件.............................................................................................. 47 
15.3  记录数据的一部分 ...................................................................................................................... 48 
十六、roswtf 的使用 ................................................................................................................................... 48 
 
 
 
2 
Version:1.0;Date:20140430;Author:LiGaofeng,NKU 
ROS 官网学习资料整理 1-初级阶段 
一、基本命令 
cd [file_name]:  进入某一文件路径 
cd .. :  返回上一级目录 
ls:列出当前路径下的所有文件 
rospack find [package_name]:  返回所要找的包的路径 
roscd:  将当前路径设置为某一个 ROS 包或栈的路径或其子路径 
pwd:  显示出当前 
roscd log:将路径设置为 ROS 存储日志文件的路径。 
rosls [locationname[/subdir]]:直接将路径改为某个包下的某个子目录 
TAB 键,相当于 Eclipse 里面的 ALT+/。但没有 ALT+/功能那么强大,只能在路径唯一时才会自动出
来。不会给出可选列表 
二、创建一个 WorkSpace 
$ mkdir -p ~/catkin_ws/src 
$ cd ~/catkin_ws/src 
$ catkin_init_workspace 
初始化了工作空间,创建了一个 catkin_ws 空间,在该空间下有一个 src 文件夹。 
 
$ cd ~/catkin_ws/ 
$ catkin_make 
执行完该命令后,查看当前路径,会发现该空间除了 src,又多了 build 和 devel 文件夹。这两个文
件夹中是一些配置信息、编译信息等。 
三、创建一个 Package 
3.1  一个包的组成 
必须满足三个要求: 
1.  一个包里必须包含一个 package.xml 文件,用于说明关于包的基本信息(meta  information)——
相当于 Android 里德 Manifest.xml 文件。 
2.  包必须包含一个 CMakeLists.txt 文件。 
3.  一个文件夹里只能有一个包。这也意味着,不会有多个包共用相同的路径。 
3.2  包与 catkin WorkSpace 空间关系 
一个包通常要在一个 catkin WorkSpace 中。也可以单独创建包。 
包在 WorkSpace 空间中的结构是这样的: 
workspace_folder/        -- WORKSPACE 
  src/                   -- SOURCE SPACE 
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin 
    package_1/ 
3 
Version:1.0;Date:20140430;Author:LiGaofeng,NKU 
ROS 官网学习资料整理 1-初级阶段 
      CMakeLists.txt     -- CMakeLists.txt file for package_1 
      package.xml        -- Package manifest for package_1 
    ... 
    package_n/ 
      CMakeLists.txt     -- CMakeLists.txt file for package_n 
      package.xml        -- Package manifest for package_n 
3.3  创建一个 catkin Package 
首先要先进入之前创建的一个 WorkSpace 的 src 目录中 
$ cd ~/catkin_ws/src 
然后用 catkin_create_pkg 
 [depend1] [depend2] [depend3]创建一个包。 
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp 
依照上述命令,创建了一个名为 beginner_tutorials 的包。这个包里包含了一个 package.xml 和
CMakeList.txt 文件。进入 src 文件可以看到多了一个名为 beginner_tutotials 的包。 
进入 beginner_tutorials 查看一下。里面有如下文件: 
 
 
4 
Version:1.0;Date:20140430;Author:LiGaofeng,NKU 
ROS 官网学习资料整理 1-初级阶段 
那么,什么是包的依赖呢?上述的命令里,有三个依赖,std_msgs rospy roscpp,他们分别是什么含
义呢? 
3.4  包的依赖 
3.4.1 First-order dependencies 
一个包直接依赖的文件?类?包?库? 
3.4.2.Indirect dependencies 
包所依赖的文件可能还依赖别的文件。 
 
用 rospack depends1 
查询想要查询的类的依赖 
rospack depends 列出包所有依赖的对象 
3.5  定制自己的包 
3.5.1  认识 package.xml 文件各部分含义 
1. description 标签 
this can be your description 
2. maintainer 标签 
user 
这个标签描述了谁是这个包的维护者。至少需要一个维护者。标签中给出了维护者的邮箱 
3. license 标签 
BSD 
需要选择一个开放源码许可证。开放源码许可证有:BSD, MIT, Boost Software License, GPLv2, GPLv3, 
LGPLv2.1, and LGPLv3 等,在 ROS 里采用 BSD 开源许可证 
4. dependencies 标签 
给出了该包依赖于哪些包或文件 
默认为 buildtool_depend、编译 build_depend、运行 run_depend 
切换行号显示 
  12   catkin 
  13  
  14   roscpp 
  15   rospy 
  16   std_msgs 
  17  
  18   roscpp 
  19   rospy 
  20   std_msgs 
5.  去掉各种注释和无用的标签之后的 packag.xml 文件如下: 
 
     
      beginner_tutorials 
      0.1.0 
      The beginner_tutorials package 
     
      Li Gaofeng 
5 
Version:1.0;Date:20140430;Author:LiGaofeng,NKU 
ROS 官网学习资料整理 1-初级阶段 
      
BSD 
      http://wiki.ros.org/beginner_tutorials 
      Li Gaofeng 
     
      catkin 
     
      roscpp 
      rospy 
      std_msgs 
     
      roscpp 
      rospy 
      std_msgs 
     
     
四、编译一个 ROS 包 
4.1 Building Packages 
1.  利用 catkin_make 命令 
该命令是一个命令行工具,为标准 catkin 工作流程提供了方便。可以看做 catkin_make 命令把 Cmake
工作流程中的 cmake 和 make 的响应结合到了一起。 
$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...] 
2. Building Your Package 
$ cd ~/catkin_ws/ 
$ catkin_make 
首先必须进入一个 catkin 空间,不然在进行 catkin_make 编译时,catkin_make 默认的编译路径是空
间下的 src 目录,如果不在空间目录,则找不到 src 文件,编译不成功。 
如果更改编译路径: 
# In a catkin workspace 
$ catkin_make --source my_src 
$ catkin_make install --source my_src  # (optionally) 
编译之后,在工作空间中除了 src 文件夹,还有 build 和 devel 文件夹。build 是 cmake 和 make 在编
译包时生成的一些设置文件。查看该文件夹会发现其中多了一个 beginner_tutorials 的包。devel 文件
夹是默认的 devel 空间路径,是安装包之前的一些必要的可执行文件和库。 
五、理解 ROS 节点 
我们会用到一个轻量级的模拟器,用下面命令安装: 
$ sudo apt-get install ros-
-ros-tutorials 
6 
Version:1.0;Date:20140430;Author:LiGaofeng,NKU 
ROS 官网学习资料整理 1-初级阶段 
将其中的 distro 替换成自己安装的 ros 版本的名字,比如 ros-hydro 
5.1  熟悉如下几个概念 
Nodes:  节点 
Messages:  消息。一种数据类型,用来向一个 Topic 订阅或发布数据。 
Topics:  话题 
Master:  主节点 
rosout:  标准输出/标准错误的输出 
roscore: Master+rosout+parameter server 
5.2 Client Libraries 
ROS client library 允许节点以不同的变成语言与其他节点通信。其中有两个包: 
rospy = python client library 
roscpp = c++ client library 
5.3 roscore 
在运行 ROS 时应该首先运行的。运行: 
$ roscore 
会看到如下样式的输出: 
  ... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaun
ch-machine_name-13039.log 
  Checking log directory for disk usage. This may take awhile. 
  Press Ctrl-C to interrupt 
  Done checking log file disk usage. Usage is <1GB. 
   
  started roslaunch server http://machine_name:33919/ 
  ros_comm version 1.4.7 
   
  SUMMARY 
  ======== 
   
  PARAMETERS 
   * /rosversion 
   * /rosdistro 
   
  NODES 
7 
Version:1.0;Date:20140430;Author:LiGaofeng,NKU 
ROS 官网学习资料整理 1-初级阶段 
   
  auto-starting new master 
  process[master]: started with pid [13054] 
  ROS_MASTER_URI=http://machine_name:11311/ 
   
  setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf 
  process[rosout-1]: started with pid [13067] 
  started core service [/rosout] 
5.4  开始使用 rosnode 
好了,现在打开一个新的 terminal,让我们用 rosnode 来看看 roscore 都做了什么吧。 
Note: 打开一个新的 terminal 会重设环境,~/.bashrc 文件会 is sourced,如果在运行像 rosnode 这
样的命令时出现问题,你需要添加以下环境设置文件到~/.bashrc 文件中,或手动重新 source 他们。 
下面的命令会列出当前处于活动状态的所有节点: 
$ rosnode list 
如果什么都没有运行,会看到只有 rosout 节点 
下面命令会返回关于某指定节点的信息: 
$ rosnode info /rosout 
返回信息如下所示: 
  ---------------------------------------------------------------------
--- 
  Node [/rosout] 
  Publications: 
   * /rosout_agg [rosgraph_msgs/Log] 
   
  Subscriptions: 
   * /rosout [unknown type] 
   
  Services: 
   * /rosout/set_logger_level 
   * /rosout/get_loggers 
   
8 
Version:1.0;Date:20140430;Author:LiGaofeng,NKU