ROS覚え書き「トピックの理解」

http://www.ros.org/wiki/ROS/Tutorials/UnderstandingTopics より

ノードは互いに通信する際、トピック(Topic)を通じて行う。例えばturtle_teleop_keyノードは、キー入力をトピック上に配信する。他方で、turtlesimノードはそのトピックを購読することでキー入力を受信する。

rxgraphは、実行中のノードとトピックからなる有向グラフを表示するツールである。このツールを使えば、ROSで何が行われているか視覚的に見ることができる。

rxgraph

turtle_teleop_keyノードは、/turtle1/command_velocityトピックを通じて、turtlesimノードと通信する。また、turtlesimノードは、/rosoutトピックを通じてrosoutノードと通信する。

rostopicは、トピックに関する情報を得るためのコマンドである。rostopic -hを実行すると利用可能なサブコマンドが表示される。

rostopic bw:トピックによって使われるバンド幅(bandwidth)を表示する。

rostopic echo:画面にメッセージを表示する。

rostopic hz:トピックの配信レート(publishing rate)を表示する。

rostopic list:有効なトピックに関する情報を表示する。

rostopic pub:トピックにデータを配信する。

rostopic type:トピックの型を表示する。

rostopic echoはトピック上に配信されたデータを表示する。使い方は以下の通り。

rostopic echo [トピック]

turtle_teleop_keyノードによって/turtle1/command_velocityトピック上に配信されたデータを見るには以下のようにする。

rostopic echo /turtle1/command_velocity

rostopic listは、現在配信・購読されている全てのトピックの一覧を表示する。rostopic list -hで、必要とされる引数についての説明が表示される。rostopic list -vで、配信・購読されるトピックのリストが表示される。

ノード間でメッセージ(Message)を送ることにより、トピック上で通信が行われる。配信者(turtle_teleop_key)と購読者(turtlesim_node)が通信するとき、配信者と購読者は同じ型(type)のメッセージを送受信する必要がある。トピック上で配信されるメッセージの型によってトピックの型が決まる。トピック上のメッセージの型は、rostopic typeを使って知ることができる。rostopic typeの使い方は以下の通り。

rostopic type [トピック]

rostpic type /turtle1/command_velocityを実行すると、turtlesim/Velocityを得る。

rosmsgを使って、メッセージの詳細を見ることができる。

rosmsg show turtlesim/Velocity

rostopic pubは、トピック上にデータを配信する。使い方は以下の通り。

rostopic pub [トピック] [メッセージ型] [引数]

使用例

rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity  -- 2.0  1.8

これはturtlesimに対して、線速度2.0、角速度1.8で動作するようにメッセージを送っている。

パラメータの-1は、メッセージを1つだけ送って終了することを示す。

/turtle1/command_velocityは、配信するトピックの名前を表す。

turtlesim/Velocityは、トピックへ配信するときに使うメッセージの型を表す。

  • は、サブコマンドのオプションがこれ以上ないことをパーサに伝えるものである。マイナス記号で始まる引数を使うような場合(たとえば負の数など)に用いる必要がある。

2.0 1.8は、turtlesim/Velocityメッセージの2個の小数点数linear, angularにそれぞれ対応する。これらの引数はYAML文法に従う。YAML文法についてはこちら: http://www.ros.org/wiki/ROS/YAMLCommandLine

メッセージを連続して配信するためには、pub -r コマンドを用いる。

rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0  -1.8

上の例では、1ヘルツの間隔でメッセージを配信している。

rostopic hzは、データが配信される速度を調べるのに使う。

rostopic hz [トピック]

turtlesim_nodeが/turtle1/poseトピックを配信する速度を調べるには、以下のようにする。

rostopic hz /turtle1/pose

rxplotは、トピックに対して配信されるデータを時系列的にプロットするコマンドである。/turtle1/poseトピックに対して配信されるデータをプロットする例は以下のとおり。

rxplot /turtle1/pose/x,/turtle1/pose/y /turtle1/pose/theta

この例では2つのグラフが表示され、上のグラフにはx,yの値が、下のグラフにはthetaの値がそれぞれプロットされる。