フューチャー技術ブログ

第1回社内ロボコン開催記-ライントレーサー編-

はじめに

こんにちは、Strategic AI Group所属兼、電子工作部の勝村です。

電子工作部はフューチャーの社内サークルの一つとして約1年半ほど前に設立されました。電子工作を始めたいという社員の思いから始まったサークルということもあり、未経験者の割合が非常に多いサークルです。
※もちろん大ベテランの方も一部参加されています。

しかし残念なことに個々人では業務やプライベートで電子工作に邁進していたメンバーもいたのですが、サークルとしてのメイン活動はチャットでの情報交換(雑談)となっていました。

そんな状況の中、1年ほど穏やかな時間を過ごしたのですが、あるメンバーの一言をきっかけに活動の流れが変わり…3ヶ月程で…

$\huge{社内ロボコンを開催しました‼}$

今回はロボコン開催の経緯からロボコン当日の様子までご紹介します。

ロボコン開催のキッカケ

いつものようにサークルのメイン活動であったチャットで雑談をしていのですが、
あるメンバーの一言から大きくサークル活動の流れが変わりました。

AWS Deep Racer
走らせて遊びたい。

ミニ四駆AIとかライントレーサーとか社内にコース作ってコンテストしたくないですか?

超やりたい。最終的にはオープンコンテスト化したい。

初開催ですしハードでの勝負よりは機材がシンプルでアルゴリズムでの勝負の割合が大きいものが良いですね。
ライントレースロボットが良いと思います。

ロボコン開催に向けたキックオフってことでMTGをやりましょう。いつが良いですか?

こうして1年間雑談しかしていなかったのが嘘のようにキックオフが設定されコンテスト開催が決定しました。

コンテストルール

コンテストのルールはシンプルです。

白い板に黒いテープを張り付けて作った環状コースで、自動制御された車型の機体を走らせる。
一番早くコースを周回した機体を優勝とする。

たったこれだけです。いわゆる「ライントレース」と呼ばれる競技です。

コンテスト企画の初期段階では、世間一般のロボコンに倣い、機体は各自で作って持ち込み競わせるルールとする予定でした。しかしながら、今回のコンテストでは普段電子回路をはじめとするハードウェアの扱いに慣れていない社員にも簡単に楽しんで貰えるように機体(リファレンスモデル)を提供しました。これにより、ソフトウェアの改良によって競技性をもたせるルールとしました。また、組み込み向けのプログラムは普段の業務でのプログラミングとは少し勝手が違うかなと思い、リファレンスモデルに加え簡単なサンプルコードも提供しました。最低限の動作を保証したサンプルコードを提供することで全くの未経験者であってもロボットの制御の感覚を掴むことが可能となり、コンテストへの参加に繋がりました。

リファレンスモデルの紹介

実際に提供したリファレンスモデルはこちらです。

赤い基板も映えてとってもかっこいいですね!!

少年心をくすぐられますね!!

走行機構

ライントレーサーはラインに沿って走る機体なので、操舵を含む走行機構が必要です。

今回のリファレンスモデルは出来る限りシンプルにしてコストを下げたかったので、左右のタイヤの回転数の差を制御することで操舵を行う方式としました。後輪に左右で独立したギヤボックスとタイヤを配置し、前輪には従動輪とするためのボールキャスターを使用しました。

ライン検知

ラインの検知は、フォトリフレクタという赤外線 LED と赤外線を検知するフォトトランジスタの組み合わせからなるセンサを用いて行います。ライントレーサーのコースは、黒い床(白い床)に白い線(黒い線)を引くことによって作ります。床に向かって赤外線を照射し、反射光をフォトトランジスタで検知しますが、黒い床と白い床では光の反射の度合いが異なるので、この変化をもって線の位置を特定する仕組みです。

仕組みのイメージとしては以下のようなものになります。

※イメージ図ではフォトリフレクタが3つですが、リファレンスモデルは5つ搭載しています。

実際のフォトリフレクタ搭載部分

モータードライブ

