使用docker配置CCM-SLAM

2024-04-20 06:28
文章标签 配置 使用 docker slam ccm

本文主要是介绍使用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 install
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

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

这篇关于使用docker配置CCM-SLAM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/919507

相关文章

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析