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的整体系统设计可以概括为以下几个关键方面:
- 相机模型和传感器输入:OpenVSLAM支持多种不同类型的相机模型和传感器输入,包括单目、双目、RGB-D相机等。
- 特征提取和跟踪:OpenVSLAM使用视觉特征来进行定位和建图。特征提取和跟踪模块负责检测图像中的关键点,并在连续帧之间跟踪这些特征点。
- 视觉里程计:这个模块负责计算相机在连续帧之间的运动估计,以确定相机的位置和姿态。
- 回环检测:OpenVSLAM包括回环检测模块,用于识别在不同时间点拍摄的相似帧,并纠正可能的漂移。
- 建图:建图模块将特征点和运动估计转化为地图,用于表示环境的三维结构。
- 优化:优化模块用于全局地图优化,以提高定位的准确性和地图的一致性。
- 可视化和输出:OpenVSLAM还包括可视化工具和输出模块,以便于用户查看定位和地图结果。
模块和函数接口
OpenVSLAM的代码基本上按照上述系统设计分为多个模块,每个模块包含多个函数和类。以下是一些主要模块和它们的功能:
- FeatureExtractor 模块:负责特征点提取。
- Initializer 模块:执行初始化操作,例如初始化视觉里程计。
- Tracking 模块:执行相机的跟踪和定位。
- LoopDetector 模块:用于检测回环。
- Map 模块:管理地图的结构,包括关键帧和地图点。
- Optimizer 模块:执行全局地图优化。
- System 模块:系统的核心,协调各个模块的运行。
调用流程
OpenVSLAM的调用流程通常涉及以下步骤:
- 初始化OpenVSLAM系统,选择相机类型和配置。
- 提供传感器输入,如图像序列或相机数据流。
- 执行特征提取和跟踪,计算视觉里程计。
- 在运行中,回环检测模块可能会触发来检测回环。
- 定期执行全局地图优化,以提高地图的一致性和定位精度。
- 输出定位结果和地图数据,以便可视化或后续应用。
流程图

