ROS入門 (概要/用語/コマンド)
- この記事の目的
- ROSの考え方/用語の整理
- ROSのプロセス/通信の概念・用語
- ROSコマンドの使い方 (チュートリアルを利用)
- 1.roscoreの起動
- 2.ノードの起動
- 3.動作結果の確認
- 4.動作結果の保存
- よく使うコマンドリストのまとめ
この記事の目的
ROSを使った開発の考え方、手順(チュートリアルを通じたコマンドの使い方)についてまとめる
ROSの考え方/用語の整理
ROSの特徴や利点については下記サイトに細かく記載されている。
特に、自動運転・ロボット関連の試作に便利なライブラリ(自己位置推定など)やデバッグ用のツールが充実しており、それらに関する試作を行う場合には非常に便利なフレームワークといえる。
ROSのプロセス/通信の概念・用語
上記のようにROSは便利なフレームワークではあるが使い方や固有の用語がかなり多い。 公式チュートリアル (http://wiki.ros.org/ja/ROS/Tutorials)を参考にしても良いが、 初級の時点でファイルシステムやパッケージファイルの詳細の説明をしており、直観的な 理解が難しいと感じた。そこで、今後説明しやすいように下記にROSでアプリケーションを 構築する際のプロセス/通信に関する概念と用語をまとめてみた。
参考 http://forestofazumino.web.fc2.com/ros/ros_basics.html
用語 | 内容 |
---|---|
Node | プロセス(処理) |
Message | ノード間の送受信 |
Master | ノード・メッセージの名称管理をする |
Topic | 非同期で送受信するノード間信号 |
Subscriber | Topicを受信する側のノード |
Publisher | Topicを送信する側のノード |
Service | 同期型(受信してすぐ処理を実行する)のノード間通信 |
Service Server | Serviceを受けて実行結果を出力するノード |
Service Client | Serviceを要求して結果を受理するノード |
上記については下記参考書の解説を読むとわかりやすい。
ROSではじめるロボットプログラミング―フリーのロボット用「フレームワーク」 (I・O BOOKS)
ROSコマンドの使い方 (チュートリアルを利用)
ROSではノードの起動や通信内容の確認、可視化をROSコマンドを用いて行う。 基本的には、下記の順で使用することが多い。 公式のチュートリアルにあるturtlesimを用いて使い方をまとめる。
1.roscoreの起動
roscore
各ノード・送受信信号の名前の管理、標準入出力処理を行う ROS上で処理を動作させる場合は必ず起動する必要がある (起動していない状態で別ノードを起動させようとするとroscoreの起動待ちになる)
2.ノードの起動
下記の2つの方法で起動できる。 オプションが多い場合はlaunchファイルを作っておくと良い。
rosrunコマンド
rosrun turtlesim turtlesim_node
# rosrun [package_name] [node_name]
rosrun turtlesim turtle_teleop_key
# turtlesim_nodeとは別のターミナルで起動する
コマンド rosrunを使いパッケージ名とノード名を指定して起動する apt-getで入れたライブラリでは問題ないが、自作で作ったパッケージの 場合パスを通しておく必要がある。
複数のノードを立ち上げる場合はそれぞれターミナルを立ち上げて実行する。
roslaunch
roslaunch beginner_tutorials turtlemimic.launch #事前に下記チュートリアルに従った準備が必要 #roslaunch beginner_tutorials turtlemimic.launch
launch ファイル内に立ち上げたいノードと起動時のオプション (パラメータの有効/無効など)を渡すと1つのターミナルでノードをまとめて起動できる。ライブラリによっては最初からlaunchファイルで起動できるように提供されているものがある。(turtlesimはないのでチュートリアルに従って記述する必要がある)
3.動作結果の確認
ノードを立ち上げたあと、各ノードの状態・通信内容は下記のコマンドで確認する。
コマンドによる確認
送受信中の信号一覧の表示には下記を利用する。 rostopic list では信号の送受信が成立していなくても、 受信待ちの状態となるだけでリストに出力されることに注意する必要がある。 信号が狙いの周期で更新できているかは rostopic hzなどを用いたほうが良い。
# ROSで通信している全信号リスト rostopic list # ROSで通信している信号の出力 # rostopic echo [topic名] rostopic echo /turtle1/pose #表示例 --- x: 5.544444561 y: 5.544444561 theta: 0.0 linear_velocity: 0.0 angular_velocity: 0.0 --- # ROSで通信している信号の更新周期の出力 # rostopic hz [topic名] rostopic hz /turtle1/pose #表示例 subscribed to [/turtle1/pose] average rate: 62.515 min: 0.015s max: 0.017s std dev: 0.00047s window: 61 average rate: 62.519 min: 0.014s max: 0.017s std dev: 0.00052s window: 123
GUIによる確認
コマンドによる確認の他に、rosのGUI機能rqt_graphでノードとトピックの関係を 可視化して接続関係を確認することができる。
# GUIツール rqt_graphを用いたノードの通信状態の可視化
rosrun rqt_graph rqt_graph
また、各トピックの波形 (時系列変化)を表示することもできる。
# GUIツール rqt_graphを用いた波形の時間変化の可視化
rosrun rqt_plot rqt_plot
rvizによる確認
ROSで用意された形式に従って位置や速度情報を出力するとロボットが空間でどのような動きをしているかをrvizを使って確認することができる。 (tfの発行なども必要なので下記チュートリアルに従う)
rviz
4.動作結果の保存
動作中のノード間でどのような信号の送受信が行われたのかを保存することができる。この機能を用いることで同じカメラ信号のrosbag信号を流しながら自己位置推定処理のデバッグをシミュレーションで行うなどの使い方が可能になる。
#全ての送受信信号の保存 (ターミナルのパスにbagファイルが生成される) rosbag record -a
#bagファイルを再生する #再生中は記録時と同じタイムスタンプでトピックの送受信が行われる rosbag play recorded1.bag
よく使うコマンドリストのまとめ
https://qiita.com/tomoyafujita/items/13076d37bcac05a83530
https://raspimouse-sim-tutorial.gitbook.io/project/ros_tutorial
用語 | 内容 |
---|---|
roscore | マスターノードの起動 (rosを使用する際は必須) |
rosrun [ノード名] | ノードの起動 |
roslaunch [launchファイル名] | launchファイルを用いたノード起動 |
rostopic list | ros上で通信しているtopicのリスト出力 |
rostopic echo [topic名] | topic名の内容の出力 |
rostopic hz [topic名] | topicの更新周期の出力 |
rosbag record -a | ros上で通信しているtopicをbagファイルに保存 |
rosrun rqt_graph rqt_graph | rqt_graphの起動 |
rviz | rvizの起動 |
次回はpythonを使ったノードの開発・トピックの通信例についてまとめる。