我目前正在尝试为SLAM优化多约束功能。经典的优化功能可以像https://fzheng.me/2016/03/15/g2o-demo/中所述,使用g2o最小化重投影误差。
我的问题是我不知道如何修改此g2o示例代码以共同优化两个约束(例如:1个用于重投影误差的约束和1个惯性误差的约束)。
此致
答案 0 :(得分:0)
要包含自定义约束,必须实现一个BaseEdge<>子类的规范。
BaseEdge <>有3个子类,分别是BaseUnaryEdge<>(用于自约束),BaseBinaryEdge<>(在2个节点之间)和BaseMultiEdge<>(任意数目的节点)。>
惯性误差是一种自我约束,因此您必须指定BaseUnaryEdge的实现。
在您的自定义类中仅实现computeError()方法是强制性的,但您也可以实现linearizeOplus()来手动设置jacobian。
然后,您可以遵循发布的示例代码。实例化优化器,创建顶点,添加重投影约束并添加自定义惯性约束。