爱折腾-创客智造实验室 - ROS入门教程
type: channel
link: https://www.ncnynl.com/category/ros-junior-tutorial
description: 通过学习ROS入门教程，了解ROS机器人操作系统的安装，使用，系统结构，系统命令，包开发等
items: ROS入门教程-目录
items: ROS入门教程-1.1.1 安装并配置ROS环境(indigo版本)
items: ROS入门教程-1.1.2 ROS文件系统介绍
items: ROS入门教程-1.1.3 创建ROS程序包
items: ROS入门教程-1.1.4 编译ROS程序包
items: ROS入门教程-1.1.5 理解 ROS节点
items: ROS入门教程-1.1.6 理解ROS话题
items: ROS入门教程-1.1.7 理解ROS服务和参数
items: ROS入门教程-1.1.8 使用 rqt_console 和 roslaunch
items: ROS入门教程-1.1.8 使用 rxconsole 和 roslaunch (ROS fuerte之前版本)

ROS入门教程-目录
type: item
date: 2016-08-01T08:37:00+00:00
description: ROS入门教程 本系列来自：http://wiki.ros.org/cn/ROS/Tutorials 国外网站有时候比较慢，特转摘到这里。访问原文速度快的，建议还是阅读原文！ 非初学者: 如果你已经很熟悉 ROS fuerte(要塞龟)或更早期版本的使用，而只是想使用在groovy(加岛象龟)和hydro(渔龟)中开始采用的最新编译构建系统catkin，那你可以深入学习catkin教程。 但是我们仍然建议所有人学完整个“初级”教程以方便理解新增的功能特性。 如果你是Linux初学者： 也许先学习一些有关linux命令行工具的快速使用教程会对你很有帮助，这里有篇好教程（英文）。 目录 1.核心ROS教程 1.1 初级 1.2 中级 2.ROS标准 3.外部ROS资源 3.1 外部教程 3.2 外部研讨会或课件 4.在机器人上运行ROS 5.其它ROS函数库教程 6.提供ROS接口的函数库教程 1.核心ROS教程 1.1 初级 1.1.1 安装并配置ROS环境 本教程详细描述了ROS的安装与环境配置。 1.1.2 ROS文件系统介绍 本教程介绍ROS文件系统概念，包括命令行工具roscd、rosls和rospack的使用。 1.1.3 创建ROS程序包 本教程介绍如何使用roscreate-pkg或catkin创建一个新程序包,并使用rospack查看程序包的依赖关系。 1.1.4 编译ROS程序包 本教程介绍ROS程序包的编译方法 1.1.5 理解 ROS节点 本教程主要介绍 ROS 图（graph）概念 并讨论roscore、rosnode和 rosrun 命令行工具的使用。 1.1.6 理解ROS话题 本教程介绍ROS话题（topics）以及如何使用rostopic 和 rxplot 命令行工具。 1.1.7 理解ROS服务和参数 本教程介绍了ROS 服务和参数的知识，以及命令行工具rosservice 和 rosparam的使用方法。 1.1.8 使用 rqt_console 和 roslaunch 本教程介绍如何使用rqt_console和rqt_logger_level进行调试，以及如何使用roslaunch同时运行多个节点。早期版本中的rqt工具并不完善，因此，如果你使用的是“ROS fuerte”或更早期的版本，请同时参考这个页面学习使用老版本的“rx”工具。 1.1.9 使用rosed编辑ROS中的文件 本教程将展示如何使用rosed来简化编辑过程。 1.1.10 创建ROS消息和ROS服务 本教程详细介绍如何创建并编译ROS消息和服务，以及rosmsg, rossrv和roscp命令行工具的使用。 1.1.11 编写简单的消息发布器和订阅器 (C++) 本教程将介绍如何编写C++的发布器节点和订阅器节点。 1.1.12 写一个简单的消息发布器和订阅器 (Python) 本教程将通过Python编写一个发布器节点和订阅器节点。 1.1.13 测试消息发布器和订阅器 本教程将测试上一教程所写的消息发布器和订阅器。 1.1.14 编写简单的Service和Client (C++) 本教程介绍如何用C++编写Service和Client节点。 1.1.15 编写简单的Service和Client (Python) 本教程介绍如何用Python编写Service和Client节点。 1.1.16 测试简单的Service和Client 本教程将测试之前所写的Service和Client。 1.1.17 录制与回放数据 本教程将教你如何将ROS系统运行过程中的数据录制到一个.bag文件中，然后通过回放数据来重现相似的运行过程。 1.1.18 roswtf入门 本教程介绍了roswtf工具的基本使用方法。 1.1.19 探索ROS维基 本教程介绍了ROS维基(wiki.ros.org)的组织结构以及使用方法。同时讲解了如何才能从ROS维基中找到你需要的信息。 1.1.20 接下来做什么？ 本教程将讨论获取更多知识的途径，以帮助你更好地使用ROS搭建真实或虚拟机器人。 现在你已经完成了初级教程的学习，请回答这个 问卷来检验一下自己的学习效果。 1.2 中级 大多数客户端API的使用教程可以在相关程序包(roscpp, rospy, roslisp)中找到。 1.2.1 手动创建ROS package 本教程将展示如何手动创建ROS package 1.2.2 管理系统依赖项 本教程将展示如何使用rosdep安装系统依赖项. 1.2.3 Roslaunch在大型项目中的使用技巧 本教程主要介绍roslaunch在大型项目中的使用技巧。重点关注如何构建launch文件使得它能够在不同的情况下重复利用。我们将使用 2dnav_pr2…

ROS入门教程-1.1.1 安装并配置ROS环境(indigo版本)
type: item
date: 2016-08-01T08:42:00+00:00
description: 1.安装并配置ROS环境 说明 本教程详细描述了ROS的安装与环境配置。 此为 Ubuntu14.04 + ROS indigo安装说明 注： ubuntu16.04 + ROS Kinetic 版本安装：参考链接 ubuntu18.04 + ROS Melodic 版本安装：参考链接 官方安装ROS说明 在开始学习这些教程之前请先按照ROS安装说明完成安装。 虚拟机安装及说明 VirtualBox虚拟机 VirtualBox虚拟机5.0 (密码:ncnynl.com)| VirtualBox虚拟机下载最新 VMWare Workstation虚拟机 最新版下载 | 安装说明 ubuntu14镜像 本镜像需要安装到电脑或虚拟机 ubuntu14.04镜像下载 镜像1 | 镜像2 Exbot镜像，包含Ubuntu14.04+ROS(indigo)+Turtlebot等 Exbot镜像说明 | 镜像下载地址 ubuntu for ros镜像，包含Ubuntu14.04+ROS(indigo)，64位基础版 | 32位基础版 | 64位开发版 | 32位开发版 | 电脑版安装说明 | 虚拟机版安装说明 Oracle VM VirtualBox OVA镜像 本镜像通过VirtualBox导入 VirtualBox镜像OVA包，包含64位Ubuntu14.04+ROS(indigo)+Turtlebot2 本站提供下载 VirtualBox镜像OVA包, ros+indigo+32位Torrent种子 | ros+indigo+64位Torrent种子 设置： 设置桥接上网 设置固定IP 设置virtualbox中ubuntu和windows共享文件夹 ROS的Indigo版本安装说明 配置Ubuntu仓库，"restricted," "universe," and "multiverse." 可界面软件更新那进行设置。 安装源 sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' 或来自中国的源： sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list' 增加key sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 更新 sudo apt-get update 安装，这里介绍Desktop-Full安装: (Recommended) : ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception sudo apt-get install ros-indigo-desktop-full 解决依赖 sudo rosdep init rosdep update 环境设置 echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc source ~/.bashrc 安装rosinstall,便利的工具 sudo apt-get install python-rosinstall 卸载Indigo 用apt-get方式安装indigo的，卸载使用如下命令： $ sudo apt-get remove ros-indigo-* 卸载成功的效果：就是/opt下的ROS文件夹indigo被删除 管理环境 在安装ROS期间，你会看到提示说需要 source 多个setup.*sh文件中的某一个，或者甚至提示添加这条'source'命令到你的启动脚本里面。这些操作是必须的，因为ROS是依赖于某种组合空间的概念，而这种概念就是通过配置脚本环境来实现的。这可以让针对不同版本或者不同软件包集的开发更加容易。 如果你在查找和使用ROS软件包方面遇到了问题，请确保你已经正确配置了脚本环境。一个检查的好方法是确保你已经设置了像ROS_ROOT和ROS_PACKAGE_PATH这样的环境变量，可以通过以下命令查看： $ export | grep ROS 如果发现没有配置，那这个时候你就需要'sou…

