Openvslam

文章目录

  • Openvslam 学习报告
    • 什么是Openvslam
      • 概念
      • 特点
    • 安装和运行OpenVSLAM
      • 克隆源代码
      • 安装依赖库
      • 测试(环境已经安装成功)
      • 运行
      • 运行失败的总结
      • 运行成功
    • 系统设计
    • 模块和函数接口
    • 调用流程
    • 流程图
    • 参考资料

Openvslam 学习报告

什么是Openvslam

概念

OpenVSLAM(Visual SLAM)是一个开源的视觉定位与地图构建(Visual Simultaneous Localization and Mapping,Visual SLAM)库。它旨在通过使用单目相机、双目相机、RGB-D相机或者其他传感器,实现实时的相机定位和地图构建。Visual SLAM 是一种技术,可以使机器(例如机器人、车辆或者无人机)在未知环境中通过感知视觉信息,实时地进行定位和建立地图。使开发者能够利用相机捕获的图像数据来定位相机自身并创建环境地图。它结合了特征提取、特征匹配、姿态估计、地图构建等核心技术,以实现准确和实时的相机定位和地图构建。

特点

  • 多传感器的支持
  • 实时性能
  • 开源
  • 易用

安装和运行OpenVSLAM

克隆源代码

git clone https://github.com/lp-research/openvslam

安装依赖库

  • 安装Ubuntu系统依赖
sudo apt update -y
sudo apt upgrade -y --no-install-recommends
# basic dependencies
sudo apt install -y build-essential pkg-config cmake git wget curl unzip
# g2o dependencies
sudo apt install -y libatlas-base-dev libsuitesparse-dev
# OpenCV dependencies
sudo apt install -y libgtk-3-dev
sudo apt install -y ffmpeg
sudo apt install -y libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavresample-dev
# eigen dependencies
sudo apt install -y gfortran
# other dependencies
sudo apt install -y libyaml-cpp-dev libgoogle-glog-dev libgflags-dev# (if you plan on using PangolinViewer)
# Pangolin dependencies
sudo apt install -y libglew-dev
  • 安装Eigen矩阵库
cd /Desktop/study/dir
wget -q http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2
tar xf 3.3.4.tar.bz2
rm -rf 3.3.4.tar.bz2
cd eigen-eigen-5a0156e40feb
mkdir -p build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \..
make -j4
sudo make install
  • 安装OpenCV库
cd /Desktop/study/dir
wget -q https://github.com/opencv/opencv/archive/3.4.0.zip
unzip -q 3.4.0.zip
rm -rf 3.4.0.zip
cd opencv-3.4.0
mkdir -p build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \-DENABLE_CXX11=ON \-DBUILD_DOCS=OFF \-DBUILD_EXAMPLES=OFF \-DBUILD_JASPER=OFF \-DBUILD_OPENEXR=OFF \-DBUILD_PERF_TESTS=OFF \-DBUILD_TESTS=OFF \-DWITH_EIGEN=ON \-DWITH_FFMPEG=ON \-DWITH_OPENMP=ON \..
make -j4
sudo make install
  • 安装DBoW2
cd /Desktop/study/dir
git clone https://github.com/shinsumicco/DBoW2.git
cd DBoW2
mkdir build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \..
make -j4
sudo make install
  • 安装g2o
cd /Desktop/study/dir
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
git checkout 9b41a4ea5ade8e1250b9c1b279f3a9c098811b5a
mkdir build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \-DCMAKE_CXX_FLAGS=-std=c++11 \-DBUILD_SHARED_LIBS=ON \-DBUILD_UNITTESTS=OFF \-DBUILD_WITH_MARCH_NATIVE=ON \-DG2O_USE_CHOLMOD=OFF \-DG2O_USE_CSPARSE=ON \-DG2O_USE_OPENGL=OFF \-DG2O_USE_OPENMP=ON \..
make -j4
sudo make install
  • 安装Pangolin库
cd /Desktop/study/dir
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
git checkout ad8b5f83222291c51b4800d5a5873b0e90a0cf81
mkdir build && cd build
cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local \..
make -j4
sudo make install
  • 编译源码
cd /Desktop/study/openvslam
mkdir build && cd build
cmake \-DBUILD_WITH_MARCH_NATIVE=ON \-DUSE_PANGOLIN_VIEWER=ON \-DUSE_SOCKET_PUBLISHER=OFF \-DUSE_STACK_TRACE_LOGGER=ON \-DBOW_FRAMEWORK=DBoW2 \-DBUILD_TESTS=ON \..
make -j4

测试(环境已经安装成功)

在这里插入图片描述

运行

在这里插入图片描述

运行失败的总结

爆红是我改过代码之后的输出。可能是爆内存了。听取老师的建议后我租了服务器。并且通过查阅资料,发现可以使用Docker一键安装。

运行成功

