2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

カテゴリー

ブログパーツ

無料ブログはココログ

« 2012年11月 | トップページ | 2013年1月 »

2012年12月

2012年12月26日 (水)

ROSの起動環境を整える

ROSさんお手やわらかに:ROS入門編

ROSを起動するのにいろいろとセットアップが必要なのを簡素化する。
ちょっと考えるとシェルスクリプトでやればいいようだが、環境変数をセットするコマンドなどはうまくいかない。シェルスクリプトが終了すると元に戻ってしまうからだ。そこでsourceコマンドを使う。

まずここまでの初期化作業をファイルに書き出す。テキストエディタはgeditを使った。

source ~/fuerte_workspace/setup.bash
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
echo "OK"

最後のOKはちゃんとやったかどうかの確認用だ。

このファイルをmyrosと言う名前でhomeディレクトリの直下に置いた。
これで下記のコマンドでセットアップできる。

source myros

他にセットアップすべき事が出てきたらこのファイルに追加すればいい。

2012年12月24日 (月)

【昔語り1】ヒューレットパッカードの16進表示LED

アキバ昔語り

新しいカテゴリーです。僕のジャンク箱には昔のアキバ系の部品や機械がたくさん入っています。その中から面白そうなものを、当時の状況も含めて紹介していこうと思います。カテゴリー名はもちろんアレからいただいてます。

一回目はヒューレットパッカードの16進LED、HDSP-0762です。

Dscn2460

セラミックのパッケージにガラスで封止したLEDとデコーダーが入っていてとても綺麗です。
この表示器は、4ビットのバイナリを与えると0-Fまでの記号を表示します。いつ頃のモノかはよくわかりませんが、昔欲しかったものの一つです。

70年代後半からのTK-80のようなマイコントレーニングキットには、7セグを使用した16進表示機がつきものでした。これはROMに格納された表示ルーチンによるもので、真似しようにも当時のROMの書き込みはイロイロと大変で、さえない大学生の僕には現実的なハナシではありませんでした。そのためアマチュアの作るコンピュータは、こんな風にスイッチとLEDをずらりと並べて二進数でプログラムを入力するしかありませんでした。この写真は73年頃に作ったTTLコンピュータです。

Img_0075

ともあれ、バイナリを入れると16進で表示するデバイスがあれば、もっとかっこ良くなるのに… とよく思っていました。有名な7セグドライバのSN7447は10以上の入力に対しては表示できないし、モトローラからは16進対応のデコーダドライバが出ていましたが、アキバで簡単に買えるものではありませんでした。

このデバイスはおそらく80年代からHPの計測器用に使われているものでは無いかなと思います。PICからバイナリを与えて表示させた様子がこれです。7セグとはひと味違った文字がカッコイイと思いますがいかがですか?? 

これはなんと、今でもセカンドソースがDigi-keyで手に入ります。興味ある方はこちらへ

2012年12月17日 (月)

ROSの「トピック」について

ROSさんお手やわらかに:ROS入門編

前から気になっていたubuntuのドネーション、ようやく払うことができた。もっとも最低の16ドルだけど。
Paypalをしばらくぶりにのぞいたら、登録システムが変更になっており、100万円まではクレジットカードを登録するだけで送金できるようになっていた。以前は、本人確認のためクレジットカードに1ドルがチャージされ、これの明細にあるコードをPaypalに送ると初めてアカウントが有効になるともに1ドルが返却されるようになっていた。僕の場合は、なぜかこれがチャージされず、アカウントはあるものの送金できない状態のままだったのだ。なお、リミットを解除するためには身分証明書のスキャン画像をPaypalに送ればいいようだが、そんな大金を使う予定はないので、このままでいこう。

さて、例によってちんたら進んでいるROS入門だが、いよいよ(?)トピックのハナシに突入だ。こんなペースで年明けには自分でプログラムを作れるようになるんだろうか? 

今回はチュートリアルのこのページに添って試していく。前回試したturtlesimを実際に動かしてみるようだ。

まず、下記にしたがってroscoreを起動
・端末を開く
・下記を実行して環境変数を設定
source ~/fuerte_workspace/setup.bash
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
・下記でroscoreを起動
roscore

次にturtlesimを起動
・端末を開く
・下記でturtlesimを起動
rosrun turtlesim turtlesim_node

もう一つ、turtlesimにコマンドを送る端末を起動
・端末を開く
・下記でテレオペレーションを起動
rosrun turtlesim turtle_teleop_key

最後の端末にカーソルを置いたまま、キーボードの矢印キーを操作するとturtlesim画面のカメをリモコンすることができる。ROSの仕組みを利用してコマンドが送られているのだ。ここまでのところで画面はこんな感じになっている。
Screenshot_from_20121216_233149

シンプルな実験だが、ROSでのアプリケーションの体裁がよくわかる。turtlesim_nodeと言うノードにturtle_teleop_keyと言うノードがメッセージを送るよう接続されている。このメッセージをやりとりする接続を「トピック」と言うらしい。

