Protocol: UDP over Ethernet
Default ports:
2368
→ data packets8308
→ telemetry/status packetsPacket size: 1206 bytes
Rate: ~300,000 points per second (16 lasers × 18,000 pulses/s)
+-------------------+-----------------------------------+
| Bytes | Content |
+-------------------+-----------------------------------+
| 0 – 1199 | 12 data blocks (100 bytes each) |
| 1200 – 1201 | Azimuth offset (2 bytes) |
| 1202 – 1205 | Timestamp (4 bytes, µs since TOH) |
| 1206 | Factory byte (1 byte) |
+-------------------+-----------------------------------+
Each packet has 12 blocks, each block is:
+-------------------+------------------------------------+
| Bytes | Content |
+-------------------+------------------------------------+
| 0 – 1 | Block flag (0xFFEE, little-endian) |
| 2 – 3 | Azimuth (0–35999, in 0.01° units) |
| 4 – 99 | 32 channels (3 bytes each) |
+-------------------+------------------------------------+
So:
Timestamp (4 bytes): microseconds since the top of the hour.
Factory byte (1 byte):
0x22
)Each point = (x, y, z, intensity)
r
= distance (m)azimuth
= horizontal angle (from block)elevation
= fixed per laser (VLP-16 has −15° to +15°, non-linear steps)Conversion to Cartesian coordinates:
EE FF 2A 0B
0xFFEE
→ block marker0x0B2A
→ azimuth = 2858 → 28.58°notes->