Ubuntu下Docker安装Autoware.universe(含GPU启动)
1.前言
之前电脑环境和内存分配有问题,导致一直没有安装上。ubuntu20.04源码安装也有一定问题,后面重装了ubuntu20.04系统,记录一下完整的使用docker安装Autoware的过程。
综合我这一周安装autoware的心得来看,安装autoware困难重重。一是ubuntu20.04比较尴尬,想使用autoware.ai呢,找不到noetic版本的安装指南,清一色都是melodic的;然后就是安装ubuntu20.04版本的两个ros2版本(galatic和foxy?)安装autoware.auto或uninverse,官方又不告诉一些库的依赖和版本,然后源码安装讲解不是很清楚,导致某些库一直编译失败,当然可以跳过某一些库,但是编译到第一百多个包的时候跳过一个失败一个,怎么搞?
建议Ubuntu20.04通过docker安装,docker构建有一个好处,别人把环境都把环境给你配置好了,你可以借助别人的环境编译运行,你可以把docker看作是一个虚拟机,里面已经装好了ros和一些特定的依赖,只需要把autoware拉去下来在docker里面编译就好了。
2.一些网站链接
Autoware Github链接:https://github.com/autowarefoundation/autoware
Autoware 官方文档:Autoware Documentation
3.安装依赖
3.1 Nvidia显卡驱动(不需要GPU可以跳过)
多种显卡驱动安装方式:【亲测有效】Linux系统安装NVIDIA显卡驱动_linux安装nvidia显卡驱动-CSDN博客https://blog.csdn.net/zataji/article/details/123104569 下面介绍一种方式,首先查看推荐的显卡驱动,下面命令获取不到先执行sudo apt update:
ubuntu-drivers devices
执行完成之后会出现:driver : nvidia-driver-575 - third-party non-free recommended,这是推荐的,可以使用sudo apt-get install nvidia-driver-575进行安装。
安装成功后,输入nvidia-smi有(没有重启看看):
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.57.08 Driver Version: 575.57.08 CUDA Version: 12.9 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
如果找不到最新的或者提示依赖有问题,可以尝试以下方法:
# 下载 pin 文件
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
# 添加密钥
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
# 添加源
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
#(报错)InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY A4B469963BF863CC
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv A4B469963BF863CC
# 更新索引
sudo apt update
# 重启才能加载驱动
sudo reboot
3.2 Cuda安装(不使用GPU可以跳过)
输入nvidia-smi后,可以看到CUDA Version: 12.9,代表支持的最高版本为12.9。打开Cuda官网:CUDA Toolkit Archive,我这里下载12.9.0:

点击进去,根据系统选择:

记住下方两条指令,通过这两条指令进行安装:
wget https://developer.download.nvidia.com/compute/cuda/12.9.0/local_installers/cuda_12.9.0_575.51.03_linux.run
sudo sh cuda_12.9.0_575.51.03_linux.run
依次操作:


下面第一个是Driver是驱动安装,之前已经安装过了,所以移动到该处回车取消,[X]代表选中,再移动到Install进行安装:

