2006 マイクロマウス...
TRANSCRIPT
2006 マイクロマウス
中部地区大会出場マウス
BLUE-EYE.DC 報告書
目次
1. 製作の目的
2. 機体スペック
3. ハードウェア解説
4. 電子回路
5. ソフトウェア
6. 実際の競技結果
7. 今後の課題
1. 製作の目的
近年、人間の暮らす環境で、コミュニケーション、介護、NHK Robocon..........
等、共存する
移動型ロボットの開発の需要が高まっている。その多くは 2 輪独立型を採用している。
いままで、私はステアリング型でライントレース系のロボットの研究をしていたが、実
際には機構の複雑さやその場旋回ができないなどの理由で使われることは尐ない。マイ
クロマウスはライントレースよりも考慮すべき項目が多く、実際の現場での状況に近い。
そのような複雑なロボットを作ることで自分自信の技術力の向上、また今回あえて制御
が難しいとされる DC モータマウスを初めから作った。理由はステッパーと比べて
1. バッテリー消費。ステッパーは安定して力強く動かすため高電圧を必要とする。昇
圧等、余分な回路が必要となるのでそれを避けたかった。
2. 重量面。重いマウスを動かすのに大量の電池を使うには、効率的によくない。
3. ステッパーは脱調があり、加減速性能に限界がある。エキスパート上位マウスは全
て DC なので将来を考えるとこちらのほうが有望。
4. DC 独立 2 輪の制御は NHK ロボコン、実際の産業用サーボ機器の古典制御系にい
かせる。
5. 学生実験で Z80 にマシン語で入力してステッパーを回すという時代遅れの作業を
やらされた上、不機嫌な熱血教師による居残り&別の日に延長という嫌な思い出が
ある。
等がある。
2. 機体スペック
大きさ
項目 値 備考寸法 全長:115[mm] 幅75[mm] 高さ:53[mm]重量 338[g] 電池含む車輪直径 43[mm]トレッド 65[mm]
メカ
項目 製品名 メーカー/型番 備考ギヤ 60枚歯 平ギヤ(MOD0.5) POWERS プラスチック車輪 東急ハンズ サクラ円板40Φ x10-4 不明 木製底板 アルミ t 1.5 不明補助輪 カグスベール ニチアスねじ 東急ハンズ 低頭ネジ 八幡ねじ 6個
電気関連
項目 製品名 メーカー/型番 備考バッテリー ニッケル水素 電池単4型 1.2V 950mAh GP/GP95AAAHC 8本パック化マイコン H8/3694F 20MHz 秋月電子ボード ROM 32k RAM 2kモーター 誉21 S.T.L JAPAN/HS-V1S 2本エンコーダー RE12D-100 コパル電子 100パルス 2本センサー 発光:TLRE20TP 受光:TPS601A 東芝 各4個
総額
使用した部品のみで 27000 円ほど
使用工作機械(自宅)
ボール盤:穴空け
電動糸鋸:底板切り出し
3. ハードウェア
3-1 車体バランス
[図1]壁に乗れた重量バランス
当初は電池を前 4 つ、後4つで基板は1枚という配分にしようと思った。ところが
実際に回路を作ってみるとセンサ基板が予想より大きくなってしまい(当方、回路基
板を適当に作ってからハードを設計した)この大きさならばマイコン I/O モータドラ
イバと3段重ねで前に集約してしまえということになり最終的にこの形となった。そ
の結果、電池は全て後方に配置すると車輪前後の重量バランスが取れた。重量配分に
関しては回転の際のモーメントの関係上、重心が 2 つの車輪の中央に来るのが望まし
いと思う。最初は図 1 のように完璧なバランスを誇った。しかし、その後の改造でバ
ランスは崩れ、乗れなくなった。
3-2 地面との接地に関して
[図 2] 3 点接地
安定して走るためには両輪に均等に負荷がかかる必要がある。このマウスは補助
として前後に家具スベールをつけているが、走行中に両方接地することがないように
している。もし 4点で接地した場合、コーナーや段差で動輪が空転する危険性がある。
このマウスは 1mm だけ車輪が支点となってシーソーのように振れる。後ろが接地す
るときは加速のとき。軽くウィリーする。シーソーのガタガタが大きすぎても不安定
となるので、カグスベールと機体の間には薄いスポンジを入れてサスペンションのよ
うにしている。
接地しない
3-3 車輪
[図 3] 車輪
車輪は最初は金属製のホイールにシリコンタイヤという構成にした。しかし重い
のと穴あけを失敗したため、回転軸が中心からずれて制御しづらかった。
そこで、木製の安価で軽量な円板を車輪とした。木なので、湿気などで形が変化
することを心配したが、実際は問題なかった。表面にニスなどを塗ってコーティ
ングすると完璧かもしれない。
ギヤは車輪にネジ穴を開けて 3 点固定とした。ギヤも初級者大会までは図 3 右の
協育の真鍮性を使っていたがこれも重いので安価な POWERS のプラギヤに変え
た。このギヤはランサーのときに歯が磨り減ったり、ねじれ方向の力で変形して
しまうのであまり良い印象は持っていないが、今回は無理な制御はしなかったの
で耐えることができた。
誉 21 のピニオンは普通の平歯車ではなく、転位平歯車らしい。今回それに気がつ
かず、標準平歯車の寸法で設計してしまったため、うまく歯がかみ合わなかった。
穴を広げて中心点をずらすというなんとも醜いことをやる羽目になった。だから
このピニオンを抜こうとしていた人がいるわけである。引き抜く場合はモータ内
部にダメージがかからないように工夫していただきたい。
3-4 エンコーダ
車輪はエンコーダシャフトに直結。シャフトにはかなりの負荷がかかったものと
思われる。慢性的な負荷によりシャフトが変形するのを防ぐため、走行しないと
きは車輪が浮くように、保管ケースはスポンジが張ってある。
3-5 底板
t1.5 アルミを糸鋸で切り出し。中部地区大会では肉抜きを行った。さほど効果はない。
CFRP も考えたが、同等の強度のものは薄すぎてネジ穴が開けられない、糸鋸で切れ
ない、そして高価であるなどの理由で不採用。
4 回路
4-1 CPU マザー(1 段目)
[図 4] マザー
特に変わった回路は搭載していない。EEPROM の配線、LED、タクトスイッチ、LCD、
エンコーダ等へマイコンのポートから引き伸ばしただけ。尚配線は大電流が流れる部分を
除いて、Φ0.3UEW という熱を与えると表面の絶縁膜が溶けるという線で配線した。
4-2 モータドライバ (2 段目)
[図 5] モータドライバ
FET アレイ以外、ランサーと全く同じ回路。詳しくはランサーの報告書を参照のこと。写
真のスイッチはモータへの電流を遮断するためのもの。マウスが斜めに衝突すると物理的
にスイッチが切られる。また CPU 書き込みのときも暴走防止のため OFF にする。
4-2 センサユニット (3 段目)
[図 6] センサ
basic mouse とほぼ同じ構成。ただし OP アンプはフルスウィングの LMC660 に変更して
いる。注意点として、この回路はそのまま用いると近距離で値が飽和してしまう。解決策
としては、フォトトランジスタの負荷抵抗をもう尐し小さくするといいという話をどこか
で聞いたことがある。しかし自分は後にソフトウェアのところで述べる方法をやるために、
あえてそのまま使用した。
5 ソフトウェア
[図 7]ソフトウェアの基本構成
ソフトウェアは 3000 行ほどで、メインルーチンで探索や最短走行アルゴリズムを回
し、姿勢制御は割り込み処理で行っている。また EEPROM で簡易ブラックボックス
機能(1度に多くの項目は保存できないが…)を搭載してデータ解析が可能なように
している。
プログラムは申し訳ないが、疑わしい部分もあり全てを解説はできない。DC マウス
に必要な基本制御と、このマウス固有のものだけを解説する。
5-1 姿勢制御
5-1-1 エンコーダのカウント
3694F は 2 相信号をカウントする位相係数モードがないので、ソフトウェアの割り込
みでカウントした。使ったポートはエンコーダ1つあたり、普通の I/O ポート2ビッ
トのみである。
原理は http://elm-chan.org/docs/tec/te04.html で詳しく紹介されているので、そちら
を見てください。以下に実際に用いたソースを示す。
最短走行
パラメータ指定
走行モード指定 EEPROM
RAM 迷路探索
メインルーチン
迷路データ
コマンド生成
光センサ
読み込み
タイマ A
タイマ V
エンコーダ
カウント
姿勢制御
制御パラメータ
割り込み
void encorder (void)
{
const static char dir1[] = { 0,1,-1,0,-1,0,0,1,1,0,0,-1,0,-1,1,0 }; /* 右回転方向テーブル */
const static char dir2[] = { 0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0 }; /* 左回転方向テーブル */
static unsigned char i,j; /* インデックス */
i = ((i << 2) + ((IO.PDR7.BYTE >> 5) & 3))&15; /* 15 はマスク処理 シフトは用いるポートによる */
EPOS0 += (int)dir1[i];
j = ((j << 2) + ((IO.PDR8.BYTE >> 6) & 3))&15;
EPOS1 += (int)dir2[j];
}
たったこれだけである。
このルーチンを 10kHz の割り込みで読み込んだ。計算時間削減のため、int 型でカウ
ント、条件分岐は一切使っていない。エンコーダのパルス周期はこの割り込み周期よ
り長くなければならない。このマウスの場合、用いたエンコーダは 100 パルスで、4
逓倍して使うので 400P/R とすると
1 パルスあたりの角度[paluse/rad]は
(360/400)*π/180=0.015[rad] ….(1)
(1)と割り込み周期から角速度の上限を求めると
0.015/1.00E-04 = 157[rad/s] ….(2)
rpm に直すと
157*60/2π=1500[rpm] ….(3)
となる。このマウスは車輪の回転をとっているので、この値から直接最大速度を求め
ることができる。車輪直径は 43[mm]で
v=rωより
21.5*157=3377[mm/s] ….(4)
このスピードを超えるとカウントミスをすることを意味する。実際は同じ割り込みを
分周して制御指令を 8ms ごとに入れていたので、制御系のステート数の関係で精度が
もっと落ちていたかもしれない。この計算結果から推測できると思うが、モータの回
転を直接とろうとしたりするとこのプログラムでは対応できないことがわかる。よっ
て 3694 単体では細かいサーボ制御は難しい。しかし今回のマウスのレベルではこれ
で十分だった。
5-1-2 速度制御
加速&減速
-15
-10
-5
0
5
10
15
20
0 200 400 600 800 1000 1200 1400 1600
t[ms]
palu
se/10m
s
左モータ speed
右モータ speed
指令値
ヨーレート
加速領域 減速領域等速領域
[図 8] まっすぐ加減速(センサ補正なし)させたときのログ
速度制御は P のみのいい加減な制御。速度の単位はマウス速度というものになり正確
に…cm/s という制御はしていない。(変換はできる)加速、等速時の式は
(目標スピード-現在のスピード)*p±(右距離-左距離)*k …………..(5)
前進速度 角速度
となり、左右のモータに対して独立に適用している。この他にもちろん PWM 幅に合
わせる、上限下限を指定するなどの項目もある。「スピード」は一定の周期で読み込
んだエンコーダの前回のカウント値と今回のカウント値の差分から求まる。「距離」
はそのスピードの値を積算したものになる。詳しくは井谷さんの MM3 のページにソ
ース付で載っているのでそちらを参考にしてください。これだけで手で邪魔をしたり
しても一応まっすぐ走った。
減速の場合は以下の式を使う。
(目標スピード^2 - 現在のスピード^2) / (2 * 目標スピードにしたい距離)…(6)
主にターン直前の制御に使った。
5-1-3 位置決め制御
単純な PD 制御である。これを左右車輪独立に記述する。特筆すべき点はないだろう。
P=(pos1-dist1)*pgain;
D=((pos1-dist1)-distold1)*dgain;
PD=P+D
distold1=pos1-dist1;
* pos1:目標距離 dist1:現在の距離
この制御はターンのときと、速度制御で速度が 0 になったときに適用した。実はこれと
PWM ゲインの加速テーブルを作成し、適用すれば DC モータをステッパーのように回
すこともできる。
5-2 走行ルーチン
5-2-1 探索
初級者大会時は求心法、中部地区大会のときは足立法っぽいアルゴリズムを入れた。救
心法の詳しい解説は芝浦工大のマイクロマウス電子マニュアル※1 に詳しい解説がソー
ス付で載っているので、そちらに譲る。足立法は 1 区画進むごとに最短経路を求めなが
ら進むというもので、この計算をするためにはある程度高速な CPU、DSP 等が必要に
なる。3694 で DC マウスの場合は 1 区画ごとに止まらず、連続探索する場合は尐しき
つい気がした。ログを後で掲載するが見事に誤差が出る。マップの形式は BasicMouse
の smap、map と同じもので、それに加えて区画通過回数を見るための第 3 のマップを
追加した。壁の更新は 1 度通過したことのある区画に関しては行わないようにした。こ
れは、せっかくゴールまでの経路が求まったにもかかわらず、帰路で探索中に壁を誤認
識した場合、マップが破壊してしまうのを防ぐためである。
5-2-2 最短走行
smap の重みから、直線の連続部分を一まとめにする方法でコマンドを生成。スラロー
ムも 1 区画ピボット旋回も同じコマンドで走行できる。斜めへの拡張も考えたが、スラ
ローム走行が安定しなかったので実装には到らなかった。加減速は区画ごとに最高速度
を指定するという単純なもの。
※1 2010 年現在残念ながら消滅。
5-2-3 走行モジュール
[図 9] 基本走行
まず 1 区画の定義だが、図 9 のように座標更新&壁判断を区画進入地点で行っている。
これはスラローム探索のときは区画中央で考えていては間に合わないからである。用意
した主な走行モジュールは
1,一区画直進
2,半区画直進+ピボット旋回+半区画直進
3,スラローム旋回
4,半区画バック+ピボット旋回+半区画直進
の4つである。2 と 3 が同じ座標更新アルゴリズムで使えるので実際のプログラムでは
条件分岐で切り替えるだけでピボットターン探索→スラローム探索が完成する。
5-2-4 壁切れ補正
マウスが完全に直進で進めば問題はないが、蛇行したり、ターン後の進入角がずれた場
合は距離が狂うことは明らかである。このマウスは区画進入地点の壁の状態を記憶し、
切れ目や柱を検出して距離情報を一定値に修正する。最初は壁が有→無のみを行ってい
たが、柱も見たかったので無→有も行うようにした。ただ無→有で注意すべきはセンサ
が観客のカメラのフラッシュや赤外線機器などの外乱で異常に高くなった場合に、誤動
作を起こす可能性があるので、導入する場合は十分注意していただきたい。
5-2-5 目隠し走行
これは効果なかった。壁の切れ目や柱等、センサの値が切り替わる距離のときに、セン
サの補正を OFF にするものである。このマウスも入れてみたが、かえって姿勢が乱れ
た。しかしアルゴリズム自体は前壁が近づいたときに横壁センサの値が大きくなるので、
そのときに姿勢が乱れるのを防ぐためにピボットターンの部分で導入した。
5-2-6 半区画バック
袋小路のときに普通なら区画の半分まで進み 180 度ターンをするのだが、このマウスは
スラロームターン直後に袋小路があるパターンが苦手で、左右の壁に寄ったり斜めを向
いて進入してしまったりすることが多かった。そこで尐しでも危機を抜けるためと、時
間短縮の観点から半区画バックを採用した。やり方は簡単で、180 度旋回のモジュール
をバックに変え、バックした後はなんらかのフラグでマウスの向きを逆方向にして次の
回転方向を定義すればいい。
5-2-7 区画間誤差是正
このマウスは CPU が遅いので、足立法の場合、特に区画と区画の間の座標更新&マッ
プ作成で遅延が生じる。その間も連続探査する場合マウスは動いているため、長い距離
を走れば走るほど誤差が 1 区画ごとに蓄積されていくわけである。初級者大会まではこ
れに気がつかず、単純に 1 区画の進む距離を尐なくすることで対応したが、最短走行で
マップの更新がなくなったときに当然距離が実際より短く出て、うまく走れなかった。
実際の誤差の様子を図 10 に示す。
誤差の是正
-50
0
50
100
150
200
250
300
350
400
450
500
0 200 400 600 800 1000 1200 1400 1600 1800 2000
t[ms]
palu
se
右エンコーダ
左エンコーダ
誤差補正値
区画
[図 10] 区画間誤差の様子
図 10 の赤い部分は区画間時に割り込みでカウントした誤差分のパルス数である。この
数を次回の区画走行の規定パルス数から引くことでつり合いをとった。結果、かなり誤
差は改善され、15 区画直進してもなんとか壁切れなどで吸収できる範囲内の誤差に収
めることができた。
5-3 センサの使い方
[図 11] 8 種類の値
このマウスはあえて Basic Mouse と違って横センサを前センサと垂直に配置している。
この理由は図 11 の近距離センサを仮想的に作り出すためである。まず黄色の遠距離セ
ンサは普通にサンプリングするだけなので問題ないでしょう。青の近距離は、発行側が
横向き LED 受光側を前向きセンサにして散乱光を検出する。こうすることで車体の尐
し前の横壁を認識することができる。組み合わせを逆にして斜め前の前壁も認識できる。
たまたまプログラムを間違えて思いついたものである。ただ微弱な光を時間をかけて検
出するため、遅延が発生したり、外乱や周囲の環境光で値が微妙に変化したりするので
今後は使用する予定はない。斜めセンサを追加すればいいだけの話である。
実際は、遠距離センサを壁の有無を判断するためのデジタル的なもの。近距離センサを
アナログ的なものとして、マウスの角度に対する PD 制御に使った。
5-4 その他
5-4-1EEPROM
3694 の I2C バスを使用している。GDL の include に読み書きプログラムが最初からあ
る。3664 はタイマ V 割り込み中に弄るとバグが発生するらしい。
5-4-2 スラローム
未だ不安定なので解説不可能。
5-4-3 圧電サウンダ
PWM の周期を変更するといろいろな音階が作れる。Tiny の PWM はタイマ W で 3 つ
作れるが、基準周波数を共通にしなければならないので、モータを回している間は可聴
音を鳴らせない。(モータに用いた周期は 20kHz)余談になるが、世の中には SIMENS
という会社が電車のモータを楽器にして加速時に「ドレミファ…」となるような GTO
素子のインバータ&ソフトウェアを製造している。京浜急行の一部列車に採用されてい
る。
6 実際の競技結果
中部地区大会
途中まで左手法。迷路の中頃まできたときに、足立に変わるプログラムで臨んだ。
探索走行はスラローム探索で行った。
第一走行
順調に走るがコーナーで曲がりきれなくなってスタック。
第二走行
走行スピードを下げるが補正が強くなりすぎてまた途中でスタック
第三走行
重ね探索を試みたが、エラーを吐く。走行スピードを上げてみたが
今度は迷路の壁を誤認識したようで、迷走してスタック。
第四走行
ゴール停止モードでスタート。第一走行と同じ付近でスタック。最短無理に…
第五走行
いちかばちかでセンサ閾値初期化。センサを調整した直後はたいてい不安定だったの
でやりたくなかったが、今回は良い方向に働いたようだ。やっとゴール。
7 今後の課題
スラロームが不安定。補正を入れないと走れない。
外乱に弱いらしい。スタックした付近でビデオカメラ撮影者がいた。直前の練習では
問題のない箇所だったので、影響したかもしれない。
エンコーダの解像度不足。3694F ではこれ以上分解能を上げることが難しい。
エンコーダをソフトでカウントするため、姿勢制御の周期を上げられなかった。
新作予定
SH2 採用。
ジャイロによるオドメトリ制御。
回路はパッケージ品を使ってさらに簡略化。
完成時期:未定(社会人になっているかもしれない)
参考文献
ロボコンマガジン:NO44,45 中島氏の記事
森永氏、ベーシックマウス
綿谷氏、BasicMouse DC のページ
井谷氏、MM3 の制御法
Kiat 氏、MouseThechnology
謝辞
WEB、書籍で技術を公開していただいた方にはお礼を申し上げます。また、調整迷路
を製作していただいたロボコン工房の方々、競技の機会を与えていただいたニューテク
ノロジー財団、名古屋工学院専門学校の皆様にこの場をかりて感謝します。