简介:《Velodyne VLP16 用户手册》面向激光雷达开发者、机器人感知研究人员及自动驾驶入门学习者,系统讲解 VLP-16 实时三维激光雷达的操作原理、安装连接与数据解析方法,帮助读者从零建立对这款经典 16 线 LiDAR 的完整认知。资源包共 1 个 docx 文件,约 12.18MB,内容涵盖安全注意事项、工作原理、箱内清单与安装、电源/以太网/GPS 连接、数据包格式与时间戳精度、位置数据包解析、故障排查、服务维护及技术规格,附录另附数据包结构与定时、接口盒、Web 服务器 GUI、固件更新、Veloview 软件与机械图纸。手册对工厂字节、回波模式、标定反射率等细节均有展开,读者可据此完成传感器配置、读懂点云数据来源并定位常见异常。目前已有 3690 人学习,适合需要一手官方资料支撑开发与调试的工程师参考。
1. 从一台转不起来的 VLP-16 说起:版本、网段和供电这三关
上周帮一个做建图算法的朋友收拾一台二手 VLP-16,传感器上电后风扇在转、外壳微微发热,但 Wireshark 里一个 UDP 包都抓不到。他以为是雷达坏了,差点挂到二手平台出掉。我过去看了一眼,网卡还挂在公司办公网段 10.0.0.x 上,而 VLP-16 出厂固定是 192.168.1.201,数据往 192.168.1.255 广播,网段都不对,能抓到包才怪。这类翻车在 VLP-16 上特别常见:它不像普通外设插上就认,供电极性、网卡网段、防火墙、GPS 的 PPS 信号,任何一环没对上,表现都是“没数据”,新手很容易误判成硬件故障。
这篇笔记按我实际装机的顺序走:先把手里的手册和实物对上,再把网络和供电打通,然后配 WebServer、接 GPS、解析数据包,最后落到怎么验证整条链路真的跑通。适合刚拿到 VLP-16 的开发者、做 SLAM 或点云采集的同学,也适合已经装过但被“抓不到包”卡住的人。手册本身是英文的,很多参数藏在附录里,我会把关键项挑出来讲清楚。
2. 开箱与环境核对:VLP-16 到底需要什么才能跑起来
2.1 箱内清单和手册章节对照
VLP-16 出厂箱里一般有:传感器本体(带约 3 米线缆,末端接接口盒)、桌面 AC/DC 电源适配器、6 英尺 AC 线、1 米网线、一个 U 盘。U 盘里放的就是这份用户手册、示例数据集和 VeloView 安装包。手册目录结构值得先扫一遍,后面排错全靠它定位:
| 手册章节 | 内容 | 装机时什么时候用 |
|---|---|---|
| Safety Notices | IEC 60825-1 激光安全、禁止开壳 | 上电前读一遍 |
| Principles of Operation | 16 线激光、360° 水平、30° 垂直、100 米量程 | 理解数据来源 |
| Setup | 安装、供电、以太网、GPS | 第 3、4 章主线 |
| Sensor Data | 数据包格式、时间戳、工厂字节 | 写解析代码时查 |
| Troubleshooting | 故障排查 | 第 5 章避坑 |
| Appendix A/B/C/D/E/F | 包结构、接口盒、WebServer、固件、VeloView、机械图 | 配 IP、升级、看图 |
手册里明确写了几个硬指标:水平视场 360°,垂直视场 30°,转速 5–20 转/秒可调,量程最远 100 米(实际有效距离看应用),功耗 8 瓦,常见车载场景用 12V/2A 供电。这些数字决定了你后面选电源和网卡时的下限,别拿个 5V 小电源就想点亮它。
2.2 主机侧环境准备
主机这边不需要装驱动,VLP-16 走的是标准 UDP 广播,任何能收 UDP 包的系统都行。我一般用 Ubuntu 20.04 或 22.04,网卡要求支持 MDI 或 AUTO-MDIX——手册里专门提了这句,意思是普通千兆网卡基本都满足,老式只支持固定线序的网卡可能连不上。工具侧装三样就够起步:
# 抓包看数据有没有出来 sudo apt install -y wireshark tshark # 官方查看器,U 盘里有安装包,也可以从源码编译 # 这里只装依赖,VeloView 本体用 U 盘里的包 sudo apt install -y libqt5core5a libqt5gui5 libqt5widgets5 # 后面写解析脚本用 sudo apt install -y python3 python3-numpywireshark用来确认包到底有没有到网卡,tshark适合在无图形界面的机器上抓,python3-numpy是后面把球坐标转 XYZ 时算得快一点。VeloView 建议直接用 U 盘里那份,版本和手册对得上,省得去追新版本踩兼容坑。
提示:先把传感器放在桌面上、线缆理顺再上电。VLP-16 没有电源开关,通电约 5 秒后开始旋转并出数据,别在它转起来的时候去挪线。
3. 供电与网络打通:让 192.168.1.201 能被抓到
3.1 供电接线:极性错了直接不转
接口盒上的电源口是 2.1mm 桶形插孔,中心针为正极。手册写得很直白:上电前确认传感器固定牢、电源极性正确。我见过有人用可调电源反接,结果就是风扇不转、灯不亮,还以为运输摔坏了。标准做法是先用附带的 AC/DC 适配器点亮,确认能转,再换车载 12V 供电。车载场景下 12V/2A 足够,8 瓦功耗留了余量。
# 上电后先别急着抓包,听声音、看转速 # 正常表现:约 5 秒后开始旋转,外壳有轻微震动 # 如果完全不转,先查桶形插孔中心针极性,再查适配器输出这段不是代码,是上电自检的口诀。VLP-16 上电即工作,没有软开关,所以“转不转”就是最直接的供电判据。转但没数据,问题一定在网络侧;不转,问题在供电或硬件。
3.2 网卡配到同一网段
出厂 IP 是 192.168.1.201,数据以 UDP 广播发到 192.168.1.255。主机网卡必须配一个 192.168.1.x 的地址(不能是 .201 本身),掩码 255.255.255.0。用 NetworkManager 的机器可以这样临时加一个地址,不动原有办公网配置:
# 查看网卡名,假设是 enp3s0 ip link show # 临时加一个同网段地址,重启失效,适合调试 sudo ip addr add 192.168.1.100/24 dev enp3s0 sudo ip link set enp3s0 up # 确认地址生效 ip addr show enp3s0ip addr add是临时配置,调试阶段最安全,不会把机器原来的网络搞乱。/24对应 255.255.255.0,和雷达同网段。如果你用 netplan 做持久化,记得把雷达网卡和上网网卡分开,别把默认路由抢了。
# /etc/netplan/01-lidar.yaml 示例,持久化配置 network: version: 2 ethernets: enp3s0: addresses: [192.168.1.100/24] dhcp4: falsenetplan 这份配置只给雷达网卡静态地址,不开 DHCP,避免它去别处要地址。改完sudo netplan apply。注意网卡名要换成你自己的,ip link里看。
3.3 抓包确认数据在流
网络配好、雷达在转,下一步就是抓包。VLP-16 输出两路 UDP 广播:数据包端口 2368,位置/GPS 包端口 8308。先抓 2368:
# 抓 10 个包看看有没有 sudo tshark -i enp3s0 -f "udp port 2368" -c 10 # 想看包内容,导出到文件再用 Wireshark 打开 sudo tshark -i enp3s0 -f "udp port 2368" -w vlp16.pcap-f "udp port 2368"是 BPF 过滤,只抓数据包,减少噪音。-c 10抓够 10 个就停,确认有流量即可。如果这里一个包都没有,按顺序查:网卡地址对不对、防火墙有没有拦 UDP 广播、网线是不是接在接口盒的以太网口而不是别的口。手册提到 VLP-16 只兼容支持 MDI/AUTO-MDIX 的网卡,极老的主板板载网卡可能不满足,换一块 Intel 或 Realtek 的千兆卡基本都能解决。
注意:有些发行版默认防火墙会丢广播包,调试时先
sudo ufw disable临时关掉,确认通了再按需放行 2368/8308 的 UDP。
4. WebServer 配置与 GPS 接入:改 IP、选回波、对时
4.1 进 WebServer 改网络参数
VLP-16 内置一个 WebServer,浏览器直接访问http://192.168.1.201就能进配置页(手册附录 C)。这里能改 IP、看固件版本、选回波模式。改 IP 前先把主机网卡配到和它同网段,否则页面打不开。改完 IP 记得同步改主机网卡地址,不然又断联。
回波模式在 WebServer 里选,三档:Strongest(最强回波)、Last(最后回波)、Dual(双回波)。手册给了数据率对照:
| 模式 | 包/秒 | 带宽 |
|---|---|---|
| Strongest | 754 | 约 8 Mbps |
| Last | 754 | 约 8 Mbps |
| Dual | 1508 | 约 16 Mbps |
双回波数据率翻倍,林业测树高这类场景才需要,普通建图用 Strongest 就够,省带宽也省解析算力。选错模式不会报错,但你会莫名其妙发现包量翻倍、点云重复,这是新手常踩的坑。
4.2 GPS 对时接线与 $GPRMC
需要精确时间戳的场景(多传感器融合、建图回环)要接 GPS。VLP-16 要求外部 GPS 提供两样东西:每秒一次的 PPS 脉冲(0–5V 上升沿)和一条 NMEA$GPRMC语句,其他 NMEA 语句它不认。接线在接口盒内部螺丝端子,手册附录 B 有标注。自己接的话,拧开接口盒上盖,按标签接 PPS、GPRMC 和地。
# $GPRMC 关键字段(手册要求 hhmmss 格式的时间) $GPRMC,hhmmss.ss,A,lat,N,lon,E,speed,course,ddmmyy,,*checksum # VLP-16 只读其中的分钟和秒,用来把时间戳对齐到 UTC 整点后的微秒数这段是报文格式说明,不是可执行代码。要点是:GPS 必须输出标准$GPRMC,PPS 必须是上升沿、0–5V。手册提到有原厂预编程的 GPS 接收器,插上即用;自己配的话,用 u-center 之类的工具把输出语句裁到只剩$GPRMC加 PPS,别让 GPS 狂吐一堆语句,VLP-16 会忽略但接线调试时容易看花眼。对时成功后,数据包里的时间戳就是 UTC 微秒,第三方软件拼点云时不用再猜时间。
4.3 用 VeloView 先看一帧点云
配置改完,最快的验证不是写代码,是开 VeloView。U 盘里的安装包装上,选网卡、点连接,能出点云就说明供电、网络、数据包三关全过。VeloView 还能录包,录下来的 pcap 后面写解析脚本时当测试数据用。这一步别跳过,我见过太多人直接上代码,结果分不清是雷达没出数据还是自己解析写错了。
5. 避坑与排查:VLP-16 装不上时先看这五条
5.1 抓不到任何 UDP 包
现象:tshark 一条都没有,雷达在转。原因九成是网段不对或防火墙拦广播。解决:ip addr确认网卡在 192.168.1.x,sudo ufw status看防火墙,临时关掉再抓。还不行就换网线、换网卡,排除 MDI/AUTO-MDIX 兼容问题。
5.2 有包但 VeloView 连不上
现象:tshark 能看到 2368 的包,VeloView 点连接没反应。原因通常是 VeloView 里选错了网卡,或者主机有多个网卡、广播从错的接口出去了。解决:VeloView 连接对话框里明确选雷达所在的那块网卡;多网卡机器用ip route确认 192.168.1.0/24 走的是对的接口。
5.3 点云重复、包量翻倍
现象:点云看着有重影,抓包发现每秒 1500 多个包。原因是 WebServer 里回波模式被设成了 Dual。解决:进 WebServer 改回 Strongest,保存后重新上电生效。这个坑很隐蔽,因为数据“有”,只是多了一倍。
5.4 时间戳对不上 UTC
现象:点云时间戳漂移,多传感器融合对不齐。原因:GPS 没接、PPS 没到、或$GPRMC格式不对。解决:先确认 GPS 输出只有$GPRMC加 PPS,用示波器或万用表看 PPS 有没有每秒一次的上升沿;再看 WebServer 里有没有同步状态指示。手册明确说只接受$GPRMC,别的语句一律忽略。
5.5 车载供电下随机重启
现象:桌面电源正常,装车上跑一会儿就断。原因:车载 12V 波动大,或者线缆接头在震动下松了。解决:确认电源能稳定给 8 瓦,接头做防松处理;手册说传感器本身能扛 500 m/s²、11ms 冲击和 3G rms 振动,所以问题多半在供电和接插件,不在雷达本体。
6. 装完怎么验证:从抓到包到算出第一个 XYZ
验证分三层,逐层往上,任何一层不过就停在那层查,别跳。
第一层,链路层。雷达在转、tshark -f "udp port 2368"能持续看到包,包长固定 1248 字节(数据包),源地址 192.168.1.201。这一层过了,说明供电和网络没问题。
第二层,解析层。用 Python 读一个包,把方位角、距离、激光 ID 抠出来。VLP-16 数据包是 12 个 100 字节的 firing block,每个 block 里 2 个 firing,每个 firing 16 个激光通道,每通道 2 字节距离加 1 字节反射率。下面这段只做最小验证,确认字段位置对:
import socket import struct # 绑定 2368 端口收数据包 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(("", 2368)) data, addr = sock.recvfrom(2048) # 前两个字节是 0xEEFF 标志,确认是数据包 flag = struct.unpack("<H", data[0:2])[0] print("flag:", hex(flag), "from:", addr) # 第一个 block 从偏移 0 开始,方位角在 block 开头 2 字节,单位 0.01 度 azimuth = struct.unpack("<H", data[0:2])[0] / 100.0 print("azimuth:", azimuth) # 第一个通道距离在偏移 4,2 字节,单位 2mm dist = struct.unpack("<H", data[4:6])[0] * 0.002 print("distance(m):", dist)0xEEFF是数据包标志,位置包是0xEEFF之外的另一个值,别混。方位角单位 0.01 度,距离单位 2mm,这两个换算手册附录 A 写得很清楚。跑通这段,说明你抓的确实是 VLP-16 的数据包,字段偏移没读错。
第三层,几何层。拿方位角、激光 ID 对应的垂直角、距离,套球坐标转 XYZ:
import math # 垂直角按激光 ID 查表,手册附录 A 有 16 线的角度表 vert_angle = [-15, -13, -11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 11, 13, 15] laser_id = 0 az = math.radians(azimuth) el = math.radians(vert_angle[laser_id]) x = dist * math.cos(el) * math.sin(az) y = dist * math.cos(el) * math.cos(az) z = dist * math.sin(el) print(x, y, z)垂直角表是手册附录 A 给的,16 线从 -15° 到 +15°,间隔 2°。这段算出来的 XYZ 和 VeloView 里同一点对得上,整条链路就算通了。我一般会拿 VeloView 录的一帧 pcap 和脚本结果比对,差几厘米以内都算正常,差太多就是角度表或单位用错了。
提示:距离小于 1 米的点手册建议丢弃,近距离回波容易受镜头污染影响,建图时留着反而添噪。
从那以后我每次装 VLP-16,都强制走一遍“转不转 → 抓不抓得到包 → 字段偏移对不对 → XYZ 和 VeloView 对不对”这四步,任何一步跳过,后面都会用更贵的时间还回来。这套手册里的参数和附录,配合上面几段最小脚本,足够把一台 VLP-16 从开箱带到出点云。希望帮到你。
本文还有配套的精品资源,点击获取