0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オープンループでレースに勝てるか? — テーブルモードを限界まで攻めて「フィードバックは数学的に必要」を実証した話

0
Posted at

私は aira(Autonomous Intelligence Racing Arena) という、仮想ロボットで自律走行アルゴリズムを競うレース競技を運営しています。今回は自分のシミュレータで、いちばん単純な制御方式である**テーブルモード(指令列をCSVに書いて再生するだけのオープンループ制御)**が、どこまで速く走れるのかを検証しました。

「理想のラインに沿うようにCSVを最適化すれば、そこそこ速いタイムが出るだろう」——そう思って始めたのですが、これが劇的に難しかった。そして、その難しさ自体が答えでした。本記事は、オープンループ制御を限界まで攻めて、「なぜフィードバック制御(クローズドループ)が必要なのか」をデータと体感で理解するに至った開発ログです。

本記事は運営者(開発者)としての検証です。掲載しているタイムは挙動を調べるための参考値で、競技リーダーボードへの参加記録ではありません。


1. 前提:aira とテーブルモード

aira の車は、224×224 のカメラ画像と**バッテリ残量(SOC)**だけを入力に、**スロットル(drive_torque)と操舵(steer_angle)**を出力して、50ms 周期で 2 周の最短タイムを競います。速度計も GPS も他車レーダーもありません。「視界」と「残量」だけで走る、という意図的な制約です。

まずは、テーブルモードで2周を走り切ったときの映像を見てください。ロボットが自分で走っているのが分かると思います——これが自動走行です。

今回の主役 テーブルモードは、指令列を書いたCSVを 20fps で上から送るだけ。ここに、後の議論を全部支配する制約が 3 つあります。

  1. 純粋なオープンループ:CSVの行を順に送るだけで、センサを一切読まない。
  2. 走行中は自車位置が取れない:リアルタイムで得られるのは SOC とステップ数のみ。pos_x, pos_z, yaw走行終了後にログへ書き出されるだけ。
  3. 非決定的:localhost のジッタ(1〜5ms)と機械的遅延により、同じCSVでも毎回少しずつズレる

2. 仮説:CSVを「理想ライン」へ最適化できるはず

最初のアイデアはこうでした。数周マニュアルで走ってデータを取り、それを基に理想ラインへCSVを書き換え、走らせ、結果を見てまた直す——強化学習に近い反復改善です。aira には繰り返し実行の足場(headless ループと最適化スクリプト)が既にあるので、機械的には回せます。

発想は正しい。では、攻めた最速ラインをそのまま再生したらどうなるか。やってみた結果が、これです。

article_A_fastest_trial.png

図A:黒が攻めた最速お手本(101659, 21.6s)。青・橙がその再生だが、理想ラインに乗れず壁や落下で失敗している(102330→Fallen@326、102400→Wall@303→Fallen@397)。「理想ラインをなぞればいい」は、こんなに甘くありませんでした。


3. 端的に言うと、あらゆる手が失敗した(限界と課題)

先に「モデルが下手なせい」を否定しておくと、システム同定では操舵モデルがよく当たりましたyaw_rate=(v/L)·tan(δ)、R²=0.81、軸距 L=0.274m)。つまり、この後の失敗はモデル誤差ではなく構造的なものです。なのに——

  • 記録の単純再生:1周目は参照ラインから平均 8.7cm のズレで忠実に再現できる。しかし1周を過ぎるとドリフトが蓄積してコースアウト=落下。完走は確率的で、7本中 完走1・落下6
  • モデルベースFF(flatsteer):理想ラインを平滑化し δ=arctan(L·κ) で操舵を生成。0/3 完走。しかも毎回同じコーナーで決定論的に脱輪する。モデル操舵には、記録走行が持っていたフィードバック補正分が欠けているため。
  • ILC(反復学習制御):試行間の誤差を操舵に焼き戻す。さらに悪化。失敗が壁衝突を含むと、衝突は試行ごとに非再現なので、ILCの「挙動が再現する」前提が崩れる。
  • 攻めたラインの継ぎ足し修復:コーナーはすでに最大舵角(±0.524 rad ≒ 30°)で飽和していた。舵を足す=飽和で不可能、減らす=過敏、減速する=操舵タイミング総崩れ。全方向にマージンが無い。

