詳説 風兎

写真:ロボット外観

走行部

写真:車体底面 写真:車体側面、ホイールを外したところ

足回りは世紀末の火鼠と同じなので併せてご覧ください。

グリップを上げるためにタイヤはギザギザのゴムシートになりました。両面テープで貼り付けられています。接地面が平らで幅が広いためデドレコの精度は落ちましたが、今回はライントレースをメインに考えていてデドレコの精度がそれほど必要でなかったためこのタイヤが採用されました。

最初使っていたOリングタイヤでは前に進めませんでした。(機械研の試走台にて)

減速機の代わりにピニオン(ただのφ8真鍮丸棒)がタイヤに押し付けられています。ギザギザのせいで、位置合わせ等のゲインが足らないときに最後の一押しが回らないことがあったようです。

継ぎ目の処理もいい加減だったため結構な抵抗になっていたようです。

モーターは秋月電子で売られているFC-280です。

ボールハンドリング部

アーム台

写真:板金部品

アームの取り付けのための台はこんな形の板金部品です。横から見た写真と見比べてみてください。写真は古いバージョンのもので、この後数回に渡って作り直されています。最新バージョンではサーボの下にファン用電池を入れる部分が追加されています。

アーム

アームを上下させるのはラジコンサーボのS3003です。可動範囲確保のために片方の耳を切りました。サーボの回路は無改造です。

ファン

写真:ファン表 写真:ファン裏

ファンは紙コップの底部を切り取って加工し、中心にタミヤのピニオンギアをホットボンドで固定したものです。筒部分も紙コップを切り取ったものです。 ファンを回すモーターはミニ四駆用のレブチューンモーターです。本当はプラズマダッシュを使いたかったのですが売っていなかったので。

写真:ファン内部、正面から

吸い付けたボールを検知するフォトインタラプタのLEDと検知素子が右と左についています。

ガイドラインセンサ

アナログ式のものを前方に4つ配置しています。ガイドラインの向きを見るのと直交する目印を検出するのとをこのセンサだけで行います。

赤外LEDとフォトトランジスタが組になったGP2L02という部品です。残念ながら生産中止品だそうです。名古屋・大須のタケイムセンで20個200円でした。

丸田氏のGungnirと同じく、点灯時と消灯時の差を使っているため外乱光に強くなっています。

色識別

写真:Treva

最近知能ロボコンで普及しつつあるCMOSイメージセンサTrevaを色識別に用いました。Trevaの使い方についてはAAFぱ研CMOSカメラユニット「Treva」の解析などをご覧ください。非常に丁寧に解説されています。

照明となる光源は搭載せず、会場の照明をそのまま利用します。ある程度明るくないと写らないので、カメラ自身の影ができないようにアームから少し離れた位置に取り付けられています。

TrevaはYUV形式の信号を出力します。YUVは人間の目が色相より輝度に敏感であると言われているのを元に考えられた、明るさと色味(色相+彩度)を分離した色空間です。JPEGにも使われているそうです。Yが明るさ、(U,V)が色味に対応します。周囲の明るさに影響されないと考えてU,Vの情報だけを使いました。カメラが人間の目と同じ分光感度特性を持っている保証はありませんが、カラーカメラとして使われるくらいのものですからボールの色くらいは分類できると信じて採用しました。

UV平面と色の対応図

画像中央にある画素の色をNN法でクラス分けした結果を用います。露光調整などの関係で間違える恐れがあるので、4回の処理結果が同じである場合のみを採用します。

NN法とは、あらかじめ与えたサンプルデータの中から最も近いものの仲間に入れるという方法です。ある程度うまく散らばったサンプルで数を増やしていけば認識精度が上げられるお手軽な方法です。調整も楽です。この方法で十分な精度が得られたので採用しました。ちなみに採用した距離基準はお手軽なユークリッド距離です。

サンプル点の分布は図のようになっていました。冗長な点が多いのは無駄を省くことを考えずひたすらデータを追加していったためです。

サンプル点のグラフ1 サンプル点のグラフ2

1つ目は第15回大会までの古いボールで調整したものです。Uの値だけでほぼ決まっていることが分かります。黄色の範囲が狭くてシビアなように見えます。実際に黄色を緑と誤認することが時々ありました。

2つ目が新しいボールのデータです。新しいボールは色が鮮やかになって黄色がV軸の負の方向に移動してくれているようで、色識別処理にとってシビアだったところがなくなっています。

UとVはどちらがどちらであったかをあまり意識していないので間違っているかもしれません。ご注意ください。

走行制御

ライントレースとエンコーダーに基づく回転&直進の2つの動作に分けられます。

左右のモーターそれぞれについて、符号付duty比を考えます。前に進む方向を正とします。

用語を以下のように定義します。

共通モード
左右のモーターを同じ方向に回す。ロボットを前後へ動かす成分。
差モード
左右のモーターを逆方向に回す。ロボットを回転させる成分。

これらの和を実際の出力(duty)とします。

ロボットの向き及び進行距離とラインセンサーから得たライン位置がフィードバック量として使用されます。

ロボットの向きと進行距離は両輪それぞれのエンコーダーの出力より計算されています。

ライントレース

