很多第一次接触工业激光雷达的人和我当初的心态一样:以为只要把AT128接上电、插上网线、打开官方软件,点云就会自动铺满屏幕。实际情况是,我见过太多人卡在同一个地方——软件打开了,雷达的绿灯也亮了,但可视化窗口里只有灰底和坐标轴,一团点云都没有。
这不是雷达坏了,而是链路里某一层没对。
AT128是混合固态激光雷达,它的内部已经完成了测距和角度解算,通过以太网UDP包发出来的就是结构化点云。理论上,从物理连接到看到点云只需要三样东西:能互相通信的网络、能解析UDP包的工具、能渲染点云的显示端。听起来很简单,但恰恰是“能互相通信”这四个字,卡掉了至少一半的人。
这篇文章要解决的问题很直接:在Ubuntu 20.04上,从一块干净的网卡开始,把AT128雷达的实时点云跑进PandarView 2,再把同一路数据接入ROS Noetic加RViz做可视化。内容偏向保姆级,命令和配置都会给出来,适合第一次接触工业LiDAR、不太熟悉网络配置、对驱动版本没概念的人。已经折腾过一版SDK但对链路全貌还不够清晰的朋友,也能从这里找到排查思路。
1. 先理清数据链路:AT128 的点云从哪里来,要送到哪里去
1.1 一台雷达就是一台“点云服务器”
先说一个容易被忽略的事实:AT128并不需要我们去做点云解算。它内部有128个激光收发通道,通过一块高速扫描振镜把光束在水平方向展开,每个激光点用飞行时间法测出距离,再结合发射角度换算出三维坐标,最终在雷达内部组帧、打包,以UDP包的形式从网口发出来。
这意味着软件侧的工作量被大幅压缩了,我们不需要像处理老式UDP裸数据那样自己写时间校准、距离修正、角度换算的算法。驱动要做的事情,本质上是“订阅”雷达这个点云服务器发出来的数据流,然后重组为可视化工具能识别的点云结构。
AT128的主要参数大致是这样:水平视场角120度、垂直视场角25.4度、128线,最远量程标称200米,输出频率常见配置是10Hz。这个参数组合让它非常适合作前向感知或者路侧感知的主雷达。装满128线的数据包,每秒大约有几百万个点,对主机网卡和CPU解包还是有一定压力的,所以不要拿一台太老的电脑来跑。
1.2 分层理解:物理层、解析层、消费层
我把整个实时点云链路拆成三层,排查问题的时候一层一层过,效率会高很多:
| 层级 | 对应组件 | 主要职责 |
|---|---|---|
| 物理层 | 网卡、网线、IP配置 | 让雷达UDP数据包能进入主机 |
| 解析层 | PandarView 2 / hesai驱动 / SDK | 把字节流还原成带坐标和强度的点云 |
| 消费层 | 可视化界面 / PCL / ROS话题 | 显示点云、存储数据、跑算法 |
大多数新手出问题都出在物理层,也就是网络配置不对。雷达默认IP是192.168.1.201之类的固定地址,主机网卡却还停留在DHCP自动获取状态,两边不在同一个网段,数据自然过不来。还有一部分问题出在解析层的版本兼容上,比如PandarView 2缺少动态库、驱动版本和固件不匹配。
我建议第一次接触AT128的朋友,先不要一上来就搞ROS,而是先用PandarView 2把物理层和解析层验证通。原因很简单:PandarView 2是官方打包好的图形工具,如果你能在里面看到点云,说明网线、IP、网卡、UDP链路全部正常,这时候再去接ROS驱动,剩下的事情就只有配置参数而已。
2. 系统与硬件准备:Ubuntu 20.04 的安装细节和显卡驱动到底要不要装
2.1 装系统时的几个选择,直接影响后面省不省心
虽然Ubuntu 20.04已经发布了很长时间,但我还是建议用20.04.6这个最终维护版本,而不是早期的小版本。镜像可以从清华镜像站下载,速度快而且完整。制作启动盘用dd命令就能解决,不需要额外工具:
sudo dd if=ubuntu-20.04.6-desktop-amd64.iso of=/dev/sdX bs=4M status=progress安装过程中有几个选择值得多说一句。首先是硬盘分区,如果你这台机器后面要用来存点云数据集,建议单独划分一个大容量的home分区或者数据盘,因为一段几十分钟的AT128点云录制文件就能轻松占掉好几个GB。其次是用户名,不要用中文用户名,后面编译ROS、配置驱动环境的时候,路径里带中文会引发各种莫名奇妙的库路径问题,这个坑我踩过,完全不值得再试。
装完系统以后,第一件事是更新apt源。Ubuntu默认源在国外,速度不稳定,换成清华源或者阿里源:
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list sudo apt update && sudo apt upgrade -y到这里,系统层面就准备好了,还没到和雷达驱动相关的部分。
2.2 显卡驱动:分清楚“必需”和“可选”
很多人搜索“Ubuntu 20.04 点云可视化”的时候,会看到一个高权重相关的词:nvidia 520 linux 64-bit ubuntu 20.04,进而误以为先装NVIDIA驱动才能跑点云。这里必须说清楚:PandarView 2和RViz渲染点云用的是OpenGL和CPU,不依赖CUDA,所以如果目的只是“让点云显示出来”,显卡驱动完全可以不装。
那什么情况下必须要装?如果你后面要跑基于深度学习的3D目标检测,比如PointPillars或者VoxelNet,或者要用CUDA加速点云配准、语义分割,那NVIDIA驱动就是刚需。
我这次实测的机器是一张NVIDIA显卡,顺手装了驱动,版本就是520系列。安装方式我推荐用Ubuntu自带的“软件和更新”图形界面,搜索“Additional Drivers”,选中对应驱动后应用,重启即可。这种方法比手动下载runfile安全得多,不会出现因为内核头文件不匹配导致的编译失败。用命令行也一样:
sudo apt install ubuntu-drivers-common sudo ubuntu-drivers autoinstall sudo reboot装完后用nvidia-smi验证驱动是否生效。注意,驱动装完和PandarView 2能跑之间没有任何因果关系,如果你按照某些教程先去折腾驱动、装CUDA、配置cuDNN,再回头接雷达,方向就反了。正确顺序是:先跑通点云,再考虑CUDA。
3. Hesai 官方驱动的三种入口,先弄明白再动手
3.1 PandarView 2:验证链路最省事的图形工具
PandarView 2是Hesai官方提供的跨平台点云可视化工具,支持AT128等主流型号,也支持离线pcap回放和雷达参数配置。它最大的价值在于“开箱即用”——不需要编译源码,不需要关心ROS环境,只要能把UDP数据收到,界面就能把点云画出来。
所以我的建议非常明确:第一次接触AT128,先下载PandarView 2跑通实时点云。这一步是后面所有操作的信任锚点。如果PandarView都看不到点云,那问题一定出在网络配置或雷达硬件上,不要急着去怀疑ROS驱动。
3.2 hesai_ros_driver:接入ROS Noetic体系的正路
如果项目需要把点云话题发布出来给下游算法使用,就要走hesai_ros_driver。Ubuntu 20.04对应的ROS版本是Noetic,生态稳定,是目前很多移动机器人项目的主力版本。
这个驱动在ROS 1和ROS 2下都有支持,我这次用的是ROS 1 Noetic。它内部依赖hesai_lidar SDK,编译过程不复杂,但有一些参数需要手动配置,比如本机IP、雷达IP、雷达型号。后面第5节会给到完整的编译和运行过程。
3.3 hesai_lidar SDK:纯C++二次开发时才需要换
如果你不需要ROS,而是想在自有软件框架里直接消费点云,那就用hesai_lidar SDK。它以C++库的形式提供,内部封装了网络接收、UDP解析、点云结构转换。使用方式是在代码里创建SDK对象、设置参数、注册点云回调,然后在回调函数里处理每一帧点云。
对于绝大多数机器人项目,PandarView 2加ROS驱动的组合已经够用了。我把三种入口的区别整理成一张表:
| 方案 | 适合场景 | 上手难度 | 是否依赖ROS |
|---|---|---|---|
| PandarView 2 | 验证硬件链路、离线回放、快速出图 | 低 | 否 |
| hesai_ros_driver | 机器人/SLAM/感知系统集成 | 中 | 是 |
| hesai_lidar SDK | 自研软件、非ROS架构 | 中高 | 否 |
4. PandarView 2 安装避坑全记录
4.1 下载与解压,注意路径不能有中文
PandarView 2安装包从Hesai官网下载,下载后得到一个压缩包。解压到任意目录,但强烈建议放在/opt或者~/tools这样的纯英文路径下,不要放在桌面这种带特殊路径的地方,更不要放到中文目录。解压后进入文件夹,你会看到可执行文件和一些库目录:
mkdir -p ~/tools cd ~/tools tar -zxvf PandarView_2.x.x.tar.gz cd PandarView_2.x.x ls -l正常能看到PandarView可执行文件、lib目录、doc目录、config目录等。有些版本还会自带driver文件夹,里面有底层网络库。
4.2 动态库缺失是第一个拦路虎
直接运行./PandarView,大概率会看到一个报错,格式类似:
error while loading shared libraries: libQVTKWidget.so.5: cannot open shared object file: No such file or directory这个问题的本质是:PandarView 2是基于Qt和VTK/PCL构建的图形应用,它在打包时没有把所有的Qt库一起带上,运行时需要从系统里找对应版本的动态库。Ubuntu 20.04默认装了部分Qt5库,但是可视化相关的组件(比如Qt5MultimediaWidgets、Qt5OpenGL)默认没有装全。
解决办法有两步。第一步是安装基础依赖:
sudo apt update sudo apt install libqt5multimediawidgets5 libqt5opengl5 libqt5printsupport5 \ libqt5svg5-dev libvtk7-qt-dev libpcl-dev装完依赖后,如果还报缺库,就要看程序自带的lib目录里有没有对应的库文件。很多情况下PandarView 2安装包自带了一个lib目录,里面打包了它自己编译时依赖的库版本。这时候需要把这个目录加入到动态库搜索路径:
sudo sh -c "echo '$(pwd)/lib' > /etc/ld.so.conf.d/pandarview2.conf" sudo ldconfigldconfig运行后,再用ldd命令检查可执行文件是否还有缺失:
ldd ./PandarView | grep "not found"如果这一行没有输出,说明所有依赖库都已经找到了,可以正常启动。
4.3 首次启动:权限、网卡和界面参数
启动PandarView 2的时候,我发现直接双击图形图标可能没反应,终端里运行反而能看清日志:
./PandarView如果有权限问题导致网卡扫描失败,就加上sudo:
sudo ./PandarView这里有一个很多人吐槽过的点:PandarView 2在读取网卡列表和绑定端口时,对权限要求比较严格,非root用户可能看不到任何网卡。如果你的界面里Sensor列表是空的,先用sudo切到管理员权限运行,基本就能解决。
进入主界面后,按下面几个步骤配置:
- 在传感器列表中选AT128型号,确认固件版本兼容。
- 设置本机IP为192.168.1.x网段,例如192.168.1.102。
- 设置雷达目标IP为默认的192.168.1.201。
- 通信方式选择UDP,端口保持默认值。
- 点连接(Connect)按钮,等待几秒钟。
如果一切正常,界面上会开始以10Hz的速率刷新点云,可以用鼠标拖拽旋转视角,切换Range/Intensity/Reflectivity等渲染模式。
4.4 我实测踩过的三个坑,每一个都很隐蔽
第一个坑是防火墙。Ubuntu自带的ufw默认没有开启,但有些人在装完系统后手动开过防火墙,雷达UDP包会被直接丢弃。表现是PandarView界面一直显示“No Data”,但网卡指示灯正常、雷达也亮起。排查方法:
sudo ufw status如果状态是active,把雷达所在网段的入站UDP放行,或者干脆先临时关闭防火墙验证:
sudo ufw disable确认是防火墙问题后再细化规则。
第二个坑是虚拟机和云主机。我见过有人想当然地把雷达接到一台VMware虚拟机里,希望通过USB网卡透传实现点云显示。结果就是虚拟机里的网卡驱动和UDP性能完全扛不住几百万点的数据流,就算能收到包也会严重丢包,点云呈现“破碎”的状态。实测下来,AT128实时数据必须用物理机的物理网卡接收,虚拟网卡的性能和中断处理都不够看。
第三个坑是APR缓存。重新配置本机IP后,有时候ping雷达能通,但PandarView还是收不到数据。这是因为网络地址解析缓存还保留了旧记录,重启网络服务即可:
sudo ip addr flush dev eth0 sudo systemctl restart systemd-networkd5. 点云上屏:PandarView 2 与 RViz 两条路线都走通
5.1 PandarView 2 上屏后的验证标准
点到云,不代表链路就完全合格。我建议在上屏以后做一个快速验证:把视角调整到侧面,确认128线的结构清晰,地面是连续的水平面,近处的物体轮廓没有明显断层;然后把渲染模式切到强度图,看反光物体的颜色是否突出。
如果点云出现了大量“拖尾”或者边缘撕裂,先不要怀疑雷达,优先检查网线接口是否松动、交换机是否有丢包统计。AT128的数据量在10Hz下非常可观,千兆网口必须有线连接,不要用USB转网卡。
5.2 RViz 实时显示:接上 ROS Noetic 驱动
PandarView 2验证通过后,就可以把数据接进ROS了。先安装ROS Noetic:
sudo apt install ros-noetic-desktop-full sudo apt install ros-noetic-pcl-ros ros-noetic-rviz初始化环境:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc创建工作空间并克隆驱动源码:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/HesaiTechnology/hesai_ros_driver.git cd ~/catkin_ws catkin_make source devel/setup.bash编译结束后,在驱动launch文件里配置关键参数。找到hesai_lidar.launch,需要重点确认这几个字段:
laser_type:设置为AT128。server_ip:当前主机IP,比如192.168.1.102。sensor_ip:雷达IP,默认192.168.1.201。pcap_file:留空,表示实时模式。frame_id:建议设为laser_link,方便后面做坐标变换。
启动驱动:
roslaunch hesai_lidar hesai_lidar.launch看到日志输出点云话题发布成功后,新开一个终端启动RViz:
rosrun rviz rviz在RViz左侧Display面板里点击“Add”,选择“By topic”标签页,找到点云话题(通常是/hesai/pandar),添加PointCloud2显示组件,然后在Global Options里将Fixed Frame设为laser_link。点云就会出现在RViz窗口里。
5.3 用 rostopic 验证数据帧率和时间戳
显示正常还不够,我用两个命令确认数据质量。第一个是话题频率:
rostopic hz /hesai/pandar正常情况下应该稳定输出10Hz左右。如果频率低于8Hz,说明存在丢包,需要检查网络负载。第二个是查看时间戳:
rostopic echo /hesai/pandar/header确认时间戳是连续递增的,没有出现跳变。如果时间戳每隔几帧就跳一次,很可能是雷达的时间同步模式没有配置好,这会影响后续点云与相机、惯导的融合精度。
6. 掉坑清单与排查思路复盘
6.1 网络不通,先按这个顺序查
这里整理一份我从多次实操中总结的排查顺序,几乎覆盖90%的“收不到点云”问题:
- 用
ip addr确认网卡配置了192.168.1.x地址,掩码是255.255.255.0。 - 用
ping 192.168.1.201确认和雷达二层可达。如果ping不通,检查网线、网卡是否up。 - 看雷达尾部的网口指示灯状态。两个灯的闪烁规律不一致通常意味着物理链路异常。
- 执行
sudo ufw status检查防火墙。 - 用
tcpdump确认UDP数据是否到达主机:
sudo tcpdump -i eth0 udp -c 100如果能看到持续刷新的UDP包,物理链路就没问题,问题转移到PandarView或驱动配置。
6.2 时间同步对实时点云的影响
很多人在第一次跑AT128时完全忽略时间同步,因为实时可视化确实不需要准确时间戳。但后续只要做多传感器融合,时间戳乱跳会让你怀疑人生。
AT128支持PTP精确时间同步。在PandarView 2的设置里可以切换时间源为PTP、GPS或者NMEA。如果使用PTP,需要在主机上安装并配置PTP客户端:
sudo apt install linuxptp sudo ptp4l -i eth0 -m注意,PTP依赖硬件时间戳功能,不是所有网卡都支持。如果不支持,可以先用GPS秒脉冲做粗同步,或者至少在ROS驱动里保证主机系统时间通过NTP校准。
6.3 最后再补充两个小建议
第一个建议是:雷达上电后不要立刻连接,给它10到15秒的自检和启动时间,指示灯变成稳定常亮以后再开始收数据。很多人一上电就狂点连接,提示连接失败后就开始重装驱动,白白浪费时间。
第二个建议是:驱动版本尽量保持稳定。AT128的固件和驱动配套关系比较明确,如果PandarView 2能看到点云而ROS驱动看不到,优先检查驱动版本和固件是否匹配,不要一上来就改代码。
如果你按这篇内容走下来的话,我猜你已经完成了从“网口插上”到“RViz里面满屏点云”的整个过程。接下来可以做的事就很多了:试着录一段pcap包做离线回放,或者接个IMU开始做点云畸变校正。AT128的能力要真正发挥出来,还需要在具体场景里慢慢打磨。希望这篇文章能让你少走几条弯路,把时间留给更值得折腾的问题。