使用docker配置CCM-SLAM

ops/2024/9/24 5:27:56/

一.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

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


http://www.ppmy.cn/ops/11462.html

相关文章

API请求报错 Required request body is missing问题解决

背景 在进行调用的时候&#xff0c;加载方法&#xff0c;提示以下错误 错误信息如下&#xff1a; {"code": 10001,"msg": "Required request body is missing: XXX","data": null,"extra": null }Required request body…

【C++】---STL之vector的模拟实现

【C】---STL之vector的模拟实现 一、vector在源码中的结构&#xff1a;二、vector类的实现&#xff1a;1、vector的构造2、析构3、拷贝构造4、赋值运算符重载5、迭代器6、operator[ ]7、size()8、capacity()9、reserve()10、resize()11、empty()12、push_back()13、pop_back()1…

跟着野火从零开始手搓FreeRTOS(6)多优先级的配置

在 FreeRTOS 中&#xff0c;数字优先级越小&#xff0c;逻辑优先级也越小。 之前提过&#xff0c;就绪列表其实就是一个数组&#xff0c; 里面存的是就绪任务的TCB&#xff08;准确来说是 TCB 里面的 xStateListItem 节点&#xff09;&#xff0c;数组的下标对应任务的优先级&a…

7.2K star!一个完全免费,可以本地部署的 AI 搜索聚合器。新手可尝试

原文链接&#xff1a;7.2K star&#xff01;一个完全免费&#xff0c;可以本地部署的 AI 搜索聚合器。新手可尝试 ChatGPT 刚上线的时候我用的很少&#xff0c;还是习惯用 Google。主要还是因为不信任&#xff0c;怕它对我胡说八道。 慢慢的&#xff0c;也没有一个明确的时间…

Atlas Vector Search:借助语义搜索和 AI 针对任何类型的数据构建智能应用

Atlas Vector Search已正式上线&#xff01; Vector Search&#xff08;向量搜索&#xff09;现在支持生产工作负载&#xff0c;开发者可以继续构建由语义搜索和生成式人工智能驱动的智能应用&#xff0c;同时通过 Search Node&#xff08;搜索节点&#xff09;优化资源消耗并…

k-means聚类算法的MATLAB实现及可视化

K-means算法是一种无监督学习算法&#xff0c;主要用于数据聚类。其工作原理基于迭代优化&#xff0c;将数据点划分为K个集群&#xff0c;使得每个数据点都属于最近的集群&#xff0c;并且每个集群的中心&#xff08;质心&#xff09;是所有属于该集群的数据点的平均值。以下是…

十大排序——6.插入排序

这篇文章我们来介绍一下插入排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 插入排序的要点如下所示&#xff1a; 首先将数组分为两部分[ 0 ... low-1 ]&#xff0c;[ low ... arr.length-1 ]&#xff0c;然后&#xff0c;我们假设左边[ 0 ... low-1 ]是已排好序的部分…

密码学 | Random Oracle 随机预言机

​ &#x1f951;原文&#xff1a;究竟什么才是随机预言机呢&#xff1f; - 玄星的回答 &#x1f951;答主指出&#xff1a; 英文维基明明对 随机预言机 给出了两个完全不同的理解&#xff0c;但这两个理解之间的连接词却是 “Stated differently”&#xff0c;即 “换句话说…