2023年4月
            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            

カテゴリー

ブログパーツ

無料ブログはココログ

« 2013年8月 | トップページ | 2013年10月 »

2013年9月

2013年9月28日 (土)

roombaにURG-04LXを搭載

ROSさんお手やわらかに/花岡ちゃんのウィークエンド

ROS実験用roombaに測域センサURG-04LXを搭載しました。

まず、ベースの板がずれないように、木切れで作ったストッパーをroombaに両面テープで固定します。発進停止時の慣性や障害物との軽い接触などで、ベースが動いて、取り付けた測域センサとroombaの位置関係がずれる可能性があります。こうなるとナビゲーションに影響が出てしまうので、これを防止するためです。

Dscn2643

このように、roombaにストッパーを貼り付けます。これでベースのスペーサーを、下の写真のように押さえます。

Dscn2644

ベース自体を両面テープで張り付けても良いわけですが、なにかと取り外す機会も多いので、簡単に外せるよう、こんな構造になりました。

測域センサは3mmのビス2本でベースに固定しました。これがずれるといろいろと面倒なので、しっかり固定します。

Dscn2647

これが配線を済ませた状態です。

Dscn2654

裏側はこんな風になっています。ケーブルは束線バンドで束ねて、ケーブルフックで固定します。いずれもダイソーで買った安物です。

Dscn2656

2013年9月24日 (火)

リモートマシンのパッケージをroslaunchで起動

ROSさんお手やわらかに:ROS奮闘編

以前投稿した、2台のパソコンでroombaを動かすプロセスの起動を、roslaunchで自動化する。これをしないと、面倒でたまらない。

まず、ネットワークで使うための設定ファイルを作る。

T61のcatkin_ws/devel/setup.bashをコピーして、同じフォルダにネット用の設定ファイルrbsetup.bashを作る。環境変数をセットするコマンドを追加したものだ。

export ROS_MASTER_URI=http://T61:11311
export ROSLAUNCH_SSH_UNKNOWN=1

最初のはT61をローカルネットワークのマスター(roscoreを実行)にする設定、次のはroslaunchで他のマシンにアクセスする際、sshでリジェクトされないようにする設定。

リモートマシンを使用するには、T61で端末を開くたびに、setup.bashに代わり
$ source ~/catkin_ws/devel/rbsetup.bash
で環境を設定する。

次にlaunchファイル、rb.launchを作る。

これの2行めで相手のマシン、X61を定義する。このとき、相手のマシンにログインするuserとpasswordを設定しないとだめ。sshを設定して対応する方法もあるようだが、解らないのでこれでいく。passwordは、マニュアルで、使わないことを強く勧めているが、そういう次第なのでやむを得ない。

こうしておくと、nodeタグでmachineにX61を指定すると、そちら側のノードを起動できる。machineを指定しないとroslaunchを実行したマシンの指定になる。この場合はT61だ。

env-loader="/home/hanaokacyan/catkin_ws/devel/env.sh"はリモートマシン側の環境変数の設定スクリプトだが、何も考えずこれでいいみたい。マニュアルどおりだ。 ROS_MASTER_URIの設定は自動的にやってくれる。

こうして作ったrb.launchは、どれかのパッケージのlaunchフォルダに置くのが決まりだが、基本的にどこに置いてもOKだ。これで、これからの実験がやりやすくなる。

なお、電源が入れにくかったroombaだが、箱の中にリモコンを発見。こんなものがついていたのには気がつかなかった。これで、こちらの問題も解決だ。

Dscn2642

2013年9月23日 (月)

metapackagesのもやもや解消せず

ROSさんお手やわらかに:ROS奮闘編

前回すっきりしたと思ったメタパッケージだが、これだとjoystick_driversフォルダの中身がビルドされないことに気がついた。catkin_makeしてもjoyなどがパッケージとして認識されず、rosrunで実行できない。それまでエラーになっていたps3joyのエラーが出なくなったのも、ビルドされないからだろう。

結局、使うjoyパッケージだけをワークスペースのsrcフォルダに移し、joystick_driversをまるごと削除して使うことにした。なんのことはない、joyパッケージだけをインストールしたわけだ。

まだまだ解らないことだらけだ。

2013年9月21日 (土)

metapackagesの正しい作り方

ROSさんお手やわらかに:ROS奮闘編

【後日追加】下記の投稿は間違い。こちらを読まれたし

