AVE-2





AVE2

 

データ類

センサ TLRH180 + TPS601A × 4                            (可視光センサ・BASICMOUSEと同じ)
モータ KH39FM2-801 + SLA7033M + TA8415P × 2    (BASICMOUSEと同じ)
CPU  H8/3067F × 1                                            (秋月製H8/3067Fボード・デバッグ用に1MbitSRAM増設バージョンもあり)
電池  NEXcell製ニッケル単4電池750mAH× 16      (最大放電3Cが保障されている)
タイヤ エフテック製M30090/1 × 2 +シリコンシート  (ホイールは、これくらいしか選択肢がない)
UI       LCD SC 1602BSLB  × 1
          LED                      × 6                                (うちパイロットランプ2つ)
          PUSH SW               ×  6              (うちリセットボタン2つ)


走り 
スラローム1(安定版・大会で使用)
スラローム2(180°ターン高速版・大会では使用せず・・・)
スラローム3(最高速バージョン・やはり大会では封印)





AVE2(2003 年9月〜2003年11月)



AVE-2は、AVE2−X・AVE2−X2・AVE2−X3・ AVE2−X4といった、
4台の試作機で得た教訓を元に作成されたマイクロマウスです。
ハードウェアはBASICMOUSEを踏襲したものとなっています。
ソフトウェアはAVE-1のものを基本として大きく手を加えています。
このマウスは
2003年 9月23日:東日本地区大会 30秒697
2003年10月26日:中部地区大会 1分54秒7
2003年11月22日:全日本マイクロマウス大会エキスパート予選 11秒454
という成績を残しました。
残念ながら0.027秒差というごく僅かな差で決勝進出を逃しましたが、
10秒代前半という高速走行に成功したマウスです。




試作機の問題点解決



まず、AVE-2(当時はAVE2−X5)を作るにあたって、これまでの試作機の問題点を解決
することからはじめました。


可視光センサの不安定な状況の解決

可視光センサが不安定だった問題を解決しました。その後も何度か不安定だったことが
ありますが、主な原因は以下の通りでした。

・マイコン未使用ポートの処理がまずかった。
昨今のマイコンは、非常に微妙な状況で動いています。ほんのわずかなノイズを拾っただけでマイコン本体
およびマイコン周辺機能への影響は大きなものです。
特に問題になるのはI/Oポートで、「入力状態」になっているI/Oをハイインピーダンス状態(何もつながない状態)
で放置すると思わぬ影響をこうむります。

特にH8は、ポート7が最初から入力状態になっているので、(ポート5・ポート6の一部もモードによってはそのようになります。)
この処理を怠るとマイコン本体、特にA/Dコンバータに大きな影響が出ます。
BASICMOUSEでは、この問題は発生しないような構造になっていますが、この回路を元に作ろうとするような場合は注意が必要です。

対策としては、10KΩ位の抵抗で使用していない入力状態のポートをプルアップしてやればOKです。
入出力兼用のポートなら、出力状態に設定するだけで十分だと思います。


そのほかの不安定な挙動を示す場合の原因

その他、不安定な挙動を示した時の原因をここに記しておきます。

・壁に激突した際にセンサの軸が狂った。
・センサ取り付け部分の接触不良。
・電池残量が少なくなったときの電圧低下の影響を受け、値が変化。(あと、温度によるレギュレータの特性変化もありました。)
・横方向からの蛍光灯照射による不調。
(会場では上方向からの照射のみであると考えてこの問題は放置しました。上方向からの光線照射を受けるような
センサ配置の場合は、注意が必要だと思われます。)
・取り付け方がまずくて、停止の際の車体振動の影響を受けた。




