如何用g2o优化多约束函数

How to optimize multi-constraint function with g2o

我目前正在尝试优化 SLAM 的多约束函数。经典优化函数使用 g2o 最小化重投影误差,如 https://fzheng.me/2016/03/15/g2o-demo/.

中提出的那样

我的问题是我不知道如何修改此 g2o 示例代码以联合优化两个约束(例如:1 个重投影误差约束和 1 个惯性误差约束)。

此致,

要包含自定义约束,您必须实施一个 BaseEdge<> 子class 的规范。

BaseEdge<> 有 3 个子class,它们是 BaseUnaryEdge<> (for self-constraints), BaseBinaryEdge<> (between 2 nodes) and BaseMultiEdge<>(任意数量的节点)。

惯性误差是一种自我约束,因此您必须指定 BaseUnaryEdge 的实现。

必须在您的自定义 class 中仅实施 computeError() 方法,但您也可以实施 linearizeOplus() 以手动设置雅可比矩阵。

然后您可以按照您发布的示例代码进行操作。实例化优化器、创建顶点、添加重投影约束并添加自定义惯性约束。