我目前正在尝试为 SLAM 优化多约束功能。经典优化功能可以最大限度地减少 g2o 的重投影错误,如https://fzheng.me/2016/03/15/g2o-demo/中提出的。
我的问题是我不知道如何修改这个 g2o 示例代码来联合优化两个约束(例如:1 个约束用于重投影误差和 1 个约束用于惯性误差)。
问候,
我目前正在尝试为 SLAM 优化多约束功能。经典优化功能可以最大限度地减少 g2o 的重投影错误,如https://fzheng.me/2016/03/15/g2o-demo/中提出的。
我的问题是我不知道如何修改这个 g2o 示例代码来联合优化两个约束(例如:1 个约束用于重投影误差和 1 个约束用于惯性误差)。
问候,
要包含自定义约束,您必须实现一个BaseEdge<>子类的规范。
BaseEdge<> 有 3 个子类,即BaseUnaryEdge<>(用于自约束)、BaseBinaryEdge<>(在 2 个节点之间)和BaseMultiEdge<>(任意数量的节点)。
惯性误差是一种自我约束,因此您必须指定 BaseUnaryEdge 的实现。
必须在您的自定义类中仅实现 computeError() 方法,但您也可以实现 linearizeOplus() 以手动设置 jacobian。
然后您可以按照您发布的示例代码进行操作。实例化优化器,创建顶点,添加重投影约束并添加您的自定义惯性约束。