abstract
MAV构建ESDF来规划轨迹以及避障。本文提出使用TSDF来生成ESDF。此方法比octomap快,准确。代码开源,可以实时在CPU运行。
intro
路径规划算非常快,可以deal复杂环境。但是需要环境中每个障碍物距离信息,以及距离梯度。octomap可以计算这些,但是map大小必须事先给定,不能增量建图。
TSDF和ESDF不同:使用了projective distance。只在truncation radius内计算距离。
related work
OCtree只有occupancy的信息,不完全。像CHMOP等需要距离信息。
本文方法基于kinect fusion, 也就是用volumetric方法生成TSDF图。但这种方法无法增量构建,于是本文使用voxel hashing方法动态构建地图。
我们的目标不是构建高精地图,而是给motion planning使用。因此分辨率都比较大,来达到实时。
我们和gpgpu不同的是,不是完整构建TSDF之后才增量构建ESDF,而是二者都为增量,这样就比batch methods快。
system
使用深度相机得到彩色点云作为输入。
每个voxel有自己的layer,每个layer有独立的block,block在地图中有编号。hashing就是在block 位置和内存位置之间有映射关系。因此可以growing map。
TSDF
把点云raycast到全局地图中,然后把每个voxel中的点的投影距离作平均。weighting就是如何把测量给平均,merging就是如何把data分组整合。
weighting
通常方法是从sensor中心ray-cast,更新weight和distance。每个scan中有1k+点整合到一个voxel里。
KinectFusion 使用了constant weight来更新。然而,本文结合了相机模型,设计了一个W_quad,其中在surface后面的话就会==0.
在多视角观察到表面的时候,减少了没观察到的voxel的影响。
merging
有两种方法把pointcloud group到voxel中:raycasting 和projection mapping。raycasting从相机光心发出,之后更新所有照射到的区域。projection mapping把提速project到图片上,比较voxel–center的距离和depth。这个方法更快,但是对大体素会产生混叠效应。
本文方法,grouped raycasting,加速了raycasting。对每一个scan,将其投影到一个voxel,之后将同一个voxel中所有point取平均,只作一次raycasting。
从TSDF到ESDF
构建方法
用了wave-front, 就是BFS, 周围格子是26联通。两种传播方法:raise和lower。当TSDF中新距离比之前ESDF中距离大的时候,将Voxel加到raise queue中。则voxel以及其children都要是invalidated。如此传播直到没有voxel的parent是invalidated。
lower传播就是一个新voxel进来,或者之前观测到的voxel比当前值要小。邻近的voxel更新,根据与当前voxel的距离。当没有voxel距离可以比邻居更小,传播停止。
误差来源
- projective distance。光线到表面的距离要大于光线到表面的垂直最短距离。
虽然有误差,但是多视角观察后,误差可以很小。做了蒙特拉洛分析(????) - quasi-Euclidean distance. 因为是propogate的,所以只有上下左右斜边这么计算。
而它带来的速度增益很大,所以trade-off很值得。
实验结果
TSDF
grouped octomap虽然比原本快,但还是没有TSDF方法快,因为tree是层级结构,查找用时还是O(logn),而TSDF是O(1).
比较了不同weight的效果差异,不同方法(raycast, octomap)带来的时间差异。
ESDF
仿真结果
使用了一个球,三个平面,一个立方体来进行仿真。
实际
euroc结果。
得出结论,单voxel band,quansi-euclidean distance,优先队列,这些技术更好。
无人机飞行
4hz,。
无人机5min的球,球内un-obsv的voxel为occupied。
因为无法知道自己所处位置的情况,设一个1m的球,球内所有un-obsv的voxel为free。
结论
- 应当画一个类似这样的图,毕设中也许可以
- 在euroc和cow上测试时间和RMS err。
- 与不同方法做对比。
- 在gazebo上仿真,搞几个圆球。之后测试不同的分辨率,得到的时间和精确度。
- 误差分析怎么做?噪声?混叠效应?
- 无人机飞行实验,在tx2上运行,为软约束提供信息。