4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows PCだけで自動運転AIチャレンジ2026環境を動かす手順(WSL2 + Docker + WSLg)

4
Last updated at Posted at 2026-07-08

この記事は、Ubuntu専用PCを持っていない人でも、Windows 11 PC上で自動運転AIチャレンジ2026の開発環境を動かすための手順メモです。

情報は適宜更新するかもしれません。

前提は「ネイティブWindowsにログインして、Windows上のUbuntu(WSL2)で作業する」です。

これは非公式の有志記事です。大会運営・公式ドキュメントによる保証手順ではありません。大会ルール、リポジトリ、提出方法、評価方法は必ず公式ドキュメントと公式GitHubを確認してください。

NVIDIAなし環境については別記事でIntel Arc 140T + Dozenの完走例を確認しました。

公式マニュアル

この記事は、公式手順のうち「Ubuntu 22.04 PCで実行する」前提を、Windows 11 + WSL2 + WSLg向けに読み替えた補足です。

この記事で使うWindows/WSL向けの追加ファイルは、公式公開リポジトリをベースにしたforkブランチにまとめてみました。

このブランチは、Windows/WSLで動かすための補助ファイルと説明を置くための非公式な作業ブランチです。

前提

想定する環境:

  • Windows 11
  • WSL2が使えること
  • Ubuntu 22.04
  • NVIDIA GPU搭載PC ※
  • WSL対応のNVIDIA Driver
  • 空きディスク容量 80GB以上、できれば100GB以上
  • 安定したネットワーク

※ NVIDIA GPU以外はまだ未検証です。

検証状況

2026-07-07時点で、Windows 11 + WSL2 Ubuntu 22.04 + Docker Engine + WSLg の構成で、make eval の1回完走まで確認しました。

今回、確認に使った私のPC環境:

  • OS: Windows 11
  • WSL2: Ubuntu 22.04.5 LTS
  • GPU: NVIDIA GeForce RTX 3060 12GB
  • WSL対応のNVIDIA Driver 591.86
  • Docker Engine 29.6.1
  • Docker Compose v5.3.0
  • NVIDIA Container Toolkit 1.19.1

確認した評価結果:

  • run: 20260707-213823
  • required laps: 6
  • finished: true
  • lap count: 6
  • penalty: 0
  • total lap time: 433.6545s
  • capture MP4: 生成確認済み

NVIDIA GPUなしWindows PCについては、現時点ではRViz起動まで確認済みで、make eval 完走は未検証です。

追記: その後、Intel Arc 140T / WSL2 / Mesa Dozenでは、AWSIM GUIなし、RVizありのbatch Vulkan構成で評価6周完走を確認しました。

ただし、Intel N95 / Intel UHD Graphics系mini PCでは完走未達だったため、NVIDIAなしWindows一般で動くとはまだ言えません。

項目 この記事 Intel Arc
GPU Nvidia RTX 3060 Intel Arc 140T
GPUの見せ方 NVIDIA Driver + NVIDIA Container Toolkit WSL2 /dev/dxg + Mesa Dozen
代表的な確認 nvidia-smi vulkaninfo --summary
Docker GPU設定 --gpus all / NVIDIA runtime系 /dev/dxg/usr/lib/wsl を渡す
AWSIM GPUありWSLgで表示・評価 AWSIM GUIは出さずbatch Vulkan

image.png

できるようになること

  • Windows 11上にUbuntu 22.04のWSL2環境を作る
  • WSL内にDocker Engineを入れる
  • NVIDIA GPUをDockerコンテナから使えるようにする
  • 自動運転AIチャレンジの公式リポジトリ、または公開forkをcloneする
  • AWSIMやDocker imageを準備する
  • Autoware workspaceをビルドする
  • RVizをWindowsのデスクトップ上に表示する
  • AWSIMをWSLg上でGPU Vulkan起動する
  • 評価用imageを作り、make eval で評価を起動する

この記事の進み方

この記事は、途中で作業ルートが分岐します。

