はじめに
ICRA (IEEE International Conference on Robotics and Automation) 2026 併催の RoboRacer Sim Racing League(第5回)に「RUN-RUN-ChuraTaro」として参戦し、決勝で 2位 を獲得することができました。
日本ではそこまで認知度の高くないコンペかと思うので、後進向けに概要とハマりどころをまとめます。
想定読者
- ROSをつかった自動運転コンペに興味がある人
RoboRacerとは
RoboRacer(旧 F1TENTH)は、1/10スケールの自動運転レースカーを中心とした、研究・教育のための国際的なコミュニティ/プラットフォームです。1/10のRCカーを自律走行車に仕立てて研究・教育・競技に使うという発想を軸に、世界中の大学・個人が参加しています。
このコミュニティが運営する大会のひとつが、ICRAやIROSなどのロボティクス系トップ会議に併設される形で定期的に開催される自律走行レース競技です。目的はシンプルで、「クラッシュせず、ラップタイムを最小化する」。
大会には2つの形態があります。
- In-person(実車):自分で1/10カーを組み立てて持ち込み、実車で競う。予選のタイムトライアルでシードを決め、本戦は他車と直接競るノックアウト式のヘッドトゥヘッドレース
- Sim Racing League(バーチャル):シミュレータ上で競う。物理マシン不要で、世界中どこからでもリモート参加できる。他車とコース上で直接バトルするのではなく、各チームが個別に走るタイムアタック形式
今回参加したのは後者のSim Racing Leagueです。
使用環境
Sim Racing Leagueは AutoDRIVE Ecosystem を使って、RoboRacerのデジタルツインを仮想トラック上で走らせます。各チームには以下が配られます。
- RoboRacer車両のデジタルツイン(標準化済み)
- Portoサーキットのデジタルツイン(練習用)
- AutoDRIVE Devkit(ROS 2ベース。これで知覚・計画・制御を書く)
車両・センサ・シミュレータ・Devkitがすべて標準化されているので、勝負どころは未知トラックに対してどれだけ頑健なレーシングアルゴリズムを書けるかに絞られます。提出は自分の走行ソフトをDockerコンテナ化して渡す形式です。
セットアップ〜提出はTechnical Guideに沿えば一通り実施できました。困ったときはSlackでホストに質問でき、サポートは手厚い印象です。ただ、ROS 2・Docker・自動運転スタックにある程度慣れていないと、最初のセットアップだけでも結構しんどいと思います。
競技形式
2フェーズ制です。
Phase 1:予選(Qualification)
事前配布される練習トラックで、クラッシュせず複数ラップ(10周)を完走できることを示す。
Phase 2:決勝(Time-Attack / Competition)
予選通過後、未公開の本番トラックが直前に公開され、そのタイムで競う。
評価は単純なレースタイムだけでなく、衝突回数によるペナルティを加味した Adjusted Race Time で行われます。つまり「速いけどぶつかる」より「無事故で安定して速い」が効くルールです。
タイムライン
| 日付 | イベント |
|---|---|
| 2/23 | 登録開始 |
| 4/30 | 登録締切 |
| 5/9 | 予選提出 |
| 5/11 | 予選結果発表 |
| 5/13 | 本番トラック公開 |
| 5/16 | 決勝提出 |
| 5/18 | 決勝結果発表 |
本番トラックが公開されてから決勝提出までわずか3日。この短期間で未知コースに合わせ込むのが勝負でした。
結果
参加登録は73チーム、決勝(Phase 2)を完走したのは17チーム。最終順位の上位は以下のとおりです。
| 順位 | チーム | Adjusted Time | Best Lap | 衝突 |
|---|---|---|---|---|
| 🥇 1位 | MonacoF1 | 110.27s | 11.00s | 0 |
| 🥈 2位 | RUN-RUN-ChuraTaro(弊チーム) | 122.76s | 12.10s | 0 |
| 🥉 3位 | bracavisionai | 126.71s | 12.53s | 0 |
予選では7位(86.15s / Best Lap 8.50s)でしたが、決勝の未知トラックで順位を上げて2位に入りました。全レースを通して衝突ゼロで走り切れたのは、今回いちばん効いた部分だと思っています。
予選の様子
決勝の様子
上位の傾向
決勝結果を眺めると、上位陣はいずれも衝突0で安定してラップを刻むチームでした。Best Lap単体が速くても、1回でも衝突するとAdjusted Timeに10秒加算され、一気に順位を落とす構造です(予選でも、Best Lapが速いのに衝突1回で順位を下げているチームがありました)。「とにかく攻める」より「速度と安定のバランスをどこで取るか」がこの大会のキモだと感じています。
アプローチは、最近の機械学習を使ったデータドリブンな手法よりも、古典的なロボティクス系のアプローチが主流な印象です。
たとえば2024年優勝者の解説(下の動画)はMap-basedで、事前にSLAM等で地図を作り、最適化したRacelineを用意、EKF→PFで自己位置推定して経路追従する……という王道の構成です。
常連の強豪 VAUL(Laval大学)もコードを公開しており、見ると raceline最適化+パーティクルフィルタ自己位置推定+古典制御という、やはりMap-based寄りのスタックです。
今年の実車部門の2位チーム(TU Wien)も、同様のアプローチのようでした。
RoboRacerプラットフォーム全体ではRLを含むLearning-Based手法の研究も盛んですが、このSim Racing Leagueで公開されている上位解法に限ると、古典的スタックが目立つという印象でした。
サーベイもあるのでどうぞ。
日本だと名古屋大学 鈴木研究室チームが実機コンペで好成績を収めていました。以下で手法が解説されています。
強化学習に関する論文も出されていますのでご参考まで。
ちなみに今回の私は、こうした地図ベースのスタックを組み切る時間が取れず、Reactive Controllerだけで勝負しました(それでも2位まで来られたのは、衝突ゼロのおかげが大きいです)。この解法の詳細は、また別の記事で書こうと思います。
ハマりどころ
「採点環境で自分のコードがちゃんと動くか」の足回りで時間を取られました。今後Sim Racing Leagueに出る人向けに、ハマった点を残しておきます。
1. 競技で使用不可能なトピック
センサ系のデータはROS 2トピックとして配信されますが、走行(推論)時に使ってはいけないRestrictedトピックがあります。具体的には、位置の真値である IPS、odom、/tf、それにラップタイムや衝突カウントといった採点系トピックです。
これらは「デバッグやモデル学習には使ってOK、でも本番の自律走行中(inference時)はNG」という扱い。つまり IPSや/tfで自己位置をズルして取るのは禁止で、LiDAR・カメラ・IMU・エンコーダといった車載センサだけで自己位置推定と経路追従を組む必要があります。最初にこの制約を把握しておかないと、IPS前提で組んでしまって後で全部書き直し、気付かず提出して最悪失格という事故が起き得ます。
2. 描画ありシミュレータのトピック出力
開発初期はシミュレータを描画ありモードで回していたのですが、自分のPCが非力で、描画に処理を取られてトピック出力が安定しませんでした。これだと開発環境と採点環境で挙動が変わってしまう。
そこで Headless(描画なし)で動かすようにしました。Devkitには bringup_headless.launch.py が用意されているので、これを使えばHeadless実行は公式想定の範囲です。ただしカメラ画像が使えなくなりますので注意。
ちなみに採点は運営側のワークステーション(i9-14900K / RTX 4090 / 64GB、しかもsim・devkit・録画・ロガーを同時実行)で行われると明記されています。つまり採点環境は高性能だが自分の環境とは違う。ここの差分でタイムや挙動がブレないよう、Headless+固定周期で「自分のマシン性能に依存しない」状態を作っておくのが効きました。
3. コンテナ起動の作法
提出はDockerコンテナ化なのですが、起動の作法にクセがあります。公式の要件として、
- コンテナ起動時に必要なノード(運営提供の
autodrive_devkitAPI+自分のレーシングスタック)がすべて立ち上がること - ただし
~/.bashrcなどで自動実行させてはいけない
という条件があります。運営側がコンテナ内で別のbashセッションを開いてデータ記録や検査を行うため、bashセッションを開くたびに自分のコードが走り出すと困る、という事情です。起動コマンド類は entrypoint(autodrive_devkit.sh)の中に書く必要があります。
4. 提出のクセ
提出はDocker Hubのリポジトリ経由で、privateリポジトリなら運営アカウント(autodriveecosystem)をcollaboratorに追加する必要があったりと、提出フロー自体に細かい作法があります。Docker Hubのoverviewに「どのタグをどう動かすか」の手順を書いておくことも求められます。コードが完成してから提出だけで詰まらないよう、早めに一度通しで提出フローを試しておくのがおすすめです。
おわりに
Sim Racing Leagueは物理マシンも旅費もいらず、Dockerとやる気があれば世界中どこからでも参戦できます。登録は無料ですので、興味のある方は参加を検討してもよいのではないでしょうか。
私個人としては次は実車の方にも出てみたいなあと思っていますが、ややハードルが高いですね…