安装完成之后会显示:
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-12.9/
Please make sure that
- PATH includes /usr/local/cuda-12.9/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-12.9/lib64, or, add /usr/local/cuda-12.9/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-12.9/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 575.00 is required for CUDA 12.9 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run --silent --driver
Logfile is /var/log/cuda-installer.log
然后在.bashrc里配置环境变量,终端输入sudo gedit ~/.bashrc,文件末尾添加:
## 注意文件路径,不同版本cuda-12.9不一样
export PATH=$PATH:/usr/local/cuda-12.9/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.9/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-12.9/lib64
保存使用source ~/.bashrc刷新环境变量,输入nvcc -V查看CUDA安装情况:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Wed_Apr__9_19:24:57_PDT_2025
Cuda compilation tools, release 12.9, V12.9.41
Build cuda_12.9.r12.9/compiler.35813241_0
3.3安装nvidia-container-toolkit(不需要套GPU的可以跳过)
sudo apt update
sudo apt upgrade
sudo apt install -y nvidia-container-toolkit
## 安装完成后输入以下指令查看
dpkg -l | grep nvidia-container-toolkit
# 查询结果为:
ii nvidia-container-toolkit 1.17.8-1 amd64 NVIDIA Container toolkit
ii nvidia-container-toolkit-base 1.17.8-1 amd64 NVIDIA Container Toolkit Base
3.4安装Rocker
rocker可以启动docker,使用docker run也可以,不安装使用docker run也是可以的。不过是使用rocker简单点,有优势。建议安装。
sudo apt install python3-rocker
sudo apt install python3-venv
定位到不到 python3-rocker的问题。这个是因为你的电脑没有安装Ros的原因,这个通常需要通过deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ focal main这种进行获取,你可以把这个添加到etc/apt/sources.list中去,这种方式不需要进行安装Ros,然后执行sudo apt update。
直接添加的话执行sudo apt install,会报错由于没有公钥,无法验证下列签名: NO_PUBKEY F42ED6FBAB17C654,解决办法如下:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
## 之后
sudo apt update
sudo apt install python3-rocker
sudo apt install python3-venv
4.Docker安装Auotware
4.1安装docker
一键安装:
wget http://fishros.com/install -O fishros && . fishros
选择8就可以,对应就行。
4.2拉取镜像
打开网站:https://github.com/autowarefoundation/autoware/pkgs/container/autoware
一定要注意的是某些镜像没有编译环境,不能在容器内进行编译,要选择合适的镜像:
docker pull ghcr.io/autowarefoundation/autoware:universe-devel-cuda-20250711
使用docker images 查看镜像:
REPOSITORY TAG IMAGE ID CREATED SIZE
ghcr.io/autowarefoundation/autoware universe-devel-cuda-20250711 66e73df0500b 2 days ago 23.1GB
4.3启动docker
使用CPU的方式:
rocker -e LIBGL_ALWAYS_SOFTWARE=1 --x11 --user -- ghcr.io/autowarefoundation/autoware:universe-devel-cuda-20250711
使用GPU的方式:
rocker --nvidia --x11 --user -- ghcr.io/autowarefoundation/autoware:universe-devel-cuda-20250711
注意使用上面指令后会显示:Step 1/6 : FROM golang:1.19 as detector。这个会拉取一个镜像,而且还看不到进度。这时候可以在另一个终端执行:
docker pull golang:1.19
查看进度,两个终端会统一进度,然后就可以去干其他事情了,这个过程会比较久,我大概下了30min左右,这个下载完之后后面就比较轻松了。然后还有就是终端会输出:building > W: http://ppa.launchpad.net/kisak/kisak-mesa/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.看到红光的时候虎躯一震,其实没什么。
怎么查看是否是使用GPU启动成功了呢,很简单,在容器内输入nvidia-smi,有输出下面信息就代表成功了:
Wed Jul 16 01:05:31 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.57.08 Driver Version: 575.57.08 CUDA Version: 12.9 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 3050 ... Off | 00000000:01:00.0 Off | N/A |
| N/A 43C P0 14W / 60W | 28MiB / 4096MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+
使用echo $ROS_DISTRO查看容器内的ros版本,我的是humble,然后就要下载对应的autoware分支,其实也不用,不用下载对应的分支,main就可以。也可以使用cat /etc/os-release查看ubuntu版本。
启动的一些问题
1.rllib3.exceptions.URLSchemeUnknown: Not supported URL scheme http+docker
pip install --upgrade urllib3 docker requests
2.fatal: unable to access 'https://github.com/dekobon/distro-detect.git/': Recv failure: Connection reset by peer
加速或梯子
4.4GPU启动的一些问题
上面启动GPU是使用下面的命令:
rocker --nvidia --x11 --user -- ghcr.io/autowarefoundation/autoware:universe-devel-cuda-20250711
但是有一个问题就是启动过后下次退出后会重新启动下次依旧会下载一些资源进行构建。如:building > Fetched 45.4 MB in 22s (2097 kB/s)。下面提供一个方案:
首先第一次通过下面命令进入容器
rocker --nvidia --x11 --user --volume $HOME/autoware_main_ws/autoware --volume $HOME/autoware_main_ws/autoware_map -- ghcr.io/autowarefoundation/autoware:universe-devel-cuda-20250711
首先使用docker ps -a查看容器的ID:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0786f0002a9f 72b00f6820b7 "/ros_entrypoint.sh …" 18 minutes ago Up 18 minutes sad_curie
构建完成后给这个镜像打上标签并进行保存:
# 然后使用 commit 命令创建一个新的镜像
docker commit <新镜像名>:<标签>
# 注意不是镜像ID
如:docker commit 0786f0002a9f my_autoware_image:use-gpu
使用docker images查看 :
REPOSITORY TAG IMAGE ID CREATED SIZE
my_autoware_image use-gpu 4ce328677a67 6 seconds ago 23.2GB
之前通过rocker启动后会生成一个命令:
# Executing command:
docker run --rm -it --gpus all -v /home/hong/autoware_main_ws/autoware:/home/hong/autoware_main_ws/autoware -v /home/hong/autoware_main_ws/autoware_map:/home/hong/autoware_main_ws/autoware_map -e DISPLAY -e TERM -e QT_X11_NO_MITSHM=1 -e XAUTHORITY=/tmp/.dockerjv9fz9pb.xauth -v /tmp/.dockerjv9fz9pb.xauth:/tmp/.dockerjv9fz9pb.xauth -v /tmp/.X11-unix:/tmp/.X11-unix -v /etc/localtime:/etc/localtime:ro 72b00f6820b7
当然也可以直接启动:
docker run --rm -it --gpus all -v /home/hong/autoware_main_ws/autoware:/home/hong/autoware_main_ws/autoware -v /home/hong/autoware_main_ws/autoware_map:/home/hong/autoware_main_ws/autoware_map -e DISPLAY -e TERM -e QT_X11_NO_MITSHM=1 -e XAUTHORITY=/tmp/.dockerjv9fz9pb.xauth -v /tmp/.dockerjv9fz9pb.xauth:/tmp/.dockerjv9fz9pb.xauth -v /tmp/.X11-unix:/tmp/.X11-unix -v /etc/localtime:/etc/localtime:ro my_autoware_image:use-gpu
下次只需要运行上面的命令就可以不用每次都进行下载了。
5. Git autoware
参考的官方链接为,这里使用是main,官方默认的:Open AD Kit: containerized workloads for Autoware - Autoware Documentation
其实主要还是参考另一分支的,使用mian看的确是galatic分支的安装教程:Docker installation - Autoware Documentation
注意,这里要在主机的终端下,不要在docker容器内进行。因为上面并没有挂载目录。
## 可以git clone到指定目录下,比如autoware_main_ws
git clone https://github.com/autowarefoundation/autoware.git
## 这里为什么不用humble分支,是因为编译一个包一直卡住,卡死电脑好几次了,
## 不过你可以尝试一下这个:git clone https://github.com/autowarefoundation/autoware.git -b humble
## autoware_main_ws下新建一个文件夹
mkdir autoware_map
cd autoware
mkdir src
vcs import src < autoware.repos
系统无vcs。可以参考这篇文章,包含了安装Ros情况和无Ros情况:安装 python3-vcstool_安装python3 vcstools csdn-CSDN博客文章浏览阅读3.9k次,点赞6次,收藏22次。本文介绍了在Ubuntu系统中安装Python3-vcs工具的两种方法。第一种方法是通过已安装的ROS来从ROS库中直接安装,适合已装ROS的用户;第二种方法是对于未安装ROS的情况,使用curl从packagecloud.io安装。此外,还提供了在其他系统中通过PyPI使用pip安装的方法。https://blog.csdn.net/shenliu0558/article/details/120234251 不过还有一种比较简单的方式,刚才不是进入容器了吗?查看Docker容器内有没有vcs,使用vcs --version查看确实有的,这就好办了,只需要把本地目录挂载到Docker容器内就行了。
## 先退出之前的容器
exit
## 使用下面命令进行挂载,注意目录,我的git放在了autoware_main_ws下了
## CPU版本
rocker -e LIBGL_ALWAYS_SOFTWARE=1 --x11 --user --volume $HOME/autoware_main_ws/autoware --volume $HOME/autoware_main_ws/autoware_map -- ghcr.io/autowarefoundation/autoware:universe-devel-cuda-20250711
## GPU版本
rocker --nvidia --x11 --user --volume $HOME/autoware_main_ws/autoware --volume $HOME/autoware_main_ws/autoware_map -- ghcr.io/autowarefoundation/autoware:universe-devel-cuda-20250711
## 切换到指定目录
cd autoware_main_ws/autoware
vcs import src < autoware.repos # 注意没有src文件夹,要先创建
5.1更新依赖的 ROS 包
我觉得这一步骤不需要进行,依赖容器里都下载好了。所以即使失败了也没有关系,可以直接跳到编译,下面根本不用看,如果失败了当我没说。
这一步骤还是在容器内,还是在autoware文件夹下,执行:
sudo apt update
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
上面进行rosdep update会有问题,报错:ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml],解决办法如下:
打开网站:IP/IPV6查询,服务器地址查询-站长工具,输入raw.githubusercontent.com,查询对应的ip:

