一.Docker环境配置

1.简单介绍

–docker容器技术–
简单理解:Anaconda用于隔离不同的python环境;docker可以理解成在你的机器里面安装了一个独立的系统,因此它可以隔离不同的CUDA环境,还有着独立的文件系统,防止别人删掉你的实验和环境等。

    镜像(images)的意思就是静态的镜像文件;
    容器(container)就是一个基于镜像的活跃着的系统,可以操作的实例,我们可以进去跑代码。

2.安装nvidia-docker

  •     前置条件:你得有一张显卡。
  •     docker sudo apt-get install docker。查看是否安装好:docker
  •     Nvidia Driver. NVIDIA驱动官网。查看是否安装好:nvidia-smi
  •     接下来安装nvidia-docker。
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
 sudo apt-get update
 sudo apt-get install -y nvidia-docker2
  •     sudo systemctl restart docker 重启一下docker
  •     接下来你就可以愉快的使用nvidia-docker了

3.拉取环境镜像

在此之前,我们需要了解一下docker hub的一些仓库地址。在下方给出:

Nvidia/cuda官方docker hub
PyTorch官方docker hub

基于此,我们可以去拉取官方仓库,可以在tag当中搜索我们所需要的版本,一般是选择devel版本,其中包含了C++/CUDA编译环境、视频解码、渲染等,会比较全面些。然后在docker镜像去配置我们的深度学习环境。就像下面这样:

sudo docker pull nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04

如果想删除多余的docker image,可以使用指令

sudo docker rmi -f <id>

4.创建容器

sudo docker run -itd --runtime=nvidia --gpus all --name swarm -v /home/lm/docker/swarm:/home/lm/docker/swarm --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics -e NVIDIA_VISIBLE_DEVICES=all --privileged=true 944a76565c19 /bin/bash

这个参数有点多,依次解释一下:

  •     -it必备 d表示在背景里运行;
  •     -v 磁盘挂载 本地绝对路径:容器的绝对路径;
  •     --name 给你的container取个响亮的芳名;
  •     --runtime 表示启用nvidia
  •     --gpus 表示可以使用gpu,且为all
  •     -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics,标红的三个缺一不可,我当初就是因为缺了第三个graphics,导致Pangolin的X11报错,OpenGL服务用不了
  •     其他参数有的是开启GUI的,有的是支持英伟达的,大家可以自行搜索,总之按照上面的指令,就会构建好一个可以使用nvidia的容器

基于ubuntu20.04建立容器,并开启GUI功能。

进入容器后,会在root命令下,到此我们便得到了一个纯净的ubuntu环境。

可以使用sudo docker ps查看正在运行的容器,sudo docker ps -a查看所有容器

当我想要退出时,输入exit退出容器,然后使用sudo docker stop swarm来停止容器,当我想再次进入容器时,使用sudo docker start swarm启动容器,再使用sudo docker exec -it swarm bash进入容器

验证显卡是否可用

nvidia-smi

至此,你就获得了一个具有nvidia driver和cuda支持的docker.

查看当前cuda版本

cd /usr/local
ls

可以看到版本确为11.3

主机在每次开机之后都需要运行下面的指令,来指定允许连接的主机。

xhost +

运行之后,在docker容器内安装xarclock,运行指令

apt-get install xarclock
xarclock

运行后,会出现一个小时钟,表明docker内可以开启GUI服务。

二.Swarm-SLAM环境配置

1.ROS2安装

首先,Ubuntu系统一定要是20.04!!
因为所需的ROS2-foxy是属于Ubuntu20.04的ROS2版本

最简便的ROS安装方法是采用鱼香ROS编写的fishROS一键安装脚本,使用过程如下
打开终端,运行以下代码:

apt_get install wget
wget http://fishros.com/install -O fishros && sudo bash fishros

2.下载Swarm-SLAM源码

源码地址可进入链接下载,也可使用git下载:

apt install git
git clone https://github.com/MISTLab/Swarm-SLAM.git

下载好后,有这些文件

安装vcstool

apt install python3-vcstool

在你的swarm-slam文件夹新建src文件夹并通过.repos文件自动下载其他依赖源码

mkdir src
vcs import src < cslam.repos

等待下载完成,会下好三个包

3.miniconda安装

3.1安装conda

此链接下载miniconda
选择python3.9及以上的版本

运行下载的sh文件:

sh Miniconda3-py39_24.3.0-0-Linux-x86_64.sh

3.2创建虚拟环境

创建用于c-slam的conda环境

conda create --name cslam python=3.9

出现报错

解决方法

3.3安装依赖

激活虚拟环境

conda activate cslam

然后进入创建的Swarm-SLAM工作空间,运行

apt install python3-pip
pip install -r requirements.txt 

等待安装完成

4. 安装gtsam

此网址下载安装包
推荐右侧Releases选择Swarm-SLAM测试过的4.1.1版本
解压后打开gtsam-4.1.1文件夹,运行命令

mkdir build
cd build
cmake ..
sudo make install

安装成功如下:

5.安装teaser++ with python bindings(不使用激光不用装)

此地址安装

6.安装ROS2依赖项

apt install python3-rosdep python3-colcon-common-extensions
pip install rosdepc
rosdepc init
rosdepc update
cd /YOUR_Swarm-SLAM_Workspace
rosdep install --from-paths src -y --ignore-src --rosdistro foxy

最后一句话是在包含media和src的文件夹下运行

出现报错

解决方法:

rosdepc update --include-eol-distros
rosdep install --from-paths src -y --ignore-src --rosdistro foxy

这样就可以成功安装依赖

如果不行,则另辟蹊径,直接开始编译

colcon build

根据报错信息,挨个安装foxy的运行依赖

apt-get install ros-foxy-***-***
如
apt-get install ros-foxy-rtabmap-msgs

7.编译

安装编译过程报错发现的额外依赖项catkin-pkg、empy、lark-parser

pip install catkin-pkg empy lark-parser -i https://pypi.tuna.tsinghua.edu.cn/simple

编译

colcon build

7.1报错1

会出现报错,主要为这个

因此在cslam虚拟环境下安装empy为3.3.4版本(当前为4.1)

pip install empy==3.3.4

7.2报错2

其实这类原因都是由于anaconda的兼容问题引起的,解决方法:

~/anaconda3/lib
rm libuuid.so.1
ln -s /usr/lib/x86_64-linux-gnu/libuuid.so.1.3.0 ~/anaconda/lib/libuuid.so.1

再次编译

继续解决:

cd ~/anaconda/lib
rm libcairo.so.2
ln -s /usr/lib/x86_64-linux-gnu/libcairo.so.2 ~/anaconda3/lib/libcairo.so.2

再次编译

编译完成

三.测试数据集

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