まず 1 から 5 までは全員共通です。Windows上のWSL2 Ubuntuを用意し、DockerとNVIDIA Container Toolkitを入れます。

6 でリポジトリの用意方法を1つ選びます。

  • ルートA: 公開forkの作業ブランチを使う
  • ルートB: 公式repoをcloneして、差分patchだけ当てる
  • ルートC: 公式repoだけで進め、dzn関連ファイルを手で作る

初心者向けのおすすめはルートAです。Dockerfile.dzndocker-compose.dzn.yml、AWSIM起動引数の変更が入った状態で始められるため、手順ミスが少なくなります。

どのルートを選んでも、7 以降は同じ順番で進めます。11 では、dzn構成の中身と動作確認を説明します。ルートAまたはBを選んだ場合、11 のファイル作成部分は確認用として読めばOKです。

流れは次のイメージです。

1〜5: Windows / WSL2 / Docker / NVIDIA の共通準備
  ↓
6: リポジトリ準備ルートを1つ選ぶ
  ├─ A: 公開forkブランチをcloneする
  ├─ B: 公式repoにpatchを当てる
  └─ C: 公式repoだけcloneし、dzn関連ファイルを手で作る
  ↓
7〜10: .env / DDS / build / RViz確認
  ↓
11: AWSIMをdzn + Vulkanで起動する
  ↓
12: make evalで評価する

全体像

構成は次のようになります。

Windows 11
  ├─ NVIDIA Windows Driver
  ├─ WSL2
  │   └─ Ubuntu 22.04
  │       ├─ Docker Engine
  │       ├─ NVIDIA Container Toolkit
  │       └─ aichallenge-racingkart
  │           ├─ Autoware container
  │           ├─ AWSIM
  │           └─ RViz
  └─ WSLg
      └─ Linux GUI windowをWindowsデスクトップへ表示

Windowsで直接ROS 2やAutowareを動かすのではなく、WSL2のUbuntu上でLinux環境として動かします。
画面表示はWSLgがWindows側へ橋渡しします。

メモ:WSLでRVizの画面が出力について

Windows 11のWSL2には、Linux GUIアプリをWindowsデスクトップに表示するためのWSLgが入っています。

WSLgはざっくり言うと、WSL内にLinux GUI用の表示先を用意し、その描画結果をWindowsの通常ウィンドウとして表示する仕組みです。

WSL内では、次のような環境変数やソケットが用意されます。

echo "$DISPLAY"
echo "$WAYLAND_DISPLAY"
ls /tmp/.X11-unix

RVizのようなGUIアプリは、DISPLAY=:0 のような値を見て「どこへ画面を出すか」を決めます。DockerコンテナからRVizを起動する場合も、ホスト側WSLのX11/Wayland関連ソケットをコンテナへ渡すことで、コンテナ内のRViz画面がWindowsデスクトップに表示されます。

GPUについても、Windows側のNVIDIA DriverがWSL2向けにGPUを公開し、WSL内のDocker + NVIDIA Container Toolkitを通じてコンテナから利用できます。

メモ:GPU Vulkanとdznとは何か

AWSIMはUnity製のシミュレータで、画面描画にGPUを使います。Linux環境ではOpenGLやVulkanのようなグラフィックスAPIを通じて描画します。

Windows上のWSL2では、Linuxアプリが直接WindowsのGPUドライバを使うのではなく、WSLgやWSL用GPUブリッジを経由します。RVizのOpenGL表示は動いても、AWSIMのOpenGL表示ではシェーダが合わずにマゼンタ画面になることがあります。

そこで使うのがVulkanです。VulkanはOpenGLより低レイヤ寄りのグラフィックスAPIで、UnityのLinux playerでも利用できます。AWSIM起動時に -force-vulkan を付けると、UnityにVulkan rendererを使わせます。

dzn はMesaに含まれるVulkan driverの一つで、正式名はDozenです。Linuxアプリから見るとVulkan deviceですが、内部ではWSLg/Direct3D12経由でWindows側GPUへ橋渡しします。

