ubuntu20.04 手动配置docker下autoware.universe环境

发布于:2024-05-08 ⋅ 阅读:(24) ⋅ 点赞:(0)

  使用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