Updated on: 2018-06-15
ROSには多くの便利な機能が用意されています。ここでは、そのうちのよく利用するコマンドなどの一部を紹介します。
ROSを用いた点群取得では、 端末を4つ起動して、それぞれroscoreとrosrunコマンドでノードを起動していました。 複雑なロボットシステムではこれが、100個以上のノードになる場合もあり、手作業ではやっていられません。
そこでROSには、launchファイルに、起動するノードやそのパラメータを書いておき、 roslaunchコマンドで一括起動する方法が用意されています。 下記の操作を行い、launchファイルを追加してみましょう。
1
$ mkdir ~/catkin_ws/src/rsj_robot_test/launch
1
$ gedit ~/catkin_ws/src/rsj_robot_test/launch/robot_test.launch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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該当するものに置き換えること" />
<param name="compatible" value="1" />
</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ファイルは下記のコマンドで実行できます。
1
$ roslaunch rsj_robot_test robot_test.launch
これは、rsj_robot_testパッケージ中の、robot_test.launchを実行する、という指示を表しています。 下記に代表的なタグの説明を示します。
node
タグ動するノードを指定します。nodeタグの各属性の意味は下記の通りです。
name
pkg
type
output
stdout
の先:定義しないとstdout
(ROS_INFO
やstd::cout
への出力等)は端末で表示されず、
~/.ros/log/
に保存されるログファイルだけに出力される。端末で表示したい場合はscreen
にします。param
タグパラメータサーバーにパラメータを設定します。起動されるノードはこのパラメータが利用できます。
param
は<launch>
、</launch>
の間に入れるとグローバルパラメータに、<node>
、</node>
の間に入れるとプライベートパラメータになります。
グローバルとプライベートでは最終的に展開される名前が異なってきます。
例えば、同じbar
というパラメータでも次のような違いがあります。
/bar
という名前で参照される。foo
のプライベートパラメータの場合、ROS のノードからは/foo/bar
という名前で参照される。各属性は下記の通りです。
name
value
type
remap
タグノードとトピックをつなぎ変えます。
remapタグの各属性の意味は下記の通りです。
from
to
これを使うことで、ノードとトピックをつなぎ変えることができます。たとえば、下記のような、動作計画のノードと、ロボットのドライバノードがつながっている状態から、 新たに衝突回避のノードを加えたいとします。
remapを用いることで、各ノードのソースコードを変更することなく、ノードとトピックの接続だけ切り替えて、動作計画とロボットドライバの間に、衝突回避を追加することができます。
トピックとノードの接続状態を可視化することができます。 ロボットとURGをPCに接続して、roslaunchの項で説明したようにrobot_test.launchを実行し、その状態で下記コマンドを実行してみましょう。
1
$ rqt_graph
以下の画像のように、ノードとトピックの接続グラフが表示されます。
デバッグなどのため、ROSのトピックに流れているメッセージを確認したいときや、 試しにメッセージを送信したいときに、コマンドラインのツールでこれらの処理を行うことができます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ rostopic list
/ad/ad0
/ad/ad1
/ad/ad2
/ad/ad3
/ad/ad4
/ad/ad5
/ad/ad6
/ad/ad7
/cmd_vel
/control_mode
/diagnostics
/laser_status
/odom
/rosout
/rosout_agg
/scan
/tf
/tf_static
/urg_node/parameter_descriptions
/urg_node/parameter_updates
/wrench
1
$ rostopic echo /odom
Tab でトピック名、データ型及びメッセージのテンプレートが出せます。
1
2
3
4
5
6
7
8
$ rostopic pub -1 /cmd_vel geometry_msgs/Twist [Tab補完で表示]"linear
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
-1
を利用すると一回のみ送信します。
-1
を削除するとrostopic
はこのメッセージを1度送信し、 Ctrl+c を入力するまで待機して、あとから起動したノードがメッセージを受け取れる状態を維持します。
ROSで提供されているrosbag
ツールを用いると、ROS上で送信、受信されているデータ(メッセージ)を記録・再生することができます。
1
$ rosbag record /scan /odom
記録の終了は、Ctrl+c で行います。記録されたデータは、「日付時刻.bag」のファイル名で保存されています。
1
$ rosbag play ファイル名.bag
ROSでは、rvizという、データ可視化ツール(ビューワ)が提供されています。 今回のセミナーの環境にも、インストールされており、URGのデータやオドメトリを表示することができます。 ロボットとURGをPCに接続して、roslaunchの項で説明したようにrobot_test.launchを実行し、その状態で下記コマンドを実行してみましょう。
1
$ rosrun rviz rviz
rviz画面中の、「add」ボタンをクリックし、開いた選択ウインドウ内で、 「By topic」タブから、「/scan」中の「LaserScan」を選択します。 また、「Global Option」の「Fixed Frame」欄に「laser」と入力します。
センサデータが取得できていれば、図のように、距離データがプロットされます。
配布された3次元距離センサのデータについて、roslounch
を利用して2次元データに変換し、RVizで結果を確認してみましょう。
お手持ちのセンサに応じて、以下を実施してください。