基板積み重ね方式で発生する接触不良


 基板積み重ね方式は、マウスの形状を小さくする上で意味のあるテクニックですが、
 きっちり作らないと接触不良が発生します。(BASICMOUSEが部品配置まで公開してあるのはこういった問題を
 回避するためだと思います。)
 また、いくらきっちり作っても、激しく壁に激突すると一瞬接触不良が発生する、といったことが考えられます。
 
 (たびたび出しますが、この問題を甘く見ると
 

 こうなります。↑のLCDはどれも、もう二度と写りません。1つ750円ですから結構痛い出費です。)


 こういった問題を解決するには、極力1枚の基盤に機能をまとめるのが一番です。
 私は、センサ用LED・フォトトランジスタ・マイコンボード以外の部品は、1枚の基盤にまとめることで
 この問題の対策としました。


ユニバーサル基盤の問題


 ユニバーサル基板で作ると、
 ・配線は自分でやる必要がある。
 ・部品のレイアウトが制限される場合がある。

 という問題が発生します。しかし、

 ・後から部品の追加が容易に行なえる。
 ・配線のミスはすぐに直せる。
 ・ある程度形状を自由に作れる。

 という利点もあります。このあたりは製作者の考え方によりますが、 私はデメリットの方が大きいと考え、
 ユニバーサル基板を使わずプリント基板を起こしました。
 もちろん、これが正しい選択であるとは一概に言えません。なぜなら、トップクラスのマウスでも、
 ユニバーサル基板で構成されているものがあるからです。
 
 私にとってはプリント基板を起こした効果は絶大で、センサ部分に関しては変な挙動を示さなくなりました。
 (モータドライバに関してはそうではありませんでした。片面で製作しない方が良かった・・・。)





AVE2でつかった小技(ハードウェア編)




 役に立つ、役に立たないといった価値判断は抜きで、AVE2で用いた小技を取り上げます。




電池の配置

まず電池の配置ですが、これは2本を4段にする(底面から見て)という配置になっています。
BASICマウスでは3本を2段にしていますが、車輪から遠い位置に重いものがあるというのは、
ターンの時に不利ではないか?と思います。そういう事情からこの配置にしています。

なお、モータとベースの上に「ダンボール」を敷いて、その上に電池を固定しています。
「ダンボールなら熱伝導率が低いから、電池に影響がでにくいかな?」などと
考えてつけたらしいのですが、今考えると果たして効果があったのかは疑問です。
とりあえず、電池をしっかり固定するのに必要だったのでそのままにしてあります。


タイヤ素材の変更

タイヤは「シリコンシート」を用いています。東急ハンズで入手した1mm厚の透明なシリコンを
タイヤに合うサイズに切って巻きつけています。
1mm厚では足りないので、シリコン用の接着シートで2段重ねにして2mmとして使っています。
(使用したシリコン用接着シートはホースケアプロダクツ製の「シリコン/アクリル両面シート」
 というものです。シリコン同士を接着するときは、アクリル面を内側にして2つ折にします。)

アルコールで表面の埃を除去し、走らせたときのグリップはなかなかのものです。
ただし汚れに弱いので迷路の状態が悪いときはゴールできないかもしれません。

現状ではちゃんとテストしていないのですが、表面に明らかな埃の層があるような状況では
駄目でした。ほんの少し積もっている程度では何とか探索は可能でした。
スラローム探索(しかも高速なもの)でもしない限りこの素材でも何とかなるでしょう。


モータの接続

モータと基板との接続は、とりあえず小技らしい小技を使っています。



日本サーボのKH39FM2−801を相変わらず使っています。このモータは
BASICMOUSEにも使われているもので、結構良いモータみたいです。

ただ、モータとリード線の接続コネクタが華奢なもので、よく外れたり接触不良を起こしたりしました。
今回はこれを嫌ってモータを分解して直にリード線を取り付け、外へ引っ張り出しています。
引っ張り出すには、接続コネクタのモータ側部分を一部切り取り、そこから配線を出します。
出した後は、ホットボンドかエポキシ系接着剤で封をしておけばOKです。

コネクタの接触抵抗は結構馬鹿にならないので、この小技は(メンテナンス性を考えなければ)
ちょっとは意味があると思います。




AVE2でつかった小技(ソフトウェア 編)



PID姿勢制御

AVE1は、似非P制御を行っていました。具体的には・・・

