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

ROS トピックについて理解する

セットアップ

roscore

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

$ roscore

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

  • roscore cannot run as another roscore/master is already running. 
    Please kill other roscore/zenmaster processes before relaunching

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

turtlesim

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

$ rosrun turtlesim turtlesim_node

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

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

$ rosrun turtle_teleop turtle_teleop_key
  • [ INFO] 1254264546.878445000: Started node [/teleop_turtle], pid [5528], bound on [aqy], xmlrpc port [43918], tcpros port [55936], logging to [~/ros/ros/log/teleop_turtle_5528.log], using [real] time
    Reading from keyboard
    ---------------------------
    Use arrow keys to move the turtle.

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

  • ROS/Tutorials/UnderstandingTopics/turtle_key.png

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

ROS トピック

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

rxgraph の使い方

rxgraph はシステムで何が行われているかを示す,動的なグラフを作成します.rxgraph は rxtools パッケージの一部です.新しいターミナルで実行してみましょう.

$ rxgraph

以下のように表示されるでしょう:

ROS/Tutorials/UnderstandingTopics/rxgraph_turtle_key.png ここでは ROS ノードとトピックを強調表示しました.turtlesim_nodeturtle_teleop_key のノードは /turtle1/command_velocity と言う名前のトピックを介して通信していることが分かると思います.

ROS/Tutorials/UnderstandingTopics/rxgraph_turtle_key2.png

rostopic の紹介

rostopic ツールで ROS トピックの紹介を得ることができます.

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

$ rostopic -h
  • rostopic bw     トピックで使用されている帯域を表示する
    rostopic echo   スクリーンにメッセージを出力する
    rostopic hz     トピックの配信頻度を表示する    
    rostopic list   アクティブなトピックについての情報を出力する
    rostopic pub    トピックへデータを配信する
    rostopic type   トピック型を出力する

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

rostopic echo を使う

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

使い方:

rostopic echo [topic]

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

$ rostopic echo /turtle1/command_velocity

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

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

  • ---
    linear: 2.0
    angular: 0.0
    ---
    linear: 2.0
    angular: 0.0
    ---
    linear: 2.0
    angular: 0.0
    ---
    linear: 2.0
    angular: 0.0
    ---
    linear: 2.0
    angular: 0.0

rostopic echoturtle1/command_velocity トピックを購読していることを確認するために,もう一度 rxgraph を見てみましょう

ROS/Tutorials/UnderstandingTopics/rxgraph_echo.png

rostopic list を使う

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

list サブ-コマンドに必要な引数を確かめましょう.新しいターミナルでやってみましょう:

$ rostopic list -h
  • Usage: rostopic list [/topic]
    
    Options:
      -h, --help            show this help message and exit
      -b BAGFILE, --bag=BAGFILE
                            list topics in .bag file
      -v, --verbose         list full details about each topic
      -p                    list only publishers
      -s                    list only subscribers

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

$ rostopic list -v

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

  • Published topics:
     * /turtle1/color_sensor [turtlesim/Color] 1 publisher
     * /turtle1/command_velocity [turtlesim/Velocity] 1 publisher
     * /rosout [roslib/Log] 2 publishers
     * /rosout_agg [roslib/Log] 1 publisher
     * /turtle1/pose [turtlesim/Pose] 1 publisher
    
    Subscribed topics:
     * /clock [unknown type] 3 subscribers
     * /turtle1/command_velocity [turtlesim/Velocity] 1 subscriber
     * /rosout [roslib/Log] 1 subscriber

ROS メッセージ

トピックを使用した通信では,ノード間でROS メッセージの送信が起こります.配信者 (turtle_teleop_key) と購読者 (turtlesim_node) の通信では,配信者と購読者は同じのメッセージで送信したり受信したりする必要があります.トピックにのせたメッセージのrostopic type で確認することができます.

rostopic type の使い方

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

使い方:

rostopic type [topic]

使ってみましょう::

$ rostopic type /turtle1/command_velocity

以下のように表示されるでしょう:

  • turtlesim/Velocity

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

$ rosmsg show turtlesim/Velocity
  • float32 linear
    float32 angular

turtle にコマンドを配信して,turtlesim が求めるメッセージの型が分かります

rostopic continued

ROS メッセージについて学びましょう.メッセージに rostopic を使用してみましょう.

rostopic pub の使い方

rostopic pub は現在公開されているトピックへデータを配信します.

使い方:

rostopic pub [topic] [msg_type] [args]

例:

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

上のコマンドでは turtlesim に速度 2.0 角速度 1.8 で線形に動くように単発のメッセージを送っています.

  • ROS/Tutorials/UnderstandingTopics/turtle(rostopicpub).png

これはちょっと込み入った例です.それぞれの引数の詳細を見てみましょう.

  • rostopic pub このコマンドは与えられたトピックへメッセージを配信します.

  •  -1  (dash-one) このオプションで rostopic は1つのメッセージを配信した後に終了させます.

  • /turtle1/command_velocity これは配信するトピックの名前です.

  • turtlesim/Velocity これはトピックで配信する際に使用されるメッセージの型です.

  • -- (double-dash) これは後の引数を表示させなくするためのオプションです.これは,例えばどれかの引数がダッシュ - (負数のような)に続いている場合に使用します.

  •  2.0 1.8  前述の通り,turtlesim/Velocity メッセージは linearangular という2つの少数の要素を持っています.この場合は,2.0 が線形値で,1.8angular 値になります.

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

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

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

  • ROS/Tutorials/UnderstandingTopics/turtle(rostopicpub)2.png

何が起こっているかは,rxgraph でも見ることができます:

ROS/Tutorials/UnderstandingTopics/rxgraph_pub.png

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

rostopic hz の使い方

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

使い方:

rostopic hz [topic]
  • /turtle1/pose を配信して,turtlesim_node の早さを見ることができます.

$ rostopic hz /turtle1/pose

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

  • subscribed to [/turtle1/pose]
    average rate: 59.354
            min: 0.005s max: 0.027s std dev: 0.00284s window: 58
    average rate: 59.459
            min: 0.005s max: 0.027s std dev: 0.00271s window: 118
    average rate: 59.539
            min: 0.004s max: 0.030s std dev: 0.00339s window: 177
    average rate: 59.492
            min: 0.004s max: 0.030s std dev: 0.00380s window: 237
    average rate: 59.463
            min: 0.004s max: 0.030s std dev: 0.00380s window: 290

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

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

rxplot の使い方

rxplot はトピックで配信されているデータの時間図を表示します.ここでは rxplot/turtle1/pose トピックで配信されているデータに対して使ってみましょう:

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

亀の x-y 座標が上のグラフに図示され,角度が下のグラフに図示されます:

ROS/Tutorials/UnderstandingTopics/rxplot.png

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

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

Wiki: ja/ROS/Tutorials/UnderstandingTopics (last edited 2010-01-04 15:26:41 by KentaYonekura)