フォトリフレクタによって検知した姿勢によって操舵方向を制御することになるのですが、ここで必要になってくるのがモーターの回転数制御です。 今回使用するのはモーターの中でも「ブラシ付き DC モーター」と呼ばれるものです。このモーターの回転数制御は「PWM 制御」と呼ばれる方式が一般的で、これを採用します。ざっくり言うと、モーターに流す電流を高速に ON/OFF させ、ON と OFF の時間の比率(デューティー比)によって回転数を上げたり下げたりする、マイコンと相性の良い方式です。

マイコン

ライントレーサーは、前述したライン検知を入力として受け取り、適切なモータードライブを行うことによって走行します。この入力と出力の間を取り持つのがマイコンになります。 このマイコンは選択肢が非常に多様なのですが、今回は ESP32-WROOM-32(以下 ESP32 と呼びます)というマイコン(モジュール)を採用しました。

ESP32を採用した理由としては下記のようなものです。

  • 申し分無い処理性能と機能
  • フォトリフレクタを直接接続できる
  • WiFi・Bluetoothを搭載しているので、スマートフォンからコントロールできるなど今後の発展の余地がある
  • MicoroPython 、Mongoose OS のESP32向け実装があり、C言語に明るくない人でも Python や JavaScript で開発ができる

また、他の選択肢として、Arduino シリーズや Raspberry Pi も使用可能です。

開発言語・環境

Mongoose OS や MicroPython も便利なのですが、ESP32 の開発を最も簡単に始められるのは Arduino IDE を使用した方法です。Arduino IDE は、拡張機能をインストールすることによって、Arduino シリーズのマイコンボード以外にも様々なもののプログラミングを行うことが可能です。これによって ESP32 では、Arduino 言語(C 言語)で開発を始められます。

しかし Arduino IDE は、日頃 Eclipse のようなリッチな IDE や、Vim や Emacs のようなエディタをカスタマイズして使っているソフトウェアエンジニアの皆さんからすると、お世辞にも使いやすいとは言えないものです。

そこで今回は、PlatformIO IDE というものを標準開発環境としてサポートすることにしました。PlatformIO のインストールは非常に簡単で、Visual Studio Code にプラグインをインストールするだけです。コンパイラなどのツールセットや、書き込み用のプログラムも自動でインストールされますし、マルチ OS 対応です。これで、使いやすい VSCode 上で開発を行うことが可能になります。

このように、PlatformIO + Arduino という組み合わせの開発環境を標準とすることで、「開発環境の構築が簡単なので、社内でのハンズオンがスムーズに行える」、「比較的とっつきやすい Arduino スタイルのプログラミング」という、ロボコン初心者への間口を広げるのに大きなメリットを得ることが出来ました。

コンテスト開催!

さっそくですが本番のコースはこちらです。
モータースポーツが好きな方なら見たことがあるコースかもしれませんね!

このような難関コースでありながらもコースを走破し優秀タイムを叩き出した機体もいましたが、多くの機体はタイムを競うコンテストでありながら、走破すら許されませんでした…。コースを作る時にはしゃぎすぎました。

コンテスト終了後は走破すら許されなかった現実を目の当たりしたメンバーを中心にエンジニアハートに火が付いたようで、走らせる→デバックを延々と繰り返すメンバーに溢れ、コンテス終了後の方が盛り上がりました!!

「これでダメだったら帰る」というセリフを同じ人から5回程聞きました。
次回の開催では予選と決勝を同日に行い、予選終了後に回数制限をつけた中でプログラムの改修とコース試走を許可するような仕組みを導入して、この盛り上がりをコンテストに反映させようと考えています!!

おわりに

今回は社内でロボコンを開催した話をご紹介しました。

運営から携わりタイトなスケジュールでしたが、非常に面白く技術の勉強にもなりました。フューチャーでは「無いものは作る」というワードを良く耳にします。稀かもしれませんが、作るべきものがハードウェアから携わる必要があるものだった時もこの活動を続けていると回路や基板の設計に強くなれる気がしてます!

メンバーも絶賛募集中です。

もしこのブログを読んで「自分の会社でもやりたい!」となられた方は、是非Twitter(@future_techblog)に連絡ください。

共同開催・企業対抗戦やりましょう!!