SLAM中姿态估计的图优化方法比较(g2o/Ceres/GTSAM/SE-Sync)

2023-05-16

 编辑 | 深蓝AI

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

后台回复【SLAM综述】获取视觉SLAM、激光SLAM、RGBD-SLAM等多篇综述!

本文是对论文《A Comparison of Graph Optimization Approaches for Pose Estimation in SLAM》的带读~

1.摘要

fd4cd1a67115835fbbdd4ff551d2fb02.png

对于位置环境中的自主导航问题,同步定位与建图(Simultaneous localization and mapping, SLAM)是一个非常重要的工具框架。根据SLAM字面含义可以得知,获取正确的环境表征和估计机器人正确的运动轨迹这两点在SLAM问题中至关重要。在解决优化估计问题上表现SOTA方法的主流思路是基于图优化的最小二乘,比较流行的算法框架有g2o、Ceres、GTSAM、SE-Sync等。作者这篇论文描述了这些方法并进行了对比测试。

2.总体介绍

e1143f499395319a3ef7e46764b48e64.png

在SLAM领域刚刚起步的时候,基于滤波算法的SLAM霸占了很多年,因为PGO(Pose graph Optimization)存在处理效率的问题,而SLAM对实时性要求又比较高。到了现如今,由于计算机处理效率逐渐提高,PGO方法被提上了日程,越来越多高效的优化算法使得基于PGO的优化SLAM占据主流地位。

基于优化的SLAM方法主要分为两个部分:

· 第一部分就是根据传感数据的测量数据,建立新的观测与地图之间的约束(就是损失函数) ;

· 第二部分就是根据约束处理优化机器人位姿和地图信息。

以典型基于优化的SLAM问题来说:Pose-SLAM,它避免了建立一个明确的环境地图,目标是在给定闭环和里程约束条件下估计机器人的轨迹(相对姿态)。这些相对姿态测量通常通过IMU、lidar、camera或GPS获得,使用ego-motion、scan-registration、ICP等构建最小化视觉重投影误差(就是损失函数)。利用最流行的优化框架g2o、Ceres、GTSAM、SE- Sync等进行求解。但是没有论文在同一条件下对这些框架算法进行评估,本文的目的就是这个,在相同条件下,测试不同框架对不同问题的性能效果。

3.非线性位姿图优化方法

dd89886a41e8dc44efc86cb317f32924.png

在Pose-SLAM的优化问题中,每个姿态图(pose graph)都由节点(node)边(edge)组成,其中:

  • 节点(node):对应于机器人在环境中的位姿,也是优化的目标;

  • 边(edge):不同节点之间的空间约束。相邻节点之间的边是里程约束,其余边表示闭环约束。

下图展示了一个pose-graph可视化的结果,由于物体的运动在时间上连续,可以看到36cfe5428def792af5796ece4945e53c.png代表一些系列的位姿。

  • 实线连接:时间相邻位姿,用于局部里程计(odometry)优化 ;

  • 虚线连接:存在共视关系,即有些特征点在不同位姿下同时观察到,用于闭环(loop-closures)优化。

83f548ede5950b35cc225916d12b8fa1.png

下面简述一个非线性位姿图优化的基本思路步骤:

确定优化目标:在位姿图的所有约束条件下找到最小二乘误差的正确节点配置。一般情况下,可以定义为fe87de7f06c6f3d0ebb8604561578682.png

其中, F(x)是所有图约束对应误差总和:9b0923e0ab9f5727dd10da6b26c1780c.png

其中,C 表示连接节点之间的索引对集合,i 和 j 表示节点 i 和j 之间的信息矩阵,e6ecd718baef34ea48b12a13c847004b.png是非线性误差函数,用来模拟姿态b1b2f6412486abfd6095333a19ec3027.png2b273be4c1ebbd566a5398f63ce7c62f.png如何满足测量4bc0e64e158be10843c71a4b10426137.png施加的约束。采用信息矩阵3a9aaba31da78a85991c234dd6d620c0.png和误差函数1b4b9bc5d9d44f67e18664c07870c3a1.png对每一个约束进行建模。如下图所示

a6f2a7b6a2b4af73418f0aa5820f0c27.png

