ROS学习笔记七:使用rqt_console和roslaunch

本节主要介绍在调试时使用的rqt_console和rqt_logger_level,以及一次性打开多个节点的工具roslaunch。

使用rqt_console和rqt_logger_level

  • rqt_console:主要显示节点的输出信息。
  • rqt_logger_level:用于设置输出信息的重要性等级。
    还是利用turtlesim例程,看一下其不同等级的输出。在打开turtlesim之前,首先要运行roscore,然后在两个不同的终端中输入以下命令:
rosrun rqt_console rqt_console
 
 
  • 1
rosrun rqt_logger_level rqt_logger_level
 
 
  • 1

可以看到如下弹出的窗口


然后在一个新的终端中输入以下命令打开turtlesim

rosrun turtlesim turtlesim_node
 
 
  • 1

然后发现rqt_console窗口中就有了一个生成的信息

现在可以更改rqt_logger_level中的信息等级,更改为warn,则只会显示warn、error和fatal类的信息。通过rostopic pub命令向小海龟发送命令让其撞墙,产生警告信息:

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

然后在rqt_console窗口中就会显示撞墙的警告信息:

roslaunch

roslaunch一次性打开在一个launch文件中定义的所有节点。

roslaunch基本语法

roslaunch [package] [launch.file] [args]
roslaunch <launch-file-paths...> [args]
 
 
  • 1
  • 2

虽然说launch file放在哪里都可以,只要在运行的时候指明其位置即可。但是一般来说,都会在软件包目录下创建一个文件夹launch,以用来存放所创建的launch文件。
指明launch file文件位置的方式有两种:
第一种是直接指明launch file的绝对路径位置
第二种是指明软件包名称和放在软件包目录中的launch file,这种情况下roslaunch会在软件包目录中寻找和指定文件匹配的launch file

roslaunch beginner-tutorials turtlemimic.launch
roslaunch ~/ros-tutorial/src/beginner-tutorials/turtlemimic.launch

WARNING: Package name "beginner-tutorials" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits and underscores.
... logging to /home/mountzf/.ros/log/9f76d9e2-6b34-11e6-a83d-000c29521e21/roslaunch-ubuntu-4381.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://ubuntu:44397/

SUMMARY
========

PARAMETERS
 * /rosdistro: indigo
 * /rosversion: 1.11.20

NODES
  /
    mimic (turtlesim/mimic)
  /turtlesim1/
    sim (turtlesim/turtlesim_node)
  /turtlesim2/
    sim (turtlesim/turtlesim_node)

ROS_MASTER_URI=http://localhost:11311

core service [/rosout] found
WARNING: Package name "beginner-tutorials" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits and underscores.
process[turtlesim1/sim-1]: started with pid [4399]
process[turtlesim2/sim-2]: started with pid [4400]
process[mimic-3]: started with pid [4401]
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2,0,0]' '[0,0,1.8]'
 
 
  • 1

其中turtlemimic.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>

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

</launch>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

也可使使用rqt_graph画出节点之间的关系图,更加清楚了解后roslaunch做了些什么。

mimic是一个起模仿作用的节点,实现将turtlesim1的数据信息传送给turtlesim2。

一个node element包含三个必须的属性:pkg, type, name.

pkg和type属性指出ROS应该运行哪个pkg中的哪个node,注意:此处的type是可执行文件的名称,而name则是可以任意给出的,它覆盖了原有文件中ros::init指定的node name。

在独立的窗口运行各nodes

我们在各自的termin运行rosrun node_name;但是运行roslaunch时,所有的nodes共用一个相同的terminal,这对于那些需要从控制台输入的nodes很不方便。可以使用launch-prefix属性。

launch-prefix=”command-prefix”
Eg:launch-prefix=”xterm -e”
等价于 xterm -e rosrun turtlesim turtle_teleop_key
 
 
  • 1
  • 2
  • 3

xterm 命令表示新建一个terminal; -e参数告诉xterm执行剩下的命令行。
当然,launch-prefix属性不仅仅限于xterm。它可用于调试(通过gdb或valgrind),或用于降低进程的执行顺序(通过nice).

重映射names(remapping names)

除了解析relative names和private names,ROS也支持重映射,用于修改nodes当前使用的名称。
重映射相当于换名,每次重映射需提供一个original name和一个new name。每次node使用它的original name, ROS client library都会将其替换为remapping name。

创建remapping name两种方法:

单个node

对于单个node,在命令行进行remapping(remap对象可以是node,topic等)。

original-name:=new-name

Eg: $ rosrun turtlesim turtlesim_node turtle1/pose:=tim

在launch文件中

在launch文件内remap names,使用remap element

  <remap from=”original_name” tonew_name”>
 
 
  • 1

如果remap出现在launch文件开头,作为launch文件的子元素,则该remapping将被用于随后所有的nodes。如果remap作为某个node的子元素,则只用于该节点。

Eg:<node pkg=”turtlesim” type=”turtlesim_node” name=”turtle1”>
    <remap from =”turtle1/posetotim”>
</node>
 
 
  • 1
  • 2
  • 3

注意:在ROS进行remapping之前,remaping的所有name,包括original和new names,都将被解析为global names。所以,remapping之后所有的名字通常都是relative names。

总结

  • rqt_console:主要显示节点的输出信息。
  • rqt_logger_level:用于设置输出信息的重要性等级。
  • roslaunch:一次性打开在一个launch文件中定义的所有节点。

祝枫
2016年8月26日于哈尔滨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值