1.TAOçä»ç»
2.ORB-SLAM3 源码剖析:IMU 预积分
3.ORBSLAM3--学习总结(5)将ORB-SLAM3及相关依赖打包成Docker镜像
4.ORB特征提取与匹配
5.ORB-SLAM2 的编译运行(ubuntu20.04)以及ROS1安装
6.视觉SLAMORB-SLAM:让人Orz的SLAM
TAOçä»ç»
TAOï¼The ACE ORBï¼æ¯ç¾å½åç顿大å¦çDouglas C. Schmidtææé¢å¯¼å¼åçä¸ä¸ªå®æ¶CORBAå¹³å°ï¼å®æ¯ä¸ä¸ªå è´¹çå¼æ¾æºç 项ç®ï¼ç¨C++è¯è¨å¼åï¼ç¬¦åCORBA2.6è§èãORB-SLAM3 源码剖析:IMU 预积分
IMU的数据结构在ORB-SLAM3中用于表示机体坐标系中的测量值。在特定时刻,加速度计测量线加速度和陀螺仪测量角速度。假设这些测量值包含高斯白噪声,且偏置建模为随机游走,其导数也是网页模板免费 源码高斯白噪声。将重力转换到机体坐标系后,得到连续视觉帧间的IMU预积分结果。这些预积分包括旋转、速度和位置测量,以及整个测量向量的协方差矩阵。
在ORB-SLAM3中,每帧的IMU预积分在tracking线程中计算,具体由Tracking::PreintegrateIMU()函数执行。每帧间的IMU测量通过src/ImuTypes.cc中的Preintegrated::IntegrateNewMeasurement()进行积分。主要步骤如下:首先进行偏置校正,然后计算位置、速度的增量,接着计算旋转的增量。旋转变化量以李代数中的旋转向量表示,并通过指数映射转换为旋转矩阵。旋转矩阵按旋转顺序右乘。最后,更新协方差矩阵,频率表源码并调整与偏置修正相关的位置、速度和旋转雅可比。
IMU的偏置校正、测量、标定和预积分类定义在include/ImuTypes.h文件中。
值得注意的是,对于初学者,了解GDB调试方法是提高ORB-SLAM3源码理解效率的重要步骤。GDB提供了一系列功能,允许开发者在运行程序时设置断点、查看变量值、追踪程序执行流程等,从而深入分析代码行为和潜在问题。
ORBSLAM3--学习总结(5)将ORB-SLAM3及相关依赖打包成Docker镜像
为了便于在不同环境中部署和使用ORB-SLAM3,我尝试将ORBSLAM3及其依赖打包成Docker镜像。以下是构建过程的简要记录,可能存在技术上的不足,期待您的指正。1. 准备Docker环境
首先,确保你的系统已经安装了Docker。如果镜像下载速度慢,可以考虑添加国内和国外的镜像加速器,重启Docker服务以应用更改。视频加入源码2. Dockerfile创建镜像
使用Dockerfile构建镜像时,我开始了一个基础示例,但实际操作时,可能需要根据具体环境调整。例如,基础镜像FROM ubuntu:.,可以通过添加加速器解决下载问题。3. 构建镜像与测试
在Dockerfile中,定义镜像名称和标签(如orbslam3:latest),然后在容器中定位到ORBSLAM3源代码,并进行功能测试。3. 直接容器启动方式
除了Dockerfile,也可以通过拉取基础镜像创建容器,然后在容器中安装所需依赖,如cmake、ros等。在Ubuntu容器中,通过apt包管理器安装,例如opencv和Eigen,最后将ORBSLAM3源码添加到容器内。4. 镜像制作与发布
所有依赖安装完毕后,使用docker commit命令将容器转化为镜像。镜像可以通过DockerHub发布,查战力源码需要先注册账号,然后登录并使用docker push命令将镜像上传到公共仓库,以便他人下载使用。以上步骤记录了将ORBSLAM3打包成Docker镜像的基本流程,如有问题或优化建议,欢迎分享。
ORB特征提取与匹配
本文主要回顾了ORB特征提取的过程,并解决了个人对这一主题的疑惑,但未深入探讨OpenCV源码,原因在于个人懒于解析。文章参考了高翔的《视觉SLAM十四讲》和相关opencv实现,欢迎读者指正错误。
好的特征点在于其显著性和匹配的准确性。角点特征,如E和F,因其特征明显,是理想的匹配对象。ORB算法采用OFAST快速提取这些特征点,下面将介绍OFAST和Oriented FAST的原理。
OFAST角点检测基于亮度变化,例如,如果圆周上的连续个点亮度超过或低于特定阈值,像素可能被识别为特征点。type源码大全Oriented FAST在此基础上增加方向信息,以保持旋转不变性。
图像金字塔通过高斯模糊和降采样处理,解决了尺度不变性问题,确保不同尺度下的角点特征能准确匹配。接下来是BRIEF描述子,ORB算法使用的改进BRIEF描述特征,通过二进制编码存储角点邻域信息,以便判断匹配性。
特征方向与BRIEF描述子的结合,保证了旋转不变性。尽管旋转后BRIEF描述子会发生变化,但根据角点方向调整pattern,可以恢复旋转前的状态。
总的来说,ORB特征提取包括角点检测、方向信息添加、尺度不变性处理以及BRIEF描述子编码,这些步骤共同确保了特征点的稳定性和匹配效率。通过《视觉SLAM十四讲》的实例,我们可以理解并应用这些技术。
ORB-SLAM2 的编译运行(ubuntu.)以及ROS1安装
在 Ubuntu . 环境中,编译并运行 ORB-SLAM2 需要一系列的准备工作和库的安装。首先,确保已安装了所需的依赖项,然后按照指定链接从 GitHub 下载并安装 Pangolin-0.6 稳定版。
接着,进行 OpenCV-3.4.5 的安装,包括下载、配置编译环境和查询版本信息以验证安装是否成功。对于 Eigen3,建议源码安装默认的 Eigen 版本(3.3.9),并将其头文件复制到相应目录以确保正常工作。若需要使用特定版本(如3.3.7),需手动安装并调整位置。
在编译 ORB-SLAM2 时,需处理常见的报错,例如在 `System.h` 中添加 `#include` 以解决 `usleep` 报错,并根据特定链接调整 `LoopClosing.h` 文件中的代码以解决第二个报错。第三个报错需删除 `CMakeCache.txt` 文件并重新执行 `cmake ..` 和 `make` 命令。
成功编译后,需在特定目录下运行 ORB-SLAM2,确保使用正确的终端打开以找到可执行文件。此外,安装 ROS1 可以通过一键安装工具完成,注意管理日志目录的大小以避免警告。在安装完成后,启动 ROS Master、小海龟仿真器和海龟控制节点,以验证 ROS1 是否已成功安装。
安装过程中可能遇到的问题包括 ROS 目录的位置和库查找问题,以及如何在编译 ORB-SLAM2 时指定依赖目录。通过将 ROS 目录添加到环境变量(如 `PYTHONPATH` 或 `LD_LIBRARY_PATH`)中,可以解决这些问题并确保库的正确查找。
视觉SLAMORB-SLAM:让人Orz的SLAM
ORB-SLAM,在视觉SLAM领域享有盛誉,其源码在GitHub上已有4.4K+Star,充分彰显了西班牙小哥的出色贡献。近期深入研究其论文并结合源码,体验了一番酸爽,发现它在SLAM领域确实有着独特的魅力与贡献。
ORB-SLAM的核心框架由三个并发进程组成:跟踪、局部建图和回环检测,系统结构清晰,功能分明。跟踪是主进程,负责定位和跟踪相机运动,通过特征匹配实现定位与优化。局部建图则负责关键帧与地图点的插入、删除及局部优化。回环检测则通过搜索回环关键帧,实现位姿图优化,确保系统鲁棒性。
特征提取是ORB-SLAM的关键之一,它采用ORB特征,兼顾性能与效率。与SURF、SIFT等相比,ORB提取速度快,每张仅需.3ms,适用于实时操作。ORB在FAST角点基础上加入方向信息,使BRIEF描述子旋转不变,同时利用图像金字塔和灰度质心法提取特征,实现尺度不变性。此外,通过网格划分与四叉树结构,ORB-SLAM确保特征点分布均匀,即使特征点不足,也可通过调整FAST阈值增加。
单目初始化是ORB-SLAM的另一大亮点,它通过特征点匹配计算基础矩阵和单应矩阵,自动判断场景类型,无需人工设定模型。共视图与本质图结构则加强了关键帧间的联系,实现高效回环检测。相机重定位策略确保了系统在跟踪失败时能快速恢复,关键帧与地图点的删增策略则优化了系统性能。
ORB-SLAM提供多样化的Bundle Adjustment方式,包括初始化阶段的全BA、跟踪过程的运动BA及局部建图阶段的局部BA,适应不同场景需求。整个系统庞大复杂,通过总结主要特性,虽有其精髓,但仍需深入研究,以充分理解其工作原理与优化策略。
总之,ORB-SLAM在视觉SLAM领域展现出了其独特魅力与贡献,从其高效的特征提取到灵活的系统框架,再到多样化的优化策略,无不体现其在SLAM技术中的卓越地位。向所有SLAM领域的先驱者致以崇高的敬意。
ORB-SLAM2源码系列--局部建图线程(MapPointCulling和KeyFrameCulling)
ORB-SLAM2源码系列--局部建图线程详解
MapPointCulling模块负责筛选新加入的地图点,确保地图质量。在ProcessNewKeyFrame函数中,新点被暂存于mlpRecentAddedMapPoints。筛选过程包括:根据相机类型设定不同的观测阈值
遍历新点,若点已标记为坏点则直接从队列中移除
若点的观察帧数少于预期值的%,或者观察相机数量少于阈值cnThObs,即使过了两个关键帧也会被删除
只有经过三个关键帧且未被剔除的点,才会被认定为高质量点,仅从队列移除
另一方面,KeyFrameCulling则针对共视图中的关键帧进行冗余检测。步骤如下:提取当前关键帧的共视关键帧,并遍历它们
对于每个共视关键帧,检查其地图点:若至少有3个其他关键帧观测到,被认为是冗余点
对于双目或RGB-D,仅考虑近距离且深度值大于零的地图点
若关键帧%以上的有效地图点被判断为冗余,该关键帧将被标记为冗余并删除
这样的筛选机制确保了地图数据的准确性和效率。