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

ROS ノードについて理解する

グラフ概念についての,てっとり早いおさらい

  • ノード: 1つのノードは ROS を使用して他のノードとやりとりします.

  • トピック: ノードはメッセージをトピックへ向けて配信し,同様に購読することでトピックからメッセージを受け取ることができます.

  • メッセージ: トピックへ配信したり購読したりするときの ROS のデータ型です.

  • マスター: ROS サービス(例えば,ノードがお互いを検索することを助ける)の名前です.

  • rosout: ROS における stdout や stderr と同等の機能です.

  • roscore: マスター + rosout + パラメータ サーバ(パラメータ サーバについては後で紹介します)

ノード

ノードは ROS パッケージ内の実行ファイルに他なりません.ROS ノードは ROS クライアント ライブラリを使用して他のノードとやりとりします.ノードはトピックへ配信したり購読したりできます.ノードはサービスを提供したり,使用したりすることができます.

クライアント ライブラリ

ROS クライアント ライブラリは異なるプログラミング言語で記述されたノードがやりとりできるようにします.

  • rospy = Python クライアント ライブラリ
  • roscpp = C++ クライアント ライブラリ

roscore

roscore は ROS を使用する際に一番初めに起動させます.

起動してみましょう:

$ roscore

このように表示されるはずです:

  • ... logging to ~/ros/ros/log/3a5749c2-965f-11de-8875-001b21201aa8/roslaunch-aqy-3581.log
    ... loading XML file [~/ros/ros/tools/roslaunch/roscore.xml]
    Added core node of type [rosout/rosout] in namespace [/]
    started roslaunch server http://aqy:56911/
    
    SUMMARY
    ========
    
    NODES
    
    starting new master (master configured for auto start)
    process[master]: started with pid [3613]
    ROS_MASTER_URI=http://aqy:11311/
    setting /run_id to 3a5749c2-965f-11de-8875-001b21201aa8
    +PARAM [/run_id] by /roslaunch
    +PARAM [/roslaunch/uris/aqy:56911] by /roslaunch
    process[rosout-1]: started with pid [3628]
    started core service [/rosout]
    +SERVICE [/rosout/get_loggers] /rosout http://aqy:53163/
    +SERVICE [/rosout/set_logger_level] /rosout http://aqy:53163/
    +SUB [/time] /rosout http://aqy:53163/
    +PUB [/rosout_agg] /rosout http://aqy:53163/
    +SUB [/rosout] /rosout http://aqy:53163/

新しいターミナルを開いて,roscore が何をしているのかを rosnode を使用して見てみましょう.

rosnode の使い方

rosnode は実行中の ROS ノードについての情報を表示します.rosnode list コマンドはアクティブなノードのリストを表示します:

$ rosnode list
  • このように表示されます:
  • /rosout

この表示から rosout という1つのノードのみが起動していることが分かります.このノードはノードのデバッグ出力を集めてログ化するためにいつも起動しています.

rosnode info コマンドは特定のノードについての情報を返します.

$ rosnode info /rosout

rosout についてさらに情報が得られます.ここで,rosoutrosout_agg を発行していることが分かります.

  • --------------------------------------------------------------------------------
    Node [/rosout]
    
    Publications:
     * /rosout_agg [roslib/Log]
    
    Subscriptions:
     * /clock [unknown type]
     * /rosout [unknown type]
    
    Services:
     * /rosout/set_logger_level
     * /rosout/get_loggers
    
    contacting node http://foo.local:54614/ ...
    Pid: 5092

他のノードについても見てみましょう.そのため,rosrun を使って別のノードを起動します.

rosrun の使い方

rosrun はディレクトリのパッケージ名を使用して,パッケージに含まれるノードを(パッケージへのパスを知ることなく)起動します.

使い方:

$ rosrun [package_name] [node_name]

新しいターミナルで,turtlesim パッケージ内の turtlesim_node を起動します:

$ rosrun turtlesim turtlesim_node

turtlesim のウィンドウが表示されます:

  • ROS/Tutorials/UnderstandingNodes/turtlesim.png

注意: あなたの turtle_sim ウィンドウの表示はこれと違うかもしれませんが,気にしないでください.

新しいターミナルで:

$ rosnode list

だいたい以下と似たような表示になります:

  • /rosout
    /turtlesim

ROS の強力な特徴の1つとして,コマンドラインから名前を変更することができます.

rosrun turtlesim のウィンドウに戻って,ctrl-C でノードを停止します.それでは再起動しましょう,ただし今回はノードの名前を変えるために,リマップ引数を使用します.

rosrun turtlesim turtlesim_node __name:=my_turtle

ここで戻って rosnode list をすると:

$ rosnode list
  • このように表示されます:
  • /rosout
    /my_turtle

新しく /my_turtle ノードが見えます.別の rosnode コマンドの ping を使って,それが起動していることを試してみましょう:

$ rosnode ping my_turtle
  • rosnode: node is [/my_turtle]
    pinging /my_turtle with a timeout of 3.0s
    xmlrpc reply from http://aqy:42235/     time=1.152992ms
    xmlrpc reply from http://aqy:42235/     time=1.120090ms
    xmlrpc reply from http://aqy:42235/     time=1.700878ms
    xmlrpc reply from http://aqy:42235/     time=1.127958ms

復習

カバーしたもの:

  • rosnode = ros+node : ノードについての情報を得る ROS ツール.
  • rosrun = ros+run : 与えられたパッケージからノードを起動する.

ここでは ROS ノードの働きについて理解しました.次はROS トピックの働きを見てみましょう.また,turtlesim_node は Ctrl-C で自由に停止することができます.

Wiki: ja/ROS/Tutorials/UnderstandingNodes (last edited 2010-01-23 04:24:14 by AkihisaOyama)