お久しぶりです、2025年度新卒FAEの小津です!
第1回では電源設計、第2回では車体組立をお届けしましたが、いよいよ最終話となる今回は “走行編” です。
前回、なんとか完成したマシン…果たしてこのマシンはどのように走るのか?必見です!
コンセプト ~目指すは最速ゴール~
さて、今回の迷路脱出マシンの開発。タイムアタックなので、ただゴールするだけでなく、1秒でも早くゴールまで到達する必要があります。
作戦としては、マシンを強化してスピードを上げる方法や、迷路攻略のアルゴリズムを工夫する方法などが考えられます。
そこで選んだ作戦は・・・
“1回目は探索、2回目は攻略”
です!
今回の製作実習では同じコースに2度チャレンジ可能です。
そこで1回目の走行では、行き止まりルート含めて地道にゴールまで進みルートを記録。2回目は記録をもとに、行き止まりを省くことで最短ルートを導き出し、最速でゴールを目指す、というコンセプトです!
時間とスキル不足
コンセプトは良くても、問題は実装力と時間。
車体完成から本番まで残り、約2週間しかありません。
ここで救世主となったのが――
生成AIです。
マクニカでもAI活用が推奨されており、部品選定にも既にAIを使っていましたが、今回は、組み込みのプログラムコードの生成という未知の領域に挑戦します。
果たしてどこまでできるのか?ここからが本番です。
AIを使って最速を
まずはやりたいことを整理します。単にモーターを前転させてゴールを目指すだけではありません。
迷路の攻略法や、センサーのデータ取得、その他走行補助機能まで、要素はたくさんあります。
2回目の走行で行き止まりを避けて最短ルートと説明しましたが、まずは1回でもゴールに到達しなくては意味がありません。
そこで1回目の走行には“左手法”を採用。
こちらはマイクロマウスでは一般的な手法で、常に左壁を伝いながら進むことで、最終的にゴールマスまで辿りつきます。この選択により、前方左右の壁の有無による回転の条件分岐も定まります(図2)。
基本動作はシンプルです。
「1マス (18cm) 進む→壁確認→回転→1マス進む」
この繰り返しの中で、以下の3つの補助機能が呼び出します。
・中央維持制御
赤外線測距センサーで左右の壁との距離を計測し、車体が中央のときの両壁距離 4cmより「4cm-実距離」を偏差として算出。
PID制御で常にレーン中央を走行(図3)。
・1マス間移動
移動したコースを記録するには、正確な1マス分 (18cm) の移動が必要。
モーターのエンコーダーで、タイヤの回転数に応じたパルス数を計測し、正確に18cm進む。
・正確な90度回転
3軸ジャイロ&3軸加速度センサーでZ軸(垂直方向)周りの回転角度を算出。
このほかにもさらに、センサーデータの校正などさまざまなステップがあります。
実装プロセス
最初は欲張って、すべての仕様を箇条書きにしたプロンプトを投げましたが…
案の定スタートボタンを押してもピクリともせず。
気を取り直して「人力×AI」で地道に機能を分割し、動作確認をしながら統合する戦略に切り替えます。
各機能実装には必ず以下を含めます。
①ピンアサイン
Arduinoの20本を超えるピンを使用。GPIOやI2C接続のピンアサインなどを渡す
②センサー情報
各センサーの校正値情報や、設置位置
③モーターの回転数
車体重量、トルクなどを考慮した回転数
ここから各機能の実装が始まります。
ここからがAIの本領発揮です。
まず試しに、こんなざっくりしたプロンプトを投げてみました。
「中央維持制御をPID制御で実装。右壁が4cm未満なら制御開始」
驚いたことに、この程度の大雑把な指示でも、AIはちゃんと動作するコードを生成してくれます。
先ほどまで壁に車体をこすり付けながら走っていたマシンが、きれいに道の中央を走り始めたときは感動しました。
ただし、ここで重要なポイントがあります。AIが生成したコードをそのまま書き込んでも、100%完璧な走りにはなりません。
中央維持制御で言えば、PID制御におけるP・I・D各定数の調整や、1マス移動時のブレーキ開始距離の設定など、実際に走らせながら細かなパラメーターの微調整が必要です。
最初にAIが作ったコードでは、パラメーターが条件文に数値として埋め込まれており、調整のたびにコードを遡って修正する必要がありました。
これでは効率が悪いので、すべてのパラメーターを変数化し、コードの上部にまとめるよう指示しました。
こうすることで、デバッグ作業が格段に楽になり、少しずつ数値を変えながら最適化できるようになりました。
この方法で各機能を追加して、安定してゴールに到達するマシンが完成しました。
最短ルートで走り抜けろ!
ここからが本当の勝負です。
2回目の走行では、最短ルートでゴールに到達する仕組みを実装します。方法はシンプルですが、考え方が重要です。
まず、1回目の走行でマップを記録します。
スタート地点を (0,0) とし、進むごとに座標を記録します。このとき、行き止まりに入ると、同じ座標が再び現れます。
つまり、重複座標を検出すれば、行き止まりルートを除外できるという仕組みです。
具体的には、比較元を固定して比較先を1つずつズラしながら座標を比較。重複部分が存在した際には削除。比較元も1つずつズラしながら、同様に比較をする。
この処理を行うことで、探索ルートから無駄な分岐を取り除いた最短ルートが完成します(図4)。
そして2回目の走行では、この最短ルートマップをなぞるだけ。
結果、1回目より格段に短い時間でゴールに到達できます!
図4:行き止まり除去の仕組み
例:1回目の処理はAを固定してB,C…と比較
2回目の処理はBを固定してC,D…と比較
実走行
いよいよ本番。
これまでの試行錯誤とAIとの二人三脚で仕上げたマシンを、迷路に投入します。
1回目の走行では、左手法で地道に探索。多少ぎこちない動きもありましたが、無事ゴールに到達し、ルートを記録できました。
ここで得たデータをもとに、最短ルートマップを生成。
そして迎えた2回目の走行――
最短ルートをなぞることで、スムーズにゴールへ。
結果は… なんとか1位!
正直、他の参加者のマシンは部品選定や車体設計が良く、スピードも速くて本当に接戦でした。
最後まで「どっちが勝つかわからない」緊張感の中、AIを活用したアルゴリズムが1歩リードしてくれたのは大きなポイントでした。
「AIを使って楽をするのではなく、より高度なことに挑戦するために使う」
このマインドで取り組むことが大事だと気づきました。
まとめ
いかがだったでしょうか?
3部作にわたる奮闘記!!
初めての電源設計から、モジャモジャマシンの完成、AIを活用したソフトウェア開発まで赤裸々に紹介させていただきました。
すべてが初挑戦の中で、仕様の検討から部品選定、電源回路の設計・実装、筐体の組み立て、ソフトウェア作成まで取り組む中で、電気の知識だけでなく、仕様決定やスケジューリングの重要性を学びました。
そして先輩方が持つ知識や技術力の高さ、目指すべきレベルを実感しました。
これからも学びを積み重ね、お客様に信頼していただけるFAEを目指していきたいと思います!
最後までお付き合いいただき、ありがとうございました!
動け、走れ、俺のマシン記事一覧
・走行編