Как создать карту высот с помощью intel realsense d435 - PullRequest
0 голосов
/ 09 ноября 2019

Извините за мой плохой английский, а также я здесь новичок.

У меня есть камера Intel глубины d435, Raspberry Pi и автомобиль в стиле DIY, который я использую, используя бортовой Raspberry Pi. Я поместил маркеры aruco в определенные места в моей комнате. Используя их и веб-камеру на борту, я получил обратную связь по положению. Я написал скрипт, чтобы заставить автомобиль двигаться в нужное место, используя маркеры aruco, используя предварительно определенное положение данных маркера. Таким образом, заставить машину двигаться от a к b не проблема (она идет по прямой линии).

Но теперь я хочу, чтобы она двигалась от точки a к b, избегая статических препятствий.

Я только что узнал об алгоритме Астар. Насколько я понимаю, можно построить путь от определенной начальной точки до определенной конечной точки (вообще говоря).

Так что я хочу использовать свою камеру intel d435 для создания карты высот моей комнатыи построить его с помощью трехмерной диаграммы рассеяния с помощью matplotlib. Я думаю, что это возможно, поскольку d435 может выводить данные облака точек. Но у меня очень плохие навыки программирования и я не могу найти ни одного примера, который бы демонстрировал нечто подобное. Затем, возможно, планируем добраться до кадра, получить данные о высоте из трехмерного массива, запустить A *, выбрать нужный узел и ехать на машине до тех пор, пока он не доберется туда, и повторить, пока не будет достигнут пункт назначения.

Итак, подведем итогУ меня вопрос, как построить облако точек на Intel D435 без текстуры, используя трехмерный массив и функцию рассеивания Matplotlib.

import cv2                                
import numpy as np                       
import pyrealsense2 as rs
import matplotlib as mpl
import matplotlib.pyplot as plt          
import time
from mpl_toolkits.mplot3d import Axes3D
fig1 = plt.figure(1)
ar = fig1.gca(projection='3d')
ar.set_xlim(-1, 1)
ar.set_ylim(-1, 1)
ar.set_zlim(-1, 1)


# Configure depth and color streams
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)


# Start streaming
pipe_profile =pipeline.start(config)

points =[[[]]]
def get_3dPoints():#Function to be written
    pass    

try:
    while True:
        # Wait for a coherent pair of frames: depth and color
        frames = pipeline.wait_for_frames()
        depth_frame = frames.get_depth_frame()
        color_frame = frames.get_color_frame()

        if not depth_frame or not color_frame: #or not infrared_frame:
            continue
        # Convert images to numpy arrays
        depth_image = np.asanyarray(depth_frame.get_data())
        color_image = np.asanyarray(color_frame.get_data())

        cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
        colorizer = rs.colorizer()
        depth_colormap = np.asanyarray(colorizer.colorize(depth_frame).get_data())
        cv2.imshow('RealSense', depth_colormap)
        """
        points = get_3dPoints()
        tgt = ar.scatter(points, 'red')
        ar.set_xlabel('X - axis')
        ar.set_ylabel('Y - axis')
        ar.set_zlabel('Z - axis')
        plt.pause(0.00000000000000001)
        tgt.remove()
        """
        cv2.waitKey(1)

finally:

    # Stop streaming#img = cv2.resize(img, (1280, 720), interpolation=cv2.INTER_AREA)
    pipeline.stop()

1 Ответ

0 голосов
/ 09 ноября 2019

Ознакомьтесь с этим репозиторием о том, как получить тепловую карту ссылка

В официальном репозитории Intel также много ресурсов здесь

...