第14回知能ロボットコンテストのテクニカルコースに出場したロボットです。 機能としてはあまり特徴のないロボットでしたが、間に合わせで考えた対象物の運び方が高く評価されて 決勝進出まで果たしてしまいました。 制御系を中心にロボット全体についての解説をしています。
ロボット全体像です。ステッピングモーターと車輪による駆動部、電池を搭載する本体、回路を載せるための左右の翼からなるとてもシンプルな構成です。 当初はこの上にくちばし型の4自由度アームが付く予定だったのですが計画変更により削減されました。
センサーやモーターにつながる信号線をH8とつなぐための基板です。PSコネクタでH8と繋がっています。各部へのコネクタが並んでいますが途中の仕様変更のため未使用のコネクタが多数あります。その他、フォトカプラ駆動に使っている74AC245、データセレクタの74HC191、3端子レギュレーターなどが載っています。
アーム用に4つのDCモーターを使うことを想定して8回路のフォトカプラ、4個のTA8429Hが載るようにソケットが付いていますが結局使われたのはステッピングモーターの24V電源を分岐させるコネクタだけでした。
アンペア単位の電流を丸ピンICソケットに通して良いのかどうかは疑うべきかもしれません。
ガイドラインを読み取る光センサは駆動輪の車軸上に2個と車体後方に4個あります。 赤色LEDとフォトトランジスタTPS603Aでフォトリフレクタを構成しています。フォトトランジスタと半固定抵抗を直列に繋いで電圧をかけ、抵抗の両端の電圧を74HC14(シュミットトリガ入力インバータ)を用いて2値化して読みとっています。抵抗値で感度を調整するようになっています。 外乱光を防ぎ、また検知範囲を絞るために厚紙(菓子の箱)で覆いを作って被せています。
最初は2値化せずにデータセレクタに繋いでいたのですが動かしているうちにICが御亡くなりになりました。
ライントレース用センサーは本体後方に付いていてます。写真ではセンサーが5個並んでいるのが見えますが、74HC14のゲート数の関係もあって4個に減らされました。
本来はこれを使って後方に進みながらライントレース走行する予定でしたが、配線不良で動かなかったので結局使いませんでした。それでも本番でロボットに取りつけられていたのは、この基板に74HC14と74HC191(データセレクタ)が載っていて、これがないとどのセンサーも読めない回路仕様になっていたためです。
車体前方にPSD距離センサ(GP2D120)を1個装備しています。倒れている箱が見えるようにするために低めに取り付けられています。位置情報を用いて壁と対象物を区別する予定でしたが、うまくいっていなかったようです。
また、CMOSカメラのTrevaが真ん中に搭載されていますが大会では使用されませんでした。 データを取りこんでパソコン上で表示し、対象物を探すところまでできていたのですが いざマイコンに移植するとパソコン上と同じソースリストを使っているのに動かず、 原因がわからないまま本番になってしまいました。
後になって単に配列のサイズがRAM容量を越えていただけだということがわかりました。
色や明るさで画素を分類した上である程度まとまっている部分を物体とする、簡単な処理でした。プログラムが拙いためかなりの時間が掛かっていました。
TA8435Hに必要な回路+αを組み込んだだけのドライバ回路ユニットです。市販品を参考に、フォトカプラ入力で入力抵抗内蔵、DIPスイッチで励磁モード選択という仕様にしました。その他、緑色の電源LED、M0信号(励磁状態1周期毎に出る信号)で光る赤色LED、電流パワーアップスイッチ(^^;などが付けられています。赤色LEDは走行時に点滅します。
パワーアップスイッチ:ICの定格を越える2.4Aの設定になる禁断のスイッチ。
写真でアルミ板に白いものが見えますが、これは今回導入した「最新テクノロジー」です!というのは冗談ですが、そう言いたくなるくらいに組み立てを簡単にしてくれました。機械研の他のチームは大抵、基板をネジ止めしていたのですがこのロボットの全ての回路基板はマジックテープで取り付けられているのです。
なお、TA8435Hは定電流駆動するICのはずですがモーターの抵抗値が大きすぎたために事実上定電圧駆動しかしていませんでした。おかげでヒートシンクも不要でした。
これによるトルク不足が一番の敗因です。ついでに禁断のスイッチも無意味でした。
機械研仕様のH8ボードです。本体後部のキャスターの上にガムテープで辛うじて張り付いています。
冒頭で述べた通り、当初の計画ではくちばしに見立てたアームがつくはずでした。しかし計画変更によりこの唯一の武器がなくなってしまったので新たな方法を考案しました。
本番が近づいてきてまだアームが出来ず、自由度を減らすか単に車体の前方で押して運ぼうかと考えていた頃のことです。回路基板を載せるために「翼」の部分をアルミ板を曲げて取り付けてみたところ、ちょうど翼の下に缶が収まる高さでした。そこで、ここに対象物を抱え込んで運ぶことにしました。引っかかる部分である「ポケット」はコピー用紙を折ったものをガムテープで取り付けて作りました。
ところで、対象物を引きずるという方法には様々な問題があります。
本番でも練習通り缶がガイドラインに引っかかってコースを外れてしまいました。
ステッピングモータードライバに送るパルス信号はマイコンのタイマー機能を使わずにfor文による時間稼ぎを用いてメインルーチン内で生成しました。それでも非常にスムーズに動いていました。
実際のところ、振動が少なかったのはモーターのトルクが極端に小さかったためです。
基本的にオープンループで走行しています。マーカー部分で原点合わせをしています。
ステッピングモーターで走行するロボットには前進・旋回などの一連の行動を完全にプログラムで決定しておく方式が使えることが多いのですが、このロボットは対象物エリアで対象物を一個づつ取りこむという予め決定できない行動があります。この場合対象物を取ってから戻ってくるのは現在位置を把握しておけば簡単です。そのため、ドライバへ送ったパルス信号の数から現在位置及び方向を計算しています。 プログラム中で競技台上の座標を指定しておくと、その場旋回&前進してその場所へ向かってくれます。
開発中に座標を1箇所指定し忘れて、競技台中央の壁の向こう側へ行こうとして衝突するという芸当もやってしまいました。
座標情報はしばらく走っているとだんだんとずれてきます。そこでマーカー部分で強制的に座標情報をリセットして位置合わせをしようとしました。しかし車軸上の2個のセンサーだけで回転方向の位置合わせをしたためかなり不正確になってしまいました。ライントレース用センサーが動いていればガイドラインに沿って走ることで回転方向がもう少し正確に合わせられてもっと良い動きができていたと思います。
PSD距離センサーの出力信号電圧をA/D変換器で読み取り、対象物との距離を測ります。センサーを壁に向け、5ミリずつ後退しながら値を出力するプログラムでテーブルを作成しました。
パターンエリアでは対象物の大体の位置がわかっているので 予め決められた場所の近くまで移動します。 そこから何かを見つけるまで、 最初の向きを基準として-5度、+5度、-10度、+10度、...の方向を順に探します。
何かを見つけたら次にその物体の左右の端を探します。2分探索のような感じで探します。
左右の端が判ったらその中心を物体の位置と見なして近づきます。 ある程度の距離まで近づいたら取りこみ動作に移ります。
本当はもっと簡単にできます。 PSD距離センサーの応答が遅いのを心配しすぎて無駄の多い方法を取っていました。
予め決められた動作で取りこみます。 対象物を確実に取りこめるようにその場回転と直進をほどほどに組み合わせてあります。
ポケットに入った対象物はロボットが前に進んでいる限り一緒に引きずられてついてきます。 ポケットは右にあるので右回転はできません。右90度回転の代わりに左270度回転をしています。
ボールの場合はロボットがブレーキをかけると慣性で前へ転がっていってしまいます。 これを考慮し、ボールを運ぶときには速度を落としてボールをこぼさないように慎重に動いています。 しかし実際のところは缶や箱が床の継ぎ目やガイドラインに引っかかってしまうため、 こちらの方も速度を落としていました。
ゴールの前に行き、ぎりぎり車輪が落ちないところで左90度回転します。 これによりポケットはゴール上空に来るので対象物は見事ゴールに落ちます。 いろいろ試した中で最も単純な方法でした。
小さくて置いてあっても邪魔にならないということでまだ解体はされていません。ロボコン用ロボットの基本的な機能が備わっているので新入生のプログラム学習などに活用される予定です。
ラインセンサーを修理してライントレース走行させてみました。スムーズに走ってくれましたがやはりトルクが足りず、スピードはあまり出せないようでした。
NFの「ロボット展」で展示・実演するはずだったのですが準備と運営がうまくいかず、ごく限られた時間に数回実演した他はひっそりと台の上に置かれていました。
実演を見ることができた人は運が良いといえます。
ロボコンマガジンNo.23の「第14回知能ロボットコンテスト レポート」に載せていただき、「偏屈」ロボット
の一つとしてお褒めの言葉を頂きました。
私の写真だけピントが合っていないようで黒いシャツがまるで学生服のように映っています。
製作中、モータが動かない不具合に幾度と無く見舞われました。
正常に動いていたのに時々モータドライバへの信号が片方だけ出なくなるのです。 ケーブルを動かしたり基板を叩いたりすると動き出したので、配線不良だと思って何度かケーブルを作りなおしました。しかしそれでも直らずそのまま本番を迎えてしまいました。
大会本番の決勝でリトライのときに基板を叩いたりしていたのはこのためです。
結局、原因は基板側コネクタの半田付け不良でした。
モーターやその他部品の選定はしっかりしましょう。
無理のない計画を立て、行き詰まったときは思いきって計画変更しましょう(^^;
文・ロボット製作:山口