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            

カテゴリー

ブログパーツ

無料ブログはココログ

« 2014年10月 | トップページ | 2014年12月 »

2014年11月

2014年11月30日 (日)

turtlebotコンパチ機を動かす

ROSさんお手やわらかに:ROS青雲編

コンパチ機を動かして動画をとった。デモプログラムfollowerで人間追従をさせている。近い物体を追いかけるだけなので、壁に近づきすぎると、そっちへ引っ張られてしまう。

followerにはなにも手を加えてない。とにかくkinectを含め、turtlebotコンパチとしてちゃんと働いているようだ。

現在の環境でのデモの動かし方は

・ロボット搭載のラップトップX61の電源を入れ起動を確認

・リモコンでroomba500の電源を入れ、kinectの電源も入れる

・コントロール用ラップトップT61で端末を開き、sshでX61にログイン

・下記でturtlebotをローンチ

$ roslaunch turtlebot_bringup minimal.launch

・同様にsshでX61にログインし下記でfollowerをローンチ

$ roslaunch turtlebot_follower follower.launch

これでロボットの前に近づくとロボットが動き始めるはず。ただし、ローンチしてから実際に動き出すまで10秒程度かかることもあるようだ。

2014年11月29日 (土)

roombaを電源に使ってはイケナイ

ROSさんお手やわらかに:ROS青雲編

試作機はroombaのシリアルポートからroombaのバッテリー電力をもらって、レーザースキャナやらkinectやらを動かすようになっている。今回kinectを動作させてみると具合の悪いことに気づいた。

ACアダプターだと問題ないが、バッテリー駆動だと突然kinectが落ちたり、そもそも起動しなかったりする。どうも電源の問題のようだ。roombaのバッテリーをモニターしている青色のLEDが明らかに明滅することからみて、動作電流で電圧変動が起っているようだ。そもそもkinectはどれほど電流を食うのか計ってみた。

Dscn2931

動作時で350mAくらいだ。roombaのシリアルコネクタには「バッテリーがそのまま引き出してある」はず。4000mAhくらいの大きなバッテリーだから、これくらいの電流を引き出してもそう電圧変化はないだろう。シリアルポートのminiDINコネクタが接触不良気味で電圧がドロップしているのか、それとも何らかの安全装置で電流制限されているのか。

解析するのも面倒なので、別バッテリーを乗せて問題回避することにした。12V/2.6Ahのシールドバッテリーをカウンターウェイトもかねて搭載、12Vの三端子レギュレータは外してバッテリーを直結した。見た目は悪いが、これで安定して動くようになった。

Dscn2932

色々あったので、あとで「TurtleBotコンパチ機の製作」としてまとめを投稿したい。

2014年11月25日 (火)

turtlebotコンパチ機を製作中

ROSさんお手やわらかに:ROS青雲編

コンパチ機を製作中。turtlebotのサンプルコードを手間をかけずにテストできるよう、センサとなるkinectの位置も本物をまねることにした。

Dscn2928

kinectはホルダーを3Dプリンタで作り、こんな感じでサポートする。kinectをはめ、ホルダーのフックに輪ゴムをかけて固定するつもりだ。

Dscn2929

現在部品を仮置にしてバランスの確認中。kinectは50cmより近い物体の距離は計測できないので、なるべく後ろに積む必要があるが、これだとテールヘビーだ。ウィリーしてしまいそうだ。本家のタートルボットはカウンターウェイトを積んでいるようだが、もうちょっと合理的な方法を考えたい。

2014年11月17日 (月)

roombaを使ったturtlebotでダッシュボードを使うには

ROSさんお手やわらかに:ROS青雲編

turtlebotのダッシュボードでroombaのバッテリーレベルが表示されなかった件、ダッシュボードを起動したT61側で下記の環境変数の設定を行っていなかったせいのようだ。

export TURTLEBOT_BASE=roomba
export TURTLEBOT_STACKS=circles
export TURTLEBOT_3D_SENSOR=kinect

つまり、ローンチ時にこれらの環境変数を読んで、ダッシュボードの設定を変えているわけだ。考えてみれば当たり前だが、ROSのごちゃごちゃしたサイトからは読み取りにくい。これらは.bashrcに追加しておけばいいだろう。これで、

$ roslaunch turtlebot_dashboard turtlebot_dashboard.launch

を行うとめでたくバッテリレベルが二つとも表示された。左が搭載ラップトップX61で電源接続中、右がroombaのバッテリレベルである。マウスカーソルを乗せるとポップアップでpcとかcreateとか表示が出る。なんで最初から画面に表記しないのかは不明だ。

Screenshot_from_20141116_164215

センサも反応するかどうかも試した。持ち上げるとクリフセンサがWarningを出すが、ウォールセンサは反応しない。これでいいかどうかは分からない。この記事のスナップショットを見ると、kobukiベースではバンパーを押すとウォールセンサが反応してWarningを出すみたいだが。

