作为一个业余爱好者项目,我们最近构建了我们的第一个原型机器人 (UGV),并且正在使用 ROS Kinetic 和 OpenCV 来执行多个障碍物检测和避让任务。作为我们主要的 3D 环境映射设备,我们使用立体相机,我们希望点云数据能够很好地检测到高精度的地平面。机器人只能在高度差不高于 5-6 厘米或更大的地面上行驶。
不幸的是,从立体相机(来自 Stereolabs 的 ZED cam)生成的点云数据对于我们的用例来说可能不够精确。因此,我们购买了一个 2D LIDAR (RPLidar A2M8) 并放置在机器人的“鼻子”上,但角度为 45°(向下朝向地面)。
我们的计划是使用 LIDAR 激光扫描数据来识别地面开始“非平面”的位置。我们想将检测到的机器人中心下方的地线作为参考点/参考线,并且其左右高度差高于5-6cm(可能多1-2cm)的每个点或线都会处于“禁止驾驶/危险区域”。
问题如下:
我们考虑使用霍夫变换或一些具有类似输出的算法来绘制位于机器人中心下方的参考地线(宽度可能为 40-50 厘米)。作为备份/驾驶改进策略,我们也想使用相机数据并应用 Canny Edge Filter + Hough Transform 来检测地面上的边缘,因此如果 LIDAR 数据不存在,我们的机器人可以更好地检测其“无驾驶区域”准确或足够精确。此外,我们可能会尝试使用我们的立体相机和几种算法检测“一般地平面”,然后获取激光雷达数据并从地平面“减去”其数据以找到我们的“安全驾驶区”。
您认为这是实现我们特定目标的正确方法吗,或者您能否指出其他方向,从而在您看来会带来更好的结果?我可能会在接下来的几天和几周内对其进行测试,看看它是否有效,但如果你们中的一些人知道更好的方法,我会非常高兴,这样我们就不会浪费太多时间“朝错误的方向行驶” :-) 提前非常感谢!