$ docker pull celinachild/openvslam:latest$ docker run --gpus all -it --ipc=host --net=host --privileged -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw -e NVIDIA_DRIVER_CAPABILITIES=all celinachild/openvslam# for mapping
$ ./run_video_slam -v ./orb_vocab/orb_vocab.dbow2 -m ./aist_living_lab_1/video.mp4 -c ./aist_living_lab_1/config.yaml --no-sleep --map-db map.msg# for localization
$ ./run_video_localization -v ./orb_vocab/orb_vocab.dbow2 -m ./aist_living_lab_2/video.mp4 -c ./aist_living_lab_2/config.yaml --no-sleep --map-db map.msg

在这里插入图片描述

在这里插入图片描述

系统设计

OpenVSLAM的整体系统设计可以概括为以下几个关键方面:

  1. 相机模型和传感器输入:OpenVSLAM支持多种不同类型的相机模型和传感器输入,包括单目、双目、RGB-D相机等。
  2. 特征提取和跟踪:OpenVSLAM使用视觉特征来进行定位和建图。特征提取和跟踪模块负责检测图像中的关键点,并在连续帧之间跟踪这些特征点。
  3. 视觉里程计:这个模块负责计算相机在连续帧之间的运动估计,以确定相机的位置和姿态。
  4. 回环检测:OpenVSLAM包括回环检测模块,用于识别在不同时间点拍摄的相似帧,并纠正可能的漂移。
  5. 建图:建图模块将特征点和运动估计转化为地图,用于表示环境的三维结构。
  6. 优化:优化模块用于全局地图优化,以提高定位的准确性和地图的一致性。
  7. 可视化和输出:OpenVSLAM还包括可视化工具和输出模块,以便于用户查看定位和地图结果。

模块和函数接口

OpenVSLAM的代码基本上按照上述系统设计分为多个模块,每个模块包含多个函数和类。以下是一些主要模块和它们的功能:

  1. FeatureExtractor 模块:负责特征点提取。
  2. Initializer 模块:执行初始化操作,例如初始化视觉里程计。
  3. Tracking 模块:执行相机的跟踪和定位。
  4. LoopDetector 模块:用于检测回环。
  5. Map 模块:管理地图的结构,包括关键帧和地图点。
  6. Optimizer 模块:执行全局地图优化。
  7. System 模块:系统的核心,协调各个模块的运行。

调用流程

OpenVSLAM的调用流程通常涉及以下步骤:

  1. 初始化OpenVSLAM系统,选择相机类型和配置。
  2. 提供传感器输入,如图像序列或相机数据流。
  3. 执行特征提取和跟踪,计算视觉里程计。
  4. 在运行中,回环检测模块可能会触发来检测回环。
  5. 定期执行全局地图优化,以提高地图的一致性和定位精度。
  6. 输出定位结果和地图数据,以便可视化或后续应用。

流程图

在这里插入图片描述

参考资料

lp-research/openvslam: OpenVSLAM Fork for LP-Research (github.com)

zm0612/openvslam-comments: openvslam的注释版代码 (github.com)

https://hub.docker.com/r/celinachild/openvslam

https://arxiv.org/abs/1910.01122 (论文:OpenVSLAM: A Versatile Visual SLAM Framework)

