Wiki

(訳注:最新の情報は原文を参照してください.)

Note: This tutorial assumes that you have completed the previous tutorials: ROSノードの理解.
(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

ROSトピックの理解

Description: このチュートリアルはrostopicrqt_plotなどのコマンドとともに,ROSのtopicについて学びます.

Tutorial Level: BEGINNER

Next Tutorial: ROS サービスとパラメータについて理解する

セットアップ

roscore

roscore が起動していることを,新しいターミナルで確認しましょう:

$ roscore

もし先ほどのチュートリアルで起動している roscore を残していたら,次のエラーメッセージが出ます:

これは正しい挙動です.roscore はただ1つしか起動できません.

turtlesim

このチュートリアルでも,turtlesim を使います.新しいターミナルで起動してください:

$ rosrun turtlesim turtlesim_node

キーボードによる亀(turtle)の操作

亀の動きを操作するものが必要です.新しいターミナルで以下を起動してください.

$ rosrun turtlesim turtle_teleop_key

これで亀の動きをキーボードの矢印キーで操作することができるようになりました.もし亀を操作できなければ,turtle_teleop_key のウィンドウを選択して押したキーが認識されていることを確認してください.

亀の動きが操作できるようになったところで,この舞台裏で行われていることを見ていきましょう.

ROS トピック

turtlesim_nodeturtle_teleop_key のノードはお互い ROS トピックを介して通信しています.turtle_teleop_key は押されたキーをトピックに配信しています.そのとき,turtle_sim は同じトピックを購読することで,押されたキーを受け取っています.起動中のノードとトピックを表示する新しいツール, rqt_graph を使ってみましょう.

Note:`electric`, もしくはさらに古いバージョンを使用している場合, rqtは提供されていません. 代わりに, rxgraphを使用してください.

rqt_graphを使う

rqt_graph はシステム進行状況・挙動を示す,動的なグラフを生成します.rqt_graph は rqt_tools パッケージの一部です.ただし, インストールしていない場合, 下記のコマンドを実行してインストールしてください:

<distro>の部分を使用しているディストリビューションの名前(hydroやindigoなど)に置換します.

新しい端末を開いて:

$ rosrun rqt_graph rqt_graph

…とすると, このように表示されます:

rqt_graph_turtle_key_hydro.png

/turtle1/cmd_velにマウスカーソルを重ねると, ROSのノードやトピックがハイライトされます(ここでは, ノードが青と緑, トピックが赤). 見てわかるように, turtlesim_nodeturtle_teleop_keyのノードが/turtle1/cmd_velと命名されたトピック上で通信しています.

rqt_graph_turtle_key2_hydro.png

rostopicについて

rostopic ツールで ROS トピックについての情報を得ることができます.

rostopic のヘルプのオプションで、rostopicに存在するサブコマンドを調べることができます.

$ rostopic -h

turtlesimについて調べるために,これらのトピックのサブコマンドを使ってみましょう.

rostopic echo を使う

rostopic echo はトピックから配信されているデータを表示します.

使い方:

rostopic echo [topic]

turtle_teleop_key ノードが配信している /turtle1/cmd_vel トピックのデータを見てみましょう.新しいターミナルで以下を実行してください:

$ rostopic echo /turtle1/cmd_vel

もしかしたら,何も見えないかもしれません.それはトピックにデータが配信されていないからです.矢印キーを押して,turtle_teleop_key にデータを配信させてみましょう.もう一度 turtle_teleop_key のターミナルを選択しないと,亀は動かないことを忘れないでください.

上矢印キーを押すと,次のように表示されるでしょう:

もしくは, hydroでは:

linear: 
  x: 2.0
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: 0.0
---
linear: 
  x: 2.0
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: 0.0
---

rostopic echoturtle1/cmd_vel トピックを購読していることを確認するために,もう一度 rqt_graph を見てみましょう. rostopic echoで確認できるように, ここでは赤でturtle1/cmd_velトピックが購読されていることが示されています.

rqt_graph_echo_hydro.png

rostopic list を使う

rostopic list は現在購読・配信されている全トピックのリストを返します.

list サブ-コマンドに必要な引数を確かめましょう.新しいターミナルでこちらを実行します:

$ rostopic list -h

rostopic listverbose オプションを使用します:

$ rostopic list -v

これは配信・購読されている,トピックとその型についての詳細なリストを表示します.

ROS メッセージ

ノード間でのROS メッセージの送信により, トピック上での通信が生じます.配信者(turtle_teleop_key)と購読者(turtlesim_node)が通信するためには,配信者と購読者は同じのメッセージを送受信する必要があります.これは, トピックのがそのトピック上に配信されるメッセージのにより定義されるということを意味します. トピック上で送信されるメッセージのrostopic typeで確認することができます.

rostopic type の使い方

rostopic type は配信されているあらゆるトピックのメッセージ型を返します.

使い方:

rostopic type [topic]

試してみましょう(非hydro):

$ rostopic type /turtle1/command_velocity

以下のように表示されます:

hydroでは, こちらを試します:

$ rostopic type /turtle1/cmd_vel

以下のように表示されます:

rosmsg を使用してメッセージの詳細を見ることができます(非hydro):

$ rosmsg show turtlesim/Velocity

hydroでは:

$ rosmsg show geometry_msgs/Twist

これでturtlesimが要求するメッセージの型が分かり, turtleにコマンドを配信できるようになります:

その他のrostopic サブコマンド

前項でROS のメッセージについて学んだので、メッセージを使った rostopicのサブコマンド を使用してみましょう.

rostopic pub を使う

rostopic pub は現在立ちあがっているトピックへデータを配信します.

使い方:

rostopic pub [topic] [msg_type] [args]

例(非hydro):

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

hydroの例:

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

上記のコマンドでは turtlesim に直線速度 2.0 角速度 1.8 で移動するように指令する単一のメッセージを送信します.

これはやや複雑な例なので, それぞれの引数の詳細を見てみましょう.

亀の動きが止まったのは,亀は動き続けるために定期的な 1 Hz のコマンドを必要とするからです.定期的なコマンドは rostopic pub -r コマンドを使用して配信することができます(非hydro):

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

hydroでは:

$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

これは速度トピックに 1 Hz で速度のコマンドを配信します.

何が起こっているかは,rqt_graph でも見ることができます. rostopic pub node (ここでは赤色) が rostopic echo node (ここでは緑色) と通信しています:

rqt_graph_pub_hydro.png

亀を等速円運動させるためには,新しいターミナルで,turtlesim に配信されているデータを rostopic echo で見ることができます.

rostopic hz の使い方

rostopic hz は配信されたデータの更新頻度を調べます.

使い方:

rostopic hz [topic]

/turtle1/pose を配信して,turtlesim_node の速さがどれくらいか見てみましょう:

$ rostopic hz /turtle1/pose

以下のように表示されます:

turtlesim が turtle に配信するデータの更新頻度はおよそ 60 Hz だと言えます.トピックについての深い情報を得るために, rostopic typerosmsg show を結合して使うことができます(非hydro).

$ rostopic type /turtle1/command_velocity | rosmsg show

hydroでは:

rostopic type /turtle1/cmd_vel | rosmsg show

ここでは rostopic を使用してトピックを調査しました.他のツールも使用して,turtlesim が配信しているデータを見てみましょう:

rqt_plot の使い方

注意: electric, もしくは, それ以前のディストリビューションを使用している場合, rqtが提供されていません. 代わりに, rxplotを使用しましょう.

rqt_plot はトピックで配信されているデータの時間図を表示します.ここでは rqt_plot/turtle1/pose トピックで配信されているデータに対して使ってみましょう. まず, このように入力して新しいターミナルでrqt_plotを起動します:

$ rosrun rqt_plot rqt_plot

新しいウインドウが立ちあがり, 左上隅のテキストボックスで図に任意のトピックを追加する機能が提供されます. /turtle1/pose/xと入力すると, 無効化されていた+ボタンがハイライトされます. そのボタンを押して, /turtle1/pose/yのトピックにも同じ手順を繰り返し行います. そうすると, 亀のxy座標位置がグラフ上に表示されます.

ROS/Tutorials/UnderstandingTopics/rqt_plot.png

-ボタンを押すと, グラフから特定のトピックを非表示にするメニューが表示されます. 今追加した両方のトピックを非表示にして, /turtle1/pose/thetaを追加すると, 次に図示するような結果が得られます.

ROS/Tutorials/UnderstandingTopics/rqt_plot2.png

これでこのセクションは終わりです.Ctrl-C を使って rostopic を kill しましょう.ただし,turtlesim は起動したままにしておいてください.

ここでは ROS トピックがどのように働くかを理解しました.次はサービスとパラメータを理解するを見てみましょう.

Wiki: ja/ROS/Tutorials/UnderstandingTopics (last edited 2015-10-13 13:18:25 by s_ktr)