・丁度迷路の中央を走っているときに、壁の上に来て反応するセンサの位置を「0」とする。
・それから離れたセンサを、「1・3・5・・・−1・−2・・・」というように重み付けする。
 この重みは、「0」位置に戻すために必要な、モータの回転数の差に相当する。
・中央位置から離れたセンサが反応した場合、そのセンサに相当する分だけ、
 モータのパルス発生をずらす。これによって、車体を中央に持ってくる。

上面センス方式でセンサが横1列のタイプは、この方法が普通だと思います。
ちなみになぜ「似非」かというと、重みを計算によって求めずあらかじめ決めて
しまっているからです。

これをおこなうと、低速のプロセッサで動かすことができる等、メリットもありますが、
マウスが泳ぐ場合が多々あります。
これは操作量が一定なので、マウスの経路が正弦波状になってしてしまうのを
抑えられない(適度な操作量を与えられない)のではないか、と思っています。

計算で出すか(といっても、1列しかないセンサでは、計算の元になる情報が少なすぎる
ので難しいですが)センサを2列にすれば、ずいぶんましになると思います。

さて、AVE−2ではセンサがアナログになったため、
壁との距離を無段階でとれる(厳密には百段階ちょっと位)ようになりました。

そこで、この値を基にして、PID制御を行ってみることにしました。

各項は以下の方法で求めます。



(・・・その前に、用語の統一。ここでは以下のように扱います。

正常値・・・マウスを迷路の真ん中に正確において、
        横壁の位置を取ったときのセンサの値を指します。つまり、左右ともにこの値を
        示すときは、迷路の真ん中を走っていると言い切れる値のことです。
                   このシステムでの「目標値」に相当します。
        つまり、センサを正常値に近づけるのが、姿勢制御の目的となります。


エラー値・・・測定段階でのセンサの値−正常値のことです。要するにP項の
        (ゲインを1としたときの)中身そのままです。)

P項
Pゲイン×(現在のセンサの値−正常値)

I項
Iゲイン×(この段階までのエラー値の蓄積 + 今回のエラー値)

D項
Dゲイン×(現在のセンサ値 − 前回のセンサ値)


こうやって求めた値を、すべて足し合わせます。
最後に、モータ制御用の割り込み時間に加算するなり減算するなりして、
左右いずれか(もしくは両方)のモータの回転速度を微妙に変化させます。


LCDを使ってパラメータをチューニングする

私は一応システム制御について勉強した(といっても「さわりだけ」ですが)んですが、
PID制御はシンプルな反面、調整が難しいという話を聞きました。
「これ!これでOK!」というゲインを数学的に1発で求める方法がないらしく、
(システマチックに求めていくことはできるらしい?)結局何度も試すことになるようでした。

そのたびにプログラムを書き換えるのはさすがに面倒だったのと、大会で自分が走っているときに
「あれ?こうした方がいいんじゃ?」と思ったときにすぐ直せるということから、
PIDゲインやその他多数のパラメータを変更できるようにしました。

当然どれくらい変えたかを見るためのものが必要で、そのためLCDは必需品となりました。
ちなみに変更可能だったパラメータは、

・壁との閾値
・スラローム走行用の全パラメータ
・速度(直進時の最高速度と、カーブに入る前の減速速度)
・姿勢制御用ゲイン(直進時とカーブ時2種類)
・ゴール到達後の帰還方法(探索で戻る・その場ターン+直線高速で戻る・低速スラロームで戻る)

といったところです。(ひょっとするといくつか抜けているかも。)

構文解析型の第2走行


AVE−1やBASICMOUSEの第2走行は、「未探索領域は壁として扱う」という
処理によって作り出された等高線を元にゴールを目指すようになっています。


この方法はシンプルですが、1区画ごとにちょっとだけ計算が入ります。
また、2区画以上先を見てくれないので、いろいろと不都合があります。
(その最たるものは、斜め走行ができないということです・・・多分この方法では無理かと。)