それから電源が切れない件だが、ダッシュボードの歯車アイコンをプレスするとroombaのモードを切り替えられる。Passiveモードにすればroombaの電源ボタンかリモコンで電源を切れる。ただ、ボタンのランプを確認しなければならないので、前に投稿したrboff.pyが確実でいいだろう。

Mode_dropdown


2014年11月16日 (日)

roombaの電源を切るプログラムをpythonで作る

ROSさんお手やわらかに:ROS青雲編

turtlebotのスタックを終了しても電源が切れないので、電源を切る短いプログラムをpythonで書いた。シェルスクリプトでもできそうだが、バイナリをシリアルポートに送る方法が分からず、pythonの出番となった。プログラムはこれだけ。

#!/usr/bin/env python
import time
import serial
import binascii

ser = serial.Serial('/dev/ttyUSB0' , 115200)
ser.write("\x80\x85")

今見るとtimeをimportしているがこれはいらない。これをrboff.pyという名前でroombaに搭載したX61のホームディレクトリに置き、実行可能にしておく。ローンチしてあるturtlebotのスタックをCtrl+Cで強制終了した後、実行すればいい。

$ ~/rboff.py

でroombaの電源を切るコマンド(0x85)をroombaに送信する。

2014年11月15日 (土)

自作roomba実験ロボットをturtlebotコンパチにする

ROSさんお手やわらかに:ROS青雲編

以前製作して諸般の事情でお蔵入りとなったroomba500を使った実験用ロボットを、turtlebotのスタックで動くようにする。つまりturtlebotのコンパチ機を作るわけだ。ROS_by_exampleを読んでいると、やっぱり手元にturtlebotが欲しくなる。自作ロボットでサンプルを試すには、かなりスクリプトに手を入れなければならない。買おうかと思ったが円安の影響もあるのか、現在販売されているkobukiをベースに使ったturtlebot2はかなり高い。turtlebot1は昔のroomba createをベースにしているので、マニュアルを見るかかぎり、通信体系が似ているroomba500でも動きそうだ。

基本的にこの記事にしたがって作業した。ただ、createの設定のままではうまく動かなかったので下記に設定内容を記録しておくことにした。roombaに搭載したX61とターミナルになるT61は相互に名前でsshできるようになっている。システム構成はこの投稿の図(ただしROSはhydro)を参照のこと。

■X61(roomba搭載機)の設定

.bashrcに下記を追加

export ROS_MASTER_URI=http://X61:11311
export ROS_HOSTNAME=X61
#                                                                              
# setting up turtlebot                                                         
#                                                                              
export TURTLEBOT_BASE=roomba
export TURTLEBOT_STACKS=circles
export TURTLEBOT_3D_SENSOR=kinect
export TURTLEBOT_SERIAL_PORT=/dev/ttyUSB0

ROS_MASTERをX61に設定している。重要なのはTURTLEBOT_BASEをroombaにしておくこと。例によって使いにくいROSのwikiでは見つからなかったが、launchスクリプトを調べたところ、roombaという値もとれることに気づいた。createだとroombaは動かない。

またダッシュボードで見るとジャイロに赤いアイコンがついているが、デゼーブルになっているという意味なので、問題はないようだ。もともとroombaにはジャイロがないのでこれはしょうがない。

■T61(ターミナル)の設定

.bashrcに下記を追加

ROS_MASTER_URI=http://X61:11311
ROS_HOSTNAME=T61

X61をマスターにするように設定する。これだけでOK

■ロボットの起動

X61とroombaの電源を入れる。

T61からsshでX61にログインし、下記を実行

$ roslaunch turtlebot_bringup minimal.launch

これだけだ。あとはチュートリアルにしたがって試してみればいい。キーボードでテレオペするのがわかりやすい。

■問題点

ダッシュボードでroombaのバッテリーレベル(右側)が表示されない。これは我慢するしかないみたいだ。

X61でローンチしたプロセスをコントロールCで停止しても、roombaが外部コントロールの状態(Fullモード)のままになっていて、roombaのパワーボタンを押しても電源が切れない。roomba500_lightノードでは終了すると通常モードに戻って電源が切れる。この状態では充電もできないので、roombaのSPOTボタンとDOCKボタンを10秒以上押してリセットするしかない。これは何とかしないと、大変に使い勝手が悪い。

ともあれ、これでturtlebot用のサンプルコードが動く(動きそう?)な環境が出来上がった。

2014年11月12日 (水)

ようやく.bashrcの使い方に気がつく

ROSさんお手やわらかに:ROS青雲編

いろいろと肝心な知識が抜けている。ようやくubuntuというかunixの~/.bashrcの使い方に気がついた。毎回バカの一つ覚えで入力していた

