剔除点云地图中动态目标的方法可分为基于体素、基于视点可见性和基于深度学习的方法。基于体素的方法通过点云地图体素占用率或点云地图体素与单帧点云数据差异剔除动态目标。 OctoMap算法在使用单帧点云数据构建点云地图的过程中,不断更新体素占用率,直到体素占用率高于某个阈值认为该体素为静态体素,才会将该体素添加到点云地图中,占用率低于该阈值的体素内点云可认为是动态目标点云。ERASOR算法先使用单帧点云数据构建包含动态目标的点云地图,然后通过比较点云地图与单帧点云数据对应体素的高度差剔除动态目标,高度差大于某个阈值认为是动态目标,低于该阈值认为是静态目标。Removert算法是一种基于视点可见性的方法,先使用单帧点云数据构建包含动态目标的点云地图,然后通过比较点云地图与单帧点云数据同一视线视点的可见性剔除动态目标,若某个视点在单帧点云数据中可见,在点云地图中不可见,则认为点云地图中同一视线在该视点之前的点为动态点。基于深度学习的方法先通过深度学习检测并剔除单帧点云数据中的行人、车辆等动态目标,再构建点云地图。
erasor
算法框架如下图,输入运动补偿后点云帧和对应pose,使用pose拼接点云帧构建地图,然后使用点云帧与地图对应区域点云进行对比,根据高度差剔除动态目标,高度差大于某个阈值认为是动态目标,低于该阈值认为是静态目标,具体步骤如下。
遍历所有点云帧估计地图中动态点云,单帧处理步骤如下,点云需变换到车体坐标系保持与地面平行:
1)获取地图点云P_M(reassign_submap,fetch_VoI):根据输入点云帧P_Q的pose,将全局地图变换到当前pose,以pose为中心、半径R(max_range)获取对应点云
2)Region-wise Pseudo Occupancy Descriptor(R-POD,set_inputs-voi2r_pod):以雷达为中心、半径R(max_range)、最低和最高高度(min_h,max_h,地面以下1m,以上货车高度4m左右)获取P_Q和P_M感兴趣区域VOI,将VOI点云按半径、圆周方向划分为num_rings * num_sectors个扇形bin,计算每个bin的max_z和min_z
4)Scan Ratio Test(scan_ratio_threshold):如果点数大于minimum_num_pts(10),按P_Q和P_M每个bin高度差的比例判断是否为潜在动态目标,若P_Q/P_M高度差比例小于某个阈值scan_ratio_threshold、P_Q差值大于0.5m、P_M差值小于0.5m、P_M最大值小于min_h+0.5(改为参数th_bin_max_h)为动态目标,提取地面,将地面以上点云判定为动态点云,version3不用th_bin_max_h参数,version2认为bin内最大高度大于th_bin_max_h才可能为动态点云
5)Region-wise Ground Plane Fitting(R-GPF,extract_ground):根据高度z排序,extract_initial_seeds_根据bin排序后num_lowest_pts(默认5)-gf_num_lpr里面平均高度+th_seeds_heights_作为阈值,低于该阈值的点作为种子点,计算初始地面参数,根据地面参数得到地面高度+gf_dist_thr得到地面新阈值th_dist_d_,迭代gf_iter次估计地面