[ROS]使用rqt_console和roslaunch

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

前言:本教程介绍 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,接下来的教程不需要使用到这些。

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • AWS
    11 引用 • 28 回帖 • 11 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 637 关注
  • Access
    1 引用 • 3 回帖 • 7 关注
  • Facebook

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

    4 引用 • 15 回帖 • 442 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 反馈

    Communication channel for makers and users.

    126 引用 • 929 回帖 • 266 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    132 引用 • 876 回帖 • 4 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 735 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    169 引用 • 1527 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 20 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 299 关注
  • gRpc
    11 引用 • 9 回帖 • 89 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 819 关注
  • 音乐

    你听到信仰的声音了么?

    61 引用 • 512 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 661 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 610 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1278 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    946 引用 • 1460 回帖
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖 • 3 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 3 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