[ROS]使用rqt_console和roslaunch

本贴最后更新于 2869 天前,其中的信息可能已经时移俗易

前言:本教程介绍 ROS 调试中的 rqt_console 和 rqt_logger_level 以及一次启动多个节点的 roslaunch。如果你在使用 ROS fuerte 或者更早的版本,rqt 不是完全可用的,请查看[http://wiki.ros.org/ROS/Tutorials/UsingRxconsoleRoslaunch],使用来的 rx 基础工具。

###1.rqt 和 turtlesim 包的前置需求

本教程使用了 rqt 和 turtlesim 包。使用本教程需要安装 2 个包。如果没有安装过。执行:

$ sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim

用你使用的ROS版本名称替换<distro> (比如:indigo, jade, kinetic).

注意:你可能已经在之前的某一个教程构建过 rqt 和 turtlesim。如果你不确定的话,重新安装过一遍也无伤大雅。

###2.使用 rqt_console 和 rqt_logger_level

rqt_console 连接了 ROS 的日志框架,它显示了节点的输出信息。rqt_logger_level 允许我们改变运行的节点繁琐的等级(DEBUG、WARN、INFO、ERROR)。

现在我们来看看 turtlesim 在 rqt_console 上的输出以及改变使用的 turtlesim 的时候 rqt_logger_level 里的日志等级。在开启 turtlesim 之前,首先在两个新的命令行窗口中开启 rqt_console 和 rqt_logger_level:

$ rosrun rqt_console rqt_console

$ rosrun rqt_logger_level rqt_logger_level

你将看到两个悬浮窗:

现在我们可以开启一个新的命令行窗口:

$ rosrun turtlesim turtlesim_node

因为默认的 logger 等级是 INFO,所以你将看到 turtlesim 启动之后发布的任意消息,类似下面图片中看到的:

现在让我们改变 logger 的等级到 WARN,然后在 rqt_logger_level 窗口刷新节点,如下:

现在让我们让小乌龟撞墙,然后看看 rqt_console 将会显示什么消息:
Now let's run our turtle into the wall and see what is displayed in our rqt_console:

ROS Hydro 之后的版本运行:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'

ROS Groovy 之前的版本运行:

rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0  0.0


####2.1 快速的学习 logger 的等级
日志等级的优先级如下:

Fatal>Error>Warn>Info>Debug

Fatal 是最高的优先级,Debug 是最低的优先级。通过设置 logger 的等级,可以得到设置的优先级及以上的所有消息。例如,设置 logger 的等级是 Warn,那么可以收到 Warn,Error,Fatal 的日志信息。

对着 turtlesim 窗口点击 Ctrl+C,让我们通过 roslaunch 来建立多个 turtlesim 节点和一个克隆的节点用来一个 turtlesim 克隆另外一个:

####2.2 使用 roslaunch

roslaunch 开启在 launch 文件中定义的节点。
用法:

$ roslaunch [package] [filename.launch]

首先进入我们之前创建的 beginner_tutorials 包:

$ roscd beginner_tutorials

如果使用 roscd 之后看到类似的:No such package/stack 'beginner_tutorials',就需要像创建工作空间那篇教程一样设置环境变量:

$ cd ~/catkin_ws
$ source devel/setup.bash
$ roscd beginner_tutorials

创建 launch 文件夹:

$ mkdir launch
$ cd launch

注意:保存 launch 文件的文件夹不用非要命名为 launch。实际上你甚至不需要把 launch 文件保存在目录中。roslaunch 自动的查找给定的包里面可用的 launch 文件。事实上,结果证明设施一个好的实践。

####2.3The Launch File

现在让我们创建一个 launch 文件,名字叫做 turtlesmimic,然后复制下面的内容:

<launch>

  <group ns="turtlesim1">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <node pkg="turtlesim" name="mimic" type="mimic">
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
  </node>

</launch>

####2.4launch 文件的说明

现在,让我们来分解 launch 的 xml 文件。

<launch>

launch 标签表示 launch 文件的开始,这意味着文件是一个 launch 文件。

 <group ns="turtlesim1">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

这里定义了 2 个组各有一个 namespace 标签,值是 turtlesim1 和 turtlesim2,以及一个 turtlesim 节点,值是 sim。这允许我们开启 2 个仿真器并能避免名称冲突。

  <node pkg="turtlesim" name="mimic" type="mimic">
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
  </node>

这里开启 mimic 节点,并具有重命名为 turtlesim1 和 turtlesim2 的 input 和 output 主题。重命名将导致 turtlesim2 克隆 turtlesim1.

<launch>

launch 文件的结束标签。

####2.5roslaunching

现在我们通过 roslaunch 运行 launch 文件:

$ roslaunch beginner_tutorials turtlemimic.launch

两个 turtlesim 窗口将被启动,新建一个新的命令行窗口发送 rostopic 命令:

对于 ROS Hydro 及其之后的版本,

$ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

对于 ROS Groovy 及其之前的版本,

$ rostopic pub /turtlesim1/turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0  -1.8

我们可以看到 2 个 turtlesim 窗口里面的小乌龟在移动,尽管我们只发不了消息到 turtlesim1.

我们也可以使用 rqt_graph 来更好的理解上面的 launch 文件做了什么。运行 rqt,然后在主界面的 Plugins 中选择 Node Graph:

$ rqt

或者直接运行:

$ rqt_graph

现在我们已经成功的使用了 rat_console 和 roslaunch,让我们来学习 ROS 编辑选项。使用 ctrl+c 停止所有的 turtlesim,接下来的教程不需要使用到这些。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 288 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 610 关注
  • 创业

    你比 99% 的人都优秀么?

    83 引用 • 1398 回帖
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 24 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 506 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    332 引用 • 619 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    76 引用 • 429 回帖
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    536 引用 • 672 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 711 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 11 关注
  • OnlyOffice
    4 引用 • 16 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    69 引用 • 190 回帖 • 483 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    379 引用 • 1221 回帖 • 589 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 455 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 2 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 148 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 192 关注
  • 音乐

    你听到信仰的声音了么?

    59 引用 • 510 回帖
  • 反馈

    Communication channel for makers and users.

    124 引用 • 907 回帖 • 209 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 18 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    86 引用 • 896 回帖
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 31 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖 • 1 关注