TaichiSLAM 系列 2: 网格的建立,TSDF,ESDF & Marching Cube

您好,欢迎访问我们的网站,我们将竭诚为您服务!

TaichiSLAM 系列 2: 网格的建立,TSDF,ESDF & Marching Cube

时间:2022-10-22 16:19:15 阅读:96
TaichiSLAM:一周构建稠密SLAM后端的尝试(一)介绍了Taichi用于Mapping的诸多优势,本文将更进一步地介绍使用Taichi建立TSDF,ESDF,最后使用Marching Cube建立网格(Mesh)的过程。

  SLAM全称为Simultaneous Localization and Mapping,即实时定位与地图构建,对移动机器人/无人机/自动驾驶/eVTOL等至关重要。

  徐浩,香港科技大学电子计算机工程系博士在读。本科毕业于中国科学技术大学物理系,主要研究方向为无人机(UAV),无人机集群(Aerial Swarm),无人机集群状态估计,协同定位与建图(CSLAM)。

  作者在这里使用了RealSense+DJI N3采集了数据集,visual odometry由作者维护的VINS-Fusion的鱼眼分支的非鱼眼版本建立。视频演示在作者的B站,阅读原文即可前往观看。

  渲染是在GGUI基础上开发的TaichiSLAMRender,这里展示了上一章提到过的Octomap在此数据集上的显示。

  TSDF&ESDF

  言归正传,本文不会详细介绍算法,仅做成功展示。首先是TSDF/ESDF是很相似的两种东西,本质上都是使用一个数字表示是否在物体的内部外部,TSDF比ESDF建立的过程要快很多,ESDF适合无人机导航(例如Fast-planner[1]),TSDF则可以用于生成网格,关于这二者的具体讨论可以参见论文「Voxblox:Incremental 3D Euclidean Signed Distance Fields for On-Board MAV Planning」[2]。

  使用Taichi建立TSDF/ESDF的主要优点在于极容易并行化,可以无成本地使用CUDA,并且可以直接使用稀疏数据结构,这对大场景的无人机应用是非常重要的。在我们先前的一些实验中,由于科研代码没有写复杂的数据结构,ESDF和TSDF所占用的内存困扰了无人机实验很久,而如果使用TaichiSLAM,则就是这么简单:

  def data_structures(self,block_num_xy,block_num_z,block_size):

  if block_size>1:

  Broot=ti.root.pointer(ti.ijk,(block_num_xy,block_num_xy,block_num_z))

  B=Broot.dense(ti.ijk,(block_size,block_size,block_size))

  else:

  B=ti.root.dense(ti.ijk,(block_num_xy,block_num_xy,block_num_z))

  Broot=B

  return B,Broot

  建立TSDF是一个高度需要并行化的过程。在taichiSLAM中,我们读取visual odometry和depth map,然后依据以下公式建立TSDF,并进一步地迭代为ESDF。taichi https://taichi-lang.cn/
郑重声明:文章内容来自互联网,纯属作者个人观点,仅供参考,并不代表本站立场 ,版权归原作者所有!

上一篇:使用太极编程语言的优势

下一篇:Taichi用PBD做了些什么?

相关推荐

返回顶部