参考资料
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)
相关文章:
Openvslam
文章目录 Openvslam 学习报告什么是Openvslam概念特点 安装和运行OpenVSLAM克隆源代码安装依赖库测试(环境已经安装成功)运行运行失败的总结运行成功 系统设计模块和函数接口调用流程流程图参考资料 Openvslam 学习报告 什么是Openvslam 概念 OpenVSL…...
Windows通过RDP异地远程桌面Ubuntu【内网穿透】
文章目录 前言1. ubuntu安装XRDP2.局域网测试连接3.安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 前言 XRDP是一种开源工具,它允许用户通过Windows RDP访问Linux远程桌面。 除了Windows RDP外,xrdp工具还接受来自其他RDP客户端(如Fre…...
js 基础 (ES 模块)
ES 模块语法 1、模块化的背景 JavaScript 程序本来很小——在早期,它们大多被用来执行独立的脚本任务,在你的 web 页面需要的地方提供一定交互,所以一般不需要多大的脚本。过了几年,我们现在有了运行大量 JavaScript 脚本的复杂…...
K8s 多集群实践思考和探索
作者:vivo 互联网容器团队 - Zhang Rong 本文主要讲述了一些对于K8s多集群管理的思考,包括为什么需要多集群、多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构实践。 一、为什么需要多集群 随着K8s和云原生技术的快速发展,…...
德国金融监管机构网站遭遇大规模DDoS攻击后“瘫痪”
德国波恩的BaFin大楼 BaFin是负责监督和监管德国金融机构和市场的金融监管机构,其职责是确保德国金融体系的稳定性、完整性和透明度。 此外,BaFin 的网站还为企业和消费者提供银行、贷款和财产融资等方面的信息。它还提供消费者帮助热线和举报人信息共…...
关于特殊时期电力行业信息中心运营思路
一、防御思路 安全运营是一系列规则、技术和应用的集合,用以保障组织核心业务平稳运行的相关活动,是通过灵活、动态的实施控制以期达到组织和业务需要的整体范围可持续性正常运行。信息中心在特殊时期扮演着关键的角色,因此需要精心设计运营…...
机器人中的数值优化(八)——拟牛顿方法(上)
本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…...
mac安装adobe需要注意的tips(含win+mac all安装包)
M2芯片只能安装2022年以后的(包含2022年的) 1、必须操作的开启“任何来源” “任何来源“设置,这是为了系统安全性,苹果希望所有的软件都从商店或是能验证的官方下载,导致默认不允许从第三方下载应用程序。macOS sie…...
C/C++学习网址
1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段 2、http://www.hotscripts.com/category/c-cpp/scripts-programs/ Hotscripts --提供数以百计的C和C脚本和程序。所有程序都分为不同的类别。 3、http://www.planetsourcecode.com/vb/default.asp?lng…...
Typora导出的PDF目录标题自动加编号
Typora导出的PDF目录标题自动加编号 在Typora主题文件夹增加如下文件后,标题便自动加上了编号: https://gitcode.net/as604049322/blog_data/-/blob/master/base.user.css 例如: 但是导出的PDF中,目录却没有编号: 这…...
【React】React学习:从初级到高级(二)
React学习【二】 2 添加交互2.1 响应事件2.1.1 添加事件处理函数2.1.2 在事件处理函数中读取props2.1.3 将事件处理函数作为props传递2.1.4 命名事件处理函数prop2.1.5 事件传播2.1.6 阻止传播2.1.7 传递处理函数作为事件传播的替代方案2.1.8 阻止默认行为 2.2 State: 组件的记…...
无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“Newtonsoft.Json.Linq.JArray”解决方法
对于“Newtonsoft.Json.Linq.JObject”的对象强制类型转换为类型“Newtonsoft.Json.Linq.JArray”报错 第一的图为对象{“*************”:“********”} 第二个图片为数组[{“…”:“…”}] 在我这里进行强制转换对象转换为类型“Newtonsoft.Json.Linq.JArray”报错. 那我们…...
从零开始,无需公网IP,搭建本地电脑上的个人博客网站并发布到公网
文章目录 前言1. 安装套件软件2. 创建网页运行环境 指定网页输出的端口号3. 让WordPress在所需环境中安装并运行 生成网页4. “装修”个人网站5. 将位于本地电脑上的网页发布到公共互联网上 前言 在现代社会,网络已经成为我们生活离不开的必需品,而纷繁…...
Excel VSTO开发6 -Range对象
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 6 Range对象 Excel中最重要的一个对象是Range对象,它可以代表某一单元格、某一行、某一列、某一区域(该区域…...
LeetCode 15 三数之和
题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 // 1. 排序双指针 // 2. 固定一个值nums[i] 然后去剩下的位置去找 两数之和符合nums[j]nums[k]是否等于-nums[i] // 3. 细节问题:由于题目中是不可以包含重复的三元组的…...
车船边缘网关是如何给车辆船只定位的?
随着智能交通系统的不断发展,车路协同成为了重要的研究方向之一。而AI边缘计算网关在这个领域中发挥着至关重要的作用。本文将重点介绍AI边缘计算网关在车路协同中的应用,并强调其中的重点词汇或短语。 首先,什么是AI边缘计算网关࿱…...
详解MAC帧、ARP、DNS、ICMP协议
局域网通信原理 比如新建了一个内网,如果一台机器A找机器B,封FRAME时(OSI的第二层用的数据格式),要封装对方的MAC,开始时A不知道B的MAC,只知道IP,它就发一个ARP包,源IP是…...
Leetcode:【169. 多数元素】
题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 难度:简单 题目链接:169. 多数元素 示例 1ÿ…...
好用免费的Chat GPT
MindLink麦灵 你问我答 灵感 持续更新中。。。。...
MySQL-MHA
目录 1、什么是 MHA 2、MHA 的组成 3、MHA 的特点 3.1 MHA工作原理总结如下 4、搭建 MySQL MHA 4.1 实验环境配置 MHA架构 故障模拟 4.2 安装MHA所有组件 4.3 故障模拟 4.4 总结 1、什么是 MHA MHA(MasterHigh Availability)是一套优秀的My…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