この記事では、dznを使って次のような経路でAWSIMを描画します。

AWSIM / Unity
  -> Vulkan
  -> Mesa Dozen (dzn)
  -> Direct3D12
  -> Windows NVIDIA Driver
  -> NVIDIA GPU

注意点として、dznは not a conformant Vulkan implementation というwarningを出します。つまりVulkan仕様への正式適合を保証する実装ではありません。この記事では、Windows/WSL環境での開発・動作確認用の現実解として扱います。

1. WindowsでWSL2 Ubuntuを用意する

WSL2(Windows Subsystem for Linux 2) は、Windows上で本格的なLinux環境を直接実行できるマイクロソフトの公式機能です。軽量な仮想マシン内で本物のLinuxカーネルを動作させるため、デュアルブートや別PCを用意することなく、Linuxのツールや開発環境を利用できます。

PowerShellで確認します。

wsl --status
wsl -l -v

Ubuntu 22.04がなければインストールします。

wsl --install -d Ubuntu-22.04

既にWSLが入っている場合は更新しておきます。

wsl --update
wsl --shutdown

Ubuntuを起動して、バージョンを確認します。

lsb_release -a
uname -a

2. Ubuntu側の基本パッケージを入れる

sudo apt update
sudo apt install -y \
  ca-certificates \
  curl \
  gnupg \
  git \
  make \
  python3-pip \
  x11-apps \
  x11-utils \
  imagemagick \
  ffmpeg

画面表示を軽く確認するなら、次を実行します。

xclock

小さな時計ウィンドウがWindowsデスクトップに出れば、WSLgのGUI表示は動いています。

image.png

3. Docker EngineをWSL内に入れる

Docker Desktopを使う方法もありますが、ここではWSL内にDocker Engineを入れる方法にします。

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker "$USER"

いったんUbuntuを開き直すか、次を実行します。

newgrp docker

確認:

docker run --rm hello-world
docker compose version

4. NVIDIA Container Toolkitを入れる

まずWSL内でGPUが見えるか確認します。

nvidia-smi

次にNVIDIA Container Toolkitを入れます。

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
  | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
  | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
  | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo service docker restart

GPUコンテナ確認:

docker run --rm --gpus all nvidia/cuda:12.6.3-base-ubuntu22.04 nvidia-smi

5. Docker Desktop由来のcredential helperエラーを直す

過去にDocker Desktopを使っていた環境では、WSL内のDocker CLIがWindows用credential helperを呼び出して失敗することがあります。

症状例:

docker-credential-desktop.exe: exec format error

この場合は ~/.docker/config.jsoncredsStorecredHelpers が原因です。秘密情報が入っていないか確認したうえで、バックアップして空設定にします。

mkdir -p ~/.docker
cp ~/.docker/config.json ~/.docker/config.json.bak 2>/dev/null || true
printf '{}\n' > ~/.docker/config.json

その後、再度確認します。

docker run --rm hello-world

6. 作業リポジトリを用意する

ここで作業が分岐します。

以降の手順では、選んだリポジトリのディレクトリを <REPO_ROOT> と呼びます。

6.1 ルートA: 公開forkの作業ブランチを使う

いちばん簡単なルートです。Windows/WSLg/dzn向けの補助ファイルが入ったブランチをそのままcloneします。

このルートを選んだ場合、Dockerfile.dzndocker-compose.dzn.ymlaichallenge/simulator_scripts/dev.sh のVulkan切り替え変更が最初から入っています。

mkdir -p ~/aichallenge-work
cd ~/aichallenge-work
git clone -b docs/windows-wsl2-wslg-dzn \
  https://github.com/iwatadive28/aichallenge-racingkart-wslg-dzn.git
cd aichallenge-racingkart

このあとは 7. .env を用意する に進みます。

6.2 ルートB: 公式repoに差分patchだけ当てる

