Factor Graph, 因子图

2023-05-16

引言

因子图方法广泛应用于机器人姿态估计,多种信号融合领域,在机器视觉、无人机导航、无人驾驶领域应用广泛,与传统卡尔曼滤波方式相比,能提供更高精度,更平滑的全局结果。 因子图本质上是贝叶斯网络最大后验估计,数学上转化成对一个全局目标函数进行优化,全局函数由多个小因子(约束)构成,一般目标函数是待优化变量的非线性函数,在优化过程中需要变量当前位置进行线性化,利用Gauss-Netwon或其他方式迭代逼近最优解。主要计算步骤:残差计算、线性化、线性方程求解器、优化变量更新。当系统规模很大情况下,利用处理平台上多核CPU或GPU加速卡,可以对优化结算过程进行加速优化。

优化策略和实现

针对多核CPU处理器,采用OpenMP多线程编程模式进行并行计算。OpenMP适合对循环在线程中间进行分割划分,并行执行计算,同时提供锁、临界区等功能。OpenMP可以在对串行程序进行较小改动情况下,能较充分利用多核计算能力。因子图计算中的一些步骤可以直接使用OpenMP进行优化,一些步骤需要考虑线程间的互相影响,一个策略是采用临界区保证运行正确,另一个策略是对输入数据进行逻辑划分,让线程间的运算尽可能没有互相影响。

针对NVidia 公司GPU加速卡,使用CUDA编程将因子图计算中适合步骤迁移到GPU卡上进行计算,一些适合CPU的步骤放在主机端进行,CPU和GPU通过数据异步传输,进行中间结果交换,实现异构计算并行优化

残差计算并行优化

残差计算在CPU或GPU上并行计算比较直接。每个因子可以作为一个原子任务,分配给CPU线程或是GPU线程块进行计算,最后进行求和汇总。残差计算因计算量不大,比较适合在CPU端进行计算

目标函数线性化并行优化

线性化过程包含两个步骤。第一步是因子图中的每个因子进行线性化,获得对应Jacobian矩阵,因子间的计算独立,可以直接映射到CPU线程或GPU计算单元上;第二步是用每个因子的Jacobian小矩阵构造线性方程组的Hessian矩阵,本步骤并行需要根据图的拓扑结构进行划分,把因子图划分成多个子图,每个子图内的因子对全局Hessian矩阵的更新没有关联,可以并行独立计算。

线性方程求解器并行优化

Hessian矩阵一般是稀疏块状矩阵。针对特定问题可以采用Domain Decomposition方式进行并行求解(Kalman滤波应用场景),或是利用Schur Complement进行消元降维(Bundle Adjustment问题)。利用稀疏矩阵Cholesky直接求解或是PCG(Preconditioned Conjugate Gradient)迭代求解。可利用现有库进行计算,比如Magma、cuSolver等。

变量并行更新

变量更新之间不相关。可以直接在CPU线程或GPU计算单元(WARP或线程块)进行并行计算。 因计算量较小,此步骤适合放在CPU端进行

开源参考资料

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

