cartographer中优化简析及相关优化资料总结

1.扫描匹配

CeresScanMatcher2D精匹配

位置和旋转的构建残差比较简单;

主要难点是论文中提到的那个点云匹配的最小二乘优化公式用的 (1 - M * T* hk)²

代码中实现的是用的空闲的概率求最小来构建残差的(占用最大,最好匹配位置)

Cartographer(10)CeresScanMatcher2D_ceres grid2d-CSDN博客

2.后端回环node与submaps;node与node; IMU;odom;

  核心思想:构建测量的相对位姿或位置 与 估计值(待优化值)构建残差的最小二乘问题(图优化中术语叫节点和边,节点对应每个激光node点的位姿,边对应这里的约束(constraint,相对位姿))。 所有求导方式构建为自动求导, 主要角度使用的轴角计算残差,中间的运算用到了四元数的插值和四元数的运算QuaternionParameterization

  landmark 优化的同时会优化附近的node节点

 ceres库解析:很详细,carto中的所有需要注意的东西都有提到,非常好的博客,可以作为主线研究一下最小二乘问题。

【SLAM】Ceres优化库超详细解析_ceres库-CSDN博客
 

重载()作用

 一文助你Ceres 入门——Ceres Solver新手向全攻略-CSDN博客

贴几个有用的链接

官网给出的代价函数

Cost functions — Cartographer documentation

Cartographer ROS Integration — Cartographer ROS documentation

Real-Time Loop Closure in 2D LIDAR SLAM

【论文阅读】【Cartographer】Real-Time Loop Closure in 2D LIDAR SLAM 二维激光SLAM中的实时闭环检测 - 知乎

https://storage.googleapis.com/pub-tools-public-publication-data/pdf/45466.pdf

Google Cartographer SLAM 原理 (Real-Time Loop Closure in 2D LIDAR SLAM 论文详细解读)_research of cartographer laser slam algorithm-CSDN博客

3.图优化

         将图有化用简单的例子讲解的通俗易懂:顶点(位姿)与边的约束(编码器推测或地标)的

关系,通过边的关系构建线性方程组,使用最小二乘法求解最优的解(构建残差平方和函数,

求偏导),最主要在于引入了边的信息矩阵。

小结:图有化实际为通过顶点之间的关系(边)构建最小误差函数,求解最佳位姿。图构建

好以后,如何调整机器人位姿使误差最小。3篇中的一篇,第3篇matlab的代码非常值得学习

        https://heyijia.blog.csdn.net/article/details/47686523

可以配合这个视屏的第6讲的讲解

https://www.bilibili.com/video/BV1YP4y1C7La/?spm_id_from=333.999.0.0

此文中需要用到的知识:

a. 矩阵求导

【矩阵的导数运算】1_标量向量方程对向量求导_分母布局_分子布局_哔哩哔哩_bilibili

b. 2d中约束的更细致分解

 第四篇:图优化理论slam - 知乎

c. cartographer中提到的一篇论文:

 Efficient_Sparse_Pose_Adjustment_for_2D_mapping

求解 H X = -b 的稀疏求解方法。提到的LM 介绍了一种λ的更新方法

d. 状态估计:

 两篇,感觉第二篇有点瑕疵,结论有点不好理解

《机器人学中的状态估计》笔记(1)——从简单的例子开始 - 知乎

  中间插播一个最大似然估计MLE(slam14讲中最小二乘的引出):

    个人理解:已知为一组观测数据,同时假定模型(通常某个概率分布,高斯或者其他概率分布函数,其实未定)已知;代入这个假定的模型求解出现 目前观测到的数据的最大概率(通常为多个独立事件的联合概率),然后得到 模型参数。 最可能的参数得到的最可能的 模型(概率分布函数等),使得出现 以上观测数据的可能性最大。

   以下为一个视频中对贝叶斯的理解

    贝叶斯的理解比较好视频:这里结合全概率公式理解。 后验(p(原因A|观测B):理解为如果是现在的观测结果B,可能是A引发的概率);似然P(B|A)理解为 在A的条件下B发生的概率(视频中说理解的传感器的精度,如果真实值为10度,测量为B的概率);先验 p(A), 今天的温度取值可能不同,A(10,11),数据或者经验值获得; 主要难理解的是分母的p(B),传感器的观测概率,与A的关系,可以理解为传感器的测量值概率分布由传感器的固有属性决定,与今天多少温度无关。

          贝叶斯滤波与卡尔曼滤波第三讲 贝叶斯滤波的三大概率_哔哩哔哩_bilibili

  详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解-CSDN博客

  贴两个高赞回答:

   答主:石溪  提到极大似然估计的思想  

   如何通俗地理解概率论中的「极大似然估计法」? - 知乎     

    聊一聊机器学习的MLE和MAP:最大似然估计和最大后验估计 - 知乎

