我有一个安装在机器人头部的Realsense D415凸轮。
凸轮的中心在地板上方1525毫米处,并以59度角(即凸轮的玻璃前角与地板的角度)指向地板。
我使用凸轮的1280x720分辨率,并将值减3,最后得到240行* 428列的矩阵。
我想检查机器人路径中的障碍物/深渊。
以为我可以通过将depth_frame的距离乘以凸轮行的正弦值来获得地板的Y(高度)值,并得出以下代码:
decimate = rs.decimation_filter()
decimate.set_option(rs.option.filter_magnitude, 3)
depth_frame = frames.get_depth_frame()
depth_frame = decimate.process(depth_frame)
depth = np.asanyarray(depth_frame.get_data()).astype(np.float)
depth.shape = (240, 428)
topRowAngle = -59 + (42.5 / 2) # Vertical FOV of D415 is 42.5 deg
rowDeg = 42.5 / 240 # number of rows is 240
angle = topRowAngle
for row in range(240):
rowSin = np.sin(np.radians(angle))
floorY[row,:] = depth[row,:] * rowSin
angle -= rowDeg
绘制结果表明,我最终看到了一块弯曲的地板,阻碍了机器人的前进。在我预计水平线比较直的行范围内,检测到地板有明显的向上凸起。
我知道凸轮的安装高度,并且我看着一个平坦的地板,所以我想到了每个点的校正系数。我最终得出的因子范围是.95到1.2。
由于这些校正因子使我能够“移出地面范围”并检测障碍物和深渊,这对我来说有点奇怪。为什么需要校正凸轮的测量值?
还是我的假设是错误的,即我可以通过将垂直FOV除以一个或多个行来获得各个行的角度?