(訳注:最新の情報は原文を参照してください.)
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 についてさらに情報が得られます.ここで,rosout が rosout_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 のウィンドウが表示されます:
注意: あなたの 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 で自由に停止することができます.






