2017年6月
        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  

カテゴリー

ブログパーツ

無料ブログはココログ

ROSさんお手やわらかに

ROSあれこれ。管理人の備忘録。ようやくubuntu 14.04 とindigoにアップデート

2017年1月 7日 (土)

3Dプリンターで作る簡単turtlebot(おしまい)

最後はCORAの操作法です。簡単に作ってある代わりにちょっと気をつけることがあるので、そこらへんを。

turtlebotスタックでマッピングやナビゲーションをするにはこの投稿をみてください。CORAはソフト系の人向けに開発したので、この辺は詳しく説明しません。「ROSさんお手やわらかに」のカテゴリにはいろいろな情報がありますが、古い投稿はもう時代遅れの可能性もあります。

●roomba操作法

取説を持っていない場合は用意しておいたほうがいいでしょう。日本語版取説はサービスされていないようなので、英語版を。

充電は付属の充電器を直接接続するのが簡単です。充電中は真ん中のランプがオレンジ色にゆっくり明滅します。ミドリになったら充電完了。バッテリーの状態によってはオレンジに早く点滅する場合があります。これはバッテリーを一旦放電してリフレッシュするプロセスのようです。結構時間がかかります。使わないときには充電器を繋ぎっぱなしにしておくのがよいようです。

Dscn3647

minimal.launchでturtlebotを起動する前に、CLEANボタンを押して電源をオンにします。ランプがミドリに点灯します。ローンチが完了すると(画面で終了してからしばらくかかる場合もあり)ポッという音がしてランプが消えます。この時USBシリアル変換器のLEDが忙しく点滅を始めます。roombaとラズパイが通信しているのです。電源を入れてから何もしないで数分間が経過すると自動的にオフになってしまうので、ローンチの直前に電源オンするのがよいでしょう。

電源オフにするには同じボタンを長押しします。電源オンのときにもう一回CLEANボタンを押してしまうと軽快なサウンドがなって掃除を始めてしまいます。そのときは慌てず騒がずCLEANボタンを長押ししてください。電源を切ることで止まります。

Dscn3646

実験終了後はちょっと気をつけることがあります。roombaは外部コントロールモードになっているので、そのままでは電源も切れませんし充電もできません。この投稿に従ってroombaの電源を切ります。電源が切れたかどうかをCLEANボタンを押して確認します。電源オンになればOKです。反応がなければ外部コントロールモードから抜けてません。どうしてもダメならroombaをリセットします。SPOTとDOCKのボタンを同時に10秒ほど押して放します。一拍置いて「ピロリロリロ」という電子音が出ればリセット完了です。

●モバイルバッテリー操作法

モバイルバッテリーがUSBが2ポートある最初に紹介したものなら問題ありません。バッテリーの電源ボタンでシステム全体の電源を入り切りします。電源の切り方はこの投稿の最後の部分をみてください。

1ポートの普通のモバイルバッテリーを2個使っている場合は、kinectとラズパイを個別にパワーマネジメントできます。下の写真のようにそれぞれにバッテリーを接続します。

Dscn3632

kinect側は使うときだけオンにすればよいので、コードのメンテナンスをしてる時などは切っておいて構いません。バッテリーが倹約できます。オフにできないタイプの場合はコネクターを抜き差しする必要があります。

これでROSに入門する準備が整いました。皆さんの健闘を祈ります。

2017年1月 3日 (火)

3Dプリンターで作る簡単turtlebot(raspberry pi3の取り付け)

今回で組み立ては最後です。ラズパイ3とバッテリーを取り付けます。完成写真はこうなります。

Dscn3633

最初にroombaとUSBシリアル変換器をつなぐケーブルを作ります。これはオスーメスのジャンパーケーブルを使います。この部分の拡大写真です。

Dscn3549

配線図はこちらです。roombaのコネクターをよく見て間違えないようにしてください。roombaの1、2ピンにはroombaのバッテリー電圧が出ています。ここには絶対接続しないでください。変換器ばかりかラズパイを壊してしまう可能性があります。

Usbcable