优化求解:通过迭代优化算(Gauss-Newton、Levenberg-Marquardt等)可以得到问题最优解。主要想法是用上式在初始值附近的一阶泰勒展开来近似误差函数。一般来说,包括四个主要步骤:

  1. 固定一个初始值;

  2. 将问题近似为凸问题;

  3. 对步骤2问题求解,并更新初始值;

  4. 重复步骤2-3直到收敛。

Pose-SLAM的优势:求解问题存在稀疏性,可以加快求解速度,并且对于初始状态的变化较为鲁棒。

Pose-SLAM的缺点:对外点(outliers,亲切一点就是错的离谱的结果)不具有鲁棒性,另外,优化估计Rotation的过程是一个非凸优化问题,容易造成导致局部最优问题,且不保证全局最优问题。

4.优化框架介绍

21b449ac358c239e27fff739c90c6e38.png

g2o

g2o是一个开源的通用框架,用于优化可以定义为图形的非线性函数,它的优点是易于扩展,高效,适用于广泛的问题。主要特点有:

  1. 可以与其他最先进的算法相媲美,同时具有高度的通用性和可扩展性;

  2. 通过利用稀疏连通性、图的特殊结构以及现代处理器的特点来实现高效计算;

  3. 该框架包含了3种不同的PGO算法:GaussNewton 、Levenberg-Marquardt、Powell’s Dogleg。

应用:ORB-SLAM的后端处理、SVO的visual odometry部分

Ceres

Ceres Solver是一个开源的c++库,用于建模和解决大型、复杂的优化问题。它主要致力于解决非线性最小二乘问题(束平差和SLAM),但也可以解决一般的无约束优化问题。

  1. 该框架易于使用、可移植、广泛优化、低计算时间;

  2. Ceres的设计允许用户定义和修改目标函数和优化求解器;

  3. 实现的求解算法包括trust region solvers(Levenberg-Marquardt、Powell’s Dogleg)和line search solvers。

应用:OKVIS、VINS中的图优化问题

GTSAM

GTSAM是一个开源c++库,它实现了机器人和计算机视觉应用的传感器融合。它可用于SLAM、视觉测程和SFM中的优化问题。

  1. GTSAM使用因子图来模拟复杂的估计问题,并利用其稀疏性来提高计算效率;

  2. 实现了Levenberg- Marquardt、Gauss-Newton的优化器。

应用:GTSAM与各种传感器前端一起使用,SVO的变体使用GTSAM作为里程计的后端。

SE-Sync

SE-Sync的目标给定节点之间的相对变换的噪声测量的条件下,估计一组未知的姿态的值

  1. 主要应用于二维和三维几何估计;

  2. 改进了以往的方法,它利用了特殊的欧氏同步问题的一个新的(凸)半定松弛来直接搜索全局最优解;

  3. 采用truncated-Newton Riemannian Trust-Region method来寻找有效的姿态估计。

5.实验测试

e21422fec609ac0f20c91cea9eaf3b7f.png

实验标准:

  • 评价标准:运行时间、损失结果、终止条件

  • 评价数据集:合成数据集、真实数据集

实验环境:

  • Lenovo ThinkPad P50 equipped with an octa-core Intel Core i7-6700HQ CPU operating at 2.60 GHz and 16 GB RAM

  • Ubuntu20.04

优化配置:

  • 算法:Levenberg- Marquardt;

  • 迭代次数:最多100次;

  • 停止迭代标准:达到最大迭代次数或相对误差阈值;

  • 梯度下降率:0.01 。

测试结果:

  • 部分优化结果(在INTEL、MIT两个数据集上)

66e4f7574b184dbb0d42847146c959f3.png

  • 整体测试统计结果

e7f53abf0a2e9375dc7ff4ca690cc309.png

6.结论

209a29bc6ae2a9e6cdd606f8f0a7b261.png

本文比较了在SLAM中用于姿态估计的图优化算法。作者考虑了g2o、GTSAM、Ceres、SE-Sync四个主流优化框架。评估过程考虑了优化时间优化结果,以表的形式给出了测试结果,发现:

  • 与其他三种方法相比,SE-Sync在大多数数据集上优化时间最短;

  • g2o优化时间最长,但在简单数据集上表现良好;

  • Ceres易于使用,提供了很大的灵活性,而且相对较快;

  • 除了在噪声干扰严重的数据集上,GTSAM的性能几乎和SE-Sync一样 。

