2009年12月18日金曜日

トピックを理解する

次はトピック。

ノードが公開する情報のことですね。
理解しちゃいましょう。
http://www.ros.org/wiki/ROS/Tutorials/UnderstandingTopics

ここで出てくるコマンド
rostopic, rxplot

roscoreが上がっている状態で、
$ rosrun turtlesim turtlesim_node
(turtlesimパッケージのturtlesim_nodeというノードを立ち上げる)


$ rosrun turtle_teleop turtle_teleop_key


カーソルキーで亀を動かせますね。







OTLと書いたつもり・・・。


注意:亀のWindowではなくさきほどのターミナルでキーボード入力します。


この亀がなぜ動くのか?それはノード間でトピックにより情報が共有されているからです。
その情報のやりとりを可視化するコマンドがrxgraphです。


$ rxgraph






こんなんでました。


次にrostopicに移ります。

$ rostopic echo /turtle1/command_velocity
として、また亀を動かします。

そうするとトピックの/turtle1/command_velocityにどういうデータが流れているかが見れます。

おお、rxgraphがオンラインで修正されるのか!









次に、rostopicで情報の型を調べましょう。

$ rostopic type /turtle1/command_velocity
とすると
turtlesim/Velocity
という型(メッセージタイプ)であることが分かります。

さらに、
$ rosmsg show turtlesim/Velocity
とすると

float32 linear
float32 angular
がでてきます。

つぎにコマンドラインからトピックに書き込みましょう。

$ rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity -- 2.0 1.8
とすると亀が動きます。
数字を変えて遊んでみましょう。



















 うーん、楽しい。

$ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 -1.8 とすると繰り替えしトピックに書き込みまくります。-r 1だから1Hzでrepeatってことですかね?











 rxgraphはこんな感じ。

次はrostopicのhzコマンドです。

$ rostopic hz /turtle1/pose とすると、どれくらいの周期でトピックが更新されているかが見れます。
average rate: 47.987 min: 0.000s max: 0.072s std dev: 0.01047s window: 48 average rate: 48.772 min: 0.000s max: 0.072s std dev: 0.00789s window: 98




48Hzくらいですね。

$ rxplot /turtle1/pose/x,/turtle1/pose/y /turtle1/pose/theta
とするとデータをオンラインで見れちゃいます。
ロボットでは内部情報の可視化は重要なテーマですから非常にうれしいですね。




















今回は以上です。

トピックはノード間を柔軟に依存度を減らしてつなぐための仕組みです。
少し大きなロボットシステムを作ると必ず必要になる仕組みではないでしょうか。




0 件のコメント:

コメントを投稿