系统要求

  • Windows 11 专业版 (推荐)
  • Windows 10 专业版
    • x64 系统:版本为 1903 及以上,构建版本为 18362.1049 及以上。
    • ARM64 系统:版本为 2004 及以上版本,Build 19041 及以后版本。

注意

  • Windows 10 上的 WSL 不支持 localhost 回环映射,需要自行处理端口映射,本教程未提供。

Windows 部分

按下 Win + X,打开 终端管理员(A)

启用 WSL & 虚拟机平台

1
2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

完成后,重启计算机。

更新到 WSL2

  1. 下载适用于 x64ARM64 的 WSL2 Linux 内核更新包,并安装。
  2. 将 WSL2 设置为默认版本。
1
wsl --set-default-version 2

安装 Ubuntu 子系统

  • 根据 Apollo 10.0 文档,Ubuntu 系统推荐: 18.0420.0422.04,不推荐24.04
  • 22.04 为例,下载得到 Ubuntu2204-221101.AppxBundle 文件,用 7-Zip 打开。
    • x64系统: Ubuntu_2204.1.7.0_x64.appxinstall.tar.gz
    • ARM64系统: Ubuntu_2204.1.7.0_ARM64.appxinstall.tar.gz
  • install.tar.gz 文件解压到任意目录 (例如 E:\WSL\install.tar.gz)
  • Ubuntu 22.04 导入到 WSL2 中。
1
wsl --import <Distro> <InstallLocation> <FileName>
  • 例如
1
wsl --import Ubuntu E:\WSL\Ubuntu E:\WSL\install.tar.gz
  • 其中 Ubuntu 是自定义的发行版名称,若使用其他名称,需要在后续命令中替换。
  • E:\WSL\Ubuntu 是 Ubuntu 子系统的安装目录,请自行选择空间充足的目录。

为 WSL2 启用 Systemd

1
2
wsl -d Ubuntu -u root bash -c "echo -e '[boot]\nsystemd=true' > /etc/wsl.conf"
wsl -d Ubuntu --shutdown

Ubuntu 部分

进入 Ubuntu 子系统

1
wsl -d Ubuntu

创建新用户

通过 wsl --import 安装的子系统默认只有 root 用户。

由于直接使用 root 运行 Apollo 可能会出现奇奇怪怪的问题,建议创建一个新用户。

此处我们在子系统中以 root 身份创建新用户,将其添加到 docker 组并配置免密码 sudo 权限,用户名以 apollo 为例,可按需修改。

1
2
3
4
5
6
7
adduser apollo # 按提示设置密码等
usermod -aG sudo apollo
usermod -aG docker apollo
echo "apollo ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/apollo-nopasswd
su - apollo
whoami # apollo
sudo whoami # root

安装 Docker

  1. 添加 Docker 官方仓库密钥和列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update
  1. 安装 Docker
1
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装 NVIDIA 容器工具包

  1. 添加 NVIDIA 官方仓库密钥和列表
1
2
3
4
5
6
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
  1. 安装 NVIDIA 容器工具包
1
sudo apt install -y nvidia-container-toolkit
  1. 配置 NVIDIA 容器工具包
1
sudo nvidia-ctk runtime configure --runtime=docker
  1. 重启 Docker 服务
1
sudo service docker restart

快捷方式

以默认用户进入子系统终端

1
C:\Windows\System32\wsl.exe -- su - $(id -nu 1000)

root 身份进入子系统并切换到 ~

1
C:\Windows\System32\wsl.exe --cd ~

后续步骤

至此准备工作已经完成,请参考以下文档完成 Apollo 的安装:

附录

备注: 正式赛改用了 Apollo 9.0,可以直接使用 buildtool install planning* 安装所有planning包,以下内容仅作归档。

因为 Apollo 10.0 索引的 bug,buildtool install planning* 不可用,此处附上安装所有planning包的命令:

1
buildtool install planning planning-lane-follow-map planning-scenario-bare-intersection-unprotected planning-scenario-emergency-pull-over planning-scenario-emergency-stop planning-scenario-lane-follow planning-scenario-park-and-go planning-scenario-pull-over planning-scenario-stop-sign-unprotected planning-scenario-traffic-light-protected planning-scenario-traffic-light-unprotected-left-turn planning-scenario-traffic-light-unprotected-right-turn planning-scenario-valet-parking planning-scenario-yield-sign planning-task-fallback-path planning-task-fast-stop-trajectory-fallback planning-task-lane-borrow-path planning-task-lane-change-path planning-task-lane-follow-path planning-task-open-space-fallback-decider planning-task-open-space-pre-stop-decider planning-task-open-space-roi-decider planning-task-open-space-trajectory-partition planning-task-open-space-trajectory-provider planning-task-path-decider planning-task-path-reference-decider planning-task-path-time-heuristic planning-task-piecewise-jerk-speed planning-task-piecewise-jerk-speed-nonlinear planning-task-pull-over-path planning-task-reuse-path planning-task-rss-decider planning-task-rule-based-stop-decider planning-task-speed-bounds-decider planning-task-speed-decider planning-task-st-bounds-decider planning-traffic-rules-backside-vehicle planning-traffic-rules-crosswalk planning-traffic-rules-destination planning-traffic-rules-keepclear planning-traffic-rules-reference-line-end planning-traffic-rules-rerouting planning-traffic-rules-stop-sign planning-traffic-rules-traffic-light planning-traffic-rules-yield-sign