(2004.07.06リンク修正) | |
(2002.03.03更新) | |
(2002.07.09リンク追加) | |
(2002.07.09更新) |
ホビーユーザ向けの小型自律ロボットといえば、スリーディのワクチン君が代表選手でしょう。充電池内蔵、PIC マイコンでの制御、光センサでライントレース可能と、机の上だけでロボットプログラミングを楽しむことが出来ます。が、自分のオリジナルを作りたい、マイコンくらいは自分でチョイスしたいという欲望が抑えきれず、購入まで至りません。秋葉原のツクモロボコンマガジン館では、そのワクチン君の駆動系ユニットだけを単体販売しています。これを使えば小型ロボット自作の一番の関門をクリア出来る!と思っていた時に、ちょうどタカラがデジQを発売してくれました。
デジQは赤外線でリモコン操作可能なチョロQで、複数動作を可能にする MICRO IR 技術が内蔵の CPU に実装されています。リモコン自動車にしては珍しく、戦車のように左右の車輪をそれぞれ別々のモータで駆動しています。これはもうマイコン繋いで自分でモータを回すしかないですよねえ。赤外線でコントロールというのも、マイコン野郎の解析ゴコロをくすぐります。既に赤外線の魔術師 K.I 氏やひろつく氏といったその道のエキスパートが、バリバリ料理しています。
似たようなタイミングで TOMY から BIT CHAR-G なる超小型ラジコンが発売されています。デジQと違い、周波数固定の無線操縦、本物の自動車と同じく前輪で舵を切るタイプです。デジQが元マイコン少年の為のオモチャとすれば、BIT CHAR-G は元ラジコン少年の為のオモチャと言えるのでしょうか。もちろん BIT CHAR-G も購入しましたが、分解したいという欲求は余り感じられず、普通のラジコンとして楽しんでいます。
制御基板の解析
何はともあれ、分解します。ボディとシャーシの固定ネジは、ネジ穴が三角形の特殊ネジでした。PEGA-BT700 分解の為に秋葉原の千石電商で購入した、特殊ドライバセットの中の三又ドライバが役に立ちました。ネジを外し、上部の赤外線受光モジュールを押し込みながら後部のツメを外すことで、ボディがシャーシから分離します。デジQの分解過程については、分解くんページにも同じような写真を掲載しています。
次に制御基板の解析です。テスタと目視で大枠の結線を理解し、解析メモにまとめました。基板上面に載っているのが CPU で、おそらく東芝の 4bit マイコン TMP47C201M だと思われます。2.4V の充電池出力を昇圧した 5V 弱の電圧が、CPU の pin16 に供給されています。基板の裏側には三洋のモータドライバ LB1836M が載っており、こちらは充電池の 2.4V がそのまま電源に供給されていました。CPU の I/O pin11〜14 が、モータドライバの IN1〜4 に接続されており、ここを乗っ取ればモータの制御が可能となります。
CPU を基板から剥がしてみました。ハンダ吸取り線を使って CPU 足と基板電極の間のハンダを減らし、コテで足を暖めながら、てこの原理で足を持ち上げていくと、簡単に CPU を取り外すことが出来ます。赤外線モジュールも、今回は不要なので取り外します。CPU の足が付いていた pin8(GND), pin11〜14(モータドライバ制御) の5つの電極をマイコン評価ボードと接続することで、簡単にモータを回すことが出来ました。
マイコンと Treva を搭載
さて、このサイズにマイコンを搭載しようとすると、結構大変です。秋月電子通商にて販売している QFP 版 TinyH8 ボードでも、はみ出してしまいます。PIC12C509 や AVR AT90S2323 といった 8pin DIP マイコンを使うのが良さそうですが、外付け発振子を含めると、結局それなりの大きさになってしまいます。
しかし、このような事例に最適なものがあります。Cygnal 社の 8051 互換マイコン C8051F300 です。これは 3mm 四方の超小型パッケージ内に Flash ROM 8KByte、RAM 256Byte、25MHz 8051 コア、2% オシレータを内蔵し、3V の電源をつなぐだけで 24.5MHz での動作が実現出来ます。それだけでもスゴイのですが、内蔵周辺も充実していて、16bit タイマ3本、UART、I2C、アナログコンパレータ、そして変換速度が 500Ksps な A/D コンバータ 8ch 内蔵という素晴らしさ。実際には全ての機能を同時には使えず、8本の I/O 端子を共用するのですが、それにしてもこのクラスの他のマイコンを凌駕する機能が 3mm 四方のパッケージに入っているのには驚きです。
さらに Cygnal 社の Web ページでは、チップ単体だけでなく $99 の開発キットを購入することが出来ます。この開発キットはアセンブラと評価版のCコンパイラが同梱され、GND 含めて3本 CPU と結線をするだけで、シリアルアダプタを介したオンチップデバッガによるソースコードデバッグが可能になります。これはもう世界中のマイコン野郎は即買いモノですねえ。国内では三洋が販売をしており、こちらも Web ページから購入することが出来るようです。
この CPU の大きな欠点は、ハンダ付けの難しさです。チップ表面に 0.5mm 間隔で並べられた幅 0.23mm の電極への結線が要求されます。CPU を1つ授業代に充てたおかげで経験値を得ることが出来、ようやくユニバーサル基板上への取り付けが出来るようになりました。私が取った方法は次のようなものです。まず CPU をユニバーサル基板の部品面上に仮固定します。ポリウレタン線(UEW)を予備ハンダし、基板上の穴を貫通させた状態で、予備ハンダした CPU 端子に仮止めをします。UEW が貫通している穴のランド部分をハンダ付けして UEW を固定し、もう一度 CPU の電極にじっくりはんだコテをあてて、確実にハンダ付けを行います。そしてランド面側の UEW の一端を予備ハンダして、他の部品と結線します。キモは、如何に UEW を固定して CPU とハンダ付けするか、一度 CPU とハンダ付けしたら動かさないようにするか、だと思います。
さてデジQに C8051F300 を搭載してみます。まず電源です。悩んだ末に、昇圧された 5V 弱の電圧を 3.3V 用3端子レギュレータ NJM7202 で 3.3V に落としたものを供給しました。モータドライバとは P0.0〜P0.3 の I/O ポートを、モータドライバ LB1836M の IN1〜IN4 に接続します。結線は取り外した東芝 CPU の電極を介するのが簡単です。デバッガ接続用に P0.7 と RST と GND の3本をステレオジャックに接続しました。充電用に極性統一ジャックを基板上に固定し、デジQ制御基板上の充電端子ハンダ部分にピンヘッダを取り付けて、CPU 基板をここに差して固定しました。
次は Treva の搭載です。松下の feel H" 端末 KX-HS100 のモックアップから取り外した4極ピンジャックを充電池の前に両面テープで固定しました。最初はピンジャックを上に向けていたのですが、紆余曲折の末、見てくれ重視で上下反対となりました。Treva と C8051F300 との結線は、Treva の DOUT を P0.5 と、CLKIN を P0.4 と結線するだけです。Treva の電源には 3.3V 3端子レギュレータの出力を供給しました。
このままでは前輪が無いのでシャーシ下面が接地してしまいます。ボディ固定用のネジ穴に、東急ハンズで購入したすべり鋲を差してみました。この時すべり鋲を浅く差すことで前方を持ち上げました。これにより重心が多少後ろになり、駆動輪の接地摩擦を向上させることが出来ました。
ボール追跡
完成した台車を動かしてみましょう。とりあえずワンパターンですがテニスボール追跡で遊んでみることにします。まずは TinyH8 の時と同じように C8051F300 単体で Treva からの画像取り込みとテニスボール認識をテストしてみます。評価ボードに Treva を取り付け、シリアルポートを通じて TinyH8 の時に作成したPC ソフトに画像データを転送します。試しにフレームレートを測ってみた所、テニスボール認識を含めて約 6fps という結果が得られました。24.5MHz 動作の威力絶大です。
次にデジQモータ制御部分の検討です。タイマ割込みを使って8段階の PWM を実装し、速度を可変できるようにしました。実際に動かしてみると、2/8〜3/8 といった Duty 比でようやく制御できそうな速度になりました。また片方の PWN Duty 比を一定間隔で増加させる補正処理を組込み、直進性を向上させました。
以前作ったボール追跡ソフトの反省を活かし、今回は状態遷移数を増やしてボールを見失ってもそれらしい動きをするようにして見ました。この部分のプログラミングが今回一番楽しいひとときでした。やはり安定した台車を用意して、その動きを考えるのはマイコン野郎の醍醐味といえるでしょう。
このサイズの自律移動ロボットを自分がこんなにお手軽に作成できるようになるとは想像もしていませんでした。もはや Treva すら大きく感じられます。現在の問題点は充電方法です。とりあえず 5V アダプタを充電端子に直結していますが、すぐに充電池が熱くなってしまいます。この辺の問題をクリアし、さらに消費電力を低減させつつ、次なる目標に向かってソフトで楽しみたいと思っています。
トレQを動かして感じたのは、これが車の形をしていたら楽しいかなあ、というものでした。すべり鋲の代わりにデジQの前輪を使うだけでもイメージが変わるんじゃないか、でも前輪の固定はどうする?Treva の固定はどうする?という思いが駆け巡り、結局チョロQのボディを乗せることにしました。
まずは制御基板をもっと小型にする事を考えます。C8051F300 の結線も縦長になるように変えて、フットプリントを減少させました。そして昇圧 5V から 3.3V を作るための3端子レギュレータを外し、そのかわり 5V を LED で降圧した後ツェナーダイオードで定電圧化してみました。LED はフロントライトとして点灯させます。
ボディとして利用したのは清掃車のチョロQです。運転席部分と後部が別パーツとなっており、後部の下パーツを外すと中に空間が出来ました。ここに基板を仕込む事にします。今回はヤッツケ度が上昇していたので、基板とボディとの固定には両面テープを多用しました。
Treva の配置はボディ中央上部にコネクタを取り付け、コネクタに Treva を差すことで固定します。これでミッドシップ状態になり、重心問題は解決、視野も向上する事となりました。実際に組み上げると、妄想どおりのイメージになり満足しています。
やっぱり課題は電源回り
トレQ1号機2号機が動かなくなりました。要はバッテリが消耗してしまったのです。やはり 5V 直結での気合充電は無謀でした。という訳で、早速3号機の製作に取り掛かりました。
今回の3号機は、新規要素を入れるというよりは、今までの成果の整理を行なうことをメインとしました。チョロQボディの利用、3端子による 3.3V 生成、と1号機2号機のイイトコドリなものを目指します。
ボディとして利用したのはステップワゴンのチョロQです。後部がモータ部分と干渉するために切り取った以外はそのままデジQ車体に載せる事が出来ました。基板に取り付けたデバッガ接続用ジャックに合うようにボディ後部に穴をあけ、これで基板も固定できるようにしました。
前輪は赤外線受光部のスペーサのパーツを流用して固定。ボディの Treva 用ジャックと基板の結線にはピンヘッダを用いたコネクタを介することで、いつでも分解が出来るようになりました。
ようやくイメージ通りの姿に
3号機でようやく当初自分でイメージしていた姿に、かなり近づく事が出来ました。チョロQの上に Treva が載っていたら、というものです。今回は純正充電環境でしか充電を行なわないようにしたため、バッテリの状態も問題なし。行動時間も2分どころではなく、もっと動く事が出来るようになりました。今まで純正充電環境を使っても2分程度しか動かなかった問題は、単に充電環境で使っている単3電池が消耗していたからでした。
これでスタンダードなトレQは形あるものになりました。次は同じものを量産してビックリドッキリメカ化するのか、もしくはチョロQ以外のボディを使うのか、はたまた加速度センサを搭載して遊ぶのか、色々方向性が考えられます。戻るところが出来たので、今度は攻めの姿勢で作ってみようと思います。
トレQ3号機の完成で、基本的な動きについては心配が無くなりました。行動時間も許容範囲です。ということで4号機を作成し、次はソフトの方に力を入れるかな、という状況になりました。いよいよ当初の目標だった画像情報のみによるライントレースに挑戦です。
どのようにしてライントレースを行なわせるのか、その処理方法の検討の為には、トレQがどんな映像を取得しているのかを知る必要があります。以前使用した Tiny H8 や Cygnal C8051F300 による Treva 画像データ取得環境では、シリアルポートを使っている為 PC に画像データを転送する時間が長いという問題がありました。1枚2枚程度の画像データを取得するだけなら良いのですが、やはり色々なシーンの画像データをサクサクと大量に取得して、検討作業を行ないたいものです。
そこでまず EZ-USB を用いた画像データ取得環境を構築しました。以前作製した汎用 USB-PDC を使い、AN2131SC Port C の bit0 に Treva の DOUT を、bit1 に Treva の SCLK を接続し、EZ-USB にて Treva から画像データを取得し、USB 経由で PC に転送します。
24MHz 動作の EZ-USB マイコンと USB 転送の力で、画像データ1枚の取得が1秒程度で出来るようになりました。基板とコネクタの位置をトレQの高さとあわせることで、トレQが取得するのとほぼ同じ状況で画像データを取得できるようにしました。Treva デジカメと言っても良さそうな、この EZTREVA システムを使って、バリバリ画像データを取得してみます。
処理方法はシンプルに
さて取得した画像データを検討する事にします。例によって VisualBasic で作成した処理方法検討用プログラムを使用して、処理方法を検討してみます。
まずラインの抽出を行ないます。これは単純に白→黒→白となっている黒部分をラインと認識することにします。しかしここで問題が発生しました。今回はデザイン優先の為 Treva を垂直に使用しているのですが、この配置ではラインが画像走査方向と水平になってしまいます。これでは上記認識方法の採用が難しいです。
そこで今回はX座標に対して認識状態を示す配列を用意し、走査しながらそのX座標における認識状態を更新していく方法を採用しました。また黒線部分の先頭位置と終端位置を格納する配列にて認識状態を示すようにして、少ないメモリでも認識状態を保持できるようにしました。
このようにしてラインの抽出を行ったのですが、結局使用したのは一番手前の5ライン分のデータのみとなりました。黒線の中央値を5つ取得し、最大値と最小値を除いた平均化で黒線位置を割り出し、この値が画像の中央に位置するようにトレQを制御することにします。
そしてライントレースへの道
トレQ3号機にライントレース処理を実装してみます。今まで1つのCソースファイルに全ての処理を記述したヤッツケ実装だったのですが、心を入れ替えて、モータ制御、Treva 制御の処理を分離してみました。
移動速度が速いとラインへの追従が出来なくなる為、PWM 周期の見直しと合わせて少しパワーを落とす処理を追加し、ほどほどの速度になるようにしました。そのため床面によっては全然進まなくなる場合も出てしまいました。
ライントレースする様子を見ていると、ボール追跡とは違った楽しさがあります。単なるハラハラドキドキ感なのかもしれませんが。
同じトレQ3号機でも、ソフトを入れ替えるだけでボールを追いかけたりライントレースをしたり出来ます。この辺がビジョンセンサの面白いところかもしれません。ソフトを入れ替えるだけで色々な事が出来る、そんな将来の汎用ロボットの世界を、このちっぽけなオモチャを通して垣間見る事が出来ました。専用センサをゴテゴテ付けるのと比較して、ビジョンセンサというのはソフトコンシャスなものなのですね。
とはいったものの、現状のトレQには大きな弱点があります。Treva が正面を向いているため、窓やディスプレイといった明るい部分が視野内にあると Treva の自動画像補正が災いして他の部分が相対的に暗くなってしまいます。移動するための自由度だけでなく、ビジョンセンサの向きを自由に変えられる自由度を持つ必要があるな、と強く感じました。