自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(365)
  • 收藏
  • 关注

原创 Ubuntu20 cv_bridge版本问题

文章目录ubuntu20.04下opencv版本不兼容问题

2024-01-22 17:45:31 436

原创 NeRF资料整理

这个写的很详细,写的也很好,比较清楚的解释了为什么要使用NDC空间,其实就是因为对于实际场景来说它的深度范围是比较难确定的,渲染的时候需要从0到正无穷的深度进行渲染,显然这样无法在代码中进行确定区间的采样,而NDC空间使用坐标变换的方式可以将这个范围变换到[0,1]之间,从而变成一个有界的采样。:这个写的非常好,其中解释了Colmap、LLFF、OpenGL等多种坐标系的区别,如下图所示。唯一的遗憾就是没有讲解NDC空间。:nerf_pl代码中推荐的空间变换的参考,进去看了一下英文写的比较难懂。

2024-01-20 13:47:44 588

原创 SLAM相关手撕代码题

【代码】SLAM相关手撕代码题。

2023-09-14 14:53:50 423

原创 DSO 系列文章(3)——DSO后端正规方程构造与Schur消元

DSO代码注释:https://github.com/Cc19245/DSO-CC_Comments

2023-08-20 15:43:22 881 1

原创 DSO 系列文章(2)——DSO点帧管理策略

跟优化之后接着删除点一样,也上面的函数里面也是只把要丢掉的前端点。

2023-08-20 15:36:17 1559

原创 DSO 系列文章(1)——DSO系统预处理

而这些全局变量就是对图像建立合适的金字塔,并且计算每一层上的图像宽高、相机内参(即从这层直接反投影到有效归一化平面范围所需要的参数)。(3)输出图像、输入图像与有效归一化平面范围之间的投影关系都知道了,就可以建立输出图像上的像素对应哪个输入图像上的像素,也就是。上面的步骤都是一些预计算量,是对图片进行预处理使用的,对图片预处理之后就无用了,所以负责求解的。,这个很简单,就是把gamma响应函数、渐晕图片读出来,存到类的成员变量中。,然后会把上面创建的相机畸变模型中的光度非线性响应拷贝给它的相机成员变量。

2023-08-20 15:34:22 296 1

原创 DSO 系列文章

本文是 DSO 系列文章,主要是分析了 DSO 后端优化的代码和原理。

2023-08-20 15:33:08 837

原创 VINS-Mono中的边缘化与滑窗 (4)——VINS边缘化为何是局部变量边缘化?

题目想问的问题是VINS 滑窗边缘化时构造舒尔补的H矩阵是由和边缘化掉的状态变量相关的局部变量构成还是由全局变量构成?如下图所示,小车沿着一维方向运动,车上有一个单点激光测距仪可以观测前方的一个路牌,小车轮子上装有码盘。现在让小车从原点出发,维持滑窗的长度为3,并且每次优化都迭代3次。定义此时系统估计的状态变量为(P0,P1,P2,L)(P_0, P_1, P_2, L)(P0​,P1​,P2​,L),其中3个坐标位置和滑窗有关,会随着滑窗的滑动逐渐改变。则此时系统中的各个残差和雅克比如下:r0=6.0

2023-08-20 14:42:27 430 2

原创 MobaXterm调整字体大小(包括终端字体和整个软件字体)

【代码】MobaXterm调整字体大小(包括终端字体和整个软件字体)

2023-06-13 14:29:59 10974

原创 Ubuntu18安装RTL8812BU无线网卡驱动

这句话会报错,最后没有完全按照上述命令来,而是进入git clone的文件夹,然后。

2023-06-09 10:20:56 852

原创 docker使用与服务器上的可视化(ROS rviz等)

按照官网命令一步步来即可。添加当前用户到docker用户组,后面运行docker的时候前面不需要加sudo。

2023-06-09 10:18:43 4584

原创 VINS-Mono中的边缘化与滑窗 系列文章

本文是 VINS-Mono中的边缘化与滑窗 系列文章,主要是逐步分析了 VINS-Mono中的滑窗边缘化的代码和原理。

2023-03-13 14:09:02 304 1

原创 VINS-Mono中的边缘化与滑窗 (3)—— 边缘化倒数第二帧及滑窗优化