turtle_teleop_keyはトピックを通じて、矢印キーの状態を「発行」し、turtlesim_nodeはこれを「引用」することでシミュレータ上のカメを動かすということか。

この関係をグラフィカルに表示するパッケージがrqt_graphだ。新しい端末を開き、まず下記でパッケージをインストールする。

sudo apt-get install ros-fuerte-rqt

これを実行したら、「いくつかのアーカイブが取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください。」というメッセージが出た。そこで下記を実行。

sudo apt-get update

その後、もう一度先のコマンドを実行したら正常終了した。下記のコマンドでノードを起動する。

rosrun rqt_graph rqt_graph

下記のようにノード間の接続状態が表示される。丸で囲まれているのがノードで矢印がトピックだ。
これをみると/teleop_turtleがturtle_teleop_keyのことのようだが名前が違うのはなぜだろう? まあ、これもそのうちわかってくるだろう。

Screenshot_from_20121217_002849


2012年12月 6日 (木)

ノードを使ってみる

ROSさんお手やわらかに:ROS入門編

今回はチュートリアルのこのページ1.5 roscoreからだ。

ここでは「端末」を3つ開いて実験する。一つではROSの根本であるroscoreを起動する。もう一つの端末ではノードのサンプルとしてturtlesimというタートルロボットのシミュレータのノードを起動、三番目の端末ではrosnodeというコマンドで実行中のノードのリストを見たり、通信テストなどを試す。
これが実験中のスクリーンショット。端末3つとシミュレータの青い画面が開いている。

Rosnode

実験はこんな手順で行った。

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

今日はここまで。
ノードリストの表示がおかしいが、それ以外は正常だ。

2012年12月 2日 (日)

ROSの「ノード」について

ROSさんお手やわらかに:ROS入門編

今回はチュートリアルのこのページだ。タイトルは「ノードを理解する」となっている。ただし、このページのデスクリプションには「ROSの『グラフ』のコンセプトについて説明する」とある。グラフをどう訳せばよいか今はわからない。


ともかくこのチュートリアルを実行するには、軽量級のシミュレータのインストールが必要だ。下記のコマンドでインストールする。

sudo apt-get install ros-fuerte-ros-tutorials

僕の場合はすでにインストール済みで更新の必要はないというメッセージがでた。

次に、このチュートリアルに出てくるキーワードについての説明がある。下記に意訳しておく。

・ノード(Nodes); 一つのノードは実行可能なオブジェクトで、ROSを使って他のノードと交信する。
・メッセージ(Messages): ROSのデータ形式で、「トピック」に対して「発行」と「引用」するときに用いる。
・トピック(Topics): ノードはトピックに対しメッセージを「発行」し、また「引用」することでメッセージをトピックから受信できる。
・マスター(Master): ROSのネームサーバー(例えば:ノードが他のノードを見つけられるようにする)
・ロスアウト(rosout): c言語などのstdoutとstderrのROS版
・ロスコア(roscore): マスターとロスアウトとパラメータサーバーのこと(パラメータサーバーは後ほど説明)

パブリッシュとサブスクライブはMacの慣習にならって「発行」と「引用」と訳した。この訳がいいのかどうかはわからない。兎に角、この関係は下記の様になっているのだろう。

・発行側 メッセージは誰でも読めるように公開されている。受け手を指定しない。
・引用側 メッセージは使用する度に新たに読み込まれる。発行側が内容を更新すれば、それが反映される。

サブスクライブは「購読」と訳す場合もある。でも、日本語にするとどうも分かりにくいね。なかなかいい日本語訳が見当たらない。インタラプトを「中断」ではなく「割り込み」とした先達の知恵に改めて敬服の念を禁じ得ない。

お次はノードの説明だ。ちょっと解りにくい。下記に訳しておく。

1.3 ノード
ノードは、実際のところ、ROSパッケージの実行ファイルとほとんど同じである。ROSノードはROSクライアントライブラリを他のノードと交信するために用いる。ノードはトピックに発行と引用をすることができる。また、ノードは「サービス」を提供したり使用したりすることができる。

最初の一文はこれでいいのかどうかわからない。直訳では何だかわからないが、not much more thanで「ほとんど変わらない」という意味になるようだ。つまり、パッケージの実行ファイルがノードだと思えばよいようだ。また、新しく「サービス」という用語が出てきた。

クライアントライブラリとは、rosbuildで生成されるrospyとroscppで、それぞれpythonとc++のライブラリである。つまり、ROSではpythonとc++を開発用言語として使えるというわけだ。僕はpythonでやってみようかと考えている。インデントに意味がある言語はちょっと扱いにくい感じも有るが、まあ所詮は慣れの問題だろう。

次にロスコアを起動して、いろいろと試して見るようだが、長くなって来たので次回以降に。

« 2012年11月 | トップページ | 2013年1月 »