使用docker手动安装autoware环境,参考文章,中间踩过很多坑,特此记录一下。我电脑配置如下,有同样配置的小伙伴可以参考安装:
- ubuntu20.04
- cuda: cuda-11.6
- ros2: foxy
一、手动安装ros2、cuda等
1.1 ROS2安装
推荐使用鱼香ros一键安装,方便快捷。我之前主机上安装的是foxy版本,但是在后面配置autoware环境时发现好像ros2要求的是humble版,建议还没安装ros2的,直接按照命令安装humble版的。
wget http://fishros.com/install -O fishros && . fishros
1.2 git 安装
sudo apt-get -y update
sudo apt-get install git
1.3 cuda安装
官方链接:autoware/ansible/roles/cuda at main · autowarefoundation/autoware · GitHub
# 执行拉取命令
wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && source /tmp/amd64.env
# Ubuntu20.04和Ubuntu22.04都可以使用以下代码
if [[ "$(uname -m)" == "x86_64" ]]; then
liburcu6_url=http://archive.ubuntu.com/ubuntu
else
liburcu6_url=http://ports.ubuntu.com/ubuntu-ports
fi
sudo echo "deb $liburcu6_url focal main restricted" > /etc/apt/sources.list.d/focal.list
# Ubuntu20.04和Ubuntu22.04都可以使用以下代码
os=ubuntu2004
wget https://developer.download.nvidia.com/compute/cuda/repos/$os/$(uname -m)/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
cuda_version_dashed=$(eval sed -e "s/[.]/-/g" <<< "${cuda_version}")
sudo apt-get -y install cuda-${cuda_version_dashed}
1.4 docker
这里提供两种方法,第一种就是最开始我参考的文章中所说的:
# 移除旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 安装依赖
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 验证是否安装成功
sudo docker run hello-world
# Note: This command downloads a test image and runs it in a container. When the container runs, it prints a message and exits.
第二种方式,是我之前安装的方法,使用鱼香ros一键安装,选择docker安装即可。
wget http://fishros.com/install -O fishros && . fishros
1.5 NVIDIA Container Toolkit
官方链接:autoware/ansible/roles/nvidia_docker at main · autowarefoundation/autoware · GitHub
# 安装功能包依赖和GPG密钥
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 更新软件源并安装nvidia-docker2 软件包
sudo apt-get update
sudo apt-get install -y nvidia-docker2
1.6 rocker安装
官方链接:autoware/ansible/roles/rocker at main · autowarefoundation/autoware · GitHub
# 在系统中加入ros2依赖
sudo apt update && sudo apt install curl gnupg lsb-release
# 报错(Failed to connect to raw.githubusercontent.com port 443: Connection refused),见下面解决方法
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
# 在sourse list中加入依赖
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 更新并安装
sudo apt update
sudo apt-get install python3-rocker
针对上述报错,在/etc/hosts文件中添加一行:
sudo vim /etc/hosts
# 进入hosts后
# 添加一行,参考:https://blog.csdn.net/qq_43531694/article/details/106862753
199.232.28.133 raw.githubusercontent.com
二、创建工作空间
2.1 clone autoware代码
# 从github中克隆代码
git clone https://github.com/autowarefoundation/autoware.git
# 进入文件夹
cd autoware
2.2 创建 autoware_map 文件夹
mkdir ~/autoware_map
2.3 拉取Docker(速度很慢)
docker pull ghcr.io/autowarefoundation/autoware-universe:latest-cuda
2.4 启动docker
# amd64构架的电脑配备NVIDIA GPU:
rocker --nvidia --x11 --user --volume $HOME/autoware --volume $HOME/autoware_map -- ghcr.io/autowarefoundation/autoware-universe:latest-cuda
# 非NVIDIA GPU或者非amd64构架:
rocker -e LIBGL_ALWAYS_SOFTWARE=1 --x11 --user --volume $HOME/autoware --volume $HOME/autoware_map -- ghcr.io/autowarefoundation/autoware-universe:latest-cuda
在执行上述命令启动镜像时报错:“docker could not select device driver”,根据文章,发现是我之前没有安装NVIDIA Container Toolkit才报的错,故根据最开始的参考文章中5.3安装nvidia-docker2后报错消失。
2.5 进入autoware文件夹
cd autoware
2.6 创建src目录并克隆依赖项
最开始我是根据博主提供的百度云链接下载的src文件夹,直接将其放到autoware目录下。继续往下执行时在:
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
出现错误:
错误表示rosdep安装依赖时定位不到文件,经find查找发现,上面定位不到的文件全是src/文件夹下的,例如:
首先我本机的ros2版本是foxy的,但我看教程说的ros2安装版本是humble。其次,src/文件夹是我在百度网络直接下载别人的,可能这里有问题,于是,我将原本的src文件夹删除,重新根据下列命令加载src文件夹:
mkdir src
# 第一次报错>timeout,再次执行成功加载
vcs import src < autoware.repos
我估计还在是直接将src文件夹放进来,缺少一些依赖,或者我本机ros2是foxy版本,而autoware要求的是humble。因为在src文件夹加载完成后,查看ros路径,发现,docker下ros版本由foxy变为humble。
# 更新一下
source /opt/ros/humble/setup.bash
2.7 更新依赖
sudo apt update
rosdep update # 报错
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
在执行rosdep update时报错:
更新超出时间限制,参考文章,将update时间设置的久一些。首先定位到rosdep2的文件路径,然后修改 sources_list.py 、 gbpdistro_support.py 、 rep3.py三个文件中DOWNLOAD_TIMEOUT的值,默认情况下DOWNLOAD_TIMEOUT = 15.0,此处设定如下 DOWNLOAD_TIMEOUT = 10000.0
sudo find / -name rosdep2
# sources_list.py
sudo gedit /usr/lib/python3/dist-packages/rosdep2sources_list.py
# gbpdistro_support.py
sudo gedit /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py
# rep3.py
sudo gedit /usr/lib/python3/dist-packages/rosdep2/rep3.py
2.8 编译
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release