并且作者建议:

对于数据关联差、噪声大和性能差的前端,最好使用SE-Sync作为后端。如果初始化较好,GTSAM表现和SE-Sync一样出色 。

对于比性能优秀的前端,在数据集相对简单、噪音很低的情况下,后端优化的选择就凭借个人喜好了。

往期回顾

激光雷达SLAM方法汇总 | 自动驾驶和移动机器人领域

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;

加入我们:自动驾驶之心技术交流群汇总!

自动驾驶之心【知识星球】

想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!

3819b1d9be0d1fb18d559ce6949196aa.jpeg

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SLAM中姿态估计的图优化方法比较(g2o/Ceres/GTSAM/SE-Sync) 的相关文章

  • 大师兄!SLAM 为什么需要李群与李代数?

    from https mp weixin qq com s sVjy9kr 8qc9W9VN78JoDQ 作者 electech6 来源 计算机视觉life 编辑 Tony 很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候 都有点
  • Ubuntu20.04编译安装opencv3.2和opencv_contrib-3.2

    图像特征提取中需要用到SIFT等算法 因此不得不安装从源码编译安装opencv contrib 网上有很多教程 但是在不同的环境下多少会出现一些错误 针对Ubuntu20 04 gcc 7环境下对opencv opencv contrib编
  • Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据 --SLAM不学无术小问题

    Ubuntu18 04 安装速腾聚创最新驱动RSLidar SDK采集XYZIRT格式的激光点云数据 新款驱动支持RS16 RS32 RSBP RS128 RS80 RSM1 B3 RSHELIOS等型号 注意 该教程旨在引导安装 可能现在
  • 各向异性(anisotropic)浅提

    文章目录 各向异性 anisotropic 定义 哪种物体具有各向异性反射 什么导致各向异性反射 总结 各向异性 anisotropic 定义 它指一种存在方向依赖性 这意味着在不同的方向不同的特性 相对于该属性各向同性 当沿不同轴测量时
  • ORB_SLAM3复现——上篇

    ORB SLAM3 前言 1 ORB SLAM3 2 准备环境 2 1 C 11 Compiler 2 2 Pangolin 2 3 Opencv 2 4 Eigen 3 复现ORB SLAM3 3 1 下载代码 3 2 执行build s
  • 激光SLAM直接线性方法里程计运动模型及标定

    原创作者 W Tortoise 原创作者文章 https blog csdn net learning tortosie article details 107763626 1 里程计运动模型 1 1 两轮差分底盘的运动模型 1 2 三轮全
  • Sophus使用记录

    sophus库是一个基于Eigen的C 李群李代数库 可以用来方便地进行李群李代数的运算 头文件 主要用到以下两个头文件 include
  • 使用EKF融合odometry及imu数据

    整理资料发现早前学习robot pose ekf的笔记 大抵是一些原理基础的东西加一些自己的理解 可能有不太正确的地方 当时做工程遇到的情况为机器人在一些如光滑的地面上打滑的情形 期望使用EKF利用imu对odom数据进行校正 就结果来看
  • 深度相机Kinect2.0三维点云拼接实验(一)

    文章目录 摘要 Kinect2 0简介 工作原理 RGB相机成像原理 深度相机成像原理 总结 参考文献 摘要 Kinect2 0是微软推出的一款RGB D相机 它即支持普通相机的拍摄 也支持脉冲测量深度信息 本系列文章基于该传感器给出基本的
  • 动态场景下基于实例分割的SLAM(毕业设计开题及语义分割部分)

    动态场景下基于实例分割的SLAM 毕业论文设计思路及流水 前言 今年选了个比较难的毕设题目 这里记录一下自己思路和流程 为之后的学弟学妹 划掉 铺个方向 会按日期不定期的更新 一 开题 2019 12 24 考研前选择课题是 利用深度学习对
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • ORB-SLAM2:基于可识别特征的自主导航与地图构建

    目录 ORB SLAM2 基于可识别特征的自主导航与地图构建 简介 地图 A 地图特征点或3D ORB B 关键帧 C 可视化图像 位置识别 A 图像识别数据库 B 高效优化的ORB匹配 C 视觉一致性 自主导航追踪 A ORB特征获取 B
  • 【Pytorch论文相关代码】使用SOLD2预训练好的模型检测与匹配线段(自己的数据集)

    文章目录 前言 使用流程 检测与匹配结果 前言 论文链接 SOLD2 Self supervised Occlusion aware Line Description and Detection 论文源码 https github com
  • BLAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )-SLAM不学无术小问题

    BLAM算法跑自己的数据包无法显示全局点云地图解决 适配速腾聚创RS LiDAR 16 雷达 提示 本文笔者使用环境Ubuntu18 04 ROS melodic版本 首先放一个效果链接 由b站up VladimirDuan上传 非官方 官
  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘
  • LIO-SAM运行自己数据包遇到的问题解决--SLAM不学无数术小问题

    LIO SAM 成功适配自己数据集 注意本文测试环境 Ubuntu18 04 ROS melodic版本 笔者用到的硬件以简单参数 激光雷达 速腾聚创16线激光雷达 RS Lidar 16 IMU 超核电子CH110型 9轴惯导 使用频率1
  • 多人实时对战网络同步方式研究

    写在开头 已经研究生毕业快一年半了 一直在一家游戏公司做客户端研发 至于这篇文章讲的却是服务端的东西 主要是因为以前一直没想写博客 学到的东西也一直记在本子上就得了 本人喜欢有剧情的东西 像RPG游戏 仙剑爱好者 有剧情的电视 电影 还有竞
  • Todesk突然高速通道使用已结束

    今天使用Todesk直接报出如下错误 好像对于海外用户需要付费购买海外会员 大家有没有什么可以替换的远程控制软件的吗 能分享一下吗
  • 什么是深度学习的无监督学习与有监督学习

    无监督学习 深度学习中的无监督学习方法是一种训练算法 它在没有标注输出的情况下从输入数据中学习模式和特征 这种方法的核心是探索和理解数据的内在结构和分布 而不是通过已知的输出来指导学习过程 无监督学习在深度学习领域有许多不同的形式和应用 以
  • 高翔博士Faster-LIO论文和算法解析

    说明 题目 Faster LIO 快速激光IMU里程计 参考链接 Faster LIO 快速激光IMU里程计 iVox Faster Lio 智行者高博团队开源的增量式稀疏体素结构 Faster Lio是高翔博士在Fast系列的新作 对标基

