ROSさんお手やわらかに:ROS入門編
今回はチュートリアルのこのページ、1.5 roscoreからだ。
ここでは「端末」を3つ開いて実験する。一つではROSの根本であるroscoreを起動する。もう一つの端末ではノードのサンプルとしてturtlesimというタートルロボットのシミュレータのノードを起動、三番目の端末ではrosnodeというコマンドで実行中のノードのリストを見たり、通信テストなどを試す。
これが実験中のスクリーンショット。端末3つとシミュレータの青い画面が開いている。
実験はこんな手順で行った。
1・roscoreを起動する
端末を開き、まずおなじみのこれを実行して環境変数を設定する。
source ~/fuerte_workspace/setup.bash
それからroscoreを走らせるには下記コマンドで環境変数を設定する。
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
起動はこれだけ。
roscore
起動すると色々メッセージが表示されて started core service [/rosout] と表示されれば完了。プロセスが実行中となるのでプロンプトは表示されない。
僕の環境ではroscoreの起動中、下記のようなメッセージが表示される。
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thread__block'",) in ignored
何かエラーのようだが、ros.orgの質問欄を検索すると、「python2.7のバグで直らないが、無害」とある。なんだか「銀河ヒッチハイクガイド」の地球についての記述みたいだ。
ともあれ、これで基本ソフトが走っている状態だ。
2・rosnodeの端末を開く
新しい端末を開くだけ、セッティングは必要ない。
試しに下記のコマンドを実行してみる
rosnode list
すると下記のように、現在実行しているノードをリストする。
/rosout
現時点ではstdoutに当たるrosoutが走っているだけだ。
3・rosrunでturtlesimを実行する端末を開く
新しい端末を開いて下記コマンドを実行する。これも実行中になるのでプロンプトは現れない。
rosrun turtlesim turtlesim_node
これで中央に亀のアイコンがあるシミュレーターウィンドウが開く。ここではノードの見本として開くだけで、シミュレータで何か作業をするわけではない。
ここまでで、デスクトップは最初のスクリーンショットのような感じになる。
rosnodeの端末でlistをとると
/rosout
/turtlesim
と、二つのノードが走っているのがわかる。
ここまですんなり進んだが、次で引っかかった。
チュートリアルにははturtlesimの端末でCTRL+cをタイプしてシミュレータを終了させ、新たにシミュレータに、例えばhanaという名前をつけて実行させてみろとある。そのあとでrosnode listを取ると、
/rosout
/hana
と、なるはずだが、僕の環境では
/rosout
/hana
/turtlesim
とturtlesimが消えない。試しにturtlesimにrosnode pingでピンを打つと、予想通りエラーになる。listから消えないだけで、実態は終了しているようだ。
チュートリアルには、そんな場合はroscoreを実行させる際に前述の環境変数がセットされていないからだとあるが、ちゃんとやってるつもりだ。
ところが、シミュレータを、端末へのCTRL+cのタイプインではなく、青いシミュレータウィンドウの終了ボックスをクリックして終了させると、チュートリアルどおりにturtlesimはリストされなくなる。
よくわからないが、ノードが走らないとか止まらないとかではないので、ここはあまり気にしないことにする。原因はあとでわかるかもしれない。
rosnodeを引数ナシで実行すると、HELPがでる。そのなかから、試しに下記を実行すると実行中のturtlesimを終了することができた。しかもちゃんとlistからも削除されている。
rosnode kill turtlesim
今日はここまで。
ノードリストの表示がおかしいが、それ以外は正常だ。