AI要約
量子アニーリングアルゴリズムを用いてリアルタイムでプラレールの衝突回避に挑戦。センサーとアクチュエータを駆使して、試行錯誤の末についに成功か?シリーズの集大成です。
やること
「プラレールを制御するシリーズ」の集大成。これまで試してきた要素を統合して実際のプラレールをリアルタイムで衝突回避させてみます。
まさにロボットの3大要素である「センサー」「計算」「アクチュエータ」ですね。
構成
「プラレールを制御するシリーズ」はこちらのタグから見られます。

コースは最初にシミュレータを作ったときの通り(→Pythonでプラレールのシミュレータを作る)。深夜に2~3台走らせるとクレームが来ます。

QUBOで衝突回避の定式化をして、TYTANパッケージで疑似アニーリングします(GPU使用)。(→量子アニーリング(QUBO)でプラレールを衝突回避させてみた①)

サーボのポイント切り替えは2ヶ所です。(→サーボとPythonでプラレールのポイント切り替え)

電車に付けたARマーカーを検出して位置と現在速度を更新します。電池消費でだんだん遅くなってくるようです。ちょうど画像の2地点で更新することにします。(→プラレールにARマーカーを付けて動画検出)

結果
山手線(低速)とつくばエクスプレス(高速)を走らせてみました。4分間に渡る死闘をご覧ください。
最後はここで轟沈しました。

感無量ですね (°´ω`°)°。
大きなコースでもやるつもりでいましたが、これ以上はマルチスレッド対応や高度なセンシングが必要になりそうです。
現在はアニーリング精度をかなり落とした状態でフレーム更新時間が約0.3秒。シングルスレッド処理ではこの間にセンサーとアクチュエータ処理が行われないため、速度計測地点を通り過ぎてしまったり、ポイント切り替えが遅れてさよならします。ちょっと修正しましたが。
センサーも問題です。電車の速度がちょくちょく変わるようです(そもそも電源を入れる度に微妙に速度が違うような…)。当初の定式化は「同じレールに複数の電車が乗らない」でした。1車両分のズレも許容できないのに電車の気分に振り回されます。そこでQUBO式を少し修正して「隣り合うレールにもできるだけ複数台乗らない」としました。これはけっこう効果があったのですが、それでも電車がキマってくるとレール1本分くらいの誤差が出てきます(cf. 複線ドリフト 検索しなくて大丈夫です)。
センサーの改善案はこんな感じでしょうかね。。
- 近接センサー、速度センサーを使う
- センサーを増やす
- ARマーカーのままでいいが、高解像度、高フレームレートのカメラを使う
おわりに
やはり実物の制御はかなり大変でしたがいろいろな技術が身につきました。8割くらいの完成度ではありますが、一旦ここまでにしたいと思います。
ハードウェア、ソフトウェア、アルゴリズムはこちらのチームとの共同制作です!リンク先もリアクションをしましょう!
blueqat
Quantum Fabric