ChatGPT (openai.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/123652.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT 初识多线程

1.QThread线程基础 QThread是Qt线程中有一个公共的抽象类,所有的线程类都是从QThread抽象类中派生的,需要实现QThread中的虚函数run(),通过start()函数来调用run函数。 void run()函数是线程体函数,用于定义线程的功能…

SW的stp文件转成CAD格式文件学习笔记

SW的stp文件转成CAD格式文件 如图一个STP文件,右上角标注是什么文件呢 另存为零件图,即另存为part 如图所示 用solidworks打开另存为的零件图,点击是,会识别特征 . 直接默认点对勾 之后会出现可编辑的零件图 另存为CA…

文件上传漏洞-upload靶场13-16关 (图片木马-文件包含与文件上次漏洞)

文件上传漏洞-upload靶场13-16关 (图片木马-文件包含与文件上次漏洞) 简介 upload靶场到了第十三关,难度就直线上升了,在最后这7关中,包含了图片木马、竞争条件等上传技巧,这些漏洞的本质,都是…

如何修复老照片?老照片修复翻新的方法

老旧照片,尤其是黑白照片,往往因为年代久远、保存方式不当等原因而出现褪色、污损、划痕等问题,会比较难以修复,就算是技术精湛的专业修复师,也是需要投入极大时间精力的,效果也是不可预料的。 修复老照片…

算法:数组常见套路1---双指针、取模、打擂台法

一、数组的合并–双指针[快慢指针] 1、题目: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺…

3、Spring 之IOC 容器 详解

IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象的…

数据向好,分析师预测美联储GDP或将翻一番?

KlipC报道:最新公布的一些数据显示,美国经济看起来十分稳健,华尔街人士认为,这可能促使美联储本月公布的将2023年经济增长预测提高一倍,同时下调明年降息的预期幅度。 KlipC的合伙人Andi D表示:“在从消费者…

高压放大器在机械制造领域的应用有哪些

在机械制造领域,高压放大器扮演着至关重要的角色。它们被广泛应用于各种机械设备和系统中,提供高压力、高精度的电信号放大。下面安泰电子将详细介绍高压放大器在机械制造领域的几个关键应用。 材料测试和强度试验 高压放大器广泛应用于材料测试和强度试…

什么是跨域问题 ?Spring MVC 如何解决跨域问题 ?Spring Boot 如何解决跨域问题 ?

目录 1. 什么是跨域问题 ? 2. Spring MVC 如何解决跨域问题 ? 3. Spring Boot 如何解决跨域问题 ? 1. 什么是跨域问题 ? 跨域问题指的是不同站点之间,使用 ajax 无法相互调用的问题。 跨域问题的 3 种情况&#x…

【C++ Core Guidelines解析】C++学习之路的一盏明灯

前言:C语言的功能非常丰富,表达能力非常强。因为一种成功的通用编程语言拥有的功能必须比任何开发人员所需要的更多,任何一种有生命力且不断发展的语言都会不断积累用于表达程序员思想的替代用法。这会导致选择过载。那么,开发人员…

专业的视觉特效处理包,FxFactory 8 Pro for Mac助您打造精彩视频

FxFactory 8 Pro for Mac是一款强大的视觉特效处理包,专门为Mac用户设计。它集成了超过200种高质量的视觉效果和过渡效果,可以轻松地应用于各种视频项目中。该软件提供了一个直观的界面,用户可以通过简单拖放操作将特效应用到视频片段上。它支…

Lesson5-1:OpenCV视频操作---视频读写

学习目标 掌握读取视频文件,显示视频,保存视频文件的方法 1 从文件中读取视频并播放 在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件: 创建读取视频的对象 cap cv.VideoCapt…

java八股文面试[数据库]——索引下推

什么是索引下推? 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 需求: 查询users表中 "名字第一个字是张,年龄为10岁的所有记录"。 SELECT * FROM users…

将 Spring Boot 应用程序与 Amazon DocumentDB 集成

Amazon DocumentDB(与 MongoDB 兼容)是一种可扩展、高度持久和完全托管的数据库服务,用于操作任务关键型 MongoDB 工作负载。在 Amazon DocumentDB 上,您可以使用相同的 MongoDB 应用程序代码、驱动程序和工具来运行、管理和扩展工…

监控 -- linux中的一些系统性能状态指令、Prometheus

目录 监控查看性能相关命令Prometheus1、安装和配置2、将 NFS服务器和LB服务器作为exporter采集数据3、在prometheus server里添加安装exporter程序的服务器 grafana出图工具 监控 监控的目的是获取数据,通过数据分析了解机器是否正常运行 查看性能相关命令 查看c…

学习pytorch8 土堆说卷积操作

土堆说卷积操作 官网debug torch版本只有nn 没有nn.functional代码执行结果 B站小土堆视频学习笔记 官网 https://pytorch.org/docs/stable/nn.html#convolution-layers 常用torch.nn, nn是对nn.functional的封装,使函数更易用。 卷积核从输入图像左上角&#xf…

Python数据分析实战-将dataframe某列的值分成不同区间并计算每个区间的频数(附源码和实现效果)

实现功能 将dataframe某列的值分成不同区间并计算每个区间的频数 实现代码 import pandas as pd# 创建dataframe data {Name:[Tom1, Jack1, Steve1, Ricky1, Tom2, Jack2, Steve2, Ricky2],Score:[78,60,59,42,88,34,69,142]} df pd.DataFrame(data) print(df)# 定义区间和…

【VL tracking】Towards Unified Token Learning for Vision-Language Tracking

不知道什么原因学校认证账号进不去,下载不了最新的PDF 广西师范大学 | 国科大 | 厦大 代码开源 zhihu指路👉【VL tracking】MMTrack阅读 问题 一方面,传统的VL tracking方法需要昂贵的先验知识。例如,一些tracker是专门用于bou…

【产线故障】线上接口请求过慢如何排查?

文章目录 前言一、内存使用过高导致CPU满载案例代码分析思路 二、出现了类似死循环导致cpu负载案例代码分析思路 三、死锁案例代码分析思路 前言 首先线上接口变慢,原因可能有很多,有可能是网络,有可能是慢 SQL,有可能是服务本身…

【Linux】- 一文秒懂shell编程

shell编程 1.1 Shell 是什么1.2 Shell 脚本的执行方式1.3 编写第一个 Shell 脚本2.1 Shell 的变量2.2 shell 变量的定义2.3 设置环境变量3.1 位置参数变量3.2 预定义变量4.1 运算符4.2 条件判断5.1 流程控制5.2 case 语句5.3 for 循环5.4 while 循环5.5 read基本语法6.1函数6.2…