SLAM以及三维重建学习和实践记录

本文介绍了SLAM(SimultaneousLocalizationAndMapping)的基本概念,包括前端配准和后端优化,并探讨了在轮式机器人上SfM(StructurefromMotion)的应用。文章详细讨论了KinectFusion的实时重建算法,以及姿态估计和表面探测的过程。此外,还提到了基于深度学习的三维重建方法NerF。最后,作者分享了ORB-SLAM系列,特别是ORB-SLAM2的实验过程和经验,强调了实时性和稳定性的重要性。

注:本文主要是实验的一些记录,通过对已有项目的运行和代码的了解来学习三维重建和SLAM相关的知识,意在打个基础。

三维重建和SLAM

总所周知,一个SLAM包含了很多流程,前端配准,后端优化。利用传感器的数据建图的问题也被包含在内。而对轮式机器人来说,在配置限制的情况下由于相机角度固定和2D雷达的原因三维重建并不能将稠密的三维模型整体建立出来,同时其对实时性也有要求,这和三维重建的其他应用场景差别较大,因此在机器人上更多的说法是SfM。

  • SfM( Structure from Motion):属于被动的三维重建的方法,是在已经知晓机器人的运动信息(相机姿态)和相机画面后进行匹配后建图
  • VSLAM: 视觉slam即在搭载摄像头的机器人下进行实时建图和定位导航等,要求输入图像的系统是线性时不变的
  • NerF (Neural Radiance Fields):神经网络辐射场是近几年非常火的基于深度学习的主动式三维重建方法,重建的为Explcilt representation的三维图。按笔者的理解来说,主动的意思就是要在要针对重建的对象上拍几张照片;和implicit representation则是人类能直接看出来的模型,而不是计算机能用的。

3D Reconstruction

KinectFusion学习

KinectFusion是什么

来自Izadi大神团队,Richard A. Newcombe 等人在2011年提出的是一个基于RGBD相机的适用于任何环境光照的实时重建追踪和重建算法,以下是它的工作流程
KinectFunsionl流程

代码实现

姿态估计

通过借助前一帧的表面信息{v, n}与当前帧的顶点和法线来进行alignment的计算,主要是通过使用point to plane ICP
计算表面向量,后进行SVD

    for (size_t i = 0; i < correspondence.size(); ++i ){
   
   
        auto match = correspondence[i];

        Eigen::Vector3d d_i = destPoints[ match.first ];
        Eigen::Vector3d n_i = destNormals[ match.first ];
        Eigen::Vector3d s_i = sourcePoints[ match.second ];

        Eigen::Matrix<double, 6, 1> A_i;
        A_i << s_i.cross(n_i) , n_i;
        A.row(i) = A_i;
        b(i) = n_i.dot(d_i) - n_i.dot(s_i);
    }

    Eigen::Matrix<double, 6,1> x = A.bdcSvd(Eigen::ComputeThinU | Eigen::ComputeThinV).solve(b);

Point2Point

void LinearSolver::solvePoint2Point(const std::vector<Eigen::Vector3d>& sourcePoints,
            const std::vector<Eigen::Vector3d>& destPoints,
            const std::vector<std::pair<size_t, size_t>>& correspondence){
   
   
    const size_t N = correspondence.size();
    Eigen::MatrixXd A( N*3 , 6);
    Eigen::MatrixXd b( N*3 , 1);
    for (size_t i = 0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值