ROS入门教程-1.1.2 ROS文件系统介绍
type: item
date: 2016-08-01T08:42:00+00:00
description: ROS入门教程-ROS文件系统介绍 说明： 本教程介绍ROS文件系统概念，包括命令行工具roscd、rosls和rospack的使用。 针对rosbuild方式 预备工作 ROS文件系统中的基本概念 文件系统工具 使用rospack和rosstack 使用roscd roscd的特殊用法 使用 rosls Tab Completion 回顾 预备工作 本教程中我们将会用到ros-tutorials程序包，请先安装： $ sudo apt-get install ros-<distro>-ros-tutorials 将替换成你所安装的版本（比如Jade、Indigo、hydro、groovy、fuerte等）。 ROS文件系统中的基本概念 1.Packages: Package是ROS系统中最底层最基本的组织，里面存放各种文件:库、工具、可执行文件等. 2.Manifest: 一个package描述xml文件，定义package之间的依赖关系. 3.Stacks: package的集合，比package这个概念高一级别 4.Stack Manifest: 作用类似package manifest文件，但是它是针对stack的. 在文件系统中很容易识别package和stack: 1.package是一个包含 manifest.xml 文件的目录. 2.stack是一个包含 stack.xml 文件的目录. 文件系统工具 ROS中大量代码分散在众多的packages和stacks之中. 命令工具ls和cd已不能满足检索要求。 因此ROS提供了一套自己的命令工具来完成与这些命令相似的工作. 使用rospack和rosstack rospack和rosstack命令都包含于rospack package中. 两个命令用于获取packages 和stacks的信息. 教程中我们只提及命令的find的参数,作用是返回相应package或者stack的目录路径. 用法: $ rospack find [package_name] $ rosstack find [stack_name] 例子: $ rospack find roscpp 得到结果: YOUR_INSTALL_PATH/stacks/ros_comm/clients/cpp/roscpp 举例，如果在Ubuntu下使用编译好的软件包安装了ROS Electric版本 将会得到如下结果: /opt/ros/electric/stacks/ros_comm/clients/cpp/roscpp 使用roscd roscd包含于 rosbash package中. 该命令用于改变当前目录到指定的package或者stack的目录(cd). 用法: $ roscd [locationname[/subdir]] 例子: $ roscd roscpp 为了验证我们已经切换到了roscpp package 目录. 我们使用unix的命令查看一下pwd: $ pwd 得到结果: YOUR_INSTALL_PATH/stacks/ros_comm/clients/cpp/roscpp 现在可以看到结果: YOUR_INSTALL_PATH/stacks/ros_comm/clients/cpp/roscpp 和先前rospack find得到的是一样的. 命令roscd及其它的ROS命令仅适用于环境变量$ROS_PACKAGE_PATH中存在的目录路径. 使用下面的命令查看环境变量$ROS_PACKAGE_PATH: $ echo $ROS_PACKAGE_PATH 如果还没有编辑过$ROS_PACKAGE_PATH 应该显示结果如下: YOUR_INSTALL_PATH/stacks $ROS_PACKAGE_PATH可以添加任意目录路径，目录路径之间 ':' 分开。 子目录 roscd也能够直接进入一个 package 或 stack的子目录中. 例如: $ roscd roscpp/include $ pwd 得到结果: YOUR_INSTALL_PATH/stacks/ros_comm/clients/cpp/roscpp/include roscd的特殊用法 有几个roscd的特殊用法. roscd 不带任何参数 不带参数时roscd直接进入环境变量 $ROS_ROOT定义的目录. 例如: $ roscd $ pwd 得到结果: YOUR_INSTALL_PATH/ros 这个目录就是环境变量$ROS_ROOT定义的. 例如: $ echo $ROS_ROOT 得到结果: YOUR_INSTALL_PATH/ros roscd log roscd log命令切换到ROS储存日志文件…

