热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

文章目录6非线性优化6.1状态估计问题6.1.1批量状态估计与最大后验估计6.1.2最小二乘的引出6.1.3例子:批量状态估计6.2非线性最小二乘6.2.1一阶和二阶梯度法6.2.


文章目录

  • 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 手写高斯牛顿法


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 &#39;CMakeFiles/g2oCurveFitting.dir/g2oCurveFitting.cpp.o&#39; failed
make[2]: *** [CMakeFiles/g2oCurveFitting.dir/g2oCurveFitting.cpp.o] Error 1
CMakeFiles/Makefile2:138: recipe for target &#39;CMakeFiles/g2oCurveFitting.dir/all&#39; failed
make[1]: *** [CMakeFiles/g2oCurveFitting.dir/all] Error 2
Makefile:90: recipe for target &#39;all&#39; 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

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

tar xvf ceres-solver-1.14.0.tar.gz

推荐阅读
  • ubuntu下基于c++的opencv学习
    一、环境配置1、安装opencv2、makefile编写makefile模板,与c文件在同一个目录下,用make指令生成可执行文件,然后运 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 利用PaddleSharp模块在C#中实现图像文字识别功能测试
    PaddleSharp 是 PaddleInferenceCAPI 的 C# 封装库,适用于 Windows (x64)、NVIDIA GPU 和 Linux (Ubuntu 20.04) 等平台。本文详细介绍了如何使用 PaddleSharp 在 C# 环境中实现图像文字识别功能,并进行了全面的功能测试,验证了其在多种硬件配置下的稳定性和准确性。 ... [详细]
  • 在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转
    本文探讨了在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转的技术细节。通过详细分析Swscale的工作原理和实际应用,展示了如何在Android环境中高效地进行图像格式转换。此外,还介绍了FFmpeg的全平台编译过程,包括x264和fdk-aac的集成,并在Ubuntu系统中配置Nginx和Nginx-RTMP-Module以支持直播推流服务。这些技术的结合为音视频处理提供了强大的支持。 ... [详细]
  • 如何提升Python处理约1GB数据集时的运行效率?
    如何提升Python处理约1GB数据集时的运行效率?本文探讨了在后端开发中使用Python处理大规模数据集的优化方法。通过分析常见的性能瓶颈,介绍了多种提高数据处理速度的技术,包括使用高效的数据结构、并行计算、内存管理和代码优化策略。此外,文章还提供了在Ubuntu环境下配置和测试这些优化方案的具体步骤,适用于从事推荐系统等领域的开发者。 ... [详细]
  • Linux下Google Test (GTest)测试环境搭建步骤
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 在处理UVA11987问题时,关键在于实现并查集结构以支持删除操作。特别地,当需要删除某个节点时,如果该节点不是根节点,则处理相对简单;然而,若删除的是根节点,则需要进行额外的处理来维护集合的连通性。本文将详细介绍如何通过优化并查集算法,确保在删除根节点时仍能高效地维护数据结构的完整性和查询效率。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 全面解析Java虚拟机:内存模型深度剖析 ... [详细]
  • Java 9 中 SafeVarargs 注释的使用与示例解析 ... [详细]
  • Docker网络基础探讨了如何通过高效的技术手段实现跨主机容器间的顺畅通信与访问。本文深入分析了Docker网络架构,特别是其在多主机环境下的应用,为Go语言开发者提供了宝贵的实践指导和理论支持。 ... [详细]
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
author-avatar
湖黯之殇_257
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有