e. 泰勒展开:

  多元泰勒展开
  https://zhuanlan.zhihu.com/p/110146436

  泰勒展
  脑路之清奇、操作之风骚、画风之诡异、场面之震撼
  https://www.zhihu.com/question/25627482

f. 数值优化小结:

 一阶导数二阶导数的意义:数学上标量函数一阶导数可以表达函数值变化快慢,二阶导数当然是表达一阶导数的函数值变化快慢(感觉废话实际有道理); 一阶导数图像上的物理意义是斜率;而二阶导数则为斜率的变化率。 

 f‘(x)一阶导数等于0,可以求出鞍点或极值点记为x0(可能多个值)。

 区别鞍点或极值点的方法:

法一:f’(x0 + d)*  f’(x0 - d)< 0 (d为微小变量)为极值点

         当f’(x0 - d)> 0, f’(x0 + d)< 0为极大值; 当f’(x0 - d)< 0, f’(x0 + d)> 0为极小值

   f'(x0 + d)*  f’(x0 - d)>0 (d为微小变量)为鞍点

法二:f“(x0) < 0 极大值,> 0为极小值,=0 为鞍点或无意义。 

呼应前面一堆废话:f”(x)的函数值可以判断极值点的类型,表征f(x)斜率变化;f'(x)表征f(x)斜率。 f’(x)的切线斜率可以很直观得出为哪种类型的拐点(极值点,鞍点)

用x平方,x立方,x四次方结合图像理解(懒,不画图了)

加上f(x)= x 3 + 3*x2图像理解

【manim】五分钟科普微积分系列:二阶导数的几何意义_哔哩哔哩_bilibilid

梯度的理解:

1.梯度其实就是各变量偏导数的向量,一个变量x则为沿着x方向的梯度
2.而我们所说的偏导数就是指的是多元函数沿坐标轴的变化率.
3.方向导数最大值的方向为梯度方向(函数值在该点变化率最大的方向)

为何名为梯度下降:梯度值在减小,但是迭代方向是梯度的反方向(一维)

如何通俗地理解梯度下降法 - 知乎
https://www.zhihu.com/question/305638940/answer/1639782992

为什么梯度反方向是函数值局部下降最快的方向
https://zhuanlan.zhihu.com/p/24913912

正定对比于自然数的大于0记忆(特征值)

        数值优化课程:龙强老师讲的比较通俗易懂(这一部分看视频好一些,看书太累)

个人了解了一下凸优化:p4~p6; 之后就是数值优化基础核心篇:p19~p27。 作者只讲到拟牛顿法,没有讲到GN 和LM。

龙强老师的个人空间-龙强老师个人主页-哔哩哔哩视频哔哩哔哩龙强老师的个人空间,提供龙强老师分享的视频、音频、文章、动态、收藏等内容,关注龙强老师账号,第一时间了解UP主动态。致力于推广最优化、机器学习、人工智能的理论、算法及应用。icon-default.png?t=N7T8https://space.bilibili.com/1904398473/?spm_id_from=333.999.0.0

   这个同学对slam14讲的第6章的讲解:非常全面且系统,有高斯牛顿(GN)和列文伯格-马夸尔特(LM),作者还给出了一些比较有用的技巧,有点丰富,可以考虑加速。

https://www.bilibili.com/video/BV1YP4y1C7La/?spm_id_from=333.999.0.0

补充:对slam14 第6讲的推导

视觉SLAM十四讲_6非线性优化_哔哩哔哩_bilibili

g. 高博的视觉slam14讲:

   6、9、10章比较系统的梳理了整个图优化相关理论(加第4章是为了解决姿态角的迭代),理论结构比较完整,但是有些理论还是需要延伸;如非线性优化相关的理论推导和李群李代数的知识推导(作者提到不希望过多的陷入数学推导,不过还是有很多推导(* ̄︶ ̄))。

结:

