URGを使ったロボット制御では、端末を4つ起動して、それぞれroscoreとrosrunコマンドでノードを起動していました。複雑なロボットシステムではこれが、100個以上のノードになる場合もあり、手作業ではやっていられません。
そこでROSには、launchファイルに、起動するノードやそのパラメータを書いておき、roslaunchコマンドで一括起動する方法が用意されています。下記の操作を行い、launchファイルを追加してみましょう。
- rsj_robot_testパッケージに、launchディレクトリを作成
$ mkdir ~/catkin_ws/src/rsj_robot_test/launch
- robot_test.launchファイルを作成して開く
$ gedit ~/catkin_ws/src/rsj_robot_test/launch/robot_test.launch
- 下記内容を記入
<launch> <node pkg="ypspur_ros" type="ypspur_ros" name="ypspur_ros"> <param name="port" value="/dev/serial/by-id/usb-T-frog_project_T-frog_Driver-if00" /> <param name="param_file" value="/home/$(env USER)/params/rsj-seminar20??.param該当するものに置き換えること" /> </node> <node pkg="urg_node" type="urg_node" name="urg_node"> <param name="serial_port" value="/dev/serial/by-id/usb-Hokuyo_Data_Flex_for_USB_URG-Series_USB_Driver-if00" /> </node> <node pkg="rsj_robot_test" type="rsj_robot_test_node" name="robot_test" output="screen"> </node> </launch>
作成したlaunchファイルは下記のコマンドで実行できます。
$ roslaunch rsj_robot_test robot_test.launch
これは、rsj_robot_testパッケージ中の、robot_test.launchを実行する、という指示を表しています。
nodeタグ
nodeタグの各属性の意味は下記の通りです。
- pkg
- パッケージ名 (rsj_robot_testなど)
- type
- ノードタイプ (rsj_robot_test_nodeなど)
- name
- ノード名 (自由につけられる、同じノードを複数起動する場合には別の名前をつける必要あり)
paramタグ
paramタグの各属性の意味は下記の通りです
- name
- パラメータ名 (rosrunで、_param_file:=としていたparamの部分)
- value
- パラメータの値
- type
- double, int, string, bool など (一意に決まるときは省略可能)
remapタグ
remapタグの各属性の意味は下記の通りです。
- from
- 変更前のトピック名
- to
- 変更後のトピック名
これを使うことで、ノードとトピックをつなぎ変えることができます。たとえば、下記のような、動作計画のノードと、ロボットのドライバノードがつながっている状態から、新たに衝突回避のノードを加えたいとします。
remapを用いることで、各ノードのソースコードを変更することなく、ノードとトピックの接続だけ切り替えて、動作計画とロボットドライバの間に、衝突回避を追加することができます。