USBシリアル変換器のジャンパーはVCC-5V間に刺します。おそらく購入時にはこの設定になっていると思います。

ラズパイやバッテリーの固定には写真のようなゲル状の家具固定マットを使います。これはダイソーで求めたものです。ハサミで切って好きな大きさにすることができます。

Dscn3605

今回はこのように配置しました。ラズパイは立ててあります。

Dscn3642_2  Dscn3643

モバイルバッテリーは最初の投稿で説明したものです。これは2系統の電源のオン/オフを同時にできるので使いやすいです。もちろん、手持ちのものを流用しても構いません。その場合、kinect用は2A取れるものを用意してください。計算上1Aくらいはコンスタントに消費します。

turtlebotスタックのみを使うならラズパイ3は1Aで大丈夫です。GPUをほとんど使わないのでそれほど電流は食いません。

ここでラズパイ3のセットアップをしてしまいます。長時間かかるので、バッテリーではなくACアダプターから給電します。ubuntu14.04LTSのインストールはこの投稿、ROS indigoはこの辺りからの投稿を読んでください。僕の投稿はあまり系統立てて書かれていないので、いちど「ラズパイでROS」のカテゴリーを流し読みすることをお勧めします。

次回が最終回の予定です。本機のオペレーションの仕方を説明します。

2017年1月 2日 (月)

3Dプリンターで作る簡単turtlebot(kinectの取り付け)

今回はkinectを取り付けます。まず、モバイルバッテリーの5Vから12Vの電圧を作るDC-DCコンバータの電圧を合わせます。DC-DCコンバータは前の投稿を見てそろえてください。

電圧は多回転型半固定抵抗を回して調整します。写真の青い部品がそうです。これの金色のネジを小さなマイナスドライバーで回すわけです。よくある精密ドライバーセットにはマイナスも入っているのでこれを使うのが良いでしょう。

Dscn3626

下の写真のようにDC-DCコンバータ基板にマイクロBのUSBケーブルで電源を供給します。写真ではモバイルバッテリーを使ってますが、モバイルバッテリーは電流がわずかしか流れないときに数十秒で自動的にオフになってしまうので、ACアダプターかパソコンのUSBから電源を取るのがいいでしょう。

Dscn3541

テスターをOUT+とOUT-の端子に当てて電圧をチェックしながら、半固定抵抗のネジを回して約12Vに合わせます。ネジは右に回すと電圧が上がり、左に回すと電圧が下がります。ラジオのツマミとは違って何回も回して調整します。それだけ精密に調整できるわけですが、設定電圧にはそれほど神経質になる必要はありません。±0.2Vくらいの誤差は問題ないです。一人だとやりにくいので、誰かに手伝ってもらいましょう。

次はkinectの接続ケーブルを改造し、DC-DCコンバータに接続します。この工程はハンダ付けが必要です。ケーブルにはkinectに接続するコネクターからUSBケーブルとACアダプターケーブルの2本が出ています。このうちACアダプターにつながっている方のケーブルを、下の写真のようにコネクターから200mm程のところで切断します。USBケーブルと間違えないようにしてください。(写真は試作機のもので200mmより短いです)

Kdc

切断した部分から20mm程の被覆をむいて、白と茶色の電線2本をむき出しにします。下の写真のマス目は5mmです。

Dscn3536

黒い細い線も出てきますが、これは強度確保か隙間埋めのための樹脂線で、切ってしまって構いません。下の写真のようにカッターをあてがい、ケーブルを回しながら少しずつキズを入れていけば、比較的楽にできます。自信のない向きには、切り離したACアダプターの部分は使わないので、そちらのケーブルで練習してから本番に臨めば良いでしょう。

Dscn3624

次にこの茶色と白の電線を剥いてDC-DCコンバータにハンダ付けします。ここはどうしてもハンダ付けでないと信頼性が保てません。茶色の線をOUT+に白の線をOUT-に接続します。

Dscn3544

ハンダ付けは次の手順で行います。

1:電線の被覆を3mm程剥く(外皮と同じくカッターを使うと簡単です。本番前に練習しておきましょう)

