三维重建通常分为基于图像,深度学习,nerf的三维重建方法,本文介绍一种基于slam位姿的用open3d实现的三维重建实现方式。
硬件配置是一个rgbd相机加2d雷达,加广角相机同时装在同一个小车上,每个相机经过内外参相机标定,以保证相对位置关系的准确性。
具体算法步骤如下,用orbslam3,获取关键帧位姿,并保存关键帧对应的rgbd图,具体要修改orbslam3的track线程的关键帧生成处,增加保存rgbd图的接口,另外要修改位姿输出保存部分,把所有子图的关键帧位姿都同步保存下来。
先手推小车进行建图操作,以室内环境为准,走遍所有房间,得到所有的位姿轨迹文件和对应的rgb图和深度图。
安装open3d软件包,编写python代码,open3d读入之前orbslam3生成的所有位姿文件和rgbd图,同时读入之前标定的相机内外参数,利用open3d自带的mesh功能完成表面重建,内部具体是planeopt算法。完成mesh后基本得到重建结果,可以用于展示。
纹理贴图部分可以用opengl在上位机实现,主要是通过视场方向和光线追踪把纹理图贴到对应三角面片上。
需要注意的问题,用orbslam3时只用前端即可,优化后的效果可能会影响位姿间的关系,导致重建结果不平整,另外orbslam3有多地图处理,跟踪丢失就建图,要把所有子图位姿都保存下来。