0
点赞
收藏
分享

微信扫一扫

视觉SLAM十四讲学习笔记——ch6 非线性优化

诗尚凝寒 2022-04-06 阅读 143

文章目录

6 非线性优化

6.1状态估计问题

6.1.1批量状态估计与最大后验估计

6.1.2 最小二乘的引出

6.1.3 例子:批量状态估计

6.2非线性最小二乘

6.2.1 一阶和二阶梯度法

6.2.2 高斯牛顿法

6.2.3 列文伯格—马夸尔特方法

理论部分小结

6.3 实践:曲线拟合问题

6.3.1 手写高斯牛顿法

make 直接报错
在这里插入图片描述搜索相关贴子,初步判断是由g2o版本不一致,导致的指针问题,我这个好像是安装了旧版本,需要更新到新版本,才能使用智能指针.

关于解决方案可以参考该帖子于g2o新版本编译出错的原因及解决办法,不过这个帖子好像是要用旧版本替换新版本,SLAMbook2思路相反.

ubuntu卸载g2o库
最后,可以输入locate g2o命令来验证是否删除干净。

在安装g2o库时,又报cmake 版本问题,额鹅鹅鹅
在这里插入图片描述只能安装新的版本,由于之前安装了ROS,自带有cmake,卸载旧版本时还要考虑ROS不崩.参考这篇文章:cmake安装更新

安装好新版本 cmake和g2o后,重新对ch6编译,果不其然,又出错了,相同的错误,不过这次编辑程度多了一些,达到83%.还是g2o库出的问题.
关于这个问题的帖子:《视觉SLAM14讲》第七讲pose_estimation_3d2d程序运行报错
错误:

/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:179:14: error: ‘FixedArray {aka class ceres::internal::FixedArray<double, 3>}’ has no member named ‘fill’
   add_vertex.fill(0.);
   ~~~~~~~~~~~^~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:186:30: error: ‘FixedArray {aka class ceres::internal::FixedArray<double, 3>}’ has no member named ‘data’
     vertex->oplus(add_vertex.data());
                   ~~~~~~~~~~~^~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:192:30: error: ‘FixedArray {aka class ceres::internal::FixedArray<double, 3>}’ has no member named ‘data’
     vertex->oplus(add_vertex.data());
                   ~~~~~~~~~~~^~~~
CMakeFiles/g2oCurveFitting.dir/build.make:75: recipe for target 'CMakeFiles/g2oCurveFitting.dir/g2oCurveFitting.cpp.o' failed
make[2]: *** [CMakeFiles/g2oCurveFitting.dir/g2oCurveFitting.cpp.o] Error 1
CMakeFiles/Makefile2:138: recipe for target 'CMakeFiles/g2oCurveFitting.dir/all' failed
make[1]: *** [CMakeFiles/g2oCurveFitting.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

在这里插入图片描述找到一篇帖子还是版本问题,不过好像是Ceres 库,关于g2o编译报错与版本选择,准备更新到1.14试试,我查看了自己的Eigen版本为3.3.4,太高担心,Eigen又不匹配

关于卸载Ceres及安装新版本可参考此帖子:slam14讲 第六讲编译报与ceres相关的错误

也可以利用下面这句,不过仍要用locate ceres检查usr目录下是否删除干净

sudo rm -r /usr/local/lib/cmake/Ceres
sudo rm -rf /usr/local/include/ceres /usr/local/lib/libceres.a
sudo rm -rf /usr/local/lib/cmake/Ceres     //下有关ceres的全都删掉
sudo rm -r /usr/local/share/Ceres

插入一个小知识,关于文件解压😃 tar中的参数 cvf,xvf,cvzf,zxvf的区别
exp:

tar xvf ceres-solver-1.14.0.tar.gz
举报

相关推荐

0 条评论