もやもやしたままだと気分が悪いので、groovyのmetapackagesについて調べた。
その結果、基本的な考え方は前バージョンのstackと変わらず、関連のあるスタックを一つのフォルダに収めるテクニックであり、使い方もほぼ同じだということが解った。

githubから持ってきたgroovy対応のジョイスティック関連のパッケージはこれ

Screenshot_from_20130921_185026

以前の投稿にあるよう、これをそのままcatkin_ws/srcに持ってきていたが、下のスクリーンショットのように、joystick_driversフォルダに、残りのフォルダをまとめて入れるのが正しいようだ。

Screenshot_from_20130921_220247

一つ前の投稿ではpackage.xmlを削除したが、これは間違い。

<buildtool_depend>catkin</buildtool_depend>

と、いうタグを追加してそのまま使うのが正しい。もともとのxmlにこれを追加した。CMakeLists.txtは、一つ前の投稿で追加したものだ。
普通のジョイスティック、PS3のコントローラ、Wiiのリモコンがmetapackagesであるjoystick_driversフォルダに入っているという、わかりやすい構造になっている。すっきりした。

このようにすると、以前、なぜかエラーになってしまったps3joyもすんなりビルドできた。ただ、space_navというパッケージはどうもダメで削除した。インクルードしているspnav.hがないためだ。何をするパッケージだか、調べても解らないし、コードを見てもピンとこない。まあ、いらないだろうという判断だ。

それにしても、stackという名前を変える必要はないんじゃないかな。そのために何時間も潰すことになった。それから、メタパッケージについての新しい情報は、ここに。

joystick_driversでもやもやする

ROSさんお手やわらかに:ROS奮闘編

catkinになって、複数のパッケージを一括に扱うstackという概念がなくなり、metapackagesがそれに代わったらしい。ジョイスティック関係ではjoystick_driversというフォルダがそれのようだが、catkin_makeすると、毎回なんとなくワーニングが出ている。

その中にこんなのがあった。
WARNING: The metapackage 'joystick_drivers' has no CMakeLists.txt. Please add one to the package source. You can use the following file: /home/hanaokacyan/catkin_ws/build/catkin_generated/metapackages/joystick_drivers/CMakeLists.txt

どうも、自動生成したCMakeLists.txtを使えということらしい。そのファイルをjoystick_driversフォルダにコピーするとそのワーニングは出なくなったが、下記のワーニングが相変わらず出る。

WARNING: Metapackage "joystick_drivers" must buildtool_depend on catkin.

これは、roslaunchでジョイスティックとはまったく関係ないノードを起動する時にも出ている。なぜかは解らない。フォルダのpackages.xmlにbuildtool_dependsタグを追加するよう言ってるようだが・・・
改めてメタパッケージについての説明をros.orgで読んでみると、最近のデスカッションの結果、packages.xmlは使わずに、CMakeLists.txtを追加して、こちらで対応するようになっているようだ。

どうやらこのcatkin対応のジョイスティックドライバセットは、少しばかり古くて、packages.xmlでメタパッケージを定義して居るみたいだ。ここらにワーニングの原因があるのかもと、システムが生成したCMakeLists.txtを追加したので、packages.xmlを削除した。

これで、ワーニングは出なくなった。makeの時だけでなく、roslaunchでも出なくなった。すっきりした。ただし、スタックは、関連するパッケージを一つのフォルダに集めてわかりやすくするテクニックだと思うけど、メタパッケージはそうなっていない。関連するパッケージはバラバラ。これには何の意味があるのか解らない。トホホである。

2013年9月17日 (火)

2台のノートパソコンでROSを使う(2)

ROSさんお手やわらかに:ROS奮闘編

T61とX61で、相互にsshでリモートログインできるようになったら、ROSでroombaを無線操縦してみる。チュートリアルのここを参考に作業した。この実験の元ネタは、この投稿あたりを参考に。
この写真のように、T61にゲームパッド接続、X61をroombaに搭載する。

Dscn2639

作業はすべてT61で行う。

端末を開いて、roscoreを起動。
$ roscore

新たに端末を開いて、ジョイスティックのノードを起動。
$ source ~/catkin_ws/devel/setup.bash
$ export ROS_MASTER_URI=http://T61:11311
$ rosrun joy joy_node

新たに端末を開いて、X61にログイン、roombaとの通信ノードを起動。
作業前に、roombaの電源を入れること。
$ ssh X61
$ source ~/catkin_ws/devel/setup.bash
$ export ROS_MASTER_URI=http://T61:11311
$ rosrun roomba_500_series roomba500_light_node

