(訳注:最新の情報は原文を参照してください.)
Contents
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 トピック
turtlesim_node と turtle_teleop_key のノードはお互い ROS トピックを介して通信しています.turtle_teleop_key はトピックに押されたキーを配信しています.そのとき,turtle_sim は同じトピックを購読することで,押されたキーを受け取っています.起動中のノードとトピックを表示する新しいツール, rxgraph を使ってみましょう.
rxgraph の使い方
rxgraph はシステムで何が行われているかを示す,動的なグラフを作成します.rxgraph は rxtools パッケージの一部です.新しいターミナルで実行してみましょう.
$ rxgraph
以下のように表示されるでしょう:
ここでは ROS ノードとトピックを強調表示しました.turtlesim_node と turtle_teleop_key のノードは /turtle1/command_velocity と言う名前のトピックを介して通信していることが分かると思います.
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 echo が turtle1/command_velocity トピックを購読していることを確認するために,もう一度 rxgraph を見てみましょう
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 list は verbose オプションを使用します:
$ 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 で線形に動くように単発のメッセージを送っています.
これはちょっと込み入った例です.それぞれの引数の詳細を見てみましょう.
rostopic pub このコマンドは与えられたトピックへメッセージを配信します.
-1 (dash-one) このオプションで rostopic は1つのメッセージを配信した後に終了させます.
/turtle1/command_velocity これは配信するトピックの名前です.
turtlesim/Velocity これはトピックで配信する際に使用されるメッセージの型です.
-- (double-dash) これは後の引数を表示させなくするためのオプションです.これは,例えばどれかの引数がダッシュ - (負数のような)に続いている場合に使用します.
2.0 1.8 前述の通り,turtlesim/Velocity メッセージは linear と angular という2つの少数の要素を持っています.この場合は,2.0 が線形値で,1.8 が angular 値になります.
亀の動きが止まったのは,亀は動き続けるために定期的な 1 Hz のコマンドを必要とするからです.定期的なコマンドは rostopic pub -r コマンドを使用して配信することができます:
$ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 -1.8
これは速度トピックに 1 Hz で速度のコマンドを配信します.
何が起こっているかは,rxgraph でも見ることができます:
亀を等速円運動させるためには,新しいターミナルで,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 type と rosmsg show を結合して使うことができます.
ここでは rostopic を使用してトピックを調査しました.他のツールも使用して,turtlesim が配信しているデータを見てみましょう:
rxplot の使い方
rxplot はトピックで配信されているデータの時間図を表示します.ここでは rxplot を /turtle1/pose トピックで配信されているデータに対して使ってみましょう:
$ rxplot /turtle1/pose/x,/turtle1/pose/y /turtle1/pose/theta
亀の x-y 座標が上のグラフに図示され,角度が下のグラフに図示されます:
これでこのセクションは終わりです.Ctrl-C を使って rostopic を kill しましょう.ただし,turtlesim は起動したままにしておいてください.
ここでは ROS トピックがどのように働くかを理解しました.次はサービスとパラメータの働きを見てみましょう.






