Я получил данные датчика от лидарного датчика VLP 16. и я конвертирую необработанные данные в данные x, y, z (разрешение).
Я хочу отображать данные в режиме реального времени.
Я нашел некоторые инструменты, такие как vtk, pptk и т. Д. И отображать сохраненные данные.
но я не могу отобразить их в режиме реального времени.
Я не знаю что делать и я не могу найти детали.
Не могли бы вы дать мне некоторую информацию, советы или примеры?
Спасибо.
Я пробовал pptk в реальном времени. но он каждый раз открывает новые окна.
import socket
import numpy as np
from multiprocessing import Process, Queue
import time
import traceback
import struct
import pptk
HOST = "192.168.1.201"
PORT = 2368
LASER_ANGLES = [-15, 1, -13, 3, -11, 5, -9, 7, -7, 9, -5, 11, -3, 13, -1, 15]
NUM_LASERS = 16
EXPECTED_PACKET_TIME = 0.001327 # valid only in "the strongest return mode"
EXPECTED_SCAN_DURATION = 0.1
DISTANCE_RESOLUTION = 0.002
ROTATION_RESOLUTION = 0.01
ROTATION_MAX_UNITS = 36000
soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
soc.bind(('', PORT))
def calc(dis, azimuth, laser_id, timestamp):
R = dis * DISTANCE_RESOLUTION
omega = LASER_ANGLES[laser_id] * np.pi / 180.0
alpha = azimuth / 100.0 * np.pi / 180.0
X = R * np.cos(omega) * np.sin(alpha)
Y = R * np.cos(omega) * np.cos(alpha)
Z = R * np.sin(omega)
return [X, Y, Z]
while True:
data, addr = soc.recvfrom(2000)
prev_azimuth = None
ts = time.time()
timestamp, factory = struct.unpack_from("<IH", data, offset=1200)
seq_index = 0
for offset in range(0, 1200, 100):
flag, azimuth = struct.unpack_from("<HH", data, 0)
for step in range(2):
seq_index += 1
azimuth += step
azimuth %= ROTATION_MAX_UNITS
if prev_azimuth is not None and azimuth < prev_azimuth:
points = []
prev_azimuth = azimuth
arr = struct.unpack_from('<' + "HB" * 16, data, offset + 4 + step * 48)
for i in range(NUM_LASERS):
time_offset = (55.296 * seq_index + 2.304 * i) / 1000000.0
if arr[i * 2] != 0:
points.append(calc(arr[i * 2], azimuth, i, timestamp + time_offset))
print(calc(arr[i * 2], azimuth, i, timestamp + time_offset))
points_np = np.array(points)