理解 ROS 服务和参数

服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request ) 并获得一个响应(response)

使用 rosservice

rosservice 可以很轻松的使用 ROS 客户端/服务器框架提供的服务。rosservice 提供了很多可以在topic 上使用的命令,可以通过下列命令查看:
rosservice -h
rosservice list
输出可用服务的信息,如打开 turtlesim_node:
roscore
rosrun turtlesim turtlesim_node
rosservice list
可以查看到 turtlesim 节点提供的服务:重置(reset), 清除(clear), 再生(spawn), 终止(kill)
等。

  • 1.1 rosservice type
    输出服务类型 使用方法:
    rosservice type [service]
    我们来看看 clear 服务的类型:
    rosservice type clear
    结果显示 std_srvs/Empty,即服务的类型为空(empty),这表明在调用这个服务是不需要参数(比如,请求不需要发送数据,响应也没有数据)。
  • 1.2 rosservice call
    使用方法:
    rosservice call [service] [args]
    因为服务类型是空,所以进行无参数调用:
    rosservice call clear
    正如我们所期待的,服务清除了 turtlesim_node 的背景上的轨迹。
    对于带参数的服务,比如再生(spawn)服务:
    rosservice type spawn| rossrv show
    根据结果这个服务可以在给定的位置和角度生成一只新的乌龟。名字参数是可选的,这里我们不设具体的名字,让 turtlesim 自动创建一个。
    rosservice call spawn 2 2 0.2 ""
2,使用 rosparam

rosparam 能够存储并操作 ROS 参数服务器(Parameter Server)上的数据。参数服务器能够存储整、型、浮点、布尔、字符串、字典和列表等数据类型。rosparam 使用 YAML 标记语言的语法。

  • 2.1 rosparam list
    列出参数名,执行此命令
    可以看到 turtlesim 节点在参数服务器上有 3 个参数用于设定背景颜色,下列通过 set 参数来改变背景色
  • 2.2 rosparam set, rosparam get
    用法:rosparam set [param_name]rosparam get [param_name]
    如使用 rosparam set 修改背景颜色的红色通道:(rgb)
    rosparam set background_r 150
    上述指令修改了参数的值,现在我们调用清除服务使得修改后的参数生效:
    rosservice call clear
    再来使用 param get 查看参数服务器上的参数值 —— 获取背景的绿色通道的值:
    rosparam get background_g
    特别地,如果想显示参数服务器上的所有内容,可以执行下面命令rosparam get parameter_name例如:rosparam get /background_r如果想存储这些信息以备今后重新读取。这通过 rosparam 的 dump, load 参数很容易就可以实现。
  • 2.3 rosparam dump, rosparam load
    使用方法:
    rosparam dump [file_name]
    rosparam load [file_name] [namespace]
    现在我们将所有的参数写入 params.yaml 文件:
    rosparam dump params.yaml
    甚至可以将 yaml 文件重载入新的命名空间,比如说 copy 空间:
    rosparam load params.yaml copy
    通过 rosparam get 命令来验证:
    rosparam get copy/background_b
使用 rqt_console 和 roslaunch
  1. 使用 rqt_console 和 rqt_logger_level
    rqt_console 属于 ROS 日志框架(logging framework)的一部分,用来显示节点的输出信息。
    rqt_logger_level 允许我们修改节点运行时输出信息的日志等级(logger levels )(包括DEBUG、WARN、INFO 和 ERROR)。
    现在让我们来看一下 turtlesim 在 rqt_console 中的输出信息,同时在 rqt_logger_level 中修改日志等级。在启动 turtlesim 之前先在另外两个新终端中运行 rqt_console 和 rqt_logger_level:
roscore
rosrun rqt_console rqt_console
rosrun rqt_logger_level rqt_logger_level

会看到弹出的两个窗口 rqt_console , rqt_logger_level。


现在在一个新标签页中启动 turtlesim:
rosrun turtlesim turtlesim_node
因为默认日志等级是 INFO,所以你会看到 turtlesim 启动后输出的所有信息,刷新一下
rqt_logger_level 窗口并选择 Warn 将日志等级修改为 WARN。
现在我们让 turtle 动起来并观察 rqt_console 中的输出:
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 节点。

  1. 使用 roslaunch
    roslaunch 可以用来启动定义在 launch 文件中的多个节点。
    用法:
    roslaunch [package] [filename.launch]
    先切换到 hello_test 程序包目录下:
cd ~/test/devel
source setup.bash # 执行 devel 里的 setup.bash 脚本将这geworkspace 的信息配置到环境里面
roscd hello_test
然后创建一个 launch 文件夹:
mkdir launch
cd launch
  1. Launch 文件
    现在我们来创建一个名为 turtlemimic.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>
 
   <node pkg="turtlesim" name="mimic" type="mimic">
     <remap from="input" to="turtlesim1/turtle1"/>
     <remap from="output" to="turtlesim2/turtle1"/>
  </node> 
 </launch>
  1. 使用 roslaunch
    现在通过 roslaunch 命令来启动 launch 文件:
    roslaunch hello_test turtlemimic.launch
    现在将会有两个 turtlesims 被启动,然后我们在一个新标签页中使用 rostopic 命令发送速度设定消息:
    rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0,0.0, -1.8]'
    会看到两个 turtlesims 会同时开始移动,虽然发布命令只是给turtlesim1 发送了速度设定消息。

也可以通过 rqt_graph 来更好的理解在 launch 文件中所做的事情。运行rqt并在主窗口中选择rqt_graph
运行rqt_graph


到此,我们算是已经学会了rqt_console和roslaunch命令的使用.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容