如何使用g2o优化多约束功能

时间:2019-12-16 11:36:33

标签: c++ math slam g2o

我目前正在尝试为SLAM优化多约束功能。经典的优化功能可以像https://fzheng.me/2016/03/15/g2o-demo/中所述,使用g2o最小化重投影误差。

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

此致

1 个答案:

答案 0 :(得分:0)

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

BaseEdge <>有3个子类,分别是BaseUnaryEdge<>(用于自约束),BaseBinaryEdge<>(在2个节点之间)和BaseMultiEdge<>(任意数目的节点)。

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

在您的自定义类中仅实现computeError()方法是强制性的,但您也可以实现linearizeOplus()来手动设置jacobian。

然后,您可以遵循发布的示例代码。实例化优化器,创建顶点,添加重投影约束并添加自定义惯性约束。