SLAM十四讲:直接法(8)

内容总览:一些直接法的代码

RGBD稀疏直接法(g2o)

简述:
假设周围像素不变,不必计算描述子,只使用数百个像素

只能计算稀疏结构

参数
输入:测量值(空间点的灰度),新的灰度图,相机内参

输出相机位姿

计算误差:

virtual void computeError()
    {
   
        const VertexSE3Expmap* v  =static_cast<const VertexSE3Expmap*> ( _vertices[0] );
        Eigen::Vector3d x_local = v->estimate().map ( x_world_ );        //将世界坐标映射到了图像上,local代表图像局部
        float x = x_local[0]*fx_/x_local[2] + cx_;
        float y = x_local[1]*fy_/x_local[2] + cy_;
        // check x,y is in the image
        if ( x-4<0 || ( x+4 ) >image_->cols || ( y-4 ) <0 || ( y+4 ) >image_->rows )    //范围检测?
        {
   
            _error ( 0,0 ) = 0.0;
            this->setLevel ( 1 );
        }
        else
        {
   
            _error ( 0,0 ) = getPixelValue ( x,y ) - _measurement;        //计算误差,计算值减真实值?
        }
    }

将I1的点通过estimate().map映射到另一个图像上,然后用像素公式计算,误差为I2-I1

计算雅可比J

    virtual void linearizeOplus( )        //计算呀可比矩阵
    {
   
        if ( level() == 1 )    //范围不对,或者第一次的时候,初始化1*6的0矩阵
        {
   
            _jacobianOplusXi = Eigen::Matrix<double, 1, 6>::Zero();
            return;
        }
        VertexSE3Expmap* vtx = static_cast<VertexSE3Expmap*> ( _vertices[0] );
        Eigen::Vector3d xyz_trans = vtx->estimate().map ( x_world_ );   // q in book        估计出来的世界坐标映射?

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

        float u = x*fx_*invz + cx_;
        float v = y*fy_*invz + cy_;

        // jacobian from se3 to u,v    
        // NOTE that in g2o the Lie algebra is (\omega, \epsilon), where \omega is so(3) and \epsilon the translation
        Eigen::Matrix<double, 2, 6> jacobian_uv_ksai;

        jacobian_uv_ksai ( 0,0 ) = - x
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值