理解 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閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容