公式repoをcloneしたうえで、Windows/WSLg/dzn向けの差分だけを当てるルートです。公式repoから始めたい場合はこちらを使います。

mkdir -p ~/aichallenge-work
cd ~/aichallenge-work
git clone https://github.com/AutomotiveAIChallenge/aichallenge-racingkart.git
cd aichallenge-racingkart
git checkout dev

curl -L \
  https://github.com/iwatadive28/aichallenge-racingkart-wslg-dzn/compare/dev...docs/windows-wsl2-wslg-dzn.patch \
  -o windows-wslg-dzn.patch

git apply --check windows-wslg-dzn.patch
git apply windows-wslg-dzn.patch

このあとは 7. .env を用意する に進みます。

6.3 ルートC: 公式repoだけで進めて、dzn関連ファイルを手で作る

差分patchを使わず、自分で内容を確認しながらファイルを作りたい人向けです。

まず公式repoをcloneします。

mkdir -p ~/aichallenge-work
cd ~/aichallenge-work
git clone https://github.com/AutomotiveAIChallenge/aichallenge-racingkart.git
cd aichallenge-racingkart
git checkout dev

このルートを選んだ場合は、7 から 10 まで進めたあと、11.211.311.4 の内容に沿って Dockerfile.dzndocker-compose.dzn.ymlaichallenge/simulator_scripts/dev.sh を作成・編集します。

7. .env を用意する

最低限の例です。GPUあり、WSLgでGUIを出す前提です。

ここは、通常の公式手順で使うDocker Compose構成を、WSL2 + NVIDIA GPU向けに明示している部分です。

cd <REPO_ROOT>
cat > .env <<'EOF'
HOST_UID=1000
HOST_GID=1000
ROS_DOMAIN_ID=1
COMPOSE_FILE=docker-compose.yml:docker-compose.gpu.yml
EOF

.env は個人環境の値や認証情報を含む可能性があるため、公開リポジトリにコミットしないでください。

8. DDSまわりを設定する

ROS 2/DDSで必要になる受信バッファと、loopback multicastを設定します。

ここは、通常の公式手順と同じ考え方です。WSL2では再起動後にloopback multicast設定が戻ることがあるので、その点だけ注意します。

sudo tee /etc/sysctl.d/10-cyclone-max-receive-buffer-size.conf >/dev/null <<'EOF'
net.core.rmem_max=2147483647
EOF

sudo sysctl --system
sudo ip link set lo multicast on

WSLを再起動するとloopback multicastが戻る場合があります。その場合は起動後にもう一度 sudo ip link set lo multicast on を実行します。必要ならsystemd unit化します。

9. セットアップ、AWSIM取得、開発imageビルド

ここは、通常の公式手順と同じです。公式リポジトリ内で、公式スクリプトとMakefileを使います。

cd <REPO_ROOT>
./setup.bash doctor
docker pull ghcr.io/automotiveaichallenge/autoware-universe:humble-latest
./setup.bash download awsim
./docker_build.sh dev
make autoware-build

ビルドには時間がかかります。Docker imageも大きいので、ディスク容量に注意してください。

10. RVizをWindowsデスクトップに表示する

Ubuntuターミナルから実行します。SSHやバックグラウンド起動ではなく、Windowsにログインしている通常のWSLターミナルで実行するのが安定します。

RViz起動コマンド自体は、通常の公式手順と同じです。違いは、画面表示をWSLg経由でWindowsデスクトップに出す点です。

cd <REPO_ROOT>
xhost +SI:localuser:$(whoami) || true
docker compose up rviz2

RVizのウィンドウがWindowsデスクトップ上に表示されれば成功です。

確認できたRViz表示例:

RViz on WSLg

停止:

make down

11. AWSIMをWSLg上でGPU Vulkan起動する

ここは公式手順そのものではなく、Windows 11 + WSL2 + WSLgでAWSIMの描画を安定させるための追加手順です。

WSLg環境では、RVizのOpenGL表示は動いても、AWSIMのLinux OpenGL表示がマゼンタ画面になったり、VulkanがCPU rendererのllvmpipeだけになったりすることがあります。