ROS入门教程-1.1.3 创建ROS程序包
type: item
date: 2016-08-01T08:43:00+00:00
description: ROS入门教程-创建ROS程序包 说明： 本教程介绍如何使用roscreate-pkg或catkin创建一个新程序包,并使用rospack查看程序包的依赖关系。 针对CATKIN方式 目录 1.一个catkin程序包由什么组成? 2.在catkin工作空间中的程序包 3.创建一个catkin程序包 4.程序包依赖关系 5.一级依赖 6.间接依赖 7.自定义你的程序包 8.自定义 package.xml 9.描述标签 10.维护者标签 11.许可标签 12.依赖项标签 13.最后完成的 package.xml 14.自定义 CMakeLists.txt 一个catkin程序包由什么组成? 一个程序包要想称为catkin程序包必须符合以下要求： 1.该程序包必须包含catkin compliant package.xml文件，这个package.xml文件提供有关程序包的元信息。 2.程序包必须包含一个catkin 版本的CMakeLists.txt文件，而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。 3.每个目录下只能有一个程序包。这意味着在同一个目录下不能有嵌套的或者多个程序包存在。 最简单的程序包也许看起来就像这样： my_package/ CMakeLists.txt package.xml 在catkin工作空间中的程序包 开发catkin程序包的一个推荐方法是使用catkin工作空间，但是你也可以单独开发(standalone)catkin 软件包。 一个简单的工作空间也许看起来像这样： workspace_folder/ -- WORKSPACE工作空间 src/ -- SOURCE SPACE 源码目录 CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin package_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 在继续本教程之前请先按照创建catkin工作空间教程创建一个空白的catkin工作空间。 创建一个catkin程序包 本部分教程将演示如何使用catkin_create_pkg命令来创建一个新的catkin程序包以及创建之后都能做些什么。 首先切换到之前通过创建catkin工作空间教程创建的catkin工作空间中的src目录下： # You should have created this in the Creating a Workspace Tutorial $ cd ~/catkin_ws/src 现在使用catkin_create_pkg命令来创建一个名为'beginner_tutorials'的新程序包 这个程序包依赖于std_msgs、roscpp和rospy： $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp 这将会创建一个名为beginner_tutorials的文件夹 这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件 这两个文件都已经自动包含了部分你在执行catkin_create_pkg命令时提供的信息。 catkin_create_pkg命令会要求你输入package_name，如果有需要你还可以在后面添加一些需要依赖的其它程序包： # This is an example, do not try to run this # catkin_create_pkg <package_name> [depend1] [depend2] [depend3] catkin_create_pkg命令也有更多的高级功能，这些功能在catkin/commands/catkin_create_pkg中有描述。 程序包依赖关系 一级依赖 之前在使用catkin_create_pkg命令时提供了几个程序包作为依赖包 现在我们可以使用rospack命令工具来查看一级依赖包。 (Jan 9, 2013)groovy版本的rospack 有个已经修复的BUG报告，它会可能要花时间显示包依赖。 如果你看到类似问题，可以忽略如下命令： $ rospack depends1 beginner_tutorials 效果：…