heyijia三篇图优化对于cartographer足够,框架结构看slam14;其余补充靠自己;上面贴了一些比较好的网络参考资料

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为地图绘制程序Cartographer的后端开发,优化是非常重要的。在软件开发过程优化可以提高程序的性能和效率,使其能够更加高效地运行。特别是在Cartographer这样需要大量数据处理和计算的应用优化是不可或缺的。以下是Cartographer后端优化的几个方面: 一、算法优化Cartographer需要进行大量的地图数据处理和建模,对于算法的优化尤为重要。例如,采用更快的搜索算法,优化地图建模算法等,可以显著提高程序的性能,使地图生成速度更快。 二、缓存优化:在Cartographer后端开发,缓存是一个非常重要的性能优化手段。对于已经计算过的数据或结果进行缓存,可以避免重复计算,节约系统资源,提高性能。 三、并发优化Cartographer需要同时处理多个数据集和任务,因此并行计算也是一项重要的优化手段。采用合适的多线程和进程技术,可以优化程序的并发性能,在处理大量并发任务时提高性能和效率。 四、资源管理优化Cartographer对于硬件资源的要求较高,对于内存和磁盘空间的管理也需要做出优化。例如,采用内存共享技术,合理利用内存资源,或者使用更高效的磁盘文件存储方式,可以优化程序的内存和磁盘使用效率。 总之,Cartographer后端优化是一个综合性的任务,需要从算法、缓存、并发、资源管理等多个方面入手,不断改进和优化,才能提高程序的性能和效率,在处理大量数据时更加稳定可靠。 ### 回答2: 在地图应用的开发cartographer是一种用于绘制和渲染地图的开源库。为了提高地图绘制的速度和性能,需要对cartographer后端进行优化。下面是几种常见的cartographer后端优化技巧。 1. 减少重复绘制 在构建地图时,有可能会存在相同的图层或图形重复绘制。这会降低地图的绘制速度和性能。为了避免这种情况,可以使用缓存技术,将重复的图层或图形存储到缓存并直接渲染。这样可以减少不必要的绘制,提高地图绘制速度。 2. 分离渲染和逻辑 在某些情况下,地图逻辑的计算和渲染会同时进行,这可能会导致渲染时间过长,反应迟缓。为了避免这种情况,可以将渲染和逻辑分离开来,采用多线程处理。例如,将地图上的图层分成多个单独的线程进行处理,这可以提高并发处理能力,从而加快渲染速度。 3. 使用可视化层级 在地图应用,可视化层级是一个重要的优化技巧。通过设置不同的可视化层级,可以让地图应用在不同的地图范围和缩放等级下呈现出不同的效果。这可以减少不必要的渲染和绘制,提高地图绘制速度和性能。 4. 优化数据传输 在绘制地图时,数据传输也是一个重要的环节。尽管网络传输速度正在不断提高,但是过多的数据传输仍会影响地图的绘制速度。为了避免这种情况,可以采用数据压缩和数据分段等技术,将数据传输量降至最小。 总之,cartographer后端的优化需要综合考虑多个方面,包括缓存技术、多线程处理、可视化层级等多个因素。只有综合运用这些技术才能实现地图绘制的高速、高效和高质量。 ### 回答3: 在cartographer后端优化方面,有几个关键点需要注意: 1. 增加硬件配置:在高负载的情况下,即使是最流行的后端也会遇到瓶颈,因此增加服务器的硬件配置可以极大地改善cartographer的性能表现,包括增加CPU核心数、提升内存容量等。 2. 数据库优化:数据库是cartographer后端最重要的组件之一,因为它存储了所有地图数据和相关信息。为了提升数据库性能,我们可以采取以下几个措施: - 数据库服务器硬件升级:升级硬件配置,例如增加内存容量或者使用更快的硬盘,可以改善cartographer的响应速度和吞吐量; - 数据库索引优化:增加合适的索引可以加速数据检索的速度,提高对数据库的操作效率; - 数据库分区:将数据库拆分为多个分区,每个分区处理一部分请求,可以极大地提升并发处理能力。 3. 代码优化cartographer后端的代码也需要不断进行优化、重构,以提高代码的质量和可维护性,同时也可以提高程序的性能和稳定性。可以通过以下几个方面进行优化: - 合理使用缓存:将一些常用的计算结果、数据存储到缓存,减少数据库的访问次数,可以提高系统的响应速度; - 使用异步编程模型:在处理IO密集型任务时,采用异步编程模型可以有效减少线程阻塞,提高系统的并发处理能力; - 采用负载均衡器:在多台服务器上运行cartographer后端时,采用负载均衡器分配任务可以充分利用服务器资源,提高系统的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值