2:剥いた導線にハンダをつけて「ハンダメッキ」する

3:基板の端子にもハンダを盛る(少し盛り上がるくらいにハンダを載せます)

4:導線を端子に載せてハンダごてで加熱。両方のハンダが溶けて融合したら完了

被覆を剥く時の力加減は大事です。導線まで切断してはどうしようもありません。電子工作に興味が出てきたら、ワイヤーストリッパーを買うのをお勧めします。

kinectに接続する前に接続のチェックをしておきます。電源につなぎ、コネクターのLEDが点灯することを確認してください。点灯しない場合は接続をチェックします。

Dscn3591

最後に基板を12にはめ13を上から被せれば完成です。13は真ん中が少し膨らみますが、このバネで外れないようにしているためです。

Dscn3593  Dscn3598

最後にkinectをホルダーの中央に載せます。ケーブルはホルダー下部の凸部分のあいだに軽く巻きつけて捌きます。巻きつけはあくまで軽くしてください。きつく巻くと甲羅が歪みます。

Dscn3635

これでほぼ完成です。次回はラズパイやバッテリーを搭載します。

2016年12月29日 (木)

3Dプリンターで作る簡単turtlebot(パーツの組み立て2)

前回まででこのような甲羅が完成しました。

Dscn3613  Dscn3614

ポリバケツのフタみたいにしっかりはしてませんが、まあ一体感のある構造にはなっていると思います。これはroombaにピッタリとはめるために、調整シロとしてパーツ間に多少遊びをもたせているからです。この段階で接合部分をチェックして、接着できてない部分には裏から接着剤を塗りこんで補修します。補修した場合はまたroombaに載せて重しをして固定します。

Dscn3610

次にkinectを乗せるサポーターを組み立てます。まずは下の写真のように1、6、9、11の穴に3mmナットを押し込みます。指で押し込めば入ると思いますが、押し込みが甘いと斜めになったりすることもあるので、最後はドライバーの柄の部分などでしっかり押し込んでください。

Dscn3583

8〜11の部品は下のように組み合わせます。9と11の方向に気をつけてください。これがkinectのサポーターになります。サポーターの上下は3mm X 10mmのビスで固定します。ここがビス止めになっているのは、将来別の3Dセンサーに取り替えられるようにしているからです。面倒な人は接着しても構いません。

Ki1

これを甲羅にビス止めします。10を1に、8を6に取り付けます。下の写真のように出っ張りが二つある方が後ろになるように取り付けます。

Dscn3582

これで完成です。次回はラズパイなどの電装品を取り付けます。

Dscn3602

2016年12月25日 (日)

3Dプリンターで作る簡単turtlebot(パーツの組み立て1)

いよいよプリントしたパーツを、前回の投稿の最後で説明した接着剤とビスナットを使って組み立てます。その前にroombaの準備をしておきましょう。この投稿に従って化粧パネルを外し、この投稿のようにブラシとダストボックスを外します。roombaの分解法はこのサイトが分かりやすいです。

完成するとこのようになります。後部に乗っている黒いものはモバイルバッテリーです。kinectを載せないと、後部が軽いので、タイヤのテンションスプリングで車体が持ち上がってしまうため、重りとして一時的に載せているだけです。

Dscn3600 Dscn3602

まず、1〜7までのパーツをroombaに載せて仮組みをしてみます。端っこになる1と6は下の写真のように凸部をroombaの溝に差し込んで位置決めします。

Attachpos

最初に1と6を置いてから2〜5をぐるりとはめ込み、最後に7を載せます。継ぎ目に大きな段差はないか、軽く押してみてガタツキはないかなどを確認します。前の投稿のパーツ写真のように並べます。パーツ2と5は間違えやすいので気をつけてください。

Dscn3581

これから各パーツを組み合わせて接着し「甲羅」にしますが、「甲羅」とroombaは接着しません。roombaに載せて接着するのは、roombaにぴったりはまるよう、現物あわせをするためです。接着剤が流れ出してパーツとroombaがくっつかないように気をつけてください。

