使用docker配置Swarm-SLAM
swarm-slam在docker下的环境配置
一.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
再次编译

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

所有评论(0)