G2O是一个开源的C++框架,用于优化基于图形的非线性误差函数。g2o被设计为易于扩展到各种各样的问题,一个新的问题通常可以在几行代码中指定。
G2O是一个开源的C++框架,用于优化基于图形的非线性误差函数。g2o被设计为易于扩展到各种各样的问题,一个新的问题通常可以在几行代码中指定。
当前的实现为SLAM和BA的几个变体提供了解决方案,机器人技术和计算机视觉中的一系列问题都涉及到最小化可以用图形表示的非线性误差函数,典型的例子是同步定位和映射(SLAM)或束调整(BA)。这些问题的总体目标是最大限度地找到能够解释受到高斯噪声影响后的一组测量数据的参数或状态变量的配置。通过把优化问题设计成图的模式:带优化的变量称为顶点,对于待优量的限制条件为边。限制条件可理解成损失函数,这个函数是优化的关键,我们要通过不断的迭代获取最小的损失,从而推断出优化后的顶点而求解。
G2O是一个开源的C++框架,用于解决非线性最小二乘问题。G2O的性能可与针对特定问题的最先进方法的实现相媲美。本文通过曲线上的点受高斯噪声影响后,利用G2O设计图模型,然后经过手动计算微分实现来重新拟合曲线。
Content:
上篇多项式方程的G2O优化方式代码:
调用优化器对图进行优化:
求解器求解此轮的Δx:
计算雅可比矩阵
更新雅可比矩阵
更新雅可比矩阵和目标向量b
求解 _Hpp * _x = _b 得到 _x
通过Δx更新x

接上篇非线性优化,接着解析G2O框架对非线性优化的实现。
上篇多项式方程的G2O优化方式代码:
#include <iostream> |
调用优化器对图进行优化:
int SparseOptimizer::optimize(int iterations, bool online) |
求解器求解此轮的Δx:
OptimizationAlgorithm::SolverResult OptimizationAlgorithmGaussNewton::solve(int iteration, bool online) |
更新雅可比矩阵和目标向量b
template <typename Traits> |
计算雅可比矩阵
//模板展开g2o::BaseFixedSizedEdge<1, Eigen::Matrix<double, 2, 1, 0, 2, 1>, VertexCircle>::linearizeOplus() at base_fixed_sized_edge.hpp:130 |
更新雅可比矩阵
//构建参数的二次形式 |
求解 _Hpp * _x = _b 得到 _x
template <typename Traits> |
通过Δx更新x
void SparseOptimizer::update(const number_t* update) |
文章转载自慢慢的回味,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