ROS入门教程-1.1.4 编译ROS程序包
type: item
date: 2016-08-01T08:43:00+00:00
description: 编译ROS程序包 说明： 本教程介绍ROS程序包的编译方法 针对ROSBUILD方式 目录 1.Building Packages 1.1 使用rosmake 1.2 rosmake 多个ROS package 2.Review 构建包 一旦安装了所需的系统依赖项，我们就可以编译刚刚创建的package了。 使用rosmake rosmake是跟make类似的小工具, 但它会针对ROS做一些相应的处理。 当你执行rosmake beginner_tutorials命令, 编译beginner_tutorials 包,并按照正确的顺序链接所依赖的package。 因为我们在创建的ROS包的时候加入了对 rospy, roscpp, 和std_msgs 的依赖，所以这些package(以及它们的依赖项,等等，如此反复) 都将会被rosmake所编译。 使用方法: rosmake [package] 执行: $ rosmake beginner_tutorials 这条指令的执行需要一些时间。 在这期间，你会看到如下的信息输出： [ rosmake ] No package specified. Building ['beginner_tutorials'] [ rosmake ] Logging to directory [ rosmake ] /home/dbking/.ros/rosmake_output-2009-09-22-03-17-14 [ rosmake ] [ 0 of 18 Completed ] [rosmake-0] >>> genmsg_cpp >>> [ make ] [rosmake-0] <<< genmsg_cpp <<< [PASS] [ 0.39 seconds ] [ rosmake ] [ 1 of 18 Completed ] ... ... ... [ rosmake ] [ 17 of 18 Completed ] [rosmake-0] >>> beginner_tutorials >>> [ make ] [rosmake-0] <<< beginner_tutorials <<< [PASS] [ 0.79 seconds ] 在Fuerte版本, 依赖项被大规模精简，所以几乎会马上输出： [ rosmake ] rosmake starting... [ rosmake ] Packages requested are: ['beginner_tutorials'] [ rosmake ] Logging to directory /home/alex/.ros/rosmake/rosmake_output-20120603-082414 [ rosmake ] Expanded args ['beginner_tutorials'] to: ['beginner_tutorials'] [rosmake-0] Starting >>> std_msgs [ make ] [rosmake-1] Starting >>> roslang [ make ] [rosmake-0] Finished <<< std_msgs ROS_NOBUILD in package std_msgs No Makefile in package std_msgs [rosmake-1] Finished <<< roslang ROS_NOBUILD in package roslang No Makefile in package roslang [rosmake-1] Starting >>> rospy [ make ] [rosmake-2] Starting >>> roscpp [ make ] [rosmake-1] Finished <<< rospy ROS_NOBUILD in package rospy No Makefile in package rospy [rosmake-2] Finished <<< roscpp ROS_NOBUILD in package roscpp No Makefile in package roscpp [rosmake-2] Starting >>> beginner_tutorials [ make ] [rosmake-2] Finished <<< beginner_tutorials [PASS] [ 1.14 seconds ] [ rosmake ] Results: [ rosmake ] Built 5 packages with 0 failures. [ rosmake ] Summary output to d…

ROS入门教程-1.1.5 理解 ROS节点
type: item
date: 2016-08-01T08:43:00+00:00
description: ROS入门教程-理解ROS节点 说明： 本教程主要介绍 ROS 图（graph）概念 并讨论roscore、rosnode和 rosrun 命令行工具的使用。 目录 先决条件 图概念概述 节点 客户端库 roscore 使用rosnode 使用 rosrun 回顾 先决条件 在本教程中我们将使用到一个轻量级的模拟器，请使用以下命令来安装： $ sudo apt-get install ros-<distro>-ros-tutorials 用你使用的ROS发行版本名称(例如electric、fuerte、groovy、hydro等)替换掉''。 图概念概述 Nodes:节点,一个节点即为一个可执行文件，它可以通过ROS与其它节点进行通信。 Messages:消息，消息是一种ROS数据类型，用于订阅或发布到一个话题。 Topics:话题,节点可以发布消息到话题，也可以订阅话题以接收消息。 Master:节点管理器，ROS名称服务 (比如帮助节点找到彼此)。 rosout: ROS中相当于stdout/stderr。 roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。 节点 一个节点其实只不过是ROS程序包中的一个可执行文件。 ROS节点可以使用ROS客户库与其他节点通信。 节点可以发布或接收一个话题。 节点也可以提供或使用某种服务。 客户端库 ROS客户端库允许使用不同编程语言编写的节点之间互相通信: rospy = python 客户端库 roscpp = c++ 客户端库 rosjs = javascripts客户端库 rosjava = java客户端库 roscore roscore是你在运行所有ROS程序前首先要运行的命令。 请运行: $ roscore 然后你会看到类似下面的输出信息: ... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch- 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 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] 如果roscore运行后无法正常初始化，很有可能是存在网络配置问题。 参见 网络设置——单机设置 如果roscore不能初始化并提示缺少权限，这可能是因为~/.ros文件夹归属于root用户（只有root用户才能访问） 修改该文件夹的用户归属关系： $ sudo chown -R <your_username> ~/.ros 使用rosnode 打开一个新的终端, 可以使用 rosnode 像运行roscore一样看看在 运行什么... 注意: 当打开一个新的终端时，你的运行环境会复位，同时你的~/.bashrc文件会复原。 如果你在运行类似于rosnode的指令时出现一些问题 也许你需要添加一些环境设置文件到你的~/.bashrc或者手动重新配置他们。 rosnode显示当前运行的ROS节点信息。 rosnode list指令列出活跃的节点: $ rosnode list 你会看到: /rosout 这表示当前只有一个节点在运行: rosout。 因为这个节点用于收集和记录节点调试输出信息，所以它总是在运行的。 rosnode info命令返回的是关于一个特定节点的信息。 $ rosnode info /rosout 这给了我们更多的一些有关于rosout的信息, 例如，事实上由它发布/rosout_agg -------------------------------------------------…

