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的特征点提取与匹配,结果出现了下面的情况,竟然匹配上了,想了下,应该只是算法上的匹配,如下图所示,明显是不一样的两张图片,匹配结果乱七八糟。
上图是两张对应的图片,匹配结果优秀。
1022
昨晚重新做上面的实验时,发现imshow()里面如果有中文,图片将会无法显示,就像下面的图显示,开始也没发现是这个原因,后来在kdevelop里中文显示有问题,把中文改掉,但在之前是没问题的,这次系统的更新可能把某些东西给卸载掉了。