最初に外周部分の1〜6を接着します。下のそれぞれのパーツの下の写真の点線で囲ったタブ(他のパーツに潜り込む部分)に接着剤を塗り、roombaに載せて組み立てます。タブのある部分ならパーツの側面に接着剤を塗っても構いません。そのほうがしっかりします。ただ、タブのない部分の側面には塗らないでください。接着剤が滴れてroombaについてしまう危険があります。

Adh

ABSの接着剤は少し粘りのある液体で、ABSを溶かして接着します。下のような状態で3時間程度放置し、しっかり接着します。部品にはラフトを剥がしたときの凹凸があり、また積層時の歪みがどうしても出るので、接着箇所が密着しない場合もあります。ということで、接着剤はなるべくたっぷりつけたほうが有効です。固まるまで右の写真のように本などを載せて重しとするとよいでしょう。(実際のところもう少し本を載せたほうがいいくらいです)

Dscn3574  Dscn3612

リング部分が形になったら、最後に7を接着します。下の写真の点線で囲った部分に接着剤を塗って、7を載せます。写真上のほう二箇所の小さなタブも忘れずに接着剤を塗ってください。固定するまでまた重しをして3時間ほど放置します。

Adh2

接着剤が固まると一枚の円盤としてそこそこの強度になります。

Dscn3524

次回はkinectのサポーターを組み立てます。

2016年12月21日 (水)

3Dプリンターで作る簡単turtlebot(パーツのプリント)

今回作るロボットはCORAと名付けました。Controller-On-RoombAという意味です。と、いうのはコジツケで、本当はroombaの甲羅です。それから、ロボット亀の大先輩にあやかったところもあります。ELMER、ELSIEというロボット亀を作ったグレイ・ウォルターが、「条件反射するロボット」として作ったのがCORAというロボットでしたからね。

下記から全部品のSTLデータをダウンロードしてください。全部で13パーツあります。

「CORA1.0_STL.zip」をダウンロード

ファイル名がパーツ番号です。全てをプリントすると次の写真のパーツが出来上がります。材料はABSです。

Allp

ウチのAfiniaでプリントすると、1〜8と10のパーツはそれぞれ2時間以上かかります。とても1日では済みません。じっくり取り組んでください。

2と5のパーツは同じに見えますが、違うパーツです。下の写真で黄色で示したリブの長さが違います。エンピツでパーツ番号を書き込んでおくとよいでしょう。

Diff

穴を開けたり、形状を変えたり、CORAをモデファイしたい人のために、123Dのデータを提供します。下記からダウンロードしてください。

「CORA1.0_123D.zip」をダウンロード

次回は組み立てます。ABS用の接着剤と3X10のビスナットを8個、用意しておいてください。接着剤はプラモデル用のものが入手しやすいでしょう。

Dscn3579  Dscn3585

2016年12月20日 (火)

3Dプリンターで作る簡単turtlebot(部品の準備)

まずは主要部品集めです。

メインになるroomba500シリーズとkinectはこの投稿を参考にあつらえます。生産は終了していますが、中古ならまだまだ入手は可能なので安心してください。Hanabot2ではroombaの電源を外部からもらってますが、本機ではその改造はしません。roombaにセットされているバッテリーを動力源として使います。中古品を入手した場合、バッテリーが弱っていることが多いので、新品のバッテリーも用意したほうが無難です。Amazonで互換品を購入できます。

搭載するのはRaspberry pi3です。ケースと16GのマイクロSDも忘れずに用意します。

Imgres

ubuntuではラズパイ3の内蔵無線LANは(いまのところ)使えないので、USB接続の無線LANも必要です。本機ではPLANEXのGW-USNano2を使いました。

51epybjpsl_sl1000_

roombaとの接続にはUSBシリアル変換器を使います。USBからロジックレベルのシリアルに変換するアダプターです。おすすめはこれです。仕事用も含めて5台くらいテストしましたが、ラズパイで問題なく使えてます。黄色いジャンパーピンを5V,Vcc間に刺して、ロジックレベルを5Vにして使います。

616w6gztnhl_sl1100_

