ROS学习第三弹(Services/Parameters rqt_console/rqt_logger_level/roslaunch)

一.理解ROS中的Services和Parameters

本节的学习还是需要接着之前的乌龟运行程序,就是乌龟运行界面和乌龟控制界面都得开着。

1.1ROS Services

Services是另一种节点间通信方式,Services允许节点发布一个请求并接收一个响应。

1.2用rosservice命令

rosservice命令可以很容易的连接到client/service框架。rosservice有很多命令;

1.2.1 rosservice list

这个命令的返回结果是:

/clear
/kill
/my_turtle/get_loggers
/my_turtle/set_logger_level
/reset
/rosout/get_loggers
/rosout/set_logger_level
/rqt_gui_py_node_11016/get_loggers
/rqt_gui_py_node_11016/set_logger_level
/spawn
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative

列举了turtle提供的九种服务;

以下两项是关于小乌龟的控制程序的节点;

teleop_turtle/get_loggers
/teleop_turtle/set_logger_level

1.2.2 rosservice type [service]

查看服务是什么类型:rosservice type clear

能看见service是空的,这意味着使用service call 时,不带参数

1.2.3 rosservice call [service] [args]

因为clear服务没有参数,所以我们直接输入如下命令:

rosservice call clear  这个命令会清除turrlesim_node的背景

如果服务是有参数的,如spawn服务:rosservice type spawn| rossrv show

这个服务可以产生一个新的turtle,然后用下列命令指定新的乌龟的坐标和角度

1.3 使用rosparam

rosparam允许你存储和操作ROS Parameter Server上的数据。Parameter可以存储integers/floats/boolean/

dictionaries/lists.  rosparam用YAML标记语言做语法。在简单的情形,YAML很接近于自然形式,如

1 是 integers, 1.0 是 float,one 是 String,true 是 boolean。[1, 2, 3]是整型数组,{a:b,c:d}是字典。

rosparam命令列表:

rosparam set set parameter
rosparam get get parameter
rosparam load load parameters from file
rosparam dump dump parameters to file
rosparam delete delete parameter
rosparam list list parameter names

1.3.1 rosparam list  列出参数名称

1.3.2 rosparam set 和 get命令

进行ros参数的设置和获取

如,将背景的红色分量设为150:rosparam set background_r 150

此时还需要调用清除服务更新状态:rosservice call clear

一点启示:topic与service通信的一些区别。topic 用于异步通信,建立topic和订阅及发布节点之间的联系,命令发布后响应,命令结束后动作停止。而service用于同步通信,即下达多个命令的设置,然后调用service call服务统一响应。

查看单个颜色分量:

rosparam get background_g

rosparam get background_r

rosparam get background_b

获取所有参数:rosparam get /

1.3.3 rosparam dump 和rosparam load命令

格式:

rosparam dump [file_name]

rosparam load [file_name] [namespace]

把所有参数写入一个叫 params.yaml的文件

rosparam dump params.yaml

也可以把yaml装入一个namespaces:

rosparam load params.yaml copy

查看数据:rosparam get copy/background_b

二.使用rrqt_console和roslaunch

rqt_console和ros_logger_level用于debug调试,roslaunch用于一次打开多个节点。ROS fuerte及之前的版本不支持rqt。

2.1 安装rqt和turtle

sudo apt-get install ros-kinetic-rqt ros-kinetic-rqt-common-plugins ros-kinetic-turtlesim

之前已经装过可以不装。

2.2 rqt_console 和rqt_logger_level的用法

rqt_console与ROS的日志框架相连,可以输出的节点信息。rqt_logger_level可以改变节点要输出的信息的级别(DEBUG/WARN/INFO/ERROR)

打开turtlesim后,在两个新的终端中打开rqt_console和rqt_logger_level;

代码:rosrun rqt_console rqt_console

rosrun rqt_logger_level rqt_logger_level

默认的输出等级是INFO,当turtlesim时,可以看见有发布的信息。

把输出等级改为Debug

可以看见有不同的调试结果在终端出现。

2.2.1 关于logger的输出等级

logger有五个输出等级,从高到低是只包含信息的多少,从最粗略到最详细:Fatal-Error-Warn-Info-Debug

可以通过设置改变输出等级

2.2.2 roslaunch的使用

roslaunch的使用需要一个launch文件,roslaunch通过launch文件中的描述打开节点,格式:

roslaunch [package] [filename.launch]

此时可以先关掉之前的turtlesim节点,然后准备launch文件:

cd ~/catkin_ws

source devel/setup.bash

roscd beginner_tutorials

mkdir launch

cd launch

创建一个launch文件,名为turtleminic,内容和解释如下:

<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>
//在一个名为 sim 的 turtlesim 节点里打开了两个 namespace 标签:turtlesim1 和 turtlesim2。这能够允许我们在开启两个仿真器时避免命名冲突
           <node pkg="turtlesim" name="mimic" type="mimic">
                    <remap from="input" to="turtlesim1/turtle1"/>
                    <remap from="output" to="turtlesim2/turtle1"/>
           </node>
//这里我们用 input 和 output 话题打开了一个跟随节点,input 和 output 重命名了 turtlesim1和 turtlesim2,这会导致 turtlesim2 跟随 turtlesim1 的动作。
</launch>

2.2.3 运行roslaunching

roslaunch beginner_tutorials turtleminic.launch

这样就同时打开了两个有依赖关系的乌龟界面;

打开一个新的终端,输入:rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '
[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

用让rqt_graph查看关系,在新终端中输入:rqt_graph





猜你喜欢

转载自blog.csdn.net/zzmj_f/article/details/78394589
rqt
今日推荐