ROSの便利機能

ROSには多くの便利な機能が用意されています。ここでは、そのうちのよく利用するコマンドなどの一部を紹介します。

roslaunch

URGを使ったロボット制御では、端末を4つ起動して、それぞれroscoreとrosrunコマンドでノードを起動していました。複雑なロボットシステムではこれが、100個以上のノードになる場合もあり、手作業ではやっていられません。

そこでROSには、launchファイルに、起動するノードやそのパラメータを書いておき、roslaunchコマンドで一括起動する方法が用意されています。下記の操作を行い、launchファイルを追加してみましょう。

  1. rsj_robot_testパッケージに、launchディレクトリを作成
    $ mkdir ~/catkin_ws/src/rsj_robot_test/launch
  2. robot_test.launchファイルを作成して開く
    $ gedit ~/catkin_ws/src/rsj_robot_test/launch/robot_test.launch
  3. 下記内容を記入
    <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を用いることで、各ノードのソースコードを変更することなく、ノードとトピックの接続だけ切り替えて、動作計画とロボットドライバの間に、衝突回避を追加することができます。

rqt_graph

トピックとノードの接続状態を可視化することができます。ロボットとURGをPCに接続して、roslaunchの項で説明したようにrobot_test.launchを実行し、その状態で下記コマンドを実行してみましょう。

$ rqt_graph

以下の画像のように、ノードとトピックの接続グラフが表示されます。

rostopic

デバッグなどのため、ROSのトピックに流れているメッセージを確認したいときや、試しにメッセージを送信したいときに、コマンドラインのツールでこれらの処理を行うことができます。

rviz

ROSでは、rvizという、データ可視化ツール(ビューワ)が提供されています。今回のセミナーの環境にも、インストールされており、URGのデータやオドメトリを表示することができます。ロボットとURGをPCに接続して、roslaunchの項で説明したようにrobot_test.launchを実行し、その状態で下記コマンドを実行してみましょう。

$ rosrun rviz rviz

rviz画面中の、「add」ボタンをクリックし、開いた選択ウインドウ内で、「By topic」タブから、「/scan」中の「LaserScan」を選択します。また、「Global Option」の「Fixed Frame」欄に「laser」と入力します。

センサデータが取得できていれば、図のように、距離データがプロットされます。

rosbag

ROSで提供されているrosbagツールを用いると、ROS上でpublish、subscribeされているデータ(メッセージ)を記録・再生することができます。

今回のセミナーでは、Live USBを用いており、保存できる容量に限りがあるので、長時間のデータを記録しないように注意して下さい。