そこで、AVE−2ではスタート地点であらかじめ計算をしておいて
最短経路を導き出し、配列に格納するようにしています。
この配列を、コンパイラで言うところの「構文解析」のようなことを行って
解析し、走行します。符号は4つしかない(前後左右の4つ)ので、この方法は対して計算を必要としません。
(スタート地点では膨大な計算を必要としますが。)

例: 01・・・左折  02・・・前進   03・・・右折    (04・・・後退・ここでは必要ない) 99・・・終了

02 02 02 03 02 02 01 01 02・・・・・

02を読んだときは一つ先を見て、
・02なら全速力で直進
・01もしくは03なら、次の区画は旋回なのでターン用の速度まで減速
・99ならゴールなので、ゴール地点で止まれるように調整して前進
といったような判断をする。

他に、01を読んだときを考えると、
・02なら特になし(普通の旋回)
・03も特になし(ただし斜め走行をやる場合は、ここで検出可能)
・01ならば、180度ターンなので、最適位置まで進んで180度ターン
・99ならゴールなので、ゴール地点で止まれるように調整してターン
というように、一つ先読みすることでコーナーの攻め方が1パターン以上増えることになる。



さらに斜め走行の実装を検討してみると、先と違って容易にできそうであることがわかります。
それはそうで、配列にあるのですから斜めに走れるかどうかは、一つ先読みを行うだけで
分かるのです。(今曲がった方と逆に曲がるかどうか、といった程度の処理で判別可能。)

走行に必要なのは配列を読むことだけですから、この間に他の計算を行うこともできます。
・・・といっても、あまり必要そうではないですが。
とりあえず、センサ読み取り用割り込みの周期を早くする、といった程度でしょうか?



AVE2でつかった小技(運用 編)



PID姿勢制御の運用

PIDは、チューニングが難しいという話を先ほども書きました。
実際相当難しいもので、これぞという値はなかなか出ませんでした。
さらに、センサを壁にぶつけて位置が狂ってしまった場合、値もおかしくなるので
なかなか厄介です。

ここでは、PID姿勢制御をうまく使うためのAVE2での運用について
メモ書き程度に残しておきます。

・トップレベルのマウスはPIDでなく、PDである場合が多いようです。
 実際I項はゲインを大きくしたり、入力が想定以上のものであった場合、振動的になることがあります。
 最悪の場合、発散してしまいます。
 そこで、どうしても安定しては知らせたいときは、I項のゲインを0にします。
 すると0を掛けることになるので事実上I項が消滅し、PD制御相当になります。
 (ただし私は、「隠し味」としてI項を入れておきたいと思ったので、
 大会でこれをやったことはありません。自宅迷路では何度かあります。)


・ちゃんと裏づけを取ったわけではないのではっきりといえませんが、
 直進時に要求されるPID各項のゲインと、旋回時に要求されるものとは
 かなり違いがあるようです。
 基本は、「壁にぶつからないこと」なのですが、無理やり制御を行うと、旋回そのものが
 成り立たなくなる場合があります。
 そのような事情から、旋回時と直進時のPID各項のゲインは別物にしています。



・当然ですが、このシステムをそのまま用いるのは危険です。
 なぜなら、「両側とも壁がある」ことを想定しているからです。
 さすがに壁がまったくない場合は無理ですが、片方でもあれば動作するようにすることはできます。
 ある値以下であれば「壁がない」と判断して、壁がない側のセンサの値を用いて計算しない
 などというように変更する必要があります。


・まったく壁がない場合の姿勢制御ですが、はっきりいってこのセンサだけでは、完全なものは
 無理です。ジャイロあたりを使う必要があると思います。
 しかしながら、「なんとか壁にぶつからない」程度にしたいのであれば手はあります。
 前壁センサを使うのです。壁はなくとも柱はあるはずですから、右か左へよりすぎると
 左右どちらかの前壁センサの値がもう一方に比べてかなり大きくなります。
 これを検出すれば、とりあえず激突だけは避けられるはずです。
 






戻る