PD制御を基本とした簡単な制御です。

ガイドラインセンサから得られた値から加重平均を計算してラインの推定位置を求めます。この値を0(中央)に保つようにPD制御を行います。差モードで出力します。

ラインを真ん中に捉える制御をしたまま、共通モードを加えることでラインに沿って走ります。

速度を上げていくとゲイン調整をしてもコースを外れてしまうようになるので、直線とコーナーそれぞれで最適な共通モード出力を決めてあります。

走行距離からコーナーが近いかどうかがわかるので、大体150mm前くらいからコーナー用の速度に減速します。

回転

ロボットの向きを目標値に合わせるようにPID制御します。実際、積分ゲインはほとんど0で使用されました。積分項が付いているのは、最後の一押しが回らなくて次に進めなくなったときの保険の意味合いがあります。

直進

前項のようにロボットの向きを一定に保ったままで共通モードを出力することで直進するはずです。かなりいい加減な制御ですが、デドレコの精度が悪く使用場所が限られるので十分でした。

目的地で停止

ライントレース及び直進では目的地までの距離をもとにPID制御を行い、目的地点で停止します。

回路

コントローラ

写真:H8ボード

秋月のH8/3069Fマイコンボード(LANなし)を使用しています。 裏面の3端子レギュレータの3番ピンを外してメインボードから電源の5Vを直接供給しています。大きくて邪魔だったDCジャックは取り外されています。

LSIの周囲が変色しているのは、LSIを一度壊してしまって交換したためです。

メインボード

写真:メイン基板よりH8ボードを外したところ 説明付き画像

メインボードとはいっても部品点数が少ないのでほぼ配線を分岐させるためだけの基板です。コネクタがこれ以上ないくらい密集しています。コネクタとして基板側には秋月のピンヘッダを、ケーブル側には同じく秋月のピンソケットを使用しています。ピンソケットは線を半田付けしてエポキシ樹脂接着剤で固めて使用しています。形状を非対称にしたり1ピンだけ埋めたりすることで逆挿しを防いでいます。

CPLD(XC9572)

今回、初めてCPLDを使用しました。ロータリーエンコーダーを読むためのアップダウンカウンタに使われています。

8ビットのカウンタをエンコーダーの出力に応じてアップダウンするようにしています。H8にはバスを介して接続され、RAMと同じように読み出せばカウンタの値が取り出せます。

また、モータードライバICへの入力信号を作る組み合わせ回路にも使われています。

回路図:OUT1=NAND(MAG,~DIR), OUT2=NAND(MAG,DIR)

ラインセンサーLED&ファンのモータードライバ

Nch-MOSFETの2SK2231を使用しています。電流容量は十分にあり小さくて使いやすいので小型ロボットにお勧めの部品です。

EEPROM(AT24C1024)

書き換え保証回数の少ないH8内蔵ROMに代わってプログラムを格納します。機械研H8モニタのオートロード機能で電源投入時にロードされます。

モータードライバ基板

写真:モータードライバ基板

μPD16805というICを使用しています。内部がFETでできているので発熱が少なく、PWM周波数も高くできます。12Vのゲート電圧を供給するためにMAX662を使用しています。丸田氏のGungnirのステアリングモーターに使われている回路と同じなので併せてご覧ください。

満充電時に定格電圧をオーバーするのも全く同じです。

車輪のエンコーダーの線をメインボードに繋ぐ役割もしています。

LEDテールランプは当初は装飾のつもりでしたが、モータードライバへの入力信号が表示されるようになっており回路のデバッグに役立っています。

PWMはONとブレーキを繰り返すようにしました。初めはONとオープンだったのですがコーナー前の減速がまったく追いつかなかったのでCPLD内部の組み合わせ回路部を変更してこのようになりました。

ブザー

回路図:ブザー(改訂版)

圧電ブザーです。マーカーを検知した瞬間に鳴らしたり状態によって周波数を変えたりと、デバッグに絶大な威力を発揮します。

NOTゲートの74AC14をバッファにして駆動しています。トランジスタ技術の記事を参考に、元通りの信号と反転した信号とを2つの端子に加えることで10Vの差を作り出し、大きな音が出せるようになっています。

周波数を変えるだけでは飽き足らず、いつの間にかMMLの演奏機能まで作ってしまいました。ボールの色識別結果の出力などに役立っています。

case BALL_GREEN: ... play_mml("l8o5>d<ba4");

今後はbgmlib互換の効果音演奏機能が実装される予定です。半分本気で。

光センサ基板(未使用)

写真:車体前面、センサー

色センサーとして使う予定でした。回路は森永さんのBasicMouseの壁センサーと同じで、LEDで強力なフラッシュを焚いたときの反射光の強さを読み取るものです。赤と緑色のLEDを使うことで色を識別する予定でしたが、緑色の光に対してフォトトランジスタが鈍感であったため実用にならず、上記の通りTrevaが色センサーになりました。PSD距離センサと一緒のケーブルに繋がっている関係上、取り外すのが非常に手間であったためそのまま付いています。

壁との距離を測る本来の使い方をするのもラインの少ない知能ロボコンにはなかなか有効かもしれません。

文・ロボット製作:山口