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的优化变量和优化函数的更多相关文章

  1. (四)ORBSLAM运动估计

    ORBSLAM2的运动估计简介 ORBSLAM2中的运动估计核心方法就是3D-2D的PNP,而在跟踪过程主要分为三种类型: 无运动模型的跟踪,即基于参考帧的跟踪: 基于匀速运动模型的跟踪: 重定位: ...

  2. 深入理解图优化与g2o:图优化篇

    前言 本节我们将深入介绍视觉slam中的主流优化方法——图优化(graph-based optimization).下一节中,介绍一下非常流行的图优化库:g2o. 关于g2o,我13年写过一个文档,然 ...

  3. 算法的优化(C语言描述)

    算法的优化 算法的优化分为全局优化和局部优化两个层次.全局优化也称为结构优化,主要是从基本控制结构优化.算法.数据结构的选择上考虑:局部优化即为代码优化,包括使用尽量小的数据类型.优化表达式.优化赋值 ...

  4. Sequential Minimal Optimization(SMO,序列最小优化算法)初探

    什么是SVM SVM是Support Vector Machine(支持向量机)的英文缩写,是上世纪九十年代兴起的一种机器学习算法,在目前神经网络大行其道的情况下依然保持着生命力.有人说现在是神经网络 ...

  5. ORB-SLAM(十二)优化

    ORB-SLAM中优化使用g2o库,先复习一下g2o的用法,上类图 其中SparseOptimizer就是我们需要维护的优化求解器,他是一个优化图,也是一个超图(包含若干顶点和一元二元多元边),怎样定 ...

  6. BA优化PnP的思路

    由之前的PnP,可以求出一个R,t,K又是已知的.而且空间点的世界坐标知道,第二个相机位姿的像素坐标也是知道的.就可以利用它们进行优化.首先确定变量为const vector<Point3f&g ...

  7. 姿态角(RPY)的优化目标函数

    在Pose-Graph的过程中,如果使用G2O优化函数库,那么似乎是不用自己编写代价函数(也就是优化目标函数)的,因为G2O有封装好的SE3等格式,使得Pose-Graph的过程变得简单了,即只需要设 ...

  8. JavaScript性能优化

    如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度. 这种情况下决定程序速度的另一个重要因素就是代码本身. 在这里我们会分门别类的介绍J ...

  9. 浅谈C51内存优化

    对 51 单片机内存的认识,很多人有误解,最常见的是以下两种 超过变量128后必须使用compact模式编译,实际的情况是只要内存占用量不超过 256.0 就可以用 small 模式编译 128以上的 ...

随机推荐

  1. java中需要转义的特殊字符

    在Java中,不管是String.split(),还是正则表达式,有一些特殊字符需要转义, 这些字符是 (    [     {    /    ^    -    $     ¦    }    ] ...

  2. aspect原理分析

    人的记忆能力是有限的,分析.建模与解释能力是无限的 Call Hierarchy isa hook aspect_hookClass() aspect_prepareClassAndHookSelec ...

  3. 《 .NET并发编程实战》阅读指南 - 第10章

    先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.

  4. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的解决办法

    https://www.jb51.net/article/157457.htm 下载32位版本安装即可 Microsoft Access Database Engine Redistributable ...

  5. android版本对应表

    API Level 最初Android版本 Linux内核版本 首次发布日期 后续Android版本 28 9 Unknown 2018-07-02(Beta 3) - 27 8.1 4.10 201 ...

  6. ASP.NET Core 应用程序状态

    在ASP.NET Core中,由多种途径可以对应用程序状态进行管理,使用哪种途径,由检索状态的时机和方式决定. 应用程序状态指的是用于描述当前状况的任意数据.包括全局和用户特有的数据. 开发人员可以根 ...

  7. 解决Eclipe安装不上android的ADT的办法

    Eclipse,https://dl-ssl.google.com/android/eclipse/安装不上去,ADT在线安装装不了,用离线包又出问题时会不会疯掉. 显然,国内网络和谐掉了google ...

  8. Java生成前三位是字母循环的字典

    title: Java生成前三位是字母循环的字典 date: 2018-08-17 18:52:22 tags: Java --- 最近要破解一个秘密,还好这个密码是有线索的,已知密码的前三位是三个字 ...

  9. vue+element创建动态的form表单.以及动态生成表格的行和列

    动态创建form表单,网上有插件 (form-create) 不过我不知道它怎么用,没有使用成功,如果你使用成功了,欢迎下方留言. 最后我使用了笨方法,针对各个表单写好通用的组件,然后根据type用v ...

  10. 网络编程(二)--TCP协议、基于tcp协议的套接字socket

    一.TCP协议(Transmission Control Protocol 传输控制协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会 ...