pose_graph的优化变量和优化函数
1.优化变量
优化变量就是vertex,也就是pose,pose-graph的优化目标就是,调整所有vertex的位置来尽量满足所有边的约束。
上述的还是表层的理解,深一步理解:
pose-graph的边就是残差函数(哎,刚哥说的对呀),vertex就是优化变量,G2O封装残差函数比较好,直接封装成了边的形式,但是用ceres,残差函数就得自己构建,所以pose-graph的优化目标也就是一般优化问题的目标——残差函数尽可能小。
2.优化函数
可以参考白巧克力的介绍,假如有n个vertex,根据edge的约束,如果建立了n个残差方程(每个方程都是代表着不同vertex之间的关系),那么vertex就只有唯一解。但是通常情况下,一个pose-graph中构建的边都是 > n的,所以就构成了一个超定方程组(沁睿告诉过我的),此时就不存在唯一解了,问题就转化成了一个优化问题——求解所有残差方程的最优解,利用最小二乘就可以求解出尽量满足所有方程的最优vertex,或者用数值解法。
白巧克力的case跟我实际的pose-graph,还是有点区别:
白巧克力说的是通过多传感器,分别构建残差函数,每一个残差方程只有一种传感器/算法的信息,然后求解超定方程组;而我实习所构建的pose-graph的残差方程,每一个方程都是结合了多传感器/算法的结果,比如hobot的pose-graph的每一个残差方程都结合了loam/icp的信息,l3的pose-graph的每一个残差方程都结合了gps/点云feature match的信息。当然hobot和l3的本质一样,区别在于,初始位置一个由loam获得,一个由gps获得;修正信息一个由点云icp配准获得,一个由点云feature match获得。
白巧克力的case跟我实际的pose-graph,当然本质是一样的:
我们的每个方程都是代表着不同vertex(pose)之间的关系。
pose_graph的优化变量和优化函数的更多相关文章
- (四)ORBSLAM运动估计
ORBSLAM2的运动估计简介 ORBSLAM2中的运动估计核心方法就是3D-2D的PNP,而在跟踪过程主要分为三种类型: 无运动模型的跟踪,即基于参考帧的跟踪: 基于匀速运动模型的跟踪: 重定位: ...
- 深入理解图优化与g2o:图优化篇
前言 本节我们将深入介绍视觉slam中的主流优化方法——图优化(graph-based optimization).下一节中,介绍一下非常流行的图优化库:g2o. 关于g2o,我13年写过一个文档,然 ...
- 算法的优化(C语言描述)
算法的优化 算法的优化分为全局优化和局部优化两个层次.全局优化也称为结构优化,主要是从基本控制结构优化.算法.数据结构的选择上考虑:局部优化即为代码优化,包括使用尽量小的数据类型.优化表达式.优化赋值 ...
- Sequential Minimal Optimization(SMO,序列最小优化算法)初探
什么是SVM SVM是Support Vector Machine(支持向量机)的英文缩写,是上世纪九十年代兴起的一种机器学习算法,在目前神经网络大行其道的情况下依然保持着生命力.有人说现在是神经网络 ...
- ORB-SLAM(十二)优化
ORB-SLAM中优化使用g2o库,先复习一下g2o的用法,上类图 其中SparseOptimizer就是我们需要维护的优化求解器,他是一个优化图,也是一个超图(包含若干顶点和一元二元多元边),怎样定 ...
- BA优化PnP的思路
由之前的PnP,可以求出一个R,t,K又是已知的.而且空间点的世界坐标知道,第二个相机位姿的像素坐标也是知道的.就可以利用它们进行优化.首先确定变量为const vector<Point3f&g ...
- 姿态角(RPY)的优化目标函数
在Pose-Graph的过程中,如果使用G2O优化函数库,那么似乎是不用自己编写代价函数(也就是优化目标函数)的,因为G2O有封装好的SE3等格式,使得Pose-Graph的过程变得简单了,即只需要设 ...
- JavaScript性能优化
如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度. 这种情况下决定程序速度的另一个重要因素就是代码本身. 在这里我们会分门别类的介绍J ...
- 浅谈C51内存优化
对 51 单片机内存的认识,很多人有误解,最常见的是以下两种 超过变量128后必须使用compact模式编译,实际的情况是只要内存占用量不超过 256.0 就可以用 small 模式编译 128以上的 ...
随机推荐
- Mysql 错误:Duplicate entry '0' for key 'PRIMARY'
[1]添加数据报错:Duplicate entry '0' for key 'PRIMARY' (1)问题现象 SQL 语句如下: DROP TABLE test_distinct; CREATE T ...
- Java SPI机制:ServiceLoader实现原理及应用剖析
一.背景 SPI,全称Service Provider Interfaces,服务提供接口.是Java提供的一套供第三方实现或扩展使用的技术体系.主要通过解耦服务具体实现以及服务使用,使得程序的可扩展 ...
- Mono 下的 ASP.NET 可以运行在哪些 Web 服务器上?
Mono has an implementation of ASP.NET 2.0, ASP.NET MVC and ASP.NET AJAX. Quick Resources: ASP.NET FA ...
- 【BZOJ5104】Fib数列(BSGS,二次剩余)
[BZOJ5104]Fib数列(BSGS,二次剩余) 题面 BZOJ 题解 首先求出斐波那契数列的通项: 令\(A=\frac{1+\sqrt 5}{2},B=\frac{1-\sqrt 5}{2}\ ...
- MySQL如何定位并优化慢查询sql
1.如何定位并优化慢查询sql a.根据慢日志定位慢查询sql SHOW VARIABLES LIKE '%query%' 查询慢日志相关信息 slow_query_log 默认是off关闭 ...
- 【转】Redis 分布式锁的正确实现方式( Java 版 )
链接:wudashan.cn/2017/10/23/Redis-Distributed-Lock-Implement/ 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布 ...
- oracle 10 升级补丁
Ooacle 10g补丁安装方法 Windows 平台 方法: 1. 备份数据库:关闭数据库,拷贝,安装软件目录,数据文件拷到另一个地方 2. 关闭停止所有oracle 服务+Distribute ...
- 【转载】Gradle学习 第四章:安装Gradle
转载地址:http://ask.android-studio.org/?/article/16 4.1. Prerequisites 前提条件Gradle requires a Java JDK or ...
- 在ubuntu更新时,出现错误E: Some index files failed to download, they have been ignored, or old ones used inst
原文:https://blog.csdn.net/tian_ciomp/article/details/51339635 在ubuntu更新时,出现错误E: Some index files fail ...
- k8s krew 插件管理工具
参考:https://github.com/kubernetes-sigs/krew https://int32bit.me/2019/12/05/%E5%88%86%E4%BA%AB%E5%87%A ...