Factor Graph, 因子图 的相关文章

  • “> /dev/null 2>&1“ 含义

    在使用python时 xff0c 有时我们可能会看到这样的代码段 pip install gym pyvirtualdisplay span class token operator gt span span class token ope
  • 认识MEC

    文章目录 一 什么是MEC 二 什么是移动通信系统 三 为什么要有MEC 一 什么是MEC 所谓MEC 从字面上直观理解就能知道 这是一种运用在移动通信系统 Mobile 边缘节点 Edge 并承担大量计算任务 Computer 的玩意儿
  • ROS学习-2 工作空间文件结构和创建功能包

    古月居ROS入门21讲第九个视频 src放功能包的源码和laungh文件 build是编译过程中产生的中间文件 xff0c 二进制文件 install是安装空间 xff0c 放最终编译生成的可执行文件的 xff0c 可以给客户使用的文件 d
  • HC32L系列MCU在KEIL新建工程后在JLINK 下 SW Device下找不到设备的解决方法

    HC32L系列MCU在KEIL新建工程后在JLINK 下 SW Device下找不到设备的解决方法 问题 xff1a 新建工程HC32L的工程 xff0c 通过JLINK连接目标板 xff0c 点击KEIL环境的魔术棒 xff0c 选取JL
  • 漫谈Anchor-based和Anchor-Free

    曾几何时 xff0c Anchor based独霸目标检测这块CV疆域内的肥沃之地 如今 xff0c Anchor Free以其灵活的走位在目标检测中有了一席之地 xff0c 正以星星之火可以燎原之势扩大着自己的声势 Anchor base
  • 【新书推荐】【2020】基于MATLAB和Pixhawk的多轴飞行器设计与控制实践

    本书是斯普林格于2017年出版的 Introduction to Multicopter Design and Control 的姊妹版本 xff0c 旨在通过一个实际的过程帮助读者加深对多轴飞行器设计与控制的理解 As the siste
  • 【新书推荐】【2020】无人机系统设计

    从系统角度全面介绍无人飞机系统的设计和分析 Provides a comprehensive introduction to the design and analysis of unmanned aircraft systems with
  • HDFS使用Kerberos

    转载自 xff1a http www datastart cn tech 2016 06 07 kerberos 1 html 本文尝试记录HDFS各服务配置使用kerberos的过程 xff0c 配置的东西比较多 xff0c 一定会有疏漏
  • 【无人机】【2011.03】无人飞行器的自主飞行研究

    本文为澳大利亚悉尼大学 xff08 作者 xff1a Nicholas R J Lawrance xff09 的博士论文 xff0c 共233页 无人机 xff08 UAV xff09 在一系列工业 科学和国防应用中提供了独特的能力 小型无
  • 【无人机】【2019】无人机巡线路由算法研究

    本文为美国密苏里理工大学 xff08 作者 xff1a YU LI xff09 的硕士论文 xff0c 共79页 随着机器人技术的迅速发展 xff0c 越来越多的公用事业公司使用机器人来执行各种任务 无人机是一种高效的高压输电线路巡检机器人
  • 【电力电子】【2010.09】无人机系统的自适应控制

    四旋翼直升无人机 本文为美国麻省理工学院 xff08 作者 xff1a Zachary Thompson Dydek xff09 的博士学位论文 xff0c 共139页 自适应控制被认为是未来高性能 关键安全系统 xff08 如高超声速飞行
  • 【新书推荐】【2018.11】无人机多传感器导航的非线性卡尔曼滤波

    2018 11 无人机多传感器导航的非线性卡尔曼滤波Nonlinear Kalman Filter for Multi Sensor Navigation of Unmanned Aerial Vehicles xff0c 共254页 如果
  • 【源码】轻松实现四轴飞行器的模拟与控制

    本模型取自题为 Quadcopter Simulation and Control Made Easy 的网络研讨会 xff0c 您可以在这里找到相关视频内容 xff1a https www mathworks com videos qua
  • 【无人机】【2014.08】无人机循环路由

    本文为以色列理工学院 xff08 作者 xff1a Nir Drucker xff09 的硕士论文 xff0c 共65页 许多无人驾驶飞行器 xff08 UAV xff09 针对的国防和民用相关任务涉及在各种时间限制下监测预先确定的一组地面
  • 学习【gRPC C++简单示例及代码】

    文章目录 0 启动程序1 未作修改部分1 1 demo proto 2 添加注释部分2 1 server cc2 2 client cc 3 重点修改部分3 1 CMakeLists txt原始代码3 2 CMakeLists txt精简修
  • 利用Gitee搭建私人仓库-https篇

    利用Gitee搭建私人仓库 https篇 第一步 xff1a 注册Gitee账号https gitee com 第二步 xff1a 创建私人仓库 安装git 第一步 xff1a 下载git git下载地址第二步 xff1a 按照默认安装就好
  • 嵌入式开发必看:PCB设计的这几个问题,你能明白了吗?

    PCB设计布局 xff0c 是把电路器件放在印制电路板布线区内 布局是否合理不仅影响后面的布线工作 xff0c 而且对整个电路板的性能也有重要影响 在保证电路功能和性能指标后 xff0c 要满足工艺性 检测和维修方面的要求 xff0c 元件
  • STM32实例-蜂鸣器实验

    本章我们通过另外一个实验来讲述 STM32 IO 口的输出 通过 STM32F1 芯片的一个 IO口控制板载有源 无源蜂鸣器 xff0c 实现蜂鸣器控制 蜂鸣器介绍 蜂鸣器是一种一体化结构的电子讯响器 xff0c 采用直流电压供电 xff0
  • PCM分析及音量控制

    PCM音量控制 本文转自 xff1a http blog jianchihu net pcm volume control html 一 声音的相关概念 声音是介质振动在听觉系统中产生的反应 声音总可以被分解为不同频率不同强度正弦波的叠加
  • 总结大佬经验,如何学习STM32?(入门、进阶)

    大佬经验 一 想快速入门进阶 xff0c 面向工作时 先把工作中需要的东西学会 xff0c 一项一项的来 xff0c 比如先把GPIO弄清楚 xff0c 怎么初始化 xff0c 怎么输入输出 xff0c 然后定时器 串口 ADC DAC D

随机推荐