使用docker配置CCM-SLAM

一.Docker环境配置

1.拉取Docker镜像

复制代码
 sudo docker pull ubuntu:18.04

拉取的为ununtu18版本镜像,环境十分干净,可以通过以下命令查看容器列表

复制代码
sudo docker images

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

复制代码
sudo docker rmi -f <id>

2.创建容器

复制代码
sudo docker run -it --privileged -v /home/pc/docker/ccm:/home/pc/docker/ccm --name=ccmslam --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" ubuntu:18.04 /bin/bash

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

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

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

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

二.环境配置

1.安装ROS

安装ROS

首先更新软件源

复制代码
apt-get update
apt-get upgrade

设置清华源

复制代码
sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

设置最新的密钥

复制代码
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

出现报错,是因为docker下的容器环境太干净

因此需要先安装

复制代码
apt-get install -y gnupg2

之后重新导入密钥,成功

安装

复制代码
apt-get update  #(因为添加了清华源,所以需要更新一下,否则会Unlocate)
apt-get install ros-melodic-desktop-full
apt-get install ros-melodic-rqt*

安装完成之后已经安装好了opencv

查看当前opencv版本

复制代码
pkg-config --modversion opencv

接下来进行ROS系统环境的配置

复制代码
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

这样就完成了配置,运行roscore发现ROS可以正常启动

复制代码
roscore

rosdep初始化

复制代码
apt-get install python-pip
pip install rosdepc
rosdepc init
rosdepc update

2.安装CCM-SLAM

源码地址:https://github.com/VIS4ROB-lab/ccm_slam

安装依赖项

复制代码
apt-get install python3-catkin-tools

创建工作空间:

复制代码
mkdir -p ~/ccmslam_ws/src
cd ~/ccmslam_ws
source /opt/ros/melodic/setup.bash
catkin init
catkin config --extend /opt/ros/melodic

克隆CCM-SLAM:

复制代码
cd ~/ccmslam_ws/src
git clone https://github.com/VIS4ROB-lab/ccm_slam.git

编译DBoW2:

复制代码
cd /home/pc/docker/ccm/ccmslam_ws/src/ccm_slam-master/cslam/thirdparty/DBoW2
mkdir build
cd build
cmake ..
make -j8

编译g2o:

复制代码
cd ../../g2o/
mkdir build
cd build
cmake --cmake-args -DG2O_U14=0 ..
make -j8

解压Vocabulary:

复制代码
cd ../../../conf/
unzip ORBvoc.txt.zip

CCM-SLAM只在ROS Kinetic with OpenCV 3和ROS Indigo with OpenCV 2测试过,CMakeLists.txt文件也是只有这两个分支。先链接ROS Melodic:

参考:https://github.com/VIS4ROB-lab/ccm_slam/issues/19

Ubuntu 18.04下编译之前需要修改文件:~/ccmslam_ws/src/ccm_slam/cslam/CMakeLists.txt

复制代码
apt-get install vim
vi ../CMakeLists.txt

将16行的

复制代码
else()

改为:

复制代码
elseif($ENV{ROS_DISTRO} MATCHES "melodic")

保存退出。

编译CCM-SLAM

复制代码
cd /home/pc/docker/ccm/ccmslam_ws
catkin build ccmslam -j4 --cmake-args -DG2O_U14=0 -DCMAKE_BUILD_TYPE=Release
复制代码
vi ~/.bashrc
source /home/pc/docker/ccm/ccmslam/devel/setup.bash
source ~/.bashrc

3.测试CCM-SLAM

使用数据集测试:

https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets 下载EuRoC machine hall rosbag 数据

分别为MH_01_easy.bag, MH_02_easy.bag,MH_03_medium.bag,MH_04difficult.bag

用terminator开多个窗口(没有可以先安装,apt-get install terminator)

启动服务器:

复制代码
roslaunch ccmslam Server.launch 

启动客户端0:(启动客户端的数目根据自己CPU的算力决定)

复制代码
roslaunch ccmslam Client0_euroc.launch 
rosbag play MH_01_easy.bag --start 45

启动客户端1:(启动客户端的数目根据自己CPU的算力决定)

复制代码
roslaunch ccmslam Client1_euroc.launch 
rosbag play MH_02_easy.bag --start 35 /cam0/image_raw:=/cam0/image_raw1

启动客户端2:(启动客户端的数目根据自己CPU的算力决定)

复制代码
roslaunch ccmslam Client2_euroc.launch 
rosbag play MH_03_medium.bag --start 15 /cam0/image_raw:=/cam0/image_raw2

启动客户端3:(启动客户端的数目根据自己CPU的算力决定)

复制代码
roslaunch ccmslam Client0_euroc.launch 
rosbag play MH_04difficult.bag --start 15 /cam0/image_raw:/cam0/image_raw3

启动可视化rviz:

复制代码
rviz -d conf/rviz/ccmslam.rviz

这里我开了两个客户端进行测试

相关推荐
鹤落晴春16 小时前
【K8s】Pod调度、configMaps
云原生·容器·kubernetes
极客先躯18 小时前
高级java每日一道面试题-2026年02月02日-实战篇[Docker]-如何实现容器的持久化存储?
docker·容器·面试宝典·持久化·存储·韵味·java高级面试题
云计算磊哥@18 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发
天天进步201518 小时前
Tunnelto 源码解析 #9:控制服务器设计:Warp、WebSocket、Ping/Pong 与连接保活
运维·服务器·websocket
My is 李豆18 小时前
CentOS 7 安装 Docker 完整教程(含 docker-compose 插件)
docker·eureka·centos
极客先躯19 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
Java面试题总结19 小时前
Linux-Ubantu-贴士-apt的地盘
linux·运维·服务器
志栋智能19 小时前
超自动化巡检:提升MTTR,缩短业务影响时间
运维·自动化
kong@react20 小时前
Rocky Linux 10.2 全面解析:企业级 CentOS 替代方案及保姆级docker安装
java·linux·运维·docker
睡不醒男孩03082320 小时前
第八篇:如何构建一站式 PostgreSQL 性能优化与智能管控平台?从盲目排查到 CLup 自动化运维演进
运维·postgresql·性能优化