ROSにおけるノード間通信の分析に
使うコマンド紹介とその実用例

このセクションではROSにおいて各パッケージの動作状況の分析やデバッグをするのに
便利なコマンドの紹介と実用例を紹介します。

rosgraph

rosgraphは現在動作しているノードの情報を一挙に表示するためのコマンドです。
実行すると以下のような出力がされます。
以下の例では動作しているノードがsubscriberrosoutpublisherの3つです。
たとえば,subscriberであればInbound方向にPublisherからデータを受け取っていることになります。

コマンド書式
rosgraph

オプションなし

実際の使い方例

rosgraph
Nodes:
  /subscriber :
    Inbound:
      /publisher
    Outbound:
      /rosout
  /rosout :
    Inbound:
      /publisher
      /subscriber
    Outbound:
  /publisher :
    Inbound:
    Outbound:
      /rosout
      /subscriber

またrosgraphと同じような使い方のできるrqt_graphもあります。
このツールはGUI上でグラフィカルに動作中のノードやトピックの関係を表示できます。

rostopic

rostopicは現在動作中の全てのTopicについてさまざまなことを調べることができます。
任意のノード同士がどのように通信をしているか調べるときに非常に有効なコマンドです。

コマンド書式
rostopic option topic_name

オプション一覧

rostopic bw     任意のTopicのバンド幅を表示
rostopic echo   任意のTopicに配信されているメッセージ内容の表示
rostopic find   メッセージタイプでTopicを見つける
rostopic hz     任意のTopicの配信頻度を表示
rostopic info   任意のアクティブなTopicの情報を表示
rostopic list   アクティブなToipcの一覧を表示
rostopic pub    任意のノードにメッセージをpubulishする
rostopic type   Topicのメッセージタイプを表示

実際の使い方例
アクティブなTopicを調べ,特定のTopicについてメッセージタイプとバンド幅を調べる。
list→info→bw

kazushi@degin:~$ rostopic list
/image_data
/rosout
/rosout_agg

kazushi@degin:~$ rostopic info image_data
Type: image_tutorial/image

Publishers:
 * /publisher (http://degin:42608/)

Subscribers:
 * /subscriber (http://degin:44576/)

kazushi@degin:~$ rostopic bw image_data
subscribed to [/image_data]
average: 504.44KB/s
        mean: 307.25KB min: 307.25KB max: 307.25KB window: 2
average: 415.31KB/s
        mean: 307.25KB min: 307.25KB max: 307.25KB window: 3
average: 381.60KB/s
        mean: 307.25KB min: 307.25KB max: 307.25KB window: 4
average: 324.38KB/s
        mean: 307.25KB min: 307.25KB max: 307.25KB window: 4

rosnode

rostopicは現在動作中の全てのノードについてさまざまなことを調べることができます。
ノードの単体デバッグやノード情報の取得などに便利です。

コマンド書式
rostopic option topic_name

オプション一覧

rosnode ping    任意のノードが動作しているかどうか確認する(pingの送信)
rosnode list    アクティブなノード一覧を表示
rosnode info    任意のノードの情報を表示
rosnode machine ROSのノードが動作しているマシン名の一覧を表示
rosnode kill    任意のnodeの動作停止
rosnode cleanup nodeリストのクリーンアップ(動作していないノードの登録解除)

実際の使い方例
アクティブなノード一覧を取得し,特定のノード情報について調べそのノードの動作を確認する
list→info→ping

kazushi@degin:~$ rosnode list
/publisher
/rosout
/subscriber

kazushi@degin:~$ rosnode info publisher
--------------------------------------------------------------------------------
Node [/publisher]
Publications:
 * /rosout [rosgraph_msgs/Log]
 * /image_data [image_tutorial/image]

Subscriptions: None

Services:
 * /publisher/set_logger_level
 * /publisher/get_loggers


contacting node http://degin:57164/ ...
Pid: 12554
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS
 * topic: /image_data
    * to: /subscriber
    * direction: outbound
    * transport: TCPROS

kazushi@degin:~$ rosnode ping publisher
rosnode: node is [/publisher]
pinging /publisher with a timeout of 3.0s
xmlrpc reply from http://degin:57164/   time=0.593901ms
xmlrpc reply from http://degin:57164/   time=0.894070ms
xmlrpc reply from http://degin:57164/   time=0.882864ms

rospack

rospackは自分の作成したパッケージはもちろん,他の開発者が作成したパッケージについてのさまざまな情報を取得できます。
オプションは大変多くあるので,今回はよく使用するオプションを紹介します。

コマンド書式
rospack option package_name

オプション一覧

depends         直接、間接的なパッケージ依存を全て表示
depends1        直接的なパッケージ依存を表示
depends-indent  パッケージ依存をインデントがついた形で表示
list            インストールされているパッケージとインストールパスの一覧を表示
list-names      インストールされているパッケージの名前一覧を表示

実際の使い方例
git cloneした他開発者のパッケージについての依存情報について調べ,足りないパッケージのインストールを行う。

kazushi@degin:~/ros_ws/src$ git clone https://github.com/Kumikomi/openreroc_motion_sensor.git
Cloning into 'openreroc_motion_sensor'...
remote: Counting objects: 34, done.
remote: Total 34 (delta 0), reused 0 (delta 0), pack-reused 34
Unpacking objects: 100% (34/34), done.
Checking connectivity... done.

kazushi@degin:~/ros_ws/src$ rospack depends1 openreroc_motion_sensor
roscpp
std_msgs


kazushi@degin:~/ros_ws/src$ apt-cache search roscpp
ros-indigo-roscpp - roscpp is a C++ implementation of ROS. 
It provides a client library that enables C++ programmers to quickly interface with ROS Topics, 
Services, and Parameters. roscpp is the most widely used ROS client library 
and is designed to be the high-performance library for ROS.

sudo apt-get install ros-indigo-roscpp

rosmsg

コマンド書式
rosmsg option package_name/message_file

オプション一覧

rosmsg show     メッセージに関する情報を表示
rosmsg list     インストールされているメッセージの型を全て表示
rosmsg md5      任意のメッセージタイプのmd5サムを表示
rosmsg package  任意のパッケージに含まれるメッセージタイプの一覧を表示
rosmsg packages インストールされているメッセージに関するパッケージを全て表示

実際の使い方例

rosmsg package image_tutorial
image_tutorial/image

課題

  • 前のセクションで作成したimage_tutorialというパッケージのpublsherとsubscriberをそれぞれ起動しましょう。
  • コマンドを使用してimage_tutorialについて調べてみましょう
    • image_tutorialの依存関係は?
    • publisherとsubscriberの使用しているトピック名とメッセージタイプは?
    • image_tutorialにおけるメッセージはどんな要素を持つ?
  • rosnodeで起動中のpublsherとsubscriberを停止させましょう。