主要内容

optimizePoseGraph

优化姿态图中的节点

描述

例子

updatedGraph= optimizePoseGraph (poseGraph)根据指定图形中定义的边缘约束调整姿态,以改善整体图形。你可以优化2-D或3-D的姿态图。返回的姿态图具有与更新节点相同的拓扑。

这种姿态图优化假设所有的边约束和环闭包都是有效的。要考虑基于坏循环闭包修剪边,请参阅trimLoopClosures函数。

updatedGraph= optimizePoseGraph (poseGraph解算器)指定优化姿态图的求解器类型。

updatedGraphsolutionInfo) = optimizePoseGraph (___)中的优化过程的附加统计信息solutionInfo使用任何前面的语法。

___) = optimizePoseGraph (___名称,值)使用一个或多个指定其他选项名称,值对。例如,“MaxIterations”,1000年将最大迭代次数增加到1000。

例子

全部折叠

基于节点和边约束的位姿图优化。本例中使用的姿势图取自麻省理工学院的数据集是利用从停车场提取的信息生成的。

从MIT数据集加载姿态图。检查poseGraph3D对象,以查看节点和循环闭包的数量。

负载parking-garage-posegraph.matpgdisp (pg);
poseGraph3D与属性:NumNodes: 1661 nummedges: 6275 NumLoopClosureEdges: 4615 LoopClosureEdgeIDs: [1x4615 double] LandmarkNodeIDs: [1x0 double]

在没有id的情况下绘制姿态图。红线表示在数据集中标识的循环闭包。

标题(“原来的姿势图”)显示(pg,“id”“关闭”);视图(-30,45)

图中包含一个坐标轴。轴线包含3个线型对象。

优化姿势图。节点根据边缘约束和循环闭包进行调整。绘制优化的姿态图,以查看节点与循环闭包的调整。

updatedPG = optimizePoseGraph (pg);图的标题(“更新姿势图”)显示(updatedPG“id”“关闭”);视图(-30,45)

图中包含一个坐标轴。轴线包含3个线型对象。

输入参数

全部折叠

2-D或3-D姿态图,指定为poseGraphposeGraph3D有向图对象。

使用有向图对象,使用createPoseGraph从一个imageviewsetpcviewset对象。您必须有计算机视觉工具箱™和解算器必须设置为“builtin-trust-region”.的“LoopClosuresToIgnore”“FirstNodePose”如果指定名称-值对,将被忽略。

的边缘有向图对象由affine3d(图像处理工具箱)rigid3d(图像处理工具箱)对象。

姿态图求解器,指定为“builtin-trust-region”“g2o-levenberg-marquardt”.要调优任一求解器,请使用该求解器的名称-值对参数。

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“MaxTime”,300年

请注意

根据解算器输入时,函数支持不同的名称-值对。万博1manbetx

如果解算器输入设置为“builtin-trust-region”

全部折叠

允许的最大时间,指定为逗号分隔的对,由“MaxTime”和一个正数,单位是秒。优化器在超过这个时间后退出。

梯度范数的下界,指定为逗号分隔对,由“GradientTolerance”和一个标量。根据优化的代价函数计算梯度的范数。如果规范低于这个值,优化器就退出。

代价函数变化的下界,指定为逗号分隔对组成“FunctionTolerance”和一个标量。如果在优化步骤之间的成本函数更改低于此值,优化器就退出。

步长的下界,指定为逗号分隔的对,由“StepTolerance”和一个标量。如果优化步骤的标准低于这个值,优化器就退出。

初始信任区域半径,指定为标量。

在MATLAB中显示中间迭代信息®命令行,指定为逗号分隔的对,由“VerboseOutput”,要么“关闭”“上”

循环闭包的id边缘进来poseGraph,指定为逗号分隔的对,由“LoopClosuresToIgnore”和一个向量。要从姿态图中获得边缘id,使用findEdgeID

第一个节点的姿态poseGraph,指定为逗号分隔的对,由“FirstNodePose”还有一个姿势向量。

poseGraph(2-D),姿态为(x yθ)向量,它定义了相对向量xy-位置和方位角度,θ

poseGraph3D,姿势是[x y z qw qx qy qz]向量,它定义了相对向量xyz-位置和四元数方向,[qw qx qy qz]

请注意

许多其他来源的3-D姿势图,包括.g2o格式,以不同的顺序指定四元数方向,例如,[qx qy qz qw].在添加节点之前,检查您的姿势数据的来源poseGraph3D对象。

如果解算器输入设置为“g2o-levenberg-marquardt”

全部折叠

最大迭代次数,由逗号分隔对组成“MaxIterations”一个正整数。优化器在超过这个迭代次数后退出。

允许的最大时间,指定为逗号分隔的对,由“MaxTime”和一个正数,单位是秒。优化器在超过这个时间后退出。

代价函数变化的下界,指定为逗号分隔对组成“FunctionTolerance”和一个标量。如果在优化步骤之间的成本函数更改低于此值,优化器就退出。

在MATLAB命令行上显示中间迭代信息,指定为逗号分隔对组成“VerboseOutput”,要么“关闭”“上”

循环闭包的id边缘进来poseGraph,指定为逗号分隔的对,由“LoopClosuresToIgnore”和一个向量。要从姿态图中获得边缘id,使用findEdgeID

第一个节点的姿态poseGraph,指定为逗号分隔的对,由“FirstNodePose”还有一个姿势向量。

poseGraph(2-D),姿态为(x yθ)向量,它定义了相对向量xy-位置和方位角度,θ

poseGraph3D,姿势是[x y z qw qx qy qz]向量,它定义了相对向量xyz-位置和四元数方向,[qw qx qy qz]

请注意

许多其他来源的3-D姿势图,包括.g2o格式,以不同的顺序指定四元数方向,例如,[qx qy qz qw].在添加节点之前,检查您的姿势数据的来源poseGraph3D对象。

输出参数

全部折叠

优化的二维或三维姿态图,返回为poseGraphposeGraph3D对象。

优化过程的统计数据,返回为带有以下字段的结构:

  • 迭代-优化中使用的迭代次数。

  • ResidualError-当优化器退出时,成本函数的值。

  • 出口标志优化器的退出条件:

    • 1-找到局部最小值。

    • 2—达到的最大迭代次数。看到MaxIterations名称-值对的论点。

    • 3.—算法运行超时。

    • 4-最小步长。步长小于StepTolerance名称-值对的论点。

    • 5—误差变化在最小值以下。

    • 8—信任区域半径小于中设置的最小值InitialTrustRegionRadius

参考文献

[1] Grisetti, G., R. Kummerle, C. Stachniss, W. Burgard。“基于图形的SLAM教程”。IEEE智能交通系统杂志.第2卷第4期,2010年,第31-43页。doi: 10.1109 / mits.2010.939925。

Carlone, Luca, Roberto Tron, Kostas Daniilidis和Frank Dellaert。三维SLAM的初始化技术:旋转估计及其在位姿图优化中的应用综述2015 IEEE机器人与自动化国际会议(ICRA).2015年,页4597 - 4604。

扩展功能

介绍了R2019b