ROS入门教程-1.1.6 理解ROS话题
type: item
date: 2016-08-01T08:43:00+00:00
description: 理解ROS话题 说明： 本教程介绍ROS话题（topics）以及如何使用rostopic 和 rxplot 命令行工具。 目录 roscore turtlesim 通过键盘远程控制turtle ROS Topics 使用 rqt_graph rostopic介绍 使用 rostopic echo 使用 rostopic list ROS Messages rostopic type 继续学习 rostopic 使用 rostopic pub 使用 rostopic hz 使用 rqt_plot roscore 首先确保roscore已经运行, 打开一个新的终端： $ roscore 如果你没有退出在上一篇教程中运行的roscore，那么你可能会看到下面的错误信息： roscore cannot run as another roscore/master is already running. Please kill other roscore/master processes before relaunching 这是正常的，因为只需要有一个roscore在运行就够了。 turtlesim 在本教程中我们也会使用到turtlesim，请在一个新的终端中运行： $ rosrun turtlesim turtlesim_node 通过键盘远程控制turtle 我们也需要通过键盘来控制turtle的运动，请在一个新的终端中运行： $ rosrun turtlesim turtle_teleop_key 效果： [ INFO] 1254264546.878445000: Started node [/teleop_turtle], pid [5528], bound on [aqy], xmlrpc port [43918], tcpros port [55936], logging to [~/ros/ros/log/teleop_turtle_5528.log], using [real] time Reading from keyboard --------------------------- Use arrow keys to move the turtle. 现在你可以使用键盘上的方向键来控制turtle运动了。 如果不能控制，请选中turtle_teleop_key所在的终端窗口以确保你的按键输入能够被捕获。 现在你可以控制turtle运动了，下面我们一起来看看这背后发生的事。 ROS Topics turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来互相通信的。 turtle_teleop_key在一个话题上发布按键输入消息，而turtlesim则订阅该话题以接收该消息。 下面让我们使用rqt_graph来显示当前运行的节点和话题。 注意：如果你使用的是electric或更早期的版本，那么rqt是不可用的，请使用rxgraph代替。 使用 rqt_graph rqt_graph能够创建一个显示当前系统运行情况的动态图形。 rqt_graph是rqt程序包中的一部分。 如果你没有安装，请通过以下命令来安装： $ sudo apt-get install ros-<distro>-rqt $ sudo apt-get install ros-<distro>-rqt-common-plugins 请使用你的ROS版本名称（比如hydro、indigo等）来替换掉。 在一个新终端中运行: $ rosrun rqt_graph rqt_graph 你会看到类似下图所示的图形： 如果你将鼠标放在/turtle1/command_velocity上方，相应的ROS节点（蓝色和绿色）和话题（红色）就会高亮显示。 正如你所看到的turtlesim_node和turtle_teleop_key节点正通过一个名为/turtle1/command_velocity的话题来互相通信。 rostopic介绍 rostopic命令工具能让你获取有关ROS话题的信息。 你可以使用帮助选项查看rostopic的子命令： $ rostopic -h 显示： rostopic bw display bandwidth used by topic rostopic echo print messages to screen rostopic hz display publishing rate of topic rostopic list print information about active topics rostopic pub publish data to topic rostopic type …