$ source ~/catkin_ws/devel/setup.bash

を、.bashrcというテキストファイルに書き込んでおけば、いちいち毎回入力する必要がない。やり方は

$ gedit ~/.bashrc

で、geditでファイルを開いて、最後にsource ~/catkin_ws/devel/setup.bashを追加すればよいだけ。これで端末を開く度に自動的に初期化できる。

2014年11月 7日 (金)

「触角」センサを作る

花岡ちゃんのウィークエンド

サブサンプション制御の実験ロボットには、もっとも単純なセンサとして、昆虫のような触角を付けたいと思います。このおもちゃの昆虫ロボットについているようなものです。

Dscn2915

この触角センサは、細いピアノ線の根元をスプリング状に巻いて、中心に絶縁された金属シャフトを通した構造です。写真のように触角が何かに当って力が掛かると、スプリングが曲がってシャフトと接触します。これがスイッチとして働く訳です。

シンプルで経済的な構造ですが、自作しようと思うと結構大変です。そこで今回は簡単に作れる、大きめのタクトスイッチを使った例を紹介します。完成写真がコレです。

Dscn2911_2 Dscn2910

使用したタクトスイッチは秋月で入手しましたが、同じようなスイッチなら何でもかまいません。12mm角の四角いボタンがついているものを選びます。このスイッチはボタンを押し込むことでONになるのですが、ボタンが傾いただけでもONになります。今回はこれを利用して、このボタンに細いピアノ線を「触角」として取り付け、触角が障害物に当ることでボタンが傾くように作ることにします。

ピアノ線は0.6mmが具合が良いようです。ただの針金ではダメで、必ずバネ性のあるピアノ線を使います。細すぎると障害物に当ってもしなるばかりでスイッチがONにならず、太すぎるとあまりしならないので障害物に引っかかってロボットが動けなくなったりします。昔は模型店で簡単に手に入ったのですが、今では模型店自体を見つけるのが困難です。今回はラジコン模型用をAmazonで購入しました。大きなホームセンターなら、置いてあるかもしれません。

ピアノ線は長さが500mmでした。そのままだと長いので半分に切ります。ラジオペンチでピアノ線の端を5mmほど直角に曲げ、これをボタンの上に写真のように乗せます。瞬間接着剤を上からたらし、ピアノ線をボタンに仮止めします。

Dscn2903

1時間程置いて、瞬間接着剤を完全に乾かしたあと、二液式のエポキシ接着剤をピアノ線の上にたっぷり盛り上げます。5分とか10分とかの即硬化性のエポキシがよいでしょう。こんな感じにします。

Dscn2913

数時間放置してエポキシが十分に硬化したら、ラジオペンチで触角の形に曲げていきます。作例では写真のようにしました。方眼の一コマが5mmです。これは、使いたいロボットに会わせて形を決めればよいでしょう。触角の先端は危なくないよう丸めておきます。

Dscn2904

これをユニバーサル基板に取り付ければ、触角センサの完成です。

Dscn2908

あとは適当なサイズに切り出して、前の写真のように、ロボットに取り付ければ完成です。ピアノ線の加工がちょっと難しいですが、失敗してもボタン部分が別売されているので、わずかなコストでやり直しが出来ます。

2014年11月 3日 (月)

BeagleBone Blackをwifi化して消費電流をチェック

花岡ちゃんのウィークエンド

ubuntu14.10がめでたくインストール出来たところで、無線LAN化することにします。無線LANアダプタは定評のあるバッファローのWLI-UC-GUMを使いました。アマゾンで1000円しませんでした。

Dscn2899

差し込んで電源を入れるだけで認識できました。下記コマンドでwlan0に関する情報が表示されることを確認すればOKです。

$  ifconfig

wifiを使うには $ sudo emacs /etc/network/interfaces でinterfacesファイルに下記を追加します。これはWEPで、IPアドレスを固定する場合です。それからeth0に関する記述をコメントアウトしておきます。コメントアウトしなくても起動しますが、イーサネットにLANを繋いでいないと、起動に2分くらい掛かるようになります。これはイーサネット接続を探しているからのようです。

# wireless adapter
auto wlan0
iface wlan0 inet static
address 192.168.1.52
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
wireless-essid <SSIDを指定>
wireless-key <WEPkeyを指定>

wifi接続時の消費電流を計ると、300mAくらいでした。これならアルカリ単三電池で4時間くらいは使えそうです。さらにWEBカメラを接続し、motionを起動してネットカメラ状態での電流も計ってみました。下の写真です。USBが足りないのでハブを追加しています。

Dscn2900

カメラはオートフォーカスの高級品です。そのせいか、電流は700mAくらいに跳ね上がりました。これだとアルカリ単三では2時間がやっとでしょう。

« 2014年10月 | トップページ | 2014年12月 »