昼行plus
学而知菜,菜而后学……
杂而不精,去杂就精……
展开
-
视觉SLAM入门 -- 学习笔记 - Part 9 Kitti 的双目视觉里程计
Kitti 的Odometry 提供了左右双目的视觉图像(以及激光,但本作业不使用激光数据),并提供了标定信息。它一共含有若干个Sequence,其中一部分Sequence 的真实轨迹是开放的,另一部分则是隐藏的,作为测试使用。在Kitti 官网可以上传你对测试部分的轨迹估计,系统会计算与真实轨迹的差异,并给出评分。现在我们已经介绍了所有关于视觉SLAM 方面的内容,你可以基于已有算法,实现一个双目的视觉里程计了。Kitti 官网odometry 分类下提供了双目相机的所有信息。请你根据已学知识,实现双目原创 2022-11-23 16:01:54 · 783 阅读 · 0 评论 -
论文笔记 《FAST-LIO2: Fast Direct LiDAR-inertial Odometry》及 激光SLAM综述
同Fast-LIO,采用IKF。直接将原始点注册到地图(并随后更新地图),而不提取特征。(问题: 直接映射需要位姿估计,但不提特征位姿哪里来?)采用ikd_Tree的数据结构,支持数据的增量式更新(增删)计算效率高(例如,在大型室外环境中高达100 Hz的轨迹估计和建图)鲁棒(例如,在转速高达 1000deg/s 的嘈杂室内环境中依旧能可靠估计姿态)多用途(例如,适用于多线旋转和固态激光雷达、UAV(无人机)和手持平台,以及基于 Intel 和 ARM 的处理器)原创 2022-11-23 15:56:53 · 525 阅读 · 0 评论 -
nuScenes数据集浅探(待完善……)
华中理工大学:http://pypi.hustunique.com/ 山东理工大学:http://pypi.sdutlinux.org/是自动驾驶公司 nuTonomy 建立的大规模自动驾驶数据集,第一个提供 自动汽车全套传感器数据,另外由于我下载的是Full dataset 的 v1.0-mini数据,因此需要将。可以看到这部分数据集的内容,类别较少是因为是mini,下载完整版数据集会大很多。与kitti数据集相比,其包含的对象注释多了7倍多。少数具有Radar数据的数据集!以下介绍安装和使用教程。...原创 2022-08-05 21:06:58 · 426 阅读 · 1 评论 -
EuROC 数据集格式及相关代码
Euroc提供ROS和zip两种数据格式。原创 2022-08-04 13:06:36 · 1406 阅读 · 3 评论 -
EVO评估工具的使用
使用evo_ape计算ORB-SLAM和S-PTAM两个轨迹的绝对姿态误差,绘制并将单个结果保存到.zip文件中以供evo_res-a选项表示对齐两条轨迹,第5个参数中的-v选项表示输出轨迹对齐的详细信息(即对齐的平移、旋转);假设KITTI_00_ORB.txt、KITTI_00_SPTAM.txt分别是ORB-SLAM和S-PTAM在kittisequence00下的估计结果;中国科技大学https//pypi.mirrors.ustc.edu.cn/simple/-a表示对齐两条轨迹;........原创 2022-07-18 18:58:53 · 1062 阅读 · 0 评论 -
论文笔记 -- 《SuperGlue: Learning Feature Matching with Graph Neural Networks》
本篇对SuperGlue的原理进行整理与分析带原英文词为不确定的翻译。CSDN把图片水印变成了内置形式,暂时去不掉了……图神经网络的传播机制暂不清晰……问题:训练数据集的具体形式?答:根据3.3应该能大致猜到答案:若干组图像对,每对图像都有匹配好的关键点对,及其描述子和像素位置SuperGlue从已有的局部特征中学习匹配过程,而不是简单使用匹配启发(matching heuristics)和技巧来学习更好的任务无关性(task-agnostic)局部特征。在SLAM中,问题被分解为视觉特征提取的前端原创 2022-07-12 09:37:49 · 486 阅读 · 1 评论 -
方差迭代公式推导
原文是:https://blog.csdn.net/weixin_44479136/article/details/90510374但里面有些公式写错了,看着别扭……为了方便查看,顺便加强理解记忆,自己再推一遍均值:En=1n∑i=1nxi(1)E_n=\frac{1}{n}\sum_{i=1}^nx_i \tag{1}En=n1i=1∑nxi(1)令F(n)=∑i=1n(xi−En)2=∑i=1nxi2−nEn2(2)\begin{aligned}F(n)=&\sum_{i原创 2022-06-24 13:01:44 · 493 阅读 · 0 评论 -
学习笔记 -- k-d tree 和 ikd-Tree 原理及对比
FAST-LIO2论文提出了ikd_Tree的概念,是在k-d Tree的基础上改进的。本篇分别对二者的记录并对比二者原理。声明:图片来自网络,带logo非我本意,自CSDN某次升级后,便不会去logo了……若有知道现在如何去掉的朋友感谢您在评论区告诉我!!!k-d(k-dimensional) tree的目标:解决 为k维空间的数据集建立索引的问题。先看k-d tree在k=1时的情况,即二叉查找树:二叉树在时间复杂度上是O(logN),远优于遍历。二叉树在空间上可以理解为:树的每个节点把对应父原创 2022-06-22 00:10:23 · 736 阅读 · 0 评论 -
论文笔记 VSALM 文献综述《A Comprehensive Survey of Visual SLAM Algorithms》
本文旨在对VSLAM有个比较宏观的视野,找了一篇近期的VSLAM综述文献仔细读了一下。预警:本篇内容也不一定全是论文里的,可能会比较乱,介意者还是别在本拙作浪费时间了。声明:因为是别人的文章,我本不想带水印的,但CSDN改了图片存储方式,不会怎么去了,有知道的大佬还请在评论区告诉我!根据论文做的思维导图图中做了大量注释(比本博客干货),博客内是不可见的,有需要可以联系我。摄像头优势:雷达优势:SLAM应用领域:地图构建还有两个任务:定位和路径规划。建图问题可以通过三个机器人视角的问题来描述:第一个原创 2022-06-16 11:34:48 · 694 阅读 · 0 评论 -
论文笔记 -- Fast-LIO -- ESIKF溯源
目录系统概述连续时间运动模型离散时间运动模型雷达的测量状态估计系统概述李代数的加减与我们熟悉的加减运算不一样,为了统一表达,定义了一种新的运算符来统一。连续时间运动模型离散时间运动模型雷达的测量雷达数据率高(200kHz),难以实时处理每一个点。一般选择固定时间(每20ms)批处理。状态估计使用IKF更新...原创 2022-04-16 22:26:19 · 2026 阅读 · 0 评论 -
手写VIO --学习笔记 - Part8
目录1、基础2 提升3 兴趣(不强求):参考1、基础仿照Eq.(12)-(14),推导当vins 中对特征采用逆深度参数时,基于特征匀速模型的重投影误差计算形式。2 提升阅读论文a,总结基于B 样条的时间戳估计算法流程,梳理论文公式。3 兴趣(不强求):请推导初始化时旋转误差Eq.(17) 对时间戳延迟 tdt_dtd 的雅克比,参考论文b附录D。参考a:Paul Furgale, Joern Rehder, and Roland Siegwart. “Unified temporal a原创 2022-04-15 16:14:19 · 524 阅读 · 2 评论 -
学习笔记 --- KF、EKF、IKF、ESIKF 公式推导 --Part 2
关于卡尔曼滤波器,网上各大博客的写法虽然大同小异,但居然没让我找到一个统一的标准……于是,趁初学之际,尝试整理一下,尽量做到符号的统一。如有谬误之处,还请指正!!!承接上文:学习笔记 — KF、EKF、IEKF、ESIKF 公式推导 --Part1目录IKF/IEKF(Iterated Extended Kalman F、ilter)推导预测过程更新过程下面使用 **Gauss-Newton** 方法优化目标函数五个关键的公式整理ESIKF(Error-State Iterated Kalman Fi原创 2022-04-08 12:14:37 · 1234 阅读 · 0 评论 -
手写VIO --学习笔记 - Part7
1、参考从零手写VIO——(六)VINS 初始化和 VIO 系统深蓝学院《从零开始手写VIO》作业7深蓝学院《从零开始手写VIO》作业七有道云笔记高翔,张涛等《视觉SLAM十四讲》p186-p197原创 2022-04-07 21:53:33 · 660 阅读 · 0 评论 -
学习笔记 --- KF、EKF、IKF、ESIKF 公式推导 --Part 1
KF(Kalman filter)假定t时刻的系统状态与t-1时刻有关,于是有系统状态方程(线性)xt=Ftxt−1+Btut+wtx_t=F_t x_{t-1}+B_t u_t+w_txt=Ftxt−1+Btut+wt其中 F 为状态转换矩阵,x 为状态向量, w~N(0,Q) 为过程噪声, B 为输入控制矩阵,u为测量向量值。另有观测方程:zt=Htxt+vtz_{t}=H_{t} x_{t}+v_{t}zt=Htxt+vt其中 z 为观测值,H为转换矩阵, v~N(0原创 2022-04-03 23:04:24 · 2127 阅读 · 0 评论 -
学习笔记 —— IMU与预积分 Part2 G矩阵推导
似曾相识的开头 …先回顾一下预积分误差传递模型:[δαik+1δθik+1δβik+1δbik+1aδbik+1g]=F[δαikδθikδβikδbikaδbikg]+G[nkankgnk+1ank+1gnbkanbkg]\begin{aligned}\begin{bmatrix}\delta \alpha_{i_{k+1}} \\\delta \theta _{i_{k+1}}\\\delta \beta _{i_{k+1}} \\\delta b_{i_{k+1}}^a \\\del原创 2022-03-26 13:24:50 · 677 阅读 · 0 评论 -
手写VIO --学习笔记 - Part6
1、参考从零手写VIO——(五)视觉前端 Frontend手写VIO总结(四)手写VIO课后作业(四)从零开始手写VIO第四章作业(含关键点的参考资料)深蓝学院《从零开始手写VIO》作业4深蓝学院《从零开始手写VIO》作业四有道云笔记高翔,张涛等《视觉SLAM十四讲》p186-p197...原创 2022-03-26 09:14:48 · 854 阅读 · 0 评论 -
学习笔记 —— IMU与预积分 Part1 F矩阵推导
CSDN居然开始限制字数了!???????没办法,推导就另写一篇吧……书接上文:学习笔记 —— IMU与预积分 Part03.3 协方差传递矩阵 F,GF,GF,G 的推导上面式(0)我们使用中值法得到的角加速度 ω\omegaω 和 线加速度 aaa 其实是带噪声的, 是代码中实际使用的公式, 但实际上更数学的表达应当带有噪声:ω=12[(ωik−bkg+nkg)+(ωik+1−bkg+nk+1g)]a=12[qimik(aik−bka+nka)+qimik+1(aik+1−bka+nk+1a)原创 2022-03-25 21:18:47 · 252 阅读 · 0 评论 -
学习笔记 —— IMU与预积分 Part0
IMU拿到的核心数据为:角加速度 ω\omegaω 和 线加速度 aaa记IMU的真实值为 ω\omegaω 和 aaa , 接收到的测量值为 ω~\tilde{\omega }ω~原创 2022-03-25 16:14:20 · 460 阅读 · 0 评论 -
学习笔记 -- 计算无畸变和修正转换映射的函数 initUndistortRectifyMap()
关于参数讲解,博文已经讲的很好了,这里只对自己觉得疑惑的地方作下笔记:问题1关于cv::getOptimalNewCameraMatrix() 和 cv::stereoRectify() 这篇文章讲的很好。我的主要问题是:为什么单目相机的 newCameraMatrix 一般和 cameraMatrix 相等,而双目的就需要用 cv::stereoRectify() 另行计算?个人理解是:因为这个 newCameraMatrix 产生的原因不是畸变,而是双目的两相机一般都不是平行的,因此需要将不原创 2022-03-15 00:38:15 · 758 阅读 · 0 评论 -
手写VIO --学习笔记 - Part5
1、参考手写VIO后端分析(手写VIO总结五)手写VIO课后作业(五)从零开始手写VIO第五章作业(含关键点的参考资料)深蓝学院《从零开始手写VIO》作业5深蓝学院《从零开始手写VIO》作业五有道云笔记高翔,张涛等《视觉SLAM十四讲》p186-p197...原创 2022-03-14 18:15:53 · 1432 阅读 · 0 评论 -
手写VIO --学习笔记 - Part4
1、信息矩阵分析2、证明信息矩阵和协方差的逆之间的关系阅读《Relationship between the Hessian and Covariance Matrix for Gaussian Random Variables》 证明信息矩阵和协方差的逆之间的关系3、Bundle Adjustment信息矩阵的计算参考从零手写VIO——(四)基于滑动窗口算法的 VIO 系统:可观性和一致性(上)舒尔补从零手写VIO——(四)基于滑动窗口算法的 VIO 系统:可观性和一致性(下)滑动窗口算法手原创 2022-03-09 11:02:58 · 1050 阅读 · 0 评论 -
手写VIO --学习笔记 - Part3
最小二乘基础概念:找到一个 nnn 维的变量 x∗∈Rnx^* \in \mathbb{R}^nx∗∈Rn ,使得损失函数 F(x)F(x)F(x) 取局部最小值:F(x)=12∑i=1m(fi(x))2F(x) = \frac{1}{2}\sum_{i=1}^{m}(f_i(x))^2 F(x)=21i=1∑m(fi(x))2 其中fif_ifi是残差函数,如测量值和预测值之间的差,且有 m>nm>nm>n。局部最小值指对任意 ∣∣x−x∗∣∣<δ||x-x^*||<原创 2022-03-01 22:57:21 · 318 阅读 · 0 评论 -
手写VIO --学习笔记 - Part2
1、设置IMU仿真中的不同的参数,生成allen方差标定曲线allan 方差工具:https://github.com/gaowenliang/imu_utilshttps://github.com/rpng/kalibr_allan1.1 imu_utils环境配置安装依赖库sudo apt-get install libdw-dev编译code_utilsmkdir -p catkin_ws/srccd ~/catkin_ws/srcgit clone https://gi原创 2022-02-22 21:19:51 · 978 阅读 · 0 评论 -
手写VIO --学习笔记 - Part1
一、VIO文献阅读阅读VIO 相关综述文献[a],回答以下问题:1、视觉与IMU进行融合之后有何优势?IMU:(Inertial Measurement Unit),惯性测量单元典型6轴 IMU 以较高频率(≥100Hz\ge 100Hz≥100Hz)返回被测量物体的角速度与加速度短时间内,IMU的精度很高受自身温度、零偏、振动等因素干扰,积分得到的平移和旋转容易漂移视觉:(Visual Odometry)以图像形式记录数据,频率较低(15−60Hz15-60Hz15−60Hz 居多)原创 2022-02-19 22:44:13 · 1016 阅读 · 0 评论 -
Ubuntu18.04和20.04的ORB-SLAM2踩坑记录
本文所装环境:Pangolin0.5Opencv3.4.16(ubuntu18.04)Opencv4.5.5(ubuntu20.04)Eigen3DBoW2 and g2o ros-melodic(ubuntu18.04)ros-noetic(ubuntu20.04)ros的安装可参考链接创建一个worksapcemkdir -p orbslam2_ws/srccatkin_makecd orbslam2_ws/src下载ORB-slam2:git clone https:/原创 2022-02-08 19:34:08 · 2951 阅读 · 0 评论 -
多传感器融合学习笔记
这两天看了几篇关于多传感器融合的文章,这里记录一下。(虽然做了整理,但由于来自多篇文章,内容还是比较乱,不是很匹配……)多传感器融合需要面对的问题1、数据对准问题先决条件:统一坐标系和时钟目的是实现三同一不同:同一个目标在同一个时刻出现在不同类别的传感器的同一个世界坐标处1.1 统一时钟:同步不同传感器的时间戳(1)GPS时间戳的时间同步方法需要看传感的硬件是否支持存在问题:不同传感器的数据频率是不同的(2)硬同步方法以激光雷达作为触发其它传感器的源头,当激光雷达转到某个角度时,才触发原创 2021-08-02 19:13:09 · 3921 阅读 · 0 评论 -
学习笔记 --SLAM 优化器g2o
SLAM的后端通常有两种处理方法:以扩展卡尔曼滤波(EKF)为代表的滤波方法;优势:在计算资源受限、待估计量比较简单的状况下,EKF为表明的滤波方法比较有效,常常用在激光SLAM中。缺点:存储量和状态量是平方增加关系,由于存储的是协方差矩阵,所以不适合大型场景。而如今基于视觉的SLAM方案,路标点(特征点)数据很大,滤波方法根本吃不消,因此此时滤波的方法效率很是低。以图优化为代表的非线性优化方法。g2o的基本类结构从右下角往上走:1、选择线性方程求解器用于计算迭代过程当中最关键原创 2021-12-12 20:59:24 · 1012 阅读 · 0 评论 -
SLAM相关笔记(综述)
同步定位与建图(Simultaneous Localization And Mapping,SLAM)常用SLAM: gmapping、hector_slam| cartographer、rgbdslam、ORB_SLAM虽然SLAM比较难,但是令人欣慰的是,SLAM领域有很多优秀的开源代码可以学习。列举几个主流的如下:稀疏法:ORB-SLAM2:支持单目,双目,RGB-D相机https://github.com/raulmur/ORB_SLAM2半稠密法:LSD-SLAM:支持单目,双原创 2021-12-01 22:41:08 · 2137 阅读 · 0 评论 -
视觉SLAM入门 -- 学习笔记 - Part8
这周没有作业,就跑一跑书里对应的第11讲的代码,做个踩坑记录吧!首先需要下载DBoW3,然后如果你直接把slambook2的代码拿下来跑的话或许会遇到这样的问题:make[3]: *** No rule to make target '/usr/local/lib/libDBoW3.a', needed by 'feature_training'. Stop.CMakeFiles/Makefile2:109: recipe for target 'CMakeFiles/feature_trainin原创 2021-12-01 01:22:22 · 1847 阅读 · 0 评论 -
视觉SLAM入门 -- 学习笔记 - Part7
2 Bundle Adjustment2.1 文献阅读我们在第五讲中已经介绍了Bundle Adjustment,指明它可以⽤于解PnP 问题。现在,我们又在后端中说明了它可以⽤于解⼤规模的三维重构问题,但在实时SLAM 场合往往需要控制规模。事实上,BundleAdjustment 的历史远⽐我们想象的要长。请阅读Bill Triggs 的经典论⽂Bundle Adjustment: A Modern Synthesis(见paper/⽬录)(1 本⽂⽐较长,建议选读1-5 节。),了解BA 的发展原创 2021-11-21 23:45:00 · 1086 阅读 · 0 评论 -
视觉SLAM入门 -- 学习笔记 - Part6
参考:https://blog.csdn.net/weixin_41074793/article/details/85133424https://github.com/gaoxiang12/slambook2原创 2021-11-14 21:09:20 · 2104 阅读 · 0 评论 -
视觉SLAM入门 -- 学习笔记 - Part5
2 ORB 特征点原图见1.png 文件和2.png。2.1 ORB 提取ORB 即Oriented FAST 简称。它实际上是FAST 特征再加上一个旋转量。本习题将使用OpenCV 自带的FAST 提取算法,但是你要完成旋转部分的计算。旋转的计算过程描述如下:在一个小图像块中,先计算质心。质心是指以图像块灰度值作为权重的中心。在一个小的图像块B 中,定义图像块的矩为:通过矩可以找到图像块的质心:连接图像块的几何中心O 与质心C,得到一个方向向量OC⃗\vec{OC}OC,于原创 2021-11-10 02:23:49 · 688 阅读 · 0 评论 -
视觉SLAM入门 -- 学习笔记 - Part4
2 图像去畸变本次作业,你将尝试如何对一张图像去畸变,得到畸变前的图像。图1: 测试图像图1 是本次习题的测试图像(code/test.png),来自EuRoC 数据集[1]。可以明显看到实际的柱子、箱子的直线边缘在图像中被扭曲成了曲线。这就是由相机畸变造成的。根据我们在课上的介绍,畸变前后的坐标变换为:其中x; y 为去畸变后的坐标,xdistorted; ydistroted 为去畸变前的坐标。现给定参数:以及相机内参请根据undistort_image.cpp 文件中内容,完成对该图原创 2021-10-28 14:42:13 · 1893 阅读 · 3 评论 -
视觉SLAM入门 -- 学习笔记 - Part3
2 群的性质1. fZ;+g 是否为群?若是,验证其满⾜群定义;若不是,说明理由。2. fN;+g 是否为群?若是,验证其满⾜群定义;若不是,说明理由。其中Z 为整数集,N 为⾃然数集。3 验证向量叉乘的李代数性质附:⾃反性是指⾃⼰与⾃⼰的运算为零4 推导SE(3) 的指数映射(2 分,约1 小时)课上给出了SO(3) 的指数映射推导,但对于SE(3),仅介绍了结论,没有给出详细推导。请你完成SE(3) 指数映射部分,有关左雅可⽐的详细推导。这也正是课件⾥提到的左雅可⽐。提⽰:原创 2021-10-23 00:00:00 · 351 阅读 · 0 评论 -
视觉SLAM入门 -- 学习笔记 - Part2
熟悉 Eigen 矩阵运算设线性方程 Ax = b,在 A 为⽅阵的前提下,请回答以下问题:1. 在什么条件下,x 有解且唯⼀?A满秩,det(A) ≠ 0,当非齐次线性方程在A的秩与[A|B]的秩相同时方程有解;当R(A|b) = R(A) = n(n为未知数个数)时有唯一解。2. 高斯消元法的原理是什么?3. QR 分解的原理是什么?4. Cholesky 分解的原理是什么?5. 编程实现 A 为 100 × 100 随机矩阵时,⽤ QR 和 Cholesky 分解求 x 的程序。几原创 2021-10-13 22:15:16 · 248 阅读 · 0 评论 -
视觉SLAM入门 -- 学习笔记 - Part 1
熟悉Linux1. 如何在Ubuntu 中安装软件(命令⾏界⾯)?它们通常被安装在什么地⽅?软件安装命令行:ubuntu下安装软件有四种方式:1.通过deb格式的离线软件包安装sudo dpkg -i xxx.deb # 安装包,安装程序 -i: installsudo dpkg -r package # 删除包 -r: remove此方法的默认安装目录为: /opt2.通过apt-get包管理器从软件源中在线安装(最常用的方式)sudo apt-get install 软件原创 2021-10-13 22:15:05 · 864 阅读 · 0 评论 -
fatal error: boost/format.hpp: No such file or directory
在读高博的《视觉SLAM十四讲》的第五章内容,运行rgbd的joinMap.cpp时报错fatal error: boost/format.hpp: No such file or directory解决方案:sudo apt-get install libboost1.62-all-dev(方法很暴力,很无脑,若有更合适的解决方法还请各位指教!)...原创 2021-10-04 16:34:58 · 4332 阅读 · 0 评论 -
ORB_SLAM2 / 视觉SLAM十四讲 中关于Pangolin 版本的问题
图为https://github.com/gaoxiang12/slambook2中ch3/visualizeGeometry/visualizeGeometry.cpp的报错。原因是安装Pangolin时直接git clone https://github.com/stevenlovegrove/Pangolin.git此方法下载的是最新版本的Pangolin(目前是Pangolin0.6)而Pangolin0.6用的是C++17标准编译。而ORB_SLAM2 和 slambook2 的代码原创 2021-10-04 16:00:25 · 5337 阅读 · 0 评论 -
学习笔记 -- 取出大Eigen矩阵左上角的3x3矩阵
//// Created by daybeha on 2021/9/18.//#include<iostream>using namespace std;#include <Eigen/Core>#include <Eigen/Geometry>using namespace Eigen;int main(int argc, char** argv) { Matrix3d matrix3d; MatrixXd m(4,4);原创 2021-09-18 17:44:27 · 569 阅读 · 0 评论 -
学习笔记 -- 证明旋转矩阵为正交阵
以下是个人理解的证明,不足之处还请各位大佬指教!(码公式还是不如手写效率高,不知各位可有好用的公式编辑器推荐? 字体拙劣还请见谅!)首先我们来看旋转矩阵R的定义:即a=Ra′a = Ra'a=Ra′既然如此,则有:R−1a=a′R^{-1}a = a'R−1a=a′那么如果我们反过来:如此便得到R−1=RTR^{-1} = R^{T}R−1=RT所以旋转矩阵R为正交阵,得证...原创 2021-09-18 16:22:01 · 1004 阅读 · 2 评论