2017年2月25日、自律ロボットによるバトル競技「ROBO-ONE auto」の第1回大会が開催された。2002年に誕生したROBO-ONEのバトル競技は人間による操縦が基本だったのだが、新しく始まった自律部門のautoでは、操縦は一切禁止。センサーからの情報を頼りに、ロボットが自分自身で判断して戦うことになる。

第1回ROBO-ONE autoの決勝戦

どんなに長く続く大会であっても、初回は一度きりの特別なものだ。この開催のお知らせを聞いたときに、ついうっかり出場したくなり、気がついたら申し込みボタンを押していた筆者。本記事はその顛末となるが、"自律ロボット"と言っても筆者の場合はまったく高度なことはやっていないので、「このくらいなら自分でも作れそう」と思ってもらえれば幸いだ。

なお、イベントの様子については、すでに別記事でお伝えしてあるので、そちらも参考にして欲しい。

センサーは何を使う?

実際に作り始める前に、まずはどんなシステムにするのか考えなければならない。歩行や攻撃といった機能は操縦ロボットと同様で良いが、自律ロボットの場合、試合を成立させるためには、最低限以下の機能を実装しておく必要があるだろう。

  1. 探索機能:対戦相手を見つけて接近する機能
  2. 落下防止機能:リング外への転落を避ける機能
  3. 転倒判定機能:転倒を検出して起き上がる機能

このうち、(3)の転倒判定機能は加速度センサーが1つあれば良いので簡単だ。自律ロボットとしてのキモは、(1)の探索機能でどんなセンサーを採用して、どのように使うかというところである。相手を見つけなければ、そもそも攻撃ができない。相手より早く発見できれば、それだけ有利に試合を進めることもできる。

センサーには、アナログ出力が1本だけのシンプルなものから、通信でコマンドやデータをやり取りするような仕組みのものまで、さまざまな種類がある。当初、光学カメラによる画像認識や、ToFカメラによる3D計測も考えたのだが、今回は開発時間の都合でそれは断念。まずは完成させることを優先させ、シンプルなPSDセンサーを使うことにした。

とりあえず検討のために、いろんなセンサーを買ってみた

今回使ったPSDセンサー。左側が発光部で、右側が受光部だ

筆者は「とにかく形にすること」を重視している。いきなり高すぎる目標を掲げても、完成しなければ意味がない。出場しないことには、改善点も見つからない。特に今回は原稿の締切やら確定申告やらで忙しさのピークだったため、作業時間が4~5日程度しか確保できなそうになく、シンプルにせざるを得なかったという事情もある(言い訳)。

PSDセンサーは、距離センサーの一種である。このセンサーのメリットは、とにかく扱いが簡単なことだ。今回利用したのはシャープの製品であるが、端子は3本しかなく、電源とGNDを繋げてやれば、残りの1本から距離に応じた電圧が出力される。それに、価格が安く、入手性が良いのもメリットと言えるだろう。

システムの構成を決定

今回の開発コンセプトは「短期間(=時間がない)」「低コスト(=お金もない)」である。検討の結果、用意した主な機材は以下のようになった。

  1. ロボットキット「KHR-3HV」(近藤科学)
  2. 加速度センサー「RAS-1」(同)
  3. Bluetoothモジュール「KBT-1」(同)
  4. PSDセンサー「GP2Y0A21YK」「GP2Y0A02YK」(シャープ)
  5. ノートPC

ロボット本体、コンピュータ、センサーなどの構成要素は密接に関係しており、システムの設計は全体を見ながら考える必要があるのだが、ロボットとして手持ちのKHR-3HVを使うことは早々に決定。

改造前の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モジュールのKBT-1。DIPは「スレーブRCB-4」モードに設定する

実装後のバックパック内。中央がKHR-3HVの制御ボードRCB-4で、右がKBT-1

一方、外部制御の場合の懸念としては、通信のトラブルがある。会場の電波状況が当日まで分からないロボコンでは、無線の問題が起きやすい。信頼性を重視するならBluetoothなどは避けた方が無難かもしれないが、今回については、本番の会場でも特に問題は起きなかった。

メタリックになった理由は…

方針が決まれば、あとは作るだけだ。

まずPSDセンサーの搭載場所は、胸部に決めた。上半身を旋回し、周囲をスキャンさせるために、KHR-3HVの首ヨー軸のサーボモーターは、腰ヨー軸に移植してある。最初、顔のところに取り付けることも考えたのだが、これだと相手の背が低い場合、見えなくなる恐れがあった。胸の高さであれば、まあ大丈夫だろう。

以前大量に買って工具箱の中に転がっていたPSDセンサーはGP2Y0A21YKなのだが、この計測範囲は10~80cm。バトルではもっと先も見たかったので、同20~150cmのGP2Y0A02YKを購入して、2つ並べて設置した。さらに長距離用(100~550cm)のGP2Y0A710Kも買ってみたのだが、これはちょっと大きすぎたので搭載は断念した。

PSDセンサーはフロントカウルのベースプレート上に固定した

少しセンサーが外に飛び出たため、転倒時の保護用にゴムも付けた

これに加え、前方斜め下を向くようにして、もう1つGP2Y0A21YKを頭部に搭載している。こちらのPSDセンサーは落下防止用である。前方が床なら出力値はほぼ一定となるが、リングの端にきて床が無くなれば、計測距離がぐっと長くなるので、それで検出できるというわけだ。

頭部にもPSDセンサーを追加。角度はアルミ板で調整できるようにした

この角度だと、このあたりで崖を検出できる(撮影協力:近藤科学ROBOSPOT)

なお、ROBO-ONEでは腕の長さや、足裏のサイズなどがレギュレーションで決められている。この規定により、KHR-3HVはそのままでは出場できないため、レギュレーションに違反しないよう、手首を取り外し、ソールは標準の「S-02」から小型の「S-01」に換装している。これにあわせ、起き上がりモーションなども作り直す必要があった。

基本的には以上の改造だけで良いのだが、最後にもうひと工夫。切り貼りできるポリカーボネート素材のミラーというものが売っていたので、相手の光学系センサーを撹乱するために、機体の外装として貼り付けてみた。姑息な目的だった割に、メタリックな外観は案外カッコ良くなり(※個人の感想です)、とりあえず満足。

通販で購入した「どこでもミラー」(購入価格:993円×2枚)

段々面倒くさくなり、手を抜いたのがバレバレのフロントカウル周り

ミラー貼り後の外観。思ったほど光学迷彩にはならなかったが…

なんとなく背景に馴染んでいるような気がしないでもない

ハードウェアが完成したところで、次はソフトウェアである。次回はこれについて説明していきたい。