正直に言うと、思いつくレバーは全部悪化しました。これは調整不足ではなく、オープンループの構造的な限界です。


4. 転換:限界を"実感"して、作戦を変える

ここまで何十本も走らせて、テーブルモードの限界を頭ではなく体で実感しました。オープンループはシンプルで魅力的ですが、現実には——壁に当たる。スタートの角度がほんの少しズレただけでコースアウトする。そして後半になるほど誤差が蓄積していく。走行中に自分を直す手段が無い以上、これは避けられません。

決定的だったのはこの数字です。操舵が飽和したコーナーでは、旋回量はスロットルのタップで決まります。タップ量を足せば平均の旋回角は狙える(目標178°に対し、+0.12でほぼ届く)。ところが、同じ +0.12 のCSV × 3走行で旋回角を測ると——

150° / 174° / 179°(±15°)

同じ指令なのに、これだけばらつく。平均は合わせられても、分散は消せない。 この分散を打ち消すには、走行中に測って即補正する=フィードバックしかない、と走らせながら腹落ちしました。

…正直、早くルールベース制御に時間を割きたい。でも、その前にテーブルモードで一度はちゃんと完走しておきたい(笑)。というわけで作戦変更。速さを諦め、マージンを取って、まず「完走」だけを狙います。


5. 結果:本物の2周完走(ただし約25%)

2つの工夫を合わせました。

  1. マージンのある保守的なお手本(低速・中央寄り、27.6s)を起点にする。攻めたライン(21.6s)ではなく。
  2. CSV末尾に前進スロットルを継ぎ足す:再生はゴールわずか0.12m手前で指令切れ→停止していた。末尾に (torque=1.0, steer=0) を25行足して、最後の数cmを走り切らせる。

結果、延長CSV計8本中 2本が本物の2周完走(28.1s / 28.3s、落下なし)。完走率およそ 25%。冒頭の映像が、この完走の1本です。

article_B_safe_finish.png

図B:黒が保守的なお手本(115116, 27.6s)。青・橙が本物の完走(123933, 124126)。図Aより明らかにラインへ乗って2周を走り切っている。6秒遅い「安心ライン」にして、ようやくオープンループでも完走が出た。ただし安定はしない。

図Aと図Bを並べると、この記事の主張が2枚で言い切れます。A=速いが完走ゼロ、B=遅いが完走できる。 走行中に補正できないオープンループでは、速さと確実性は同時に買えない。フィードバックが無い代償を、どちらかで必ず払うことになります。


6. 結論:フィードバックは「あれば良い」ではなく「必須」

完走率をまとめると、オープンループの限界は明確です。

手法 完走率
手動お手本の再生 0/3
ルールベース記録の再生 1/10
flatsteer(モデルFF) 0/3
ILC 0/3
保守お手本+末尾継ぎ足し 2/8

オープンループは「条件を整えればたまに完走できる」が、安定して速く走ることはできない。安定化=分散の吸収には、走行中に観測して補正するクローズドループ(フィードバック)が必須です。

そして、攻めた理想ラインのデータは無駄になりません。それは次フェーズのクローズドループ制御(ルールベースの前方注視 pure-pursuit や AI)の目標ライン・教師データとして活きる。当初の「理想ライン × 報酬はクローズドループに置くべき」という仮説が、実験的に裏づけられました。

——失敗も、数式も、すべて理由を説明できる形で残す。これが aira が掲げる 「説明できる知性(Explainable Intelligence)」 が指すものです。次回はいよいよ、ルールベース制御で 46 秒の壁に挑みます。


おまけ:aira について

aira は、仮想ロボットで自律走行アルゴリズムを競う、誰でも参加できる物理AIレース競技です(Race Your Algorithm)。PC1台・参加無料。現在 Race_260601(タイムアタック)Race_260615 を開催中です。

🔗 https://aira-race.com

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?