注意:这一步骤就是滑窗操作的精髓所在!之前我们已经把本次非线性优化、边缘化最老帧的相关计算完成了,但是实际存储在滑窗中的状态变量还没有进行滑窗操作,所以上面依次交换前后两帧,将滑窗中的所有帧都向前移动了一个位置,然后滑窗中的最老帧被抛弃掉了。此时我们会发现滑窗中的最后一个位置变成了最老帧,显然这个是不正确的。实际上我们应该把滑窗中最后一个位置的状态清空,然后等待这下一帧图像的到来,继续处理。

2023-03-13 13:34:55 1267

原创 VINS-Mono中的边缘化与滑窗 (2)—— 边缘化最老帧

如图所示,第一帧的位姿T1T_1T1​和速度零偏B1B_1B1​是通过IMU预积分约束和滑窗中的最老帧存在约束关系的。因此和最老帧有关的IMU预积分约束包含的参数块是T0,B0,T1,B1T_0, B_0, T_1, B_1T0​,B0​,T1​,B1​,要边缘化掉的参数块是T0,B0T_0, B_0T0​,B0​。代码如下:在函数中,会用一些类变量将上面构建的残差信息块存储起来:第1234帧的 位姿TiT_iTi​ 是通过视觉重投影和最老帧联系在一起的,此外视觉重投影中还包括IMU和相机外参TicT_{

2023-03-13 12:27:49 1555 3

原创 VINS-Mono中的边缘化与滑窗 (1)—— 边缘化概述

边缘化操作的意义从概率上看就是根据联合概率分布求边缘概率分布,如下为概率论中的定义:所以边缘化的操作就相当于在要被边缘化掉的那个状态上进行积分,把它从概率密度函数中消除掉,但是它的概率信息通过积分仍然保留在了边缘化之后的概率密度中,从而没有损失任何信息。

2023-03-13 11:37:21 855

原创 VIO优化中不客观自由度 (gauge freedom) 的处理 (gauge handle)

第0帧就是在先验观测0的位置,那么只需要把这个先验观测的协方差矩阵设置的非常小,也就是信息矩阵(权重)设置的非常大,这样优化状态离先验观测稍微偏离一点就会造成非常大的误差项,从而最后会把第0帧的优化状态固定在先验的位置。,比如GPS观测,有明确的协方差矩阵,那么就可以把它作为先验融合到滑窗优化中,这样滑窗中第0帧位置可能会发生变化,但是此时就是需要让它有变化,因为我们已经有先验了,需要来修正这个状态。,但是求解之后给变量赋值的时候,是让第滑窗中第0帧的4-DOF保持不变,也就是认为第0帧的状态不发生改变。

2023-03-11 15:31:10 1114 1

原创 IMU 积分的误差状态空间方程推导

本文推导的是 IMU 积分的误差状态空间方程,预积分的推导要比积分复杂,但是推到方法和本文是一样的,因此这里只给出积分的推导方式。另外,本文的推导方式参考了中给出的推导,这种方法是基于李群李代数使用全增量的方法计算误差状态空间方程,非常好理解。名义状态xx:估计出来的状态,真正能算出来的状态;真实状态x\mathbf{x}x:无法计算出来的状态,永远不知道的状态,只能用公式表示出来;误差状态δxδx:真实状态x\mathbf{x}x与 名义状态xxxxδxxxδx。

2023-03-11 15:09:06 1092

原创 Kalman Filter in SLAM 系列文章

此外,在 SLAM 中最常应用的还有 IMU,其中最复杂的是 IMU的运动学方程,不论是滤波法还是优化法都会使用到它,因此本系列文章也会给出。但是由于想推导这两个算法,必须实现知道所依赖的基础的 Kalman Filter 变种算法,因此本系列文章从最基础的经典。及其各种变种,最终目的是推导目前最常用的。的推导,以及状态变量选择为误差状态时的。开始,逐步推导其他变种的算法。本系列文章详细推导和解释了。

2023-03-09 17:58:10 1097

原创 Kalman Filter in SLAM (7) ——Error-state Iterated Kalman Filter (EsIKF, 误差状态迭代卡尔曼滤波)

实际就是把和两个结合起来了,并且如果从本质上来说它就是个迭代卡尔曼滤波 IEKF,只不过是的。

2023-03-09 17:52:02 2494

原创 Kalman Filter in SLAM (6) ——Error-state Kalman Filter (EsKF, 误差状态卡尔曼滤波)

这里先说一句:什么误差状态卡尔曼?完全就是在扯淡!回想上面我们推导的IMU的误差状态空间方程,其实如果后面我们是使用优化的方法,而不是使用滤波的方法,那么推导完IMU的误差状态空间方程就可以了。因为上面我们已经说了,IMU的误差状态空间方程和状态空间方程的协方差矩阵是完全一致的。所以后面如果是使用优化的方法,那么就可以使用误差状态空间方程得到的协方差矩阵作为IMU积分值的置信度了。但是如果我们是要使用滤波的方法呢?那么就要使用基于误差状态(而非状态)的卡尔曼滤波了,也就是我们这里说的误差状态卡尔曼滤波。

2023-03-09 17:34:25 1461

原创 Kalman Filter in SLAM (5) ——IMU Intergration and State Space Representation (IMU积分和状态空间表示)

对于旋转状态有两种表示方式,分别是四元数 qqq 和旋转矩阵 RRR。可以使用这两种中的任意一种表示姿态,比如 VINS-Mono 中用的是四元数,而 FAST-LIO 中用的是旋转矩阵。它们的导数和积分如下计算:q˙=q⊗[012ω]q=q⊗[112ωδt]\dot{q} = q\otimes\begin{bmatrix} 0\\ \frac{1}{2}\omega \end{bmatrix} \qquadq = q\otimes\begin{bmatrix} 1\\ \frac{1}{2

2023-03-09 16:58:25 626

原创 Kalman Filter in SLAM (4) ——Iterated Extended Kalman Filter (IEKF, 迭代扩展卡尔曼滤波)

由于非线性模型中做了线性化近似,当非线性程度越强时,误差就会较大,但是由于线性化的工作点离真值越近, 线性化的误差就越小,因此解决该问题的一个方法是,通过迭代逐渐找到准确的线性化点,从而提高精度。 在EKF的推导中,其他保持不变,仅改变观测的线性化工作点,则有g(xk,nk)≈yop,k+Gk(xk−xop,k)+Cknk\boldsymbol{g}\left(\boldsymbol{x}_{k}, \boldsymbol{n}_{k}\right) \approx \boldsymbol{y}_{\ma

2023-03-09 16:05:53 1864 1

原创 Kalman Filter in SLAM (2) ——Derivation of Kalman Gain and Covariance Matrix (卡尔曼增益和协方差矩阵推导)

【卡尔曼滤波器】_Kalman Filter_全网最详细数学推导

2023-03-09 15:38:53 400

原创 Kalman Filter in SLAM (3) ——Extended Kalman Filter (EKF, 扩展卡尔曼滤波)

系统状态空间方程:xk=Axk−1+BUk−1+wk−1P(ω)∼N(0,Q)zk=Hxk+HkP(v)∼N(0,R)\begin{array}{ll}x_k=A x_{k-1}+B U_{k-1}+w_{k-1} & P(\omega) \sim N(0, Q) \\z_k=H x_k+H_k & P(v) \sim N(0, R)\end{array}xk​=Axk−1​+BUk−1​+wk−1​zk​=Hxk​+Hk​​P(ω)∼N(0,Q)P(v)∼N(0,R)​预测:x^k−=Ax^

2023-03-09 15:27:23 807 2

原创 Kalman Filter in SLAM (1) ——Data Fusion and Kalman Filter(数据融合和卡尔曼滤波)

状态方程做预测:根据上一时刻的状态和系统状态空间方程,对当前时刻的状态做预测,同时会更新当前预测的状态的协方差矩阵:观测方程做更新:首先计算 Kalman Gain,然后把它当做权重融合预测状态和观测值,得到系统的最优估计。可以看到,这里预测值是系统状态,观测值是传感器直接的观测量,所以Kalman Gain 是有量纲的,而且它的量纲和H−1H^{-1}H−1量纲是一样的。

2023-03-09 14:44:57 1028 1

原创 Ubuntu18安装新版本PCL-1.13,并和ROS自带PCL-1.8共存

的,这个时候虽然编译可以通过,但是运行的时候会出错。下,最后链接pcl的库的时候会默认链接到这个路径下的库,也就是自己新安装的。的问题比较难解决,但是一般我们安装pcl都是为了一些新特性的算法,而。:因为这里我们安装到用户家目录下的,而非根目录下,所以不用。下,而是安装到自己的用户目录下,然后特殊的工程需要使用。注意这里最好不要安装到系统根目录下,也就是默认的。下,因为经过我测试发现在自己的电脑上,如果安装到了。就是可视化相关的,所以不要这部分也可以。下,其他工程都会优先链接到这个版本的。

2023-03-07 14:05:53 3850 1

原创 linux删除cmake源码编译安装的库

里面有安装的所有东西的路径,删除它们即可。

2023-03-07 12:06:05 1317

原创 贝塞尔曲线与B样条曲线

这个视频讲的很好,尤其是对样条曲线的两种理解方式上,会对后面B样条曲线性质的分析有很大的帮助。本文在前面的部分也会较多的参考这个视频中讲解的内容。但是视频后面讲解B样条曲线的时候稍微简略了一点,因此本文给出我自己的理解。

2023-03-06 20:56:01 3286 1

原创 LVI-SAM坐标系外参分析与代码修改,以适配各种数据集

天下苦LVI-SAM外参久矣!LVI-SAM是LIO-SAM和VINS-Mono的结合体,LIO-SAM和LVI-SAM作者使用的是同一套传感器设备,但是外参配置晦涩,导致让很多人都不知道如果换了数据集或者自己的设备,该如何设定外参数,而且基本上换了数据集全部都跑不下来。导致这一状况的有多个原因作者使用的IMU比较特殊:四元数输出的不是按照IMU坐标系的z/y/x轴动态旋转得到的,所以文件中有两个外参。但是一般来说大多数IMU这两个应该是对应的,此时这两个外参数就是互为转置的关系。

2022-12-16 21:24:44 9021 54

原创 利用ROS中image_transport将sensor_msgs/CompressedImage转为sensor_msgs/Image

利用ROS中image_transport将sensor_msgs/CompressedImage转为sensor_msgs/Image

2022-12-03 16:49:46 1947

原创 力扣hot100——第6天:32最长有效括号、33搜索旋转排序数组、34在排序数组中查找元素的第一个和最后一个位置

参考:力扣题目链接;题解1,题解2这道题目官方的题解讲解的就非常清除了,现在摘录如下:注意:注意dp数组的定义,一定是以为结尾的字符子串,也就是必须包含。尤其注意第二种情况,也就是的时候,此时当前的无法跟匹配直接构成一个有效的字符子串,所以需要到前面去寻找,看是否有和它匹配的。所以问题就变成,我该去前面的什么位置寻找呢?肯定不能随便选一个的位置就和他匹配,因为这样会导致这个匹配的和当前的之间的字符串不一定是合法的括号字符子串。所以我们寻找之前的的前提就是先让中间的字符串是一个合法的字符子串。也就是先去考虑的

2022-12-03 11:36:33 525

原创 力扣hot100——第5天:22括号生成、23合并K个升序链表、31下一个排列

所以这里需要一个死循环,然后在循环里面判断当前选择的节点,如果当前没有选择到有效节点,说明所有的链表都是空了,则说明所有的链表都遍历完毕了,可以跳出循环了。其实这道题目和昨天的合并两个升序链表思路基本是相同的,只不过由于有多个链表,所以代码中寻找当前位置的最小节点的时候需要一个for循环来判断所有的节点,从而寻找一个最小的节点。这道题目是使用递归的方法来求解,因为要求解所有的括号的可能情况,所以必须使用递归的方法来收集结果,而不能使用动态规划的方法。不同的当前节点决定了它后面展开的子树也是不同的。

2022-12-02 23:33:00 493

原创 力扣hot100——第4天:19删除链表的倒数第N个节点、20有效的括号、21合并两个有序链表

这道题目其实很简单,因为两个链表都是已经排序好的,结果只需要同时遍历两个链表的节点,然后判断那个数值更小,然后就选择哪个节点即可。然后再继续往后遍历后面的节点。:这道题目总记得非常熟悉,实际上有一道相加两个链表的节点的题目,跟这道题目非常像。需要注意的是,这里要使用一个虚拟头节点来引导生成的链表,这样更方便编程。

2022-12-02 23:31:04 148

原创 力扣hot100——第3天:11盛最多水的容器、15三数之和、17电话号码的字母组合

经过上面的解释可以发现,之前移动数组的时候,移动了那个边界,就把以它为边界的所有其他数组的可能性都包括了,所以最后只需要移动左右边界就可以求得最优的解。那么按照参考题解的做法,一开始左右边界是包含整个数组的。此时我们必须要移动数组的边界了。不动,去移动右边界的话,那么不管右边界移动到什么位置,也就是不管数组长度是。不动,去移动右边界的话,那么不管右边界移动到什么位置,也就是不管数组长度是。:此时是0为左边界,但是前面第2步移动窗口的时候我们已经证明,因此当我们从当前的位置缩减数组长度的时候,一定不能把。

2022-12-02 23:27:08 665

原创 力扣hot100——第2天:4寻找两个正序数组的中位数、5最长回文子串、10正则表达式匹配

所以这里可以修改一下代码,只记录最终要的中间的两个数,而不用存储合并后的数组。这样可以把空间复杂度降低到O(1),但是时间复杂度仍然是O(n)。从上面的代码中可以发现,其实最后结果只用到了合并后数组的中间的一个或者两个数,并不用所有的数组元素。直接给出代码如下,思想和上一种解法其实是一样的。:力扣要求这种解法,所以是hard难度。

2022-11-30 19:30:52 410

原创 力扣hot100——第1天:1两数之和、2两数相加、3无重复字符的最长子串

这道题目的思路也非常简单,因为是倒序存储的数字,所以直接从尾巴的地方把两个数字相加,然后依次往后(也就是往高位)计算相加的结果即可,就是正常的加法运算。这道题要求得是子串,所以可以使用滑动窗口算法,使用左右两个指针,然后用一个哈希表存储滑窗中已经有的元素。右指针遍历到头之后,就找到了所有符合条件的(即没有重复字符)滑窗,也就找到了最终答案。首先这道题目看最后的解释,这里说的是。

2022-11-30 18:38:59 472

原创 代码随想录67——额外题目【动态规划】:5最长回文子串、132分割回文串II、673最长递增子序列的个数

有的代码实现是优先遍历列,然后遍历行,其实也是一个道理,都是为了保证dp[i + 1][j - 1]都是经过计算的。的子串本身就是回文串了,那么本着要求最少分割的回文串的目的出发,显然就不需要对它进行分割了,所以它的最少分割次数为0。此时就找到了递推关系,当切割点j在[0, i] 之间时候,本题是要找到最少分割次数,所以遍历j的时候要取最小的。初始化为0,在那么在递推公式中,所有数值将都是零。(注意是左闭右闭)的子串是否是回文子串,如果是。关于回文子串,两道题目题目是一定要掌握的。

2022-11-29 20:41:29 321

原创 代码随想录66——额外题目【回溯、贪心】:52N皇后II、649Dota2 参议院、1221分割平衡字符串

是一模一样的,只不过51那道题是求所有的棋盘摆放的方案,而本题只需要知道所有的方案的个数。其实只是在统计结果的时候操作不同而已,其他都是一样的。感觉还是不太明白,因为当前的位置的R和T,都是要优先消灭后面的R和T,这样该怎么操作。局部最优可以推出全局最优,举不出反例,那么就试试贪心。这道题目看起来好像很复杂,其实是非常简单的贪心。直接给出代码如下,和51题基本上是一样的。:从前向后遍历,只要遇到平衡子串 就统计。例如,LRLR 这本身就是平衡子串 ,:统计了最多的平衡子串。

2022-11-28 10:56:13 332

原创 代码随想录65——额外题目【二叉树】:129求根节点到叶节点数字之和、1382将二叉搜索树变平衡、100相同的树、116填充每个节点的下一个右侧节点指针

本题使用层序遍历是最为直观的,遍历每一行的时候,如果不是最后一个Node,则指向下一个Node;这道题目也很简单,就实现先使用中序遍历收集原来的二叉搜索树的节点值,然后重新构造一个平衡的二叉搜索树。图中cur节点为元素4,那么搭线的逻辑代码:(注意注释中操作1和操作2和图中的对应关系)是一样的,就是遍历一条路径,到了叶子节点之后就收集结果,然后进行回溯再遍历其他路径。这道题目也很简单,和之前做过的一道题目 判断一个二叉树是不是对称二叉树 是一样的。很简单,直接给出代码,具体思路去看上面的博客即可。

2022-11-26 19:48:59 483

原创 代码随想录64——额外题目【哈希表、字符串】:205同构字符串、1002查找常用字符、925长键按入、844比较含退格的字符串

如下图所示:最后给出代码如下,其实很简单,就是过程繁琐了一点。

2022-11-24 20:43:01 564

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除