Извините за мой плохой английский, а также я здесь новичок.
У меня есть камера 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()