美文网首页
ceres-solver无脑搞定协方差小技巧

ceres-solver无脑搞定协方差小技巧

作者: 范帝楷 | 来源:发表于2018-08-02 20:17 被阅读0次

    研究惯性导航的小伙伴都比较关心一件事,那就是协方差怎么来,或者说信息矩阵如何得到,当然协方差的用处我就不多说了。
    我之前的做法,都是自己临时拼一个信息矩阵,之后求个逆,最近发现了一个更为简单的方法。
    ceres-solver中提供了Covariance Estimation方法类,用于得到最优解的协方差。
    理论我就不多写了,省得论文查重过不了。。
    总的来说调用很简单。
    比如pose的协方差如何得到呢?
    pose的维度是6,所以协方差是6*6那么大,因此写两行:

    Eigen::Matrix<double, 6, 6, Eigen::RowMajor> cov_pose = Eigen::Matrix<double, 6, 6, Eigen::RowMajor>::Zero();
    
    
    // 然后正常solve你的problem
    ...
    
    // solve完成后,请打代码
    ceres::Covariance::Options cov_options;
    ceres::Covariance covariance(cov_options);
    
    std::vector<std::pair<const double*, const double*> > covariance_blocks; //这个是你要算的两个玩意儿的协方差,地球人都知道协方差是要有两个变量的,当然自己对自己就是方差了
    covariance_blocks.push_back(std::make_pair(pose.data(), pose.data())); //你要算pose的协方差,请把要算的pose的数据指针这样排好
    //要算什么就加入什么,当然也可以无脑都搞,或许就有点慢而已
    covariance.Compute(covariance_blocks, &problem);
    covariance.GetCovarianceBlockInTangentSpace(pose.data(),pose.data(), cov_pose.data()); //这里得调用切空间那个接口,因为pose的协方差定义在切空间上
    

    于是你就得到了协方差了。。

    相关文章

      网友评论

          本文标题:ceres-solver无脑搞定协方差小技巧

          本文链接:https://www.haomeiwen.com/subject/lmgsvftx.html