ROS入门教程-1.1.7 理解ROS服务和参数
type: item
date: 2016-08-01T08:43:00+00:00
description: 理解ROS服务和参数 说明： 本教程介绍了ROS 服务和参数的知识，以及命令行工具rosservice 和 rosparam的使用方法。 目录 ROS Services 使用rosservice rosservice list rosservice type rosservice call Using rosparam rosparam list rosparam set and rosparam get rosparam dump and rosparam load 准备： 本教程假设从前一教程启动的turtlesim_node仍在运行，现在我们来看看turtlesim提供了什么服务： ROS Services 服务（services）是节点之间通讯的另一种方式。 服务允许节点发送请求（request） 并获得一个响应（response） 使用rosservice rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。 rosservice提供了很多可以在topic上使用的命令，如下所示： 使用方法: rosservice list 输出可用服务的信息 rosservice call 调用带参数的服务 rosservice type 输出服务类型 rosservice find 依据类型寻找服务find services by service type rosservice uri 输出服务的ROSRPC uri rosservice list 执行rosservice list $ rosservice list 显示结果： /clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /spawn /teleop_turtle/get_loggers /teleop_turtle/set_logger_level /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/get_loggers /turtlesim/set_logger_level 命令显示turtlesim节点提供了9个服务： 重置（reset） 清除（clear） 再生（spawn） 终止（kill） turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative turtlesim/get_loggers turtlesim/set_logger_level 另外两个rosout节点提供的服务: /rosout/get_loggers /rosout/set_logger_level 使用rosservice type命令更进一步查看clear服务: rosservice type使用方法: rosservice type [service] 我们来看看clear服务的类型: $ rosservice type clear 显示： std_srvs/Empty 服务的类型为空（empty),这表明在调用这个服务是不需要参数（比如，请求不需要发送数据，响应也没有数据）。 下面我们使用rosservice call命令调用服务： rosservice call使用方法: rosservice call [service] [args] 因为服务类型是空，所以进行无参数调用： $ rosservice call clear 正如我们所期待的，服务清除了turtlesim_node的背景上的轨迹。 通过查看再生（spawn）服务的信息，我们来了解带参数的服务: $ rosservice type spawn | rossrv show 显示结果： float32 x float32 y float32 theta string name --- string name 这个服务使得我们可以在给定的位置和角度生成一只新的乌龟。 名字参数是可选的，这里我们不设具体的名字，让turtlesim自动创建一个。 执行命令： $ rosservice call spawn 2 2 0.2 "" 服务返回了新产生的乌龟的名字： name: turtle2 现在我们的乌龟看起来应该是像这样的： Using rosparam rosparam使得我们能够存储并操作ROS参数服务器（Parameter Server）上的数据。 参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。 rosparam使用YAML标记语言的语法。 一般而言，YAML的表述很自然： 1是整型 1.0是浮点型 one是字…