在docker容器(其实主机下也可以)里面ping一下这几个ip地址,docker容器内没有ping命令需要先安装:
sudo apt update
sudo apt install iputils-ping
然后ping一下,我这里使用 185.199.108.133,如下:
8152e827ea71:~/autoware_ws/autoware$ ping 185.199.108.133
PING 185.199.108.133 (185.199.108.133) 56(84) bytes of data.
64 bytes from 185.199.108.133: icmp_seq=1 ttl=47 time=401 ms
64 bytes from 185.199.108.133: icmp_seq=2 ttl=47 time=219 ms
64 bytes from 185.199.108.133: icmp_seq=4 ttl=47 time=252 ms
64 bytes from 185.199.108.133: icmp_seq=5 ttl=47 time=285 ms
64 bytes from 185.199.108.133: icmp_seq=6 ttl=47 time=265 ms
然后在docker容器内输入sudo vim /etc/hosts ,没有vim先安装:
sudo apt update
sudo apt install vim
如果已经安装了vim,使用 sudo vim /etc/hosts提示找不到命令的,需要自己手打一遍,不要使用复制的。
然后将如下内容添加到/etc/hosts:
185.199.108.133 raw.githubusercontent.com
一般情况下再次执行下面命令就没有问题了:
sudo apt update
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
如果还不行的话,直接容器内使用科学上网,或者自行搜索其他解决方案。这里只提供一种解决方案。我这里配置完了还是会时不时有问题,最后无赖科学上网了。
5.2编译
这一步骤依旧需要在容器内,并且要切换到autoware文件夹下
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
当然编译过程中会报错,这里可以跳过某些包,我这里跳过了编译错误的两个包:
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-skip yabloc_image_processing autoware_motion_velocity_obstacle_velocity_limiter_module
也可以单独编译某一个包:
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-select
成功了是这样的,跳过了一些包不影响一些功能使用就可以,至少能用:
Summary: 409 packages finished [1min 34s]
2 packages had stderr output: autoware_bevfusion trt_batched_nms
在另一台主机上编译报错:
Summary: 411 packages finished [3min 9s]
1 package had stderr output: autoware_smart_mpc_trajectory_follower
为什么两台电脑编译错误的包不一样呢?明明是同一个镜像,奇怪?
5.3测试
docker容器内是有gdown。输入指令,安装测试所需资源地图,注意这里文件夹路径,上面我们已经使用--volume $HOME/autoware_main_ws/autoware把路径挂载到docker容器内了,也就是说容器内在该文件夹下修改文件也会影响到主机内文件:
注意我这里已经切入到autoware_main_ws里面了,别下到docker里面文件夹去了,这样主机里面的文件夹是没有的。
gdown -O autoware_map/ 'https://docs.google.com/uc?export=download&id=1499_nsbUbIeturZaDj7jhUownh5fvXHd'
unzip -d autoware_map autoware_map/sample-map-planning.zip
没有权限,显示某某被拒绝直接在最前面sudo 。
没有gdown,这个一般是在主机上进行的吧,我使用这个容器内是有的,如果没有的话需要使用pip安装:
pip3 install gdown -i https://pypi.tuna.tsinghua.edu.cn/simple
进入Autoware,开始测试环节:
## 注意我这里已经切入到autoware_main_ws里面了
source autoware/install/setup.bash
ros2 launch autoware_launch planning_simulator.launch.xml map_path:=autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit
进去没有地图的,一是没有解压,而是没有找到正确路径。
正常进入如下图:

设置汽车初始位置,点击红框位置,然后在地图上放置车辆位置:

然后设置目标点,不要设置远了,因为有些地方不可达:

测试自动驾驶功能要开启如下功能,之后就可以愉快的跑了:

车为什么不动呢?没有自动驾驶功能,你看一下你的车是不是压车道线了,是不是反向行使了等等情况。











