延續昨天的小烏龜,昨天的範例主要是顯示topic之間的傳輸,但小烏龜的範例也有service的應用,也就是官網寫得很籠統的介紹,今天就一起來好好講解吧! (絕對不是因為筆者的車還沒修好的關係!
一樣先開好roscore和turtlesim:
$ roscore
//另一個terminal
$ rosrun turtlesim turtlesim_node
昨天的範例是使用draw_square,今天來用一個大家比較常用的teleop_key:
$ rosrun turtlesim turtle_teleop_key
這時候就會顯示叫你使用arrow_key,也就是鍵盤上的方向鍵控制小烏龜~
然而他一次只能監聽一個鍵,所以沒辦法做到邊旋轉邊移動,有點可惜就是了(如果我的車車修不好的話,就來寫個邊旋轉邊移動的node好了QQ
好的,接下來就開始進入service系列,在ternimal列出現在可以呼叫的service有:
$ rosservice list
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
在官網其實有稍微講解一下這些service分別是什麼作用:
使用的方法也很簡單,透過terminal呼叫service就可以了:
$ rosservice call /clear
$ rosservice call /reset
上面兩個都是相對簡單的操作,為避免占版面,筆者就不放畫面上來了XD 大家可以自己玩看看~~
接下來就是生一隻小烏龜出來跟殺掉一隻烏龜了:
$ rosservice call /spawn "x:1.0
y:1.0
theta:30.0
name:'turtle2'"
就可以看到多一隻小烏龜出現在左下角了~~這個座標系居然是直角座標系XDDDD
這時候開啟service list就可以看到:
$ rosservice list
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtle2/set_pen
/turtle2/teleport_absolute
/turtle2/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
可以看到多了三個跟turtle2有關的service出現了,可以透過呼叫上述三個service來操作烏龜2號。
最後是殺掉那隻烏龜:
$ rosservice call /kill turtle2
烏龜就被殺死囉! QQQQQQQQQ
http://wiki.ros.org/turtlesim
https://www.itread01.com/content/1548339858.html