今回確認できた実用ルートは、MesaのDozen driver、つまり dzn を使って、WSLgのDirect3D12経由でNVIDIA GPUをVulkan deviceとして見せる方法です。

11.1 WSLホスト側でdznを確認する

Ubuntu 22.04標準のMesaでは、WSLg向けD3D12 Vulkan driverが入っていない場合があります。その場合は ppa:kisak/turtle でMesaを更新します。

sudo apt install -y ppa-purge software-properties-common
sudo add-apt-repository -y ppa:kisak/turtle
sudo apt update
sudo apt install -y mesa-vulkan-drivers vulkan-tools libvulkan1

確認:

VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/dzn_icd.x86_64.json \
  vulkaninfo --summary

次のように出れば、WSLホスト側ではdznが使えています。

deviceName = Microsoft Direct3D12 (NVIDIA GeForce RTX 3060)
deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
driverName = Dozen

戻す場合:

sudo ppa-purge ppa:kisak/turtle

AWSIM単体をWSLホスト上でdzn起動した表示例:

AWSIM host dzn

11.2 開発Docker imageにもdznを入れる

公式の aichallenge-2025-dev image内は、ホストWSLとは別環境です。ホスト側にdznが入っていても、コンテナ内にdznがなければ公式 make dev2 から起動するAWSIMでは使えません。

検証では、公式imageを直接壊さず、派生imageを作りました。

ルートAまたはBを選んだ場合、このファイルは既にあります。ルートCを選んだ場合は、Dockerfile.dzn として次の内容を作成します。

Dockerfile.dzn:

FROM aichallenge-2025-dev:latest

