ORB_SLAM中Optimizer的优化分析及g2o点和边在ORB中的应用

Optimizer::PoseOptimization

用于Tracking中匀速运动模型跟踪等

EdgeSE3ProjectXYZOnlyPose
class  EdgeSE3ProjectXYZOnlyPose: public  BaseUnaryEdge<2, Vector2d, VertexSE3Expmap>

测量值是2维的Vector2d数据,即像素坐标,这条边连接着pose节点,是一元Unary边,只优化SE3的顶点变量,地图点XYZ固定,世界坐标系下的地图点是成员变量Xw,在Optimizer::PoseOptimization(Frame *pFrame)中遍历当前帧可视的地图点调用,一个顶点N条边。
(一元边里面只有_jacobianOplusXi , 二元边BaseBinaryEdge有_jacobianOplusXi_jacobianOplusXj,这个比较好理解)
e = ( u , v ) − p r o j e c t ( T c w ∗ P w ) e = (u,v) - project(Tcw * Pw) e=(u,v)project(TcwPw)
T c w = C a m e r a P o s e Tcw = CameraPose Tcw=CameraPose

观测二维,所以残差也是二维,即当前帧的像素观测和地图点在当前帧的投影位置的残差,从而优化位姿。残差对位姿的求导所以雅克比维度是2X6。

void EdgeSE3ProjectXYZOnlyPose::linearizeOplus() {
  VertexSE3Expmap * vi = static_cast<VertexSE3Expmap *>(_vertices[0]);
  Vector3d xyz_trans = vi->estimate().map(Xw);

  double x = xyz_trans[0];
  double y = xyz_trans[1];
  double invz = 1.0/xyz_trans[2];
  double invz_2 = invz*invz;

  _jacobianOplusXi(0,0) =  x
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值