ROS入门教程-1.1.8 使用 rqt_console 和 roslaunch
type: item
date: 2016-08-01T08:45:00+00:00
description: ROS入门教程-使用 rqt_console 和 roslaunch 说明： 本教程介绍如何使用rqt_console和rqt_logger_level进行调试，以及如何使用roslaunch同时运行多个节点。 早期版本中的rqt工具并不完善，如果你使用的是“ROS fuerte”或更早期的版本，请同时参考这个页面学习使用老版本的“rx”工具。 目录 预先安装rqt和turtlesim程序包 使用rqt_console和rqt_logger_level 日志等级说明 使用roslaunch Launch 文件 Launch 文件解析 roslaunching 预先安装rqt和turtlesim程序包 本教程会用到rq和turtlesim这两个程序包，如果你没有安装，请先安装： $ sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim 请使用ROS发行版名称(比如 electric、fuerte、groovy、hydro或最新的indigo)替换掉 注意： 你可能已经在之前的某篇教程中编译过rqt和turtlesim，如果你不确定的话重新编译一次也没事。 使用rqt_console和rqt_logger_level rqt_console属于ROS日志框架(logging framework)的一部分，用来显示节点的输出信息 rqt_logger_level允许我们修改节点运行时输出信息的日志等级（logger levels） logger levels包括 DEBUG、WARN、INFO和ERROR 现在让我们来看一下turtlesim在rqt_console中的输出信息，同时在rqt_logger_level中修改日志等级。 在启动turtlesim之前先在另外两个新终端中运行rqt_console和rqt_logger_level： $ rosrun rqt_console rqt_console $ rosrun rqt_logger_level rqt_logger_level 你会看到弹出两个窗口： 现在让我们在一个新终端中启动turtlesim： $ rosrun turtlesim turtlesim_node 因为默认日志等级是INFO，所以你会看到turtlesim启动后输出的所有信息，如下图所示： 现在让我们刷新一下rqt_logger_level窗口并选择Warn将日志等级修改为WARN，如下图所示： 现在我们让turtle动起来并观察rqt_console中的输出（非hydro版）： rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 0.0 hydro版： rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 0.0]' 效果： 日志等级说明 日志等级按以下优先顺序排列： Fatal Error Warn Info Debug Fatal是最高优先级，Debug是最低优先级。 通过设置日志等级你可以获取该等级及其以上优先等级的所有日志消息。 比如，将日志等级设为Warn时，你会得到Warn、Error和Fatal这三个等级的所有日志消息。 现在让我们按Ctrl-C退出turtlesim节点 接下来我们将使用roslaunch来启动多个turtlesim节点和一个模仿节点以让一个turtlesim节点来模仿另一个turtlesim节点。 使用roslaunch roslaunch可以用来启动定义在launch文件中的多个节点。 用法： $ roslaunch [package] [filename.launch] 先切换到beginner_tutorials程序包目录下： $ roscd beginner_tutorials 如果roscd执行失败了，记得设置你当前终端下的ROS_PACKAGE_PATH环境变量 设置方法如下： $ export ROS_PACKAGE_PATH=~/<distro>_workspace/sandbox:$ROS_PACKAGE_PATH $ roscd beginner_tutorials 如果你仍然无法找到beginner_tutorials程序包，说明该程序包还没有创建，那么请返回到ROS/Tutorials/CreatingPackage教程，并按照创建程序包的操作方法创建一个beginner_tutorials程序包。 然后…

ROS入门教程-1.1.8 使用 rxconsole 和 roslaunch (ROS fuerte之前版本)
type: item
date: 2016-08-01T08:45:00+00:00
description: 使用 rxconsole 和 roslaunch (ROS fuerte之前版本) 说明： 版本过旧不做翻译 This tutorial introduces ROS using rxconsole and rxloggerlevel for debugging and roslaunch for starting many nodes at once. 目录 Prerequisites rxtools and turtlesim package Using rxconsole and rxloggerlevel Quick Note about logger levels Using roslaunch The Launch File The Launch File Explained roslaunching This tutorial page is obsolete starting from ROS groovy. Please see ROS/Tutorials/UsingRqtconsoleRoslaunch and come back if necessary. Prerequisites rxtools and turtlesim package The tutorial uses both the rxtools and turtlesim packages. To do this tutorial, please install both packages, if you have not yet. $ sudo apt-get install ros-<distro>-rx ros-<distro>-turtlesim Replace <distro> with the name of your ROS distribution (e.g. electric, fuerte, groovy). NOTE: you may have already built rxtools and turtlesim for one of the previous tutorials. If you are not sure, installing them again will not hurt anything. Using rxconsole and rxloggerlevel rxconsole attaches to ROS's logging framework to display output from nodes. rxloggerlevel allows us to change the verbosity level (DEBUG, WARN, INFO, and ERROR) of nodes as they run. Now let's look at the turtlesim output in rxconsole and switch logger levels in rxloggerlevel as we use turtlesim. Before we start the turtlesim, in two new terminals start rxconsole and rxloggerlevel: $ rxconsole$ rxloggerlevel You will see two windows popup: Now let's start turtlesim in a new terminal: $ rosrun turtlesim turtlesim_node Since the default logger level is INFO you will see any info that the turtlesim publishes when it starts up, which should look like: Now let's change the logger level to Warn by refreshing the nodes in the rxloggerlevel window and selecting Warn as shown below: Now let's run our turtle into the wall and see what is displayed in our rxconsole: rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 0.0 Quick Note about logger levels Logging level…