欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SLAM_BOOK 记录

程序员文章站 2024-03-24 19:42:52
...

0712:今天看完李群与李代数,对其理解稍有加深。

        首先SO(3)与so(3)可以理解为旋转矩阵与旋转向量的关系,so3指数映射到SO3,SO3对数映射到so3,一一对应。为什么要有李代数呢,因为李群中没有加法运算,就没法去求极限和导数,但是其对应的李代数是有加法的,可以转换到李代数进行计算。而对于旋转后的点对旋转的导数,一种直接求导,结果会出现雅克比矩阵,计算复杂,但对于其扰动模型,不存在了,求导结果为:-(Rp)^(左乘模型)。哈哈哈,厉害。

 

0714:编译ceres出现与eigen库不兼容的问题,最终找到解决方案为替换为其他兼容的eigen3版本,具体参考一下博客

https://blog.csdn.net/sunyoop/article/details/79032174  

感谢博主

第六章  在用g2o进行曲线拟合时,g2o编译安装成功了,从github上下的,书中提供代码无法编译过去,然后,在编译g2o的曲线拟合时,编译过了,但是运行出现段错误,按照网上的办法更改指针,但是会出现无法找到匹配的函数的错误,最后没办法呢,抱着试一试的态度,删掉所有g2o的库文件和头文件,重新编译g2o,然后再编译第六章的程序,神奇的事情来了,编译通过,并且运行成功,这都什么情况。。。。

最后对比两种方法g2o快了一个数量级

 

start optimization
iteration= 0	 chi2= 30373.727656	 time= 0.000231289	 cumTime= 0.000231289	 edges= 100	 schur= 0	 lambda= 699.050482	 levenbergIter= 7
iteration= 1	 chi2= 13336.948288	 time= 0.000135327	 cumTime= 0.000366616	 edges= 100	 schur= 0	 lambda= 1864.134619	 levenbergIter= 3
iteration= 2	 chi2= 6946.262996	 time= 0.000100986	 cumTime= 0.000467602	 edges= 100	 schur= 0	 lambda= 1242.756412	 levenbergIter= 1
iteration= 3	 chi2= 271.023166	 time= 0.000101381	 cumTime= 0.000568983	 edges= 100	 schur= 0	 lambda= 414.252137	 levenbergIter= 1
iteration= 4	 chi2= 118.903887	 time= 0.000100248	 cumTime= 0.000669231	 edges= 100	 schur= 0	 lambda= 138.084046	 levenbergIter= 1
iteration= 5	 chi2= 113.568660	 time= 0.000100462	 cumTime= 0.000769693	 edges= 100	 schur= 0	 lambda= 46.028015	 levenbergIter= 1
iteration= 6	 chi2= 107.476457	 time= 0.000100203	 cumTime= 0.000869896	 edges= 100	 schur= 0	 lambda= 15.342672	 levenbergIter= 1
iteration= 7	 chi2= 103.014522	 time= 0.000101634	 cumTime= 0.00097153	 edges= 100	 schur= 0	 lambda= 5.114224	 levenbergIter= 1
iteration= 8	 chi2= 101.988348	 time= 0.000101294	 cumTime= 0.00107282	 edges= 100	 schur= 0	 lambda= 1.704741	 levenbergIter= 1
iteration= 9	 chi2= 101.937388	 time= 0.000100763	 cumTime= 0.00117359	 edges= 100	 schur= 0	 lambda= 0.568247	 levenbergIter= 1
iteration= 10	 chi2= 101.937021	 time= 0.000100895	 cumTime= 0.00127448	 edges= 100	 schur= 0	 lambda= 0.378831	 levenbergIter= 1
iteration= 11	 chi2= 101.937020	 time= 0.000100607	 cumTime= 0.00137509	 edges= 100	 schur= 0	 lambda= 0.252554	 levenbergIter= 1
iteration= 12	 chi2= 101.937020	 time= 0.000135858	 cumTime= 0.00151095	 edges= 100	 schur= 0	 lambda= 1.346956	 levenbergIter= 3
iteration= 13	 chi2= 101.937020	 time= 0.00010007	 cumTime= 0.00161102	 edges= 100	 schur= 0	 lambda= 0.897971	 levenbergIter= 1
iteration= 14	 chi2= 101.937020	 time= 0.000154207	 cumTime= 0.00176522	 edges= 100	 schur= 0	 lambda= 38.313418	 levenbergIter= 4
iteration= 15	 chi2= 101.937020	 time= 0.000133635	 cumTime= 0.00189886	 edges= 100	 schur= 0	 lambda= 204.338228	 levenbergIter= 3
iteration= 16	 chi2= 101.937020	 time= 0.000100038	 cumTime= 0.0019989	 edges= 100	 schur= 0	 lambda= 136.225485	 levenbergIter= 1
iteration= 17	 chi2= 101.937020	 time= 0.000217447	 cumTime= 0.00221634	 edges= 100	 schur= 0	 lambda= 24378500205.440712	 levenbergIter= 8
iteration= 18	 chi2= 101.937020	 time= 0.000138879	 cumTime= 0.00235522	 edges= 100	 schur= 0	 lambda= 1560224013148.205566	 levenbergIter= 3
solve time cost = 0.00329267 seconds. 
estimated model: 0.890912   2.1719 0.943629

0719:ch7

之前在第六章中就又出现这样的问题,在构建g2o问题时会有一些错误,参考了几篇CSDN的博客更改如下:

std::unique_ptr<Block::LinearSolverType> linearSolver ( new g2o::LinearSolverDense<Block::PoseMatrixType>());
std::unique_ptr<Block> solver_ptr ( new Block ( std::move(linearSolver)));

并且在其源文件中添加头文件

#include <g2o/solvers/dense/linear_solver_dense.h>
这个问题还要继续看,c++的问题

0720:早上试了下将两张不同的图片做ORB的特征点提取与匹配,结果出现了下面的情况,竟然匹配上了,想了下,应该只是算法上的匹配,如下图所示,明显是不一样的两张图片,匹配结果乱七八糟。SLAM_BOOK 记录

SLAM_BOOK 记录

上图是两张对应的图片,匹配结果优秀。

相关标签: slambook学习体会