この変換器とroombaの接続は、本来なら7PのMINI DINプラグを使うところですが、今回はハンダ付けの工程を減らすために、オスーメスのジャンパーワイヤをroombaのコネクタに差し込んで接続しました。これならプラグへのハンダ付けがいりません。なるべく長いワイヤのほうが使い勝手が良いので、このようなワイヤを割いて使いました。モチロン、ハンダ付けを厭わなければ、MINI-DINを使ったほうが確実です。

713hsj2zdol_sl1100_

ラズパイ3とkinectの電源はスマホ充電用のモバイルバッテリーを使います。ラズパイとkinectの2系統が必要なので、バッテリーを2個用意するか、このような2系統の出力が取れるものを使います。電源ボタンでON/OFFできるもののほうが使い勝手が良いですが、スペックに記載がないことが多いですね。これはON/OFFできました。

61iraqyvohl_sl1500_

ラズパイ3の電源は5V/2.5Aとなっていますが、これはグラフィックなどをフルパワーで使った時のようで、turtlebotでは1Aもとれれば十分のようです。このバッテリーは1Aと2Aのポートが用意されているので、1Aのポートをラズパイ用、2Aのポートをkinect用としました。モチロン、両方2Aのほうが安心なのは言うまでもありません。

kinectの電源は12Vなので、モバイルバッテリーからの5Vそのままでは給電できません。DC-DCコンバータで5Vを12Vに変換します。Amazonでよく見かけるこれを使いました。おなじみマイクロBのUSBケーブルでモバイルバッテリーに接続できます。出力電圧は多回転ポテンショメータ(青い部品)で設定します。

Dcdc

このコンバータにkinectの電源ケーブルを接続します。本機で唯一ハンダ付けが必要な工程です。写真右のOUT+とOUT-というパッドにワイヤーをハンダ付けするだけなので、初心者でも容易だと思います。

接続用のUSBケーブルは30cmくらいの短いものが使いやすいようです。たとえばこのようなものを2本用意します。

C09313

次回は3Dプリンタでroombaに乗せるボディを作ります。

2016年12月 2日 (金)

3Dプリンターで作る簡単turtlebot(プロローグ)

久しぶりの投稿です。

今まで僕が投稿してきたHanabot2は、簡単に安く作れるよう工夫をしてきました。実際のところ、少しの木材とラジオ工作程度の電子回路、ノコギリやドリルなんかの基本的な工具のみで組み立てられるようになっているので、中学生でも製作可能、と思ってました。

ところが、ある人と会ってお話しした際に、「情報系の研究室にはノコギリはまずない」という事実が判明しました。するってえと木工はできないんですかと聞くと「昭和じゃないんだから」。なるほど、僕の判断基準は昭和の「模型とラジオ」なわけですから、ギャップがあって当然ですね。当時の模型雑誌はこういうのを少年に作らせるんですから。

Dscn3560  Dscn3561

これはラジコンカーキットの解説ではなく、ベニヤ板とかブリキから部品を切り出してボディもファンもサーボも自作する記事です。どうです、これに比べたらHanabot2の自作なんて屁でもないでしょう。

まあ、そんなコトを威張っていてもしょうがありません。情報系の研究室でも簡単に作れるようなturtlebotコンパチ機を開発するコトにしました。中身はHanabot2と同じkinectとroomba500シリーズを使ったものです。

まず基本的に、ノコギリを使わないでボディを作れるようにします。つまり木材は使いません。全て小型3Dプリンタで分割製作します。こんな感じです。ミドリのパーツがプリンタで製作したボディパーツです。

Dscn3524  Dscn3525

各パーツは120X120mmのサイズに収まっており、家庭用の3Dプリンタで出力できます。僕はAfiniaを使っています。これを組み合わせて接着し、roombaに乗せるわけです。これでroombaの上面が空母の甲板のようにフラットになり、ここにラズパイなどを自由に配置することができます。組み上げた形がこの写真です。

Dscn3633

