958
社区成员
terrainAnalysis.cpp中一些疑问:
1. 参数clearDyObs的含义?看源码里,这是把激光雷达坐标系以下0.5m作为判断依据,大于则把planarVoxelDyObs计数加1;后续如何用,不太明白?
2. 如何理解planarVoxelDyObs参数?为何做两次clearDyObs判断处理?
为何第一次planarVoxelDyObs[planarVoxelWidth * indX + indY]++,第二次planarVoxelDyObs[planarVoxelWidth * indX + indY] =0;如何理解?
3.判断条件 angle4 > minDyObsVFOV && angle4 < maxDyObsVFOV的作用是什么,激光雷达的点云不是一直在激光角度范围内吗?
4. 对于上一帧激光雷达检测到的低矮静态障碍物,下一帧激光雷达检测看不到了,会不会被保留?如何实现的?从源码中没有理解这块;
希望各位大佬解答!!
感谢,十分详细,再次拜谢!
你好,对于消除动态障碍物的整体想法你可以参考我在 http://t.csdn.cn/B2kaQ 中的回答,下面是针对性的解答:
1.clearDyObs是控制是否消除动态障碍物的。我们会检测terrain_map里的所有点是不是超过了我们设定的高度阈值,这里我们的高度不是根据地面高度判断的,而是相对于车的高度来判断的,如果低于车高(传感器高度)0.5m我们就认为是障碍物。结合你得第三个问题同时还得判断上述被检测的点是不是在当前的激光传感器视野范围内。因为这里检测的是所有terrain_map里的点,这些点是之前很多帧点云的叠加,所以并不是所有的点都在视野范围内,我们只检测在当前视野范围内的动态障碍物。如果上述条件都满足,我们这里先认为该点是动态障碍物,所以把planarVoxelDyObs加1实际上就是统计该区域内有多少点满足动态障碍物的设定。
2.planarVoxelDyObs就像我上面说的存储的是每一块区域包含的动态障碍物点的个数,第一次的clearDyObs是在统计当前terrain_map中有多少点满足障碍物的设定,第二次clearDyObs就是使用最新一帧的点云做二次检测,检测当前点云的这些点是不是仍然满足动态障碍物的设定,如果仍然满足,则说明该点所在的区域一直有障碍物,则之前的动态障碍物的检测不正确,这些障碍物不是动态障碍物,所以设定planarVoxelDyObs为0,代表该区域没有动态障碍物的点。如果某一个区域(planarVoxelDyObs>minDyObsPointNum)在当前点云中没有点满足动态障碍物的设定,则说明该区域之前存在的障碍物在当前视野中消失了,说明这些是动态障碍物,所以需要保持之前设定的planarVoxelDyObs值。在后续会使用这个值判断是不是需要保留该区域的点。
3.这一点参考第一点回答。
4.对于低矮的静态障碍物会一直保留。参考我上面的回答,如果下一帧看不到,则不会把该区域或者该障碍物考虑为动态障碍物,所有的动态障碍物检测只考虑视野范围内的区域或点。