描述:這篇教程借助于rosservice和rosparam命令工具介紹ROS系統(tǒng)中的服務及參數。
假設你上一個教程中練習的turtlesim_node還在運行,我們看一下turtlesim節(jié)點都提供有哪些服務。
1. ROS服務
服務是節(jié)點之間通信的另一種方式,通過服務節(jié)點可以發(fā)送請求并接收反饋;
2. rosservice的用法
rosservice可以很容易的依附到ROS客戶端/服務端的框架中,rosservice具有很多參數用于話題,如下:
用法:
rosservice list print information about active services
rosservice call call the service with the provided args
rosservice type print service type
rosservice find find services by service type
rosservice uri print service ROSRPC uri
2.1 rosservice list
$ rosservice list
這個list指令展示出turtlesim節(jié)點提供9個服務:reset, clear, spawn, kill,turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, 和turtlesim/set_logger_level.還有兩個與rosout節(jié)點相關的服務:/rosout/get_loggers and /rosout/set_logger_level.
• /clear
• /kill
• /reset
• /rosout/get_loggers
• /rosout/set_logger_level
• /spawn
• /teleop_turtle/get_loggers
• /teleop_turtle/set_logger_level
• /turtle1/set_pen
• /turtle1/teleport_absolute
• /turtle1/teleport_relative
• /turtlesim/get_loggers
• /turtlesim/set_logger_level
我們用rosservice type查看一下clear這個服務:
2.2 rosservice type
用法:
rosservice type [service]
我們查明clear服務是什么類型的:
$ rosservice type clear
• std_srvs/Empty
這個服務是空的,意味著調用這個服務時不用任何參數(亦即,發(fā)送請求或接收反饋時不用借助于任何參數),我們用rosservice call來調用這個服務:
2.3 rosservice call
用法:
rosservice call [service] [args]
這里我們調用時沒帶任何參數,因為這個服務為空類型的:
$ rosservice call clear
正如我們所料,它清空了turtlesim_node節(jié)點的背景。
•
我們查看一下帶參數的服務spawn:
$ rosservice type spawn| rossrv show
• float32 x
• float32 y
• float32 theta
• string name
• ---
• string name
這個服務讓我們在指定的位置生成一個新的海龜。name區(qū)域是可選的(可以不設置),我們不用指定名字產生一個海龜;
$ rosservice call spawn 2 2 0.2 ""
這個調用會返回新產生的海龜的名字:
• name: turtle2
執(zhí)行結果會如下圖所示:
•
3. rosparam的用法
rosparam 允許我們操作并保存ROS系統(tǒng)中參數服務中的數據。參數服務可以存儲integer,float,boolean,dictionaries及 lists。rosparam采用YAML標記語言,簡單的講,YAML看起來非常自然:1 is an integer, 1.0 is a float, one is a string, true is a boolean, [1, 2, 3] is a list of integers, and {a: b, c: d} is a dictionary. 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
我們查看一下當前參數服務中都有什么參數:
3.1 rosparam list
$ rosparam list
我們看到turtlesim節(jié)點有三個有關背景色的參數保存在參數服務中:
• /background_b
• /background_g
• /background_r
• /roslaunch/uris/aqy:51932
• /run_id
我們用rosparam set改變其中一個參數:
3.2 rosparam set and rosparam get
用法:
rosparam set [param_name]
rosparam get [param_name]
這里我們改變背景色的紅色部分:
$ rosparam set background_r 150
上述命令改變了參數的值,我們必須調用clear服務才能使改變的參數生效:
$ rosservice call clear
執(zhí)行結果如下所示:
•
我們查看參數服務中的其它參數值,看一下背景色中的綠色部分數值:
$ rosparam get background_g
• 86
我們也可以通過rosparam get/ 命令獲取參數服務中所有參數的數值:
$ rosparam get /
• background_b: 255
• background_g: 86
• background_r: 150
• roslaunch:
• uris: {'aqy:51932': '//aqy:51932/'}
• run_id: e07ea71e-98df-11de-8875-001b21201aa8
你也許想把參數保存到文件中,以便下一次可以調用。采用rosparam命令是非常方便的:
3.3 rosparam dump and 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 copy/background_b
• 255
![]() | ![]() .. 定價:¥45 優(yōu)惠價:¥42 更多書籍 |
![]() | ![]() .. 定價:¥225 優(yōu)惠價:¥213 更多書籍 |