Hanabot2は全体の電源を1個の大型バッテリーに集約していましたが、そのため、電圧変換や充電回路を搭載した「電源基板」を製作する必要がありました。そこそこの数を部品をハンダ付けし、ワイヤーで接続するので、ハンダ付け初心者には大変なところがありました。そこで、今回のモデルでは、スマホの充電に使う「モバイルバッテリー」を使い、電源基板や接続ケーブル作らなくて済むようにしました。

また、バッテリーやラズパイの固定には、ダイソーなどで手にはいる「家具の転倒防止」のゲル状シートを使うので、付け外しが簡単にできます。普段使っているモバイルバッテリーをロボットの実験用として一時的に使うことも簡単です。写真で四角いのがシートです。これの上にバッテリーなどを乗せると、ロボットの走行程度の振動では、簡単に外れたりずれたりしません。

Dscn3531

ハンダ付けは2ヶ所しかありません。モバイルバッテリーの5Vからkinect用の12Vを作り出すDC-DCコンバータの部分のみです。ハンダが苦手な人でもこれなら安心です。

現在、成形品の最終確認中です。帰宅後の作業だと、2パーツくらいしかプリントできないので結構時間がかかってます。奥さんに頼んで昼間プリントしてもらおうかとも思いましたが、信頼性の問題があり断念しました。まだ年賀状なみに気楽にプリントできるものではありません。次でTエンドの予定ですので、近いうちに公開できると思います。

続きはこちら

2016年9月19日 (月)

pythonでturtlebotコンパチ機を人物追跡させる

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

turtlebotのサンプルにkinectを使って人間追跡をするデモがある。これと同様のモノをpytonで書いてみる。もっとも、お手本になりそうなコードを探して、ちょっと手を入れただけだ。これのおかげでpythonでのリスト処理のテクニックのごく一部がつかめた。機械学習のように大規模なデータ処理を扱う言語として、最近注目を集めているpythonだけど、なるほどなという感じだ。

リスト処理はその昔、Lispでデータ構造を構築するまねごとをやったことがあるけど、たぶんpythonもそういうことが得意なんだろうとおもう。10年以上前になるが、アメリカの画像認識とロボティクスをやってるベンチャーの人と仕事をしたことがあった。彼が日本にきたとき、秋葉原で接待した帰り、「あなーたはロボットつくるのに、なんちゅう言語をつかってまちゅか」(おそらく僕の英語はこんなふうに聞こえているんだろう)という質問に、「python」と言われ、なんだかわからず綴りを書いてもらったのを覚えている。後日オライリーの本を探して読んだけど、あまり魅力が分からなかった。

肝心のコードはこちらのサイトが元ネタ。動画にあるように、人を検知すると追跡しながらわんわん吠えたり、おもちゃのミサイルを発射したりする物騒なロボだ。ここからfollower.pyを拝借して改造した。最初の方のコメントは残したが、他のノードと連携する部分(わんわん吠えたりする部分)は削除して単純化した。わかりやすいと思う。

「follower.py」をダウンロード

これの実行前にminimal.launchと3dsensor.launchを実行しておく。肝心のパフォーマンスは、ラズパイ3のHanabot 2でも、かなりスムーズだった。

2016年9月 5日 (月)

turtlebotをリモコンしやすくする

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

turtlebotをリモコンするのには、この投稿にあるようゲームパッドを使っているが、スティックのききが良すぎてゆっくり動かすのがむずかしい。そこでゆっくり動かせるよう、teleoperationのlaunchファイルを修正する。

以降はlogitech.launchを使用している場合。

$ sudo nano /opt/ros/indigo/share/turtlebot_teleop/launch/logitech.launch

nanoで開いて下記の部分を直す。

param name="scale_angular" value="1.5"

param name="scale_linear" value="0.5"

scale_angularは旋回速度のスティック角度への係数。つまり最大に倒して1.5rad/s。これを1.0に。scale_linearは走行速度のスティック角度への係数。最大で0.5m/sなので、これも0.3に変更する。これでスティックが少し鈍感になり、ゆっくり動かしやすくなる。

この値は実際に操縦してみて、操縦しやすい値にすればよい。例によってアップグレードで元にもどる可能性があるので、バックアップを忘れずに。

より以前の記事一覧