新たに端末を開いて、X61にログイン、T61からのjoy topicを受信してroombaに渡す、rbjoy.pyノードを起動。
$ ssh X61
$ source ~/catkin_ws/devel/setup.bash
$ export ROS_MASTER_URI=http://T61:11311
$ rosrun roomba_work rbjoy.py

これで、ゲームパッドの操作でroombaを無線操縦できる。X61の設定で、液晶を閉じてもスリープに入らないようにすれば、このように収まりのよい恰好で、roombaに搭載することも可能だ。

Dscn2641

ただ、roombaの使い勝手の悪さには参った。電源ボタンを押すためには、パソコンをずらさなければならず、そのうえ、電源を入れた後、もたもたしているとスリープに入ってしまう。さらに、通信ノードをCtrl+Cできちんと停止させないと、roombaの電源ボタンがまったく反応しなくなってしまう。(これは再度通信ノードを起動させれば、また反応するようになるが)

ベースに細工して、もっと簡単にボタンが押せるようなメカを作るべきだろうか。

2013年9月16日 (月)

2台のノートパソコンでROSを使う(1)

ROSさんお手やわらかに:ROS奮闘編

前回作ったroombaベースには、小型のノートパソコン、Thinkpad X61を搭載する。これを別のノートパソコンThinkpad T61に接続したゲームパッドでコントロールしてみる。ROSのマシン間通信機能の実験だ。

まずは、2台のパソコンを、お互いにsshでログイン出来るように設定する。大きい方がT61、小さい方がX61だ。
Dscn2638


最初にそれぞれのマシンのIPアドレスを固定する。現在は無線LANルーターから、DHCPでローカルIPの分配を受けているので、起動の度にIPが変わってしまう。これでは具合が悪い。

2台のマシンのローカルIPを下記に固定した。

マシン名:X61 → 192.168.1.60
マシン名:T61 → 192.168.1.61

sshサーバのインストールは

$ sudo apt-get install openssh-server

これをインストールするだけで、sshサーバが起動するようになる。ルート権限でログインできる。
ここまでで、ssh 192.168.1.60などとすると、相手のマシンにログインできる。

次に、マシン名でログイン出来るよう、hostsの内容を編集。hostsは下記コマンドで開かないと、編集結果を保存できない。

$ sudo gedit /etc/hosts

これに、接続したい相手のマシン名とIPアドレスを追加する。複数あるなら全部追加する。
T61ではこんな感じ

127.0.0.1 localhost
127.0.1.1 T61
192.168.1.60 X61 ←これを追加

これで、ssh X61のように名前でログインできるようになる。


2013年9月 7日 (土)

ご家庭のroombaを実験用ロボットにする(おしまい)

ROSさんお手やわらかに/花岡ちゃんのウィークエンド

ベースに搭載した基板の回路図です。

Rbif

細部はこちらのpdfで確認してください。
「RBIF.pdf」をダウンロード

この回路は、roombaとのシリアル通信をUSBに変換する部分と、roombaのバッテリーから5V1A、12V1Aの電源を作る部分に分かれています。各部については一つ前の投稿を見てください。

5V電源は測域センサURG-04LXを使うためです。このセンサはUSB接続が出来るのですが、起動電流が大きい(800mA)ためか、USBからの給電は出来ない仕様になっています。動作時の電流は400mA台なので、1AのDC-DCコンバータで十分動作します。動作時のroombaからの給電電流は、200mA程度、バッテリに優しい仕様です。ベースにセンサを乗せるとこんな感じになります。

Dscn2623

12V電源はKinect用として考えています。まだ、テストをしていないので、性能は後日投稿の予定です。仮に乗せてみると、こんな感じです。

Dscn2622

電源コネクタには、いつもなら普通のピンヘッダを使うところですが、今回は日本圧着端子のXHコネクタを使いました。接続相手のセンサがいずれも高価なものなので、逆接続で壊さないようにです。これは入手が容易で、価格も安く、接続も確実と三拍子そろっているのですが、プラグのピンにケーブルをカシメるのがタイヘンで、アマチュアは敬遠しがちな部品です。
しかし、以前の投稿で紹介した、エンジニアのPA-21という比較的安価な圧着工具を使うと、実に簡単にカシメることができます。いろいろなコネクタに対応してますし、実売価格は3000円台なので、買っておいて損はないと思います。だたし、ちょっとばかりの練習は必要です。

« 2013年8月 | トップページ | 2013年10月 »