ORB_SLAM3
文章平均质量分 54
v1版本的环境配置和代码解读
My.科研小菜鸡
这个作者很懒,什么都没留下…
展开
-
数学符号和预积分
https://zhuanlan.zhihu.com/p/388859808这个预积分写得极好。此外中值积分和欧拉积分一会写。等号上加一点为约等于。原创 2022-10-04 22:23:20 · 92 阅读 · 0 评论 -
RMSE(均方根误差)、MSE(均方误差)、MAE(平均绝对误差)、SD(标准差)
原文链接:https://blog.csdn.net/FrankieHello/article/details/82024526。通过平方的形式便于求导,所以常被用作线性回归的损失函数。MSE是真实值与预测值的差值的平方然后求和平均。常用来作为机器学习模型预测结果衡量的标准。可以更好地反映预测值误差的实际情况。衡量观测值与真实值之间的偏差。用于衡量一组数值的离散程度。是绝对误差的平均值。转载 2022-08-24 15:58:12 · 2820 阅读 · 0 评论 -
1. ORBSLAM3_V1 编译
参考https://blog.csdn.net/zhh2005757/article/details/122353772需要注意的是最后的段错误,如果更改pangolin版本orbslam2就不能用了,所以暂时不更改。原创 2022-04-07 11:09:01 · 1917 阅读 · 0 评论 -
2. ORB-SLAM3_V1 源码阅读笔记 -Examples -ros_stereo_inertial.cc
主要参考:https://zhuanlan.zhihu.com/p/349401824,在此基础上对1.0版本的orbslam3代码解读。程序的main函数在Examples文件夹中,分为ROS接口和非ROS接口的。下面以ros_stereo_inertial.cc为例。原创 2022-05-08 11:05:08 · 832 阅读 · 0 评论 -
3. ORB-SLAM3_V1 源码阅读笔记 -System
http://System.cc这个文件主要是SLAM系统的初始化、跟踪线程的入口、地图的保存和加载以及轨迹的保存。1、System构造函数2、跟踪线程的入口,在main函数中被调用单目或单目+IMU模式/** * @brief 单目/单目VIO跟踪 * * @param[in] im 灰度图像 * @param[in] timestamp 图像时间戳 * @param[in] vImuMeas 上一帧到当前帧图像之间的IM原创 2022-05-09 00:29:34 · 1068 阅读 · 3 评论 -
opencv CV_8UC1、CV_32FC3、CV_32S等参数的含义
形如:CV_<bit_depth>(S|U|F)C<number_of_channels>参数说明:bit_depth:比特数---代表8bite,16bites,32bites,64bites...举个例子吧--比如说:如果你现在创建了一个存储--灰度图片的Mat对象,这个图像的大小为宽100,高100,那么,现在这张灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite,8位--所以它对应的就是CV_8。--------------原创 2022-05-09 23:17:32 · 3217 阅读 · 0 评论 -
opencv initUndistortRectifyMap 计算重映射关系
函数原型:CV_EXPORTS_W void initUndistortRectifyMap( InputArray cameraMatrix, InputArray distCoeffs, InputArray R, InputArray newCameraMatrix, Size size, int m1type, OutputArray map1, OutputArray map2 );*原创 2022-05-10 01:35:37 · 925 阅读 · 0 评论 -
opencv 畸变矫正 undistort()和initUndistortRectifyMap()
从摄像机成像畸变的产生于是其“天生”的,不可避免的,这主要是由于透镜成像原理导致的。其畸变的原理可以参考相机模型)。它的畸变按照原理可以分解为切向畸变和径向畸变。畸变校正opencv提供了可以直接使用的矫正算法,即通过calibrate Camera()得到的畸变系数,生成矫正后的图像。我们可以通过undistort()函数一次性完成;也可以通过initUndistortRectifyMap()和remap()的组合来处理。1、initUndistortRectifyMap()和remap()在转载 2022-05-10 02:12:05 · 3374 阅读 · 0 评论 -
4. ORB-SLAM3_V1 源码阅读笔记 -Tracking类
Tracking.cc文件的主要内容有:在构造函数中读取配置文件中的参数。处理图像和imu数据,进行位姿跟踪,最主要的是track( )函数。1、Tracking构造函数主要作用:读取相机参数、ORB特征点参数、惯导参数Tracking::Tracking(System *pSys, ORBVocabulary* pVoc, FrameDrawer *pFrameDrawer, MapDrawer *pMapDrawer, Atlas *pAtlas, KeyFrameDatabase原创 2022-05-10 23:48:44 · 938 阅读 · 0 评论 -
5. ORB-SLAM3源码阅读笔记 -ImuTypes
该文件包含的类主要是用来处理imu数据、标定的外参和噪声、预积分,以及一些李群李代数常用函数。下面一一介绍。很多用到的公式都来自这篇经典论文(以下简称forster论文):1、Point类//imu加速度、角速度、时间戳数据class Point{public: Point(const float &acc_x, const float &acc_y, const float &acc_z, const float &ang_vel转载 2022-05-10 23:55:37 · 527 阅读 · 0 评论 -
ORB-SLAM3源码阅读笔记(5)-视觉初始化
视觉初始化分为单目/单目imu、双目/双目imu/RGBD两种。单目初始化要处理2D-2D匹配问题,比双目初始化要复杂一些。视觉初始化的入口在//track.cc文件中,完成单目初始化功能的代码在TwoViewReconstruction.cc中,ORB-SLAM3还加入了imu,imu相关的初始化在LocalMapping.cc线程主函数中完成。1、Tracking::MonocularInitialization()void Tracking::MonocularInitialization()//转载 2022-05-11 11:25:10 · 548 阅读 · 0 评论 -
ORB-SLAM3源码阅读笔记(6)-MLPnP
MLPnPsolver.cc用于在重定位时计算当前帧和候选帧的位姿变换,利用了3D-2D匹配。与ORB-SLAM2中的EPnP算法不同,MLPnP不依赖于相机模型,主要根据相机的反投影函数计算bearing vector。代码中的数学原理和公式都出自这篇论文,我仅对代码进行一下梳理。1、构造函数MLPnPsolver::MLPnPsolver(const Frame &F, const vector<MapPoint *> &vpMapPointMatches)://3D(地转载 2022-05-11 11:35:14 · 547 阅读 · 0 评论 -
ORB-SLAM3源码阅读笔记(8)-LocalMapping
在LocalMapping.cc这个文件中主要做了两件事,一是局部关键帧和地图点的优化,二是imu的初始化。根据ORB-SLAM3论文和代码,imu的初始化一共有三个阶段:纯视觉的MAP估计。系统运行2s,地图中大概有10个关键帧和几百个地图点时,进行一次纯视觉的局部BA,优化关键帧位姿和地图点。仅imu的MAP估计。估计imu的速度、bias(初始化过程中假设不变)、重力方向旋转矩阵Rwg(将第一帧相机确定的世界坐标系的负z轴旋转到与重力方向重合的方向)、尺度s。通过预积分构建imu残差,利用图优转载 2022-05-11 15:07:36 · 758 阅读 · 0 评论 -
ORB-SLAM3源码阅读笔记(9)-LoopClosing.cc
LoopClosing.cc这个文件是闭环检测与矫正的代码,其逻辑比较清晰。由于用到了多地图集,所以闭环检测不仅在当前地图中进行,还会在以前的地图中检测。如果是在当前地图中检测到了回环,则进行回环矫正;如果是在以前的地图中检测到了回环,则在回环处进行地图的融合,并矫正融合地图中所有的关键帧位姿和地图点。1、闭环检测与矫正的流程LoopClosing流程图2、NewDetectCommonRegions( )这个函数是闭环检测线程中最重要的函数之一,用于检测闭环帧。下面是算法流程。函数一开始先从转载 2022-05-11 16:08:03 · 620 阅读 · 0 评论 -
ORB-SLAM3源码阅读笔记(10)-结构梳理-待完善
1、Main 主线程在Demo的主线程中,我们大致需要完成:1、参数的输入和判断;2、构建Slam类;3、循环获取数据发送给Slam系统;4、结束循环并释放Slam系统;5、按需决定是否保存相关信息2、System类System就是Slam类,主要完成:1、Slam系统的构建;2、输入数据的接收和发送给Track类;3、作为顶层接收Track发送的Reset信号,完成Atlas、Map等重启;4、提供Slam关闭接口;5、提供数据保存接口3、Track类Track作为Slam系统中重要的一个类负责转载 2022-05-11 16:13:49 · 246 阅读 · 0 评论 -
ORB-SLAM3源码阅读笔记(11)-数据流
以双目惯导程序为例,其他程序也大致相同。1.原始数据订阅 ros::Subscriber sub_imu = n.subscribe("/mynteye/imu/data_raw", 1000, &ImuGrabber::GrabImu, &imugb); ros::Subscriber sub_img_left = n.subscribe("/mynteye/left/image_raw", 100, &ImageGrabber::GrabImageLeft,&原创 2022-05-13 23:24:24 · 461 阅读 · 0 评论 -
orbslam3_v1官方标定指导
Calibration Tutorial for ORB-SLAM3 v1.01.介绍本文档简要说明了视觉和视觉惯性标定(针对ORB-SLAM3 v1.0版本)。在这个版本中,我们引入了一种新的校准文件格式.新文件格式的优势:通过一致的命名提高了可读性双目图像矫正选项调整输入图像尺寸选项可在Examples中找到使用新校准fromat的一些示例。虽然我们建议使用新的文件格式,但为了方便用户,程序兼容以前版本中使用的文件格式,其示例见Examples_old。2.参考系和外参外参定义了不原创 2022-05-15 01:14:26 · 2105 阅读 · 1 评论 -
ORBSLAM3_1.0 BUG修改记录
1.畸变矫正和resize操作只能2选一 if(settings_ && settings_->needToRectify()){ cv::Mat M1l = settings_->M1l(); cv::Mat M2l = settings_->M2l(); cv::Mat M1r = settings_->M1r(); cv::Mat M2r = settings_->M2r();原创 2022-05-16 10:44:47 · 307 阅读 · 0 评论 -
opencv 图像载入 imread()
函数原型:Mat imread( const string& filename, int flags=1 );参数介绍:filename载入的图像名;flags指定加载图像的颜色类型,默认载入三通道彩色图像,如果取枚举类型 (OpenCV3中暂时失效),则定义如下enum{ CV_LOAD_IMAGE_UNCHANGED = -1, /* 8 bit, color or not */ CV_LOAD_IMAGE_GRAYSCALE = 0, /* 8 bit, gra原创 2022-05-24 16:06:17 · 153 阅读 · 0 评论 -
ORBSLAM3 草稿笔记
1.特征点提取:在构建frame时,完成特征点提取。2.特征点匹配:特征点匹配在tracking参考关键帧追踪,和localmaping中也会匹配当前关键帧和关联关键帧的匹配特征点。3.单帧追踪输入的图像作为当前关键帧,匹配特征点,参考关键帧跟踪、恒速模型跟踪、imu预测位姿、重定位。4.多帧的局部优化策略输入关键帧启动局部建图线程提取与当前关键帧所有相关联的关键帧进行优化优化完成后,剔除冗余关键帧冗余的判定:该关键帧的90%的地图点可以被其它关键帧观测到。因此进行共视图优原创 2022-05-27 21:30:59 · 222 阅读 · 0 评论 -
kitti数据集介绍和使用--待整理
vinsf适配kitti 双目惯导+gps :https://blog.csdn.net/hltt3838/article/details/109739046orbslam3适配kitti双目惯导:https://blog.csdn.net/a922922737/article/details/115116952?ops_request_misc=&request_id=&biz_id=102&utm_term=orbslam3%20kitti%E6%83%AF%E5%AF%B原创 2022-05-27 23:41:09 · 454 阅读 · 0 评论 -
Twc和Tcw的深入理解
1.先想象一下,有两个个三维的坐标系W、C,在W中和C中有一个相同的向量,其实就是一个点,但是由于坐标系不同,两个点坐标表示为Pw和Pc因为是同一个向量所以两者关系可以表示为Pw=R*Pc+tR:表示旋转t:表示平移量因此R*Pc:表示向量pc旋转R到向量pw+t:表示向量pc平移t到向量pw2.再想象一下,如果你想让一个向量旋转,有两种方法,一个是你的向量真的在旋转,另一种方法就是你的坐标系旋转。平移也是一样的道理,所以:R*Pc:表示坐标系W旋转R到坐标系C+t:表示坐标系W平原创 2022-05-28 02:27:59 · 3069 阅读 · 0 评论 -
GDB调试 ORBSLAM3
1. 使用流程:debug编译通过gdb启动2. 简介db是GNU开源组织发布的一个强大的Linux下的程序调试工具。一般来说,GDB主要帮助你完成下面四个方面的功能:启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)当程序被停住时,可以检查此时你的程序中所发生的事。你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。...原创 2022-06-01 03:39:00 · 972 阅读 · 0 评论 -
ORB SLAM3加载Vocabulary更快ORBvoc.bin
将ORBvoc.bin拷贝到Vocabulary文件夹下,ORBvoc.bin百度云盘下载地址 密码idr0,记得解压缩。原创 2022-08-02 17:18:07 · 500 阅读 · 0 评论 -
ORBSLAM3 主程序循环是如何实现的
ros::spin()与ros::spinonce()的区别是,当程序遇到ros::spin()时,会一直执行上面这行代码,而且只会执行这一行代码(比如说你的ros::spin()与上面一行代码中间有代码,那也只会在开始的时候执行一次,遇到ros::spin()之后就不会再执行了,而不是像我们常看到的执行完这一句执行下一句),不停地订阅消息、调用回调函数、订阅消息、调用回调函数…如果你的代码中没有写ros::spin()或ros::spinonce(),那么上面这行代码是毫无意义的,因为它并不会执行。...原创 2022-08-13 12:46:59 · 186 阅读 · 0 评论 -
Linux的ccache配置
原文链接:https://blog.csdn.net/m0_51485866/article/details/120278175。编译orbslam3每次都要很久,听了杰杰兄的建议使用ccache,效果喜人。通过 vim ~/.bashrc 打开bashrc界面。输出/usr/lib/ccache/gcc表示成功。点击esc退出写入模式,依次输入:wq保存并退出。更改环境变量PATH。......转载 2022-08-16 14:47:23 · 1128 阅读 · 5 评论 -
slam中的内点外点
原文链接:https://www.zhihu.com/question/279394795/answer/406718585。转载 2022-08-17 22:18:28 · 640 阅读 · 0 评论