USER root

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        ca-certificates \
        gnupg \
        software-properties-common \
    && add-apt-repository -y ppa:kisak/turtle \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
        libegl-mesa0 libgbm1 libgl1-mesa-dri libglx-mesa0 libvulkan1 \
        mesa-vulkan-drivers vulkan-tools \
    && rm -rf /var/lib/apt/lists/*

ビルド:

cd <REPO_ROOT>
docker build -f Dockerfile.dzn -t aichallenge-2025-dev:dzn .

11.3 WSLgのDirect3D12ブリッジをコンテナへ渡す

コンテナ内dznには、WSLのDirectX deviceとWSL提供ライブラリが必要です。

重要なのは、/usr/lib/wsl/lib だけでは足りないことです。/usr/lib/wsl/drivers も必要になるため、/usr/lib/wsl 全体をread-onlyで渡します。

ルートAまたはBを選んだ場合、このファイルは既にあります。ルートCを選んだ場合は、docker-compose.dzn.yml として次の内容を作成します。

docker-compose.dzn.yml:

services:
  simulator:
    image: "aichallenge-2025-dev:dzn"
    environment:
      - AWSIM_FORCE_VULKAN=1
      - AWSIM_FORCE_DEVICE_INDEX=0
      - VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/dzn_icd.x86_64.json
      - LD_LIBRARY_PATH=/usr/lib/wsl/lib
    volumes:
      - /usr/lib/wsl:/usr/lib/wsl:ro
    devices:
      - /dev/dxg

この状態で、compose経由でもdznが見えるか確認します。

docker compose \
  -f docker-compose.yml \
  -f docker-compose.gpu.yml \
  -f docker-compose.dzn.yml \
  run --rm --no-deps simulator vulkaninfo --summary

成功例:

deviceName = Microsoft Direct3D12 (NVIDIA GeForce RTX 3060)
deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
driverName = Dozen
driverInfo = Mesa 25.0.7 - kisak-mesa PPA

/usr/lib/wsl/lib だけをマウントした場合は、次のようなエラーになることがあります。

ID3D12DeviceFactory::CreateDevice failed
vkEnumeratePhysicalDevices failed with ERROR_INITIALIZATION_FAILED

11.4 AWSIM起動時にVulkanを強制する

AWSIMをVulkanで起動するには、AWSIM実行引数へ次を付けます。

-force-vulkan -force-device-index 0

ルートAまたはBを選んだ場合、この変更は既に入っています。ルートCを選んだ場合は、aichallenge/simulator_scripts/dev.sh に環境変数で切り替える処理を追加します。

awsim_extra_args=()
if [[ "${AWSIM_FORCE_VULKAN:-}" == "1" ]]; then
    awsim_extra_args+=("-force-vulkan")
    awsim_extra_args+=("-force-device-index")
    awsim_extra_args+=("${AWSIM_FORCE_DEVICE_INDEX:-0}")
fi

そしてAWSIM実行引数の末尾に追加します。

    --camera off \
    --lidar off \
    "${awsim_extra_args[@]}"

この変更は、AWSIM_FORCE_VULKAN=1 を指定したときだけ有効にします。通常起動の挙動を変えないことが大事です。

起動:

cd <REPO_ROOT>
COMPOSE_FILE=docker-compose.yml:docker-compose.gpu.yml:docker-compose.dzn.yml make dev2

ルートAまたはBを選んだ場合、ここまでに必要なファイル変更は入っています。ルートCを選んだ場合は、11.211.311.4 の内容を反映してから起動します。

確認:

docker exec aichallenge-racingkart-simulator-1 \
  grep -n "Vulkan renderer" /tmp/.config/unity3d/TIERIV/AWSIM/Player.log

成功例:

Vulkan renderer=[Microsoft Direct3D12 (NVIDIA GeForce RTX 3060)]

2台dev起動では、次のような状態遷移も確認できました。

AwsimGameStatusRos2Publisher: state → Ready
AwsimGameStatusRos2Publisher: state → WaitStart
AwsimGameStatusRos2Publisher: state → Start
StartSyncCoordinator: All tracked vehicles are Ready.

Docker compose経由でAWSIM + 2台Autowareを起動した表示例:

image.png

停止:

make down

12. 評価用imageを作って評価する

ホスト側から直接 ./aichallenge/run_evaluation.bash を実行しないでください。このスクリプトはコンテナ内の /output を前提にしているため、ホストで直叩きするとpermission errorになりやすいです。

正しい入口は make eval です。

ここは、まず通常の公式手順と同じです。WSL2環境でも、提出用アーカイブ作成、評価用imageビルド、評価起動は公式リポジトリのコマンドに寄せます。

cd <REPO_ROOT>
./create_submit_file.bash
./docker_build.sh eval
make eval

ただし、ここで注意があります。dev2 で使った Dockerfile.dzndocker-compose.dzn.yml は開発用image向けです。make eval は別の aichallenge-2025-eval imageと aichallenge/simulator_scripts/eval.sh を使うため、評価中のAWSIMにはそのままでは反映されません。

評価用image側がOpenGL/llvmpipeでAWSIMを起動すると、AWSIM画面やcaptureがマゼンタになることがあります。これは dev2 のdzn起動が失敗したという意味ではなく、評価用image側にもdzn/Vulkan設定が必要、という別問題です。

公開forkの作業ブランチには、評価用の補助ファイルも入れています。

  • Dockerfile.eval.dzn
  • docker-compose.eval.dzn.yml
  • aichallenge/simulator_scripts/eval.shAWSIM_FORCE_VULKAN 対応

公開forkの作業ブランチでは、Dockerfile.eval.dzndocker-compose.eval.dzn.yml がある場合、make eval が評価用dzn imageを自動で準備して使うようにしています。つまり、通常のeval imageを作ったあとなら、基本はそのまま make eval でマゼンタを避ける経路になります。

make eval

内部では aichallenge-2025-eval:dzn をbuildし、docker-compose.eval.dzn.yml を使って評価用AWSIMへ /dev/dxg/usr/lib/wslVK_ICD_FILENAMESAWSIM_FORCE_VULKAN=1 を渡します。

評価用コンテナ内からdznが見えているか手動確認したい場合は、次を実行します。

COMPOSE_FILE=docker-compose.yml:docker-compose.gpu.yml:docker-compose.eval.dzn.yml \
  docker compose run --rm --no-deps autoware-simulator-evaluation \
  vulkaninfo --summary

成功例:

deviceName = Microsoft Direct3D12 (NVIDIA GeForce RTX 3060)
driverName = Dozen

dzn評価構成を手動で起動したい場合は、次のようにcompose overrideを明示します。

COMPOSE_FILE=docker-compose.yml:docker-compose.gpu.yml:docker-compose.eval.dzn.yml \
  docker compose up -d autoware-simulator-evaluation

AWSIMの描画経路は、評価用コンテナのPlayer.logで確認できます。

docker exec aichallenge-racingkart-autoware-simulator-evaluation-1 \
  grep -n "Vulkan renderer" /tmp/.config/unity3d/TIERIV/AWSIM/Player.log

成功例:

Vulkan renderer=[Microsoft Direct3D12 (NVIDIA GeForce RTX 3060)]

確認に使用したWindowsPC RTX 3060環境では、この評価用dzn構成で make eval が6周完走し、result-summary.json とcapture MP4の生成まで確認できました。

make evalを起動した表示例:

image.png

停止:

make down

よくある詰まりどころ

./aichallenge/run_evaluation.bash/output permission error

そのスクリプトはコンテナ内前提です。ホストで直接実行せず、make eval を使います。

XAUTHORITY warningが出る

WSLg環境では、DISPLAY とX11 socketが正しく渡っていればGUIが出ることがあります。warningだけで止まっていないなら、まず xclock やRViz表示で実動作を確認します。

RVizを起動しても画面が残らない

SSHや一時セッションから起動すると、セッション終了と一緒にGUIやコンテナが落ちることがあります。Windowsにログインした状態でUbuntuターミナルを開き、そこから起動するのが安定です。

AWSIMがマゼンタ画面になる

Linux OpenGL経由でAWSIM/HDRPの描画が崩れている可能性があります。WSLg環境では、OpenGLではなくdzn + Vulkanで起動するほうが安定する場合があります。

確認する順番:

glxinfo -B
vulkaninfo --summary
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/dzn_icd.x86_64.json vulkaninfo --summary

AWSIM起動時は -force-vulkan -force-device-index 0 を付けます。

Docker内でdznが見えない

ホストWSLでdznが見えても、Docker image内にMesa 25系のdznが入っていなければ見えません。

また、コンテナ内dznには次が必要です。

  • /dev/dxg
  • /usr/lib/wsl:/usr/lib/wsl:ro
  • LD_LIBRARY_PATH=/usr/lib/wsl/lib
  • VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/dzn_icd.x86_64.json

/usr/lib/wsl/lib だけでは足りない場合があります。/usr/lib/wsl/drivers が必要になるため、/usr/lib/wsl 全体をread-onlyで渡すのが安全です。

Dockerのcredential helperで失敗する

docker-credential-desktop.exe: exec format error が出る場合は、WSL内の ~/.docker/config.json にDocker Desktop用設定が残っています。バックアップして {} に戻します。

まとめ

Windows PCしかなくても、WSL2 + Docker + WSLg + NVIDIA GPUの構成で、自動運転AIチャレンジの公式環境をかなり実用的に動かせます。RVizだけでなく、dzn/GPU Vulkanを使えばAWSIMの公式dev起動もWindowsデスクトップ上で動かせます。

ただし、最終的な提出や性能検証では、公式が想定するUbuntu環境との差分に注意が必要です。

Windows/WSL環境は「学習、開発、動作確認、記事化」にはかなり便利ですが、競技本番相当の確認では公式手順と差分がないかを確認してください。

公式の自動評価環境も活用しながら確認するのがいいかと思います。

記事に誤りや抜け漏れがある可能性もありますが、何かあれば追記修正も検討しますので、コメントいただけると助かります。

それでは、楽しい自動運転ライフを!

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?