随机推荐

  • 【沧海拾昧】WiFi串口通信ESP8266模块基本介绍(附野火WiFi透传实例)

    C0104 沧海茫茫千钟粟 xff0c 且拾吾昧一微尘 沧海拾昧集 64 CuPhoenix 阅前敬告 沧海拾昧集仅做个人学习笔记之用 xff0c 所述内容不专业不严谨不成体系 如有问题必是本集记录有谬 xff0c 切勿深究 目录 前言一
  • linux shell

    转自 xff1a http blog csdn net fly sky520 article details 8853537 最近在linux下面编写shell脚本 xff0c 差不多是边学边写 在此记录一些学习心得 一 xff09 she
  • 软件开发遇到的难题_软件开发团队如何处理管理难题

    软件开发遇到的难题 通常是这样的 项目经理或产品负责人传达了来自公司食品链上层人士的消息 xff0c 即必须在给定日期之前交付软件 日期背后的原因可能是已知的 xff0c 但可能不是 反过来 xff0c 项目经理通知软件开发团队必须在该日期
  • Ubuntu20.04由于分辨率问题安装界面显示不完整

    使用vmware安装ubuntu的时候 xff0c 由于分辨率的问题 xff0c 导致安装界面显示不完整 xff0c button被隐藏 xff0c 无法进行下一步鼠标操作 同学遇到的问题 xff0c 迟迟不能解决 xff0c 参考别人的解
  • 数据结构排序算法及代码整理

    排序 xff1b 1 插入排序 xff08 直接插入排序和希尔排序 xff09 2 选择排序 xff08 直接选择排序和堆排序 xff09 3 交换排序 xff08 冒泡排序和快速排序 xff09 4 归并排序 5 基数排序 xff0d x
  • 排序算法性能比较

    各种排序方法的综合比较 结论 排序方法 平均时间 最坏时间 辅助存储 简单排序 O n2 O n2 O 1 快速排序 O nlogn O n2 O logn 堆排序 O nlogn O nlogn O 1 归并排序 O nlogn O nl
  • c++标准容器类(表格介绍)

    1 STL有6种序列容器类型 xff08 1 xff09 vector 它提供对元素的随即访问 xff0c 在尾部添加和删除元素的时间是固定的 xff0c 在头部或中部插入和删除元素的复杂度为线性时间 xff08 2 xff09 deque
  • 各大公司薪水一览表

    转自 http blog sina com cn s blog 4997a23a0100b2xc html 最近终于把自己给卖了 xff0c 这几个月来自己陆陆续续的面试的有30多家公司 xff0c 主要是IT公司 xff0c 准备把今年我
  • strtol

    转自 xff1a http hi baidu com qwpsmile blog item 9bc44efa4f41018a9f514637 html 今天 xff0c 在review 一些代码的时候 xff0c 看到了strtol 这个函
  • 学会做自己的朋友

    转自 http www 5xue com modules article view article php a2233 你是否经历过 xff1a 我们常会怪罪自己 xff0c 给自己很低的评价 xff0c 也习惯对结果做最坏的打算 xff1
  • 二值信号量和互斥信号量的区别

    互斥信号量和二进制信号量的区别 互斥型信号量必须是同一个任务申请 xff0c 同一个任务释放 xff0c 其他任务释放无效 同一个任务可以递归申请 二进制信号量 xff0c 一个任务申请成功后 xff0c 可以由另一个任务释放 二进制信号量
  • 敏捷开发

    这两个圆圈表示不同的视角上的敏捷实践 xff0c 包括开发者视角和项目管理的视角 接下来从里向外进行介绍 xff0c 因为有些实践我了解得不清楚 xff0c 如果下面有哪些说得不对的地方也请大家指出 Test Driven Developm
  • c++结构体的二进制文件,python如何解析

    c 43 43 结构体的二进制文件 xff0c python如何解析 场景分析 现有如下场景 xff1a 有一个二进制文件需要解析成可读数据已知条件 xff1a 该文件符合c 43 43 结构体对应的结构体数据 xff0c 因此我们可以通过
  • LeetCode刷题记录(Python3)——线性表

    LeetCode27 移除元素 简单 问题描述 xff1a 给定一个数组nums和一个值val xff0c 你需要原地 移除所有数值等于val的元素 xff0c 并返回移除后数组的新长度 不要使用额外的数组空间 xff0c 必须仅使用 O
  • 使用百度网盘上传大文件到云服务器

    因为需要把几个7G大小左右的数据上传至服务器 xff0c 但无奈使用的是共享服务器 xff0c 上传速度非常慢 管理员建议可以用奶牛快传 xff08 目前收费 xff09 中转 xff0c 百度搜了一下 xff0c 百度网盘有相同作用 xf
  • ubuntu操作系统中TCP客户端和服务器端的开发

    网络编程在Python中的应用 xff0c 三次握手和四次挥手的理解 TCP客户端和服务器端流程图 xff1a TCP客户端开发流程 xff1a 1 创建客户端套接字 2 和服务端套接字建立连接 3 发送数据 4 接收数据 5 关闭客户端套
  • sphinx 文档_Sphinx轻松漂亮的文档

    sphinx 文档 Sphinx是允许开发人员以纯文本格式编写文档的工具 xff0c 可轻松生成满足各种需求的格式的输出 使用版本控制系统跟踪更改时 xff0c 这将很有帮助 纯文本文档对于跨不同系统的协作者也很有用 纯文本是当前可用的最可
  • 经典激光雷达SLAM系统:LeGO-LOAM

    作者 密斯特李 编辑 汽车人 原文链接 xff1a https zhuanlan zhihu com p 511968459 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之
  • 经典激光雷达SLAM系统:LOAM-Livox

    作者 密斯特李 编辑 汽车人 原文链接 xff1a https zhuanlan zhihu com p 515732721 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之
  • SLAM中姿态估计的图优化方法比较(g2o/Ceres/GTSAM/SE-Sync)

    编辑 深蓝AI 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 后台回复 SLAM综述 获取视觉SLAM 激光SLAM RGBD SLAM等多篇综述 xff01 本文是对论文 A Compari