Realsense D415 видит изогнутый пол - PullRequest
1 голос
/ 20 июня 2019

У меня есть камера Realsense D415, установленная на голове робота.

Центр кулачка находится на высоте 1525 мм над полом, и он направлен к полу под углом 59 градусов (то есть угол стеклянной передней части кулачка с полом).

Я использую разрешение камеры 1280x720 и уменьшаю значения до 3, получая матрицу из 240 строк * 428 столбцов.

Я хочу проверить препятствия / пропасти на пути робота. Я подумал, что могу получить значения 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

График результатов показывает, что в итоге я вижу искривленный пол, который мешает роботу двигаться дальше. Пол обнаружен со значительным подъемом вверх в диапазоне строк, где я ожидал довольно прямую горизонтальную линию.

Y values of some of the coloms
Поскольку я знаю высоту монтажа камеры и то, что я смотрю на ровный пол, я подумал о поправочном коэффициенте для каждой точки. Факторы, с которыми я столкнулся, находятся в диапазоне от 0,95 до 1,2.

Поскольку эти поправочные коэффициенты позволяют мне «убрать диапазон пола» и обнаружить препятствия и пропасти, это выглядит немного странно для меня. Зачем мне нужно корректировать измеренные значения кулачка?

Или я ошибаюсь, полагая, что могу получить угол отдельных рядов, просто разделив вертикальное поле зрения на число или ряды?

...