Python - отображение облака точек VTK в реальном времени - PullRequest
0 голосов
/ 10 июня 2019

Я получил данные датчика от лидарного датчика 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)
...