2020年10月22日 星期四

[ROS] 透過 roslaunch 呼叫 Service

roslaunch XML 標籤中,沒有可以用來呼叫 service 的標籤。但是,有些呼叫 service 的動作,想要添加到 Launch 文件中自動執行,該怎麼做呢?網路上有高手提供了一個可行的做法,經過簡單的實測,確實可以使用。下面大致說明一下做法,文章最末的參考資料裡面有相關的連結可以參考。

 

延續前一篇文章《使用 roslaunch 啟動多個節點》,在這篇文章裡面一樣使用 turtlesim 套件來做示範。假設已經撰寫好 mytest.launch 文件,來執行 turtlesim 的兩個主要的程式:turtlesim_node turtle_teleop_key,如下:

 

<launch>

  <node pkg="turtlesim" type="turtlesim_node" name="turtlesim" />

  <node pkg="turtlesim" type="turtle_teleop_key" name="teleop_turtle" />

</launch>

 

turtlesim_node 啟動之後,透過 rosservice list 指令可以看到 /spawn /turtle1/set_pen 這兩個 service。接下來,將示範如何修改 mytest.launch 文件來呼叫這兩個 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

 

一般會使用下列指令來呼叫 /spawn,這個 service 會在 turtlesim_node 顯示的視窗中,生出另一隻小烏龜。在參數的部分,可以指定新小烏龜的位置、方位和名稱。

 

$ rosservice call /spawn <x> <y> <theta> "<name>"

e.g.

$ rosservice call /spawn 3 3 0.2 "new_turtle"

 

呼叫 /turtle1/set_pen 則會使用下列指令,這個 service 可以用來設定烏龜移動時劃出的線條顏色和寬度。在參數的部分,可以指定線條的 RGB 顏色和寬度,以及是否隱藏線條。

 

$ rosservice call /turtle1/set_pen <r> <g> <b> <width> <off>

e.g.

$ rosservice call /turtle1/set_pen 255 255 0 15 0

 

要透過 roslaunch 來呼叫上面兩個 service,只要在 mytest.launch 文件加入下列兩行即可。使用 <node> 標籤,在屬性 pkg type 指定為 rosservice 就可以呼叫 servicename 可以任意取一個不重複的名稱,args 則指定要呼叫的 service,以及要帶入的參數。

 

<launch>

  <node pkg="turtlesim" type="turtlesim_node" name="turtlesim" />

  <node pkg="turtlesim" type="turtle_teleop_key" name="teleop_turtle" />

  <node pkg="rosservice" type="rosservice" name="spawn" args="call /spawn 3 3 0.2 'new_turtle'" />

  <node pkg="rosservice" type="rosservice" name="set_pen" args="call /turtle1/set_pen 255 255 0 15 0" />

</launch>

 

最後,執行 roslaunch 來啟動 mytest.launch,就可以看到呼叫 service 的動作已經生效。在下方畫面中,可以看到生出一隻新的小烏龜,並且烏龜移動的線條也如設定更改了。

 

 

 

參考資料

 

  • Call a service at startup with a launch file

https://answers.ros.org/question/11271/call-a-service-at-startup-with-a-launch-file/

 

 

沒有留言:

張貼留言

和我聯絡

名稱

以電子郵件傳送 *

訊息 *