2017年2月25日、自律ロボットによるバトル競技「ROBO-ONE auto」の第1回大会が開催された。2002年に誕生したROBO-ONEのバトル競技は人間による操縦が基本だったのだが、新しく始まった自律部門のautoでは、操縦は一切禁止。センサーからの情報を頼りに、ロボットが自分自身で判断して戦うことになる。
どんなに長く続く大会であっても、初回は一度きりの特別なものだ。この開催のお知らせを聞いたときに、ついうっかり出場したくなり、気がついたら申し込みボタンを押していた筆者。本記事はその顛末となるが、"自律ロボット"と言っても筆者の場合はまったく高度なことはやっていないので、「このくらいなら自分でも作れそう」と思ってもらえれば幸いだ。
なお、イベントの様子については、すでに別記事でお伝えしてあるので、そちらも参考にして欲しい。
センサーは何を使う?
実際に作り始める前に、まずはどんなシステムにするのか考えなければならない。歩行や攻撃といった機能は操縦ロボットと同様で良いが、自律ロボットの場合、試合を成立させるためには、最低限以下の機能を実装しておく必要があるだろう。
- 探索機能:対戦相手を見つけて接近する機能
- 落下防止機能:リング外への転落を避ける機能
- 転倒判定機能:転倒を検出して起き上がる機能
このうち、(3)の転倒判定機能は加速度センサーが1つあれば良いので簡単だ。自律ロボットとしてのキモは、(1)の探索機能でどんなセンサーを採用して、どのように使うかというところである。相手を見つけなければ、そもそも攻撃ができない。相手より早く発見できれば、それだけ有利に試合を進めることもできる。
センサーには、アナログ出力が1本だけのシンプルなものから、通信でコマンドやデータをやり取りするような仕組みのものまで、さまざまな種類がある。当初、光学カメラによる画像認識や、ToFカメラによる3D計測も考えたのだが、今回は開発時間の都合でそれは断念。まずは完成させることを優先させ、シンプルなPSDセンサーを使うことにした。
筆者は「とにかく形にすること」を重視している。いきなり高すぎる目標を掲げても、完成しなければ意味がない。出場しないことには、改善点も見つからない。特に今回は原稿の締切やら確定申告やらで忙しさのピークだったため、作業時間が4~5日程度しか確保できなそうになく、シンプルにせざるを得なかったという事情もある(言い訳)。
PSDセンサーは、距離センサーの一種である。このセンサーのメリットは、とにかく扱いが簡単なことだ。今回利用したのはシャープの製品であるが、端子は3本しかなく、電源とGNDを繋げてやれば、残りの1本から距離に応じた電圧が出力される。それに、価格が安く、入手性が良いのもメリットと言えるだろう。
システムの構成を決定
今回の開発コンセプトは「短期間(=時間がない)」「低コスト(=お金もない)」である。検討の結果、用意した主な機材は以下のようになった。
- ロボットキット「KHR-3HV」(近藤科学)
- 加速度センサー「RAS-1」(同)
- Bluetoothモジュール「KBT-1」(同)
- PSDセンサー「GP2Y0A21YK」「GP2Y0A02YK」(シャープ)
- ノートPC
ロボット本体、コンピュータ、センサーなどの構成要素は密接に関係しており、システムの設計は全体を見ながら考える必要があるのだが、ロボットとして手持ちのKHR-3HVを使うことは早々に決定。
5kgまで認められるROBO-ONE autoにおいて、重量1.5kgのKHR-3HVで出たところで勝ち目は無い。重いロボットでは、それだけ強力なサーボモーターを搭載できるからだ。それは分かっているものの、大型機を一から作るだけの時間も、予算的な余裕も、スキルも足りない。KHR-3HVならすでにあるので、改造するだけで済む。ここは妥協するしかない。
設計上のもう1つポイントと言えるのは、自律ロボットの"頭脳"と言えるコンピュータをどうするかということ。ArduinoやRaspberry Piのようなマイコンボードや、Windowsが動くスティックPCなどを搭載することが考えられるが、ROBO-ONE autoでは外部のコンピュータで制御するリモートブレインは認められているため、これでいくことにした。
外部制御にすれば、コンピュータの格納スペースや消費電力による制約を気にしなくても良い(極論を言えば、ハイエンドのデスクトップPCを会場に持ち込んでもOKだ)。個人的に、Windows上で開発・動作する方が楽だし、ロケットを自動撮影するシステムで似たようなことをやっていて、慣れているということもある。
ROBO-ONE autoでは通信は無線しか使えないため、今回追加で購入したのがKBT-1である。KBT-1を使えば、Bluetoothにより、PCからの制御が可能になる。メーカー純正品なので、これならKHR-3HVへの搭載も簡単だ。
一方、外部制御の場合の懸念としては、通信のトラブルがある。会場の電波状況が当日まで分からないロボコンでは、無線の問題が起きやすい。信頼性を重視するならBluetoothなどは避けた方が無難かもしれないが、今回については、本番の会場でも特に問題は起きなかった。
メタリックになった理由は…
方針が決まれば、あとは作るだけだ。
まずPSDセンサーの搭載場所は、胸部に決めた。上半身を旋回し、周囲をスキャンさせるために、KHR-3HVの首ヨー軸のサーボモーターは、腰ヨー軸に移植してある。最初、顔のところに取り付けることも考えたのだが、これだと相手の背が低い場合、見えなくなる恐れがあった。胸の高さであれば、まあ大丈夫だろう。
以前大量に買って工具箱の中に転がっていたPSDセンサーはGP2Y0A21YKなのだが、この計測範囲は10~80cm。バトルではもっと先も見たかったので、同20~150cmのGP2Y0A02YKを購入して、2つ並べて設置した。さらに長距離用(100~550cm)のGP2Y0A710Kも買ってみたのだが、これはちょっと大きすぎたので搭載は断念した。
これに加え、前方斜め下を向くようにして、もう1つGP2Y0A21YKを頭部に搭載している。こちらのPSDセンサーは落下防止用である。前方が床なら出力値はほぼ一定となるが、リングの端にきて床が無くなれば、計測距離がぐっと長くなるので、それで検出できるというわけだ。
なお、ROBO-ONEでは腕の長さや、足裏のサイズなどがレギュレーションで決められている。この規定により、KHR-3HVはそのままでは出場できないため、レギュレーションに違反しないよう、手首を取り外し、ソールは標準の「S-02」から小型の「S-01」に換装している。これにあわせ、起き上がりモーションなども作り直す必要があった。
基本的には以上の改造だけで良いのだが、最後にもうひと工夫。切り貼りできるポリカーボネート素材のミラーというものが売っていたので、相手の光学系センサーを撹乱するために、機体の外装として貼り付けてみた。姑息な目的だった割に、メタリックな外観は案外カッコ良くなり(※個人の感想です)、とりあえず満足。
ハードウェアが完成したところで、次はソフトウェアである。次回はこれについて説明していきたい。