说实话,AT128 这雷达我已经在 Ubuntu 20.04 上跑过好几轮了,每次帮同事配环境还是会碰到一些奇奇怪怪的问题。这篇东西我早就该整理出来,前前后后踩过的坑加起来,比教程本身还长。网上虽然也能搜到零散的安装记录,但大部分都卡在 PandarView 2 装不上、点云出不来这一步就断了,很少有一篇能让你从头到尾照着敲完就直接看到实时点云的文章。
这篇保姆级教程要解决的就是四件事:把 Ubuntu 20.04 的网络环境配好,让电脑能拿到 AT128 的数据包;把官方可视化工具 PandarView 2 顺利装上,绕开我在安装过程中遇到的各种依赖报错;用工具把实时点云显示出来,并且能判断数据到底正不正常;最后再往 ROS 方向走一步,告诉你日后开发时怎么用 RViz 来接替 PandarView。不管你是刚拆箱的研究生,还是帮实验室调设备的技术支持,只要手头有一台 AT128、一台装了 Ubuntu 20.04 的电脑,这篇文章应该都能帮你省下至少一个通宵。
1. AT128 雷达与点云应用场景:先搞清楚你要面对的是什么
1.1 AT128 不是“大号 Velodyne”,半固态扫描方式决定了很多使用习惯要改
很多人第一次拿到 AT128,下意识会把它和传统的 64 线、128 线机械旋转雷达摆在一起比,觉得无非是线数更多、角度更广。这个理解方向对了一半,但 AT128 的本质区别在于它是半固态激光雷达,内部通过转镜结构实现扫描,而不是整个雷达头部绕垂直轴旋转。所以它的水平视场角不是 360 度,而是 120 度左右,垂直视场角大约 25 度,测距能力最远能到 200 米,点频在 153.6 万点每秒上下,波长是 905 纳米。
这样带来的直接后果是:如果你之前用惯了机械式雷达,指望单台设备覆盖车辆周围一圈,那拿到 AT128 之后这个习惯要改。AT128 的应用场景多数是安装在车头或者车顶前向,用多台拼接来覆盖 360 度环境。当然,单台做前向感知、路侧感知、园区巡检也完全没问题,数据输出依然是标准的三维点云,坐标、距离、反射强度这些信息都包含在内。
1.2 点云数据流向:雷达到电脑,这条链路每个环节都可能出问题
AT128 内部已经完成了从激光发射、信号采集到点云计算的全过程,对外输出的直接就是标准 UDP 以太网数据包。换句话说,电脑端不需要任何专用的采集卡,只需要一张千兆网卡、一根网线,把雷达的数据包接住,然后交给软件解析渲染。
这里我习惯打一个比方:雷达就像一家快递仓库,把每一帧点云数据打包成一个个 UDP 包裹,通过网络发给你;电脑上运行的可视化软件就是快递分拣员,负责拆包、整理、把点云画到屏幕上。整个过程看起来简单,但任何一个环节出问题都会直接影响结果。网卡没识别、IP 配置错了、防火墙拦截、数据包被网线质量拖累导致丢包、可视化软件依赖缺失,这些我在实际调试里都遇到过,后面每一节都会对应展开讲。
1.3 推荐学习路线:PandarView 2 验证、SDK 二次开发、ROS 集成
拿到雷达之后,我建议你按照三个阶段来推进。第一阶段用官方工具 PandarView 2 做整机验证,确认设备是好的、网络通了、点云正常,这个阶段的目标是“看到点云”。第二阶段再去看官方提供的 SDK 和驱动代码,理解点云数据是怎么解析出来的,为后续写自己的应用打基础。第三阶段是接入 ROS,无论是跑 SLAM、做目标检测还是标定,ROS 环境才是真正干活的舞台。
很多人一上来就想着直接编译 ROS 驱动,结果连最基本的数据链路都没有验证过,最后出了问题根本分不清是硬件还是软件的问题。所以我这篇教程会严格按这个顺序来,先把 PandarView 2 跑通,再讲 ROS 集成,这样排错的范围可以大大缩小。
2. Ubuntu 20.04 环境准备:网卡、静态 IP、数据包验证一条龙
2.1 网络拓扑与接线:直连比路由器靠谱
AT128 采用的是标准以太网输出,雷达端通常是一个工业级网口,电脑端用普通千兆网口就能对接。连接方式上,我强烈建议你直接用网线把雷达和电脑连起来,也就是“点对点直连”,不要图方便把雷达插到实验室的交换机或者路由器上。
原因有二。第一,AT128 的数据量不小,每秒上百万个点,换算成网络带宽大约是几十兆字节每秒的 UDP 流量,如果交换机上有其他大流量设备在跑,丢包的概率会明显上升。第二,雷达通过 UDP 广播发送数据,如果接到公司或实验室的大网里,这些广播包会扩散到整个局域网,既影响别人,也可能被路由器的防火墙策略误伤。直连就清爽得多,一台电脑一个雷达,没有中间商赚差价。
上电的时候也要注意,AT128 的供电是通过专用线束完成的,电压范围一般是 9V 到 36V 直流,常见的是 12V 或 24V 供电。千万不要自己乱接线,最好使用雷达包装里附带的原装线缆。上电后,雷达内部的转镜会起转,工作正常时能听到轻微的风扇声和转镜运转声,状态指示灯也会亮起。
2.2 配置静态 IP:让电脑和雷达处于同一网段
雷达出厂时一般会有一个默认 IP 地址,通常在 192.168.1.x 这个网段,具体以你拿到设备附带的手册为准,常见的是 192.168.1.201。雷达不会主动去请求 DHCP 地址,它就像一个固定地址的服务器,一直在往外发数据。所以电脑端的 IP 必须手动设置成与雷达同一个网段,才有可能收到数据。
举个例子,如果雷达默认 IP 是 192.168.1.201,那么电脑的 IP 可以设置为 192.168.1.102,子网掩码 255.255.255.0,网关不用填。在 Ubuntu 20.04 上,我建议直接用 netplan 来配置,简单直接。打开配置文件:
sudo vim /etc/netplan/01-netcfg.yaml写入以下内容:
network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: no addresses: - 192.168.1.102/24注意把 enp0s3 换成你电脑实际网卡的名字,可以用命令ip a查看。保存后执行:
sudo netplan apply然后检查一下网卡 IP 是否生效:
ip addr show enp0s3这里补充一句:我不推荐在 Ubuntu 桌面版里用图形界面的网络设置去改 IP,因为有时候 NetworkManager 和 netplan 的配置会互相覆盖,改了半天发现 IP 没变。用 netplan 统一管理,至少在服务器端和桌面端都能保持一致行为。
2.3 用 tcpdump 验证雷达数据包是否到达
IP 配好之后,先别急着打开 PandarView,先确认数据包是不是真的到了电脑网卡里。这里推荐用 tcpdump 抓包看一眼。执行:
sudo tcpdump -i enp0s3 udp -c 100如果网卡名是 enp0s3,并且雷达已经上电、网线也接好了,应该能看到不断刷新的 UDP 包,源地址是雷达的 IP,端口一般是雷达数据输出端口。看到这些数据包,就说明物理链路和数据链路都已经通了,下一步装软件才有意义。
如果 tcpdump 什么都没有输出,不要急着去装驱动,先回头查三层问题:网线有没有松、网卡有没有起来、IP 是不是在同一网段。我遇到过很多次,折腾了半天软件,最后发现问题只是网线插错了口。
3. PandarView 2 安装避坑指南:依赖、权限、GLIBC 这些坑我都替你踩过了
3.1 PandarView 2 是什么,为什么我建议你先用官方工具验证
PandarView 2 是禾赛官方提供的点云可视化软件,可以用来实时显示雷达点云、调整视角、查看距离和反射强度信息。和后来我们做开发常用的 RViz 相比,PandarView 2 的优势在于它不需要搭建 ROS 环境,不需要编译任何驱动,装好之后直接配置 IP 就能连接雷达,非常适合做设备验收和快速验证。
从拿到手到跑通,我的经验是:先把这个工具点亮,确认雷达本身没问题,然后再去碰 ROS 那套东西。否则你就得在一个充满未知变量的环境里同时调试硬件和软件,出了问题很难定位。
3.2 安装前依赖准备:一次性安装齐全
PandarView 2 是图形界面程序,依赖 Qt、OpenGL、libpcap 这些库。很多人装完之后双击图标没有反应,或者终端里报错找不到某个 so 文件,十有八九就是缺依赖。建议在安装之前一次性补齐:
sudo apt update sudo apt install -y libpcap-dev libqt5core5a libqt5gui5 libqt5widgets5 libgl1-mesa-dev libglu1-mesa-dev如果你的电脑装了独立显卡,尤其是 NVIDIA 显卡,建议同时装好显卡驱动。PandarView 2 渲染点云时对 OpenGL 的要求比较高,集显虽然也能跑,但点云一多旋转视角就会掉帧。NVIDIA 驱动装好之后,可以用glxinfo | grep "OpenGL renderer"确认当前使用的渲染器是不是独立显卡。
注意,glxinfo 属于 mesa-utils 包,如果提示找不到命令,先执行:
sudo apt install -y mesa-utils3.3 安装与启动三步走
拿到 PandarView 2 的安装包后,一般是一个压缩包或者一个可执行文件。这里以压缩包为例说明完整流程。
第一步,解压。假设压缩包在当前用户的主目录下:
cd ~ tar -xzvf PandarView2_xxx.tar.gz第二步,进入解压出来的目录,给可执行文件加权限。有些压缩包解压之后文件没有可执行权限,直接运行会提示 Permission denied:
cd PandarView2_xxx chmod +x PandarView2第三步,运行。这里有一个重点:如果你采用以太网直连的方式抓取雷达数据,PandarView 2 抓包时可能涉及 socket 权限问题,普通用户执行会提示无法打开网络设备。我建议先用 sudo 启动:
sudo ./PandarView2如果你的系统是桌面版且当前用户在 sudo 组,也可以将用户加入 sudo 组后继续用这种方式。当然,如果你是在自己控制的机器上做实验,sudo 运行是最省事的方案。
3.4 高频报错集合(附解决办法)
这里我整理一下 PandarView 2 安装和启动时最高频的几个报错,每个都是我亲身遇到过的,或者帮别人排查过的,直接对号入座就能解决。
| 报错信息 | 根本原因 | 解决方法 |
|---|---|---|
error while loading shared libraries: libpcap.so.1 | 缺少 libpcap 运行库 | 安装 libpcap-dev |
cannot open shared object file: libQt5Core.so.5 | Qt5 核心库缺失 | 安装 libqt5core5a 等 Qt5 依赖 |
QXcbConnection: Could not connect to display | 没有图形环境或 DISPLAY 变量错误 | 确认在桌面环境运行,或 export DISPLAY=:0 |
socket: Operation not permitted | 权限不足,无法抓包 | 使用 sudo 启动 |
| 启动后窗口黑屏 / 画面不刷新 | OpenGL 渲染异常 | 检查显卡驱动,试用 mesa-utils 确认渲染器类型 |
./PandarView2: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_xx not found | 系统 GLIBC 版本低于软件要求 | 确认 Ubuntu 20.04 已更新到最新补丁,必要时升级系统 |
最后一个 GLIBC 问题比较隐蔽,因为 Ubuntu 20.04 的 GLIBC 版本可能因为长期没有执行过sudo apt upgrade而停留在比较旧的版本。遇到这种情况,先跑一下sudo apt update && sudo apt upgrade,把系统基础库更新一遍,然后再运行软件。
4. 实时点云显示与数据质量校验
4.1 PandarView 2 界面操作与参数配置
PandarView 2 启动之后,界面里一般会有连接参数设置区域,包括雷达 IP、电脑 IP 和数据端口。软件里通常会有默认端口,保持默认即可。这里要特别提醒:雷达 IP 必须和雷达实际的 IP 完全一致,不能随便填。你可以在雷达手册上找到出厂 IP,或者在上一步 tcpdump 抓包时从数据包源地址里看到雷达 IP,两者对照一下最稳妥。
点击连接按钮之后,如果参数正确,界面上的点云会立刻开始刷新。此时你会看到一个扇形分布的三维点云,这就是 AT128 的 120 度水平视场角扫描结果。点云的疏密程度和距离有关,近处密集远处稀疏,这是激光雷达的正常特性。
操作方面,鼠标左键旋转视角,滚轮缩放,右键平移。你可以把视角拉近看最近的物体,也可以拉远看整体轮廓,感受一下 128 线雷达的纵向分辨率。说实话,第一次在 PandarView 里看到 AT128 点云时,那种墙面像刀切一样平直的效果会给你留下很深的印象。
4.2 如何快速判断点云是否正常
看到点云之后,先别急着开心,按照下面几个维度快速做个体检。
第一,看地面。在雷达安装正常的前提下,地面点云应该是连续、平整的一条线或一面,中间没有大的空洞。如果地面点云有明显的断层或者大面积缺失,可能是雷达安装角度有问题,也可能是某个线束的探测异常。
第二,看反射强度。PandarView 2 一般可以用颜色表达反射强度。高反射物体(比如路牌、车身)的颜色应该明显区别于低反射物体(比如深色路面)。如果整个画面的强度值都一样,说明反射强度信息没有正常解析,可能是软件显示模式设置的问题。
第三,看远处。找一栋 50 米以外的建筑或一棵树,观察点云是否还能勾勒出轮廓。AT128 在 905 纳米波长下对远处低反射率物体测距能力有一定衰减,但如果 100 米开外的墙体完全没有任何点,那就要考虑设备标定或者故障问题。
第四,看帧率。PandarView 2 界面上一般会显示当前的帧率和点数。AT128 的点频大约为 153.6 万点每秒,以一帧 10Hz 为例,一帧应该在 15 万点上下。如果显示的点数明显偏少,多半是丢包了,检查网线是否千兆、接口是否松动。
4.3 点云显示异常的常见表现与应对方法
实际调试过程中,最常见的就是“点云很稀疏”。这通常不是雷达的问题,而是电脑网卡协商成了百兆模式,或者网线质量太差丢了大量 UDP 包。可以用ethtool enp0s3查看网卡协商速率,确认是 1000Mb/s。如果协商成了 100Mb/s,换一根六类网线,或者检查网口是否有灰尘。
另一个常见的现象是“点云抖动”——视角看起来在不停摇晃。这要看情况:如果雷达本身没有固定好,物理抖动会直接反映在点云上;如果雷达固定没问题,那可能是你观察的是动态场景。AT128 是半固态转镜扫描,不是瞬间快照,同一帧内不同线束的扫描时间略有差异,运动物体会出现轻微的运动畸变,这属于正常现象。
如果点云彻底不显示,但 tcpdump 能看到数据包,那问题基本都出在软件配置上。最常见的是雷达 IP 填错,或者电脑本地网卡选错。PandarView 2 里如果有多网卡机器,一定要确认当前选的是直连雷达的那张网卡,而不是连接外网的无线网卡。
5. 进阶:ROS 驱动集成与 RViz 点云可视化
5.1 为什么建议开发阶段切换到 ROS
PandarView 2 作为验证工具足够优秀,但它做不了算法开发。如果你想把点云数据接入到 SLAM、目标检测、感知融合这些流程里,ROS 几乎是绕不开的基础设施。Ubuntu 20.04 搭配 ROS Noetic 是我目前用得最顺的组合。
好消息是 AT128 的 ROS 驱动方案比较成熟,官方维护了驱动代码,社区里也有不少现成配置。编译完成后,点云会以 PointCloud2 消息发布到 ROS 话题上,RViz 可以订阅话题并实时显示。整个过程跑通之后,你就拥有了一个标准的 ROS 点云数据源,后面做任何算法开发都方便。
5.2 在 Ubuntu 20.04 上编译 Hesai ROS 驱动
在开始编译之前,确保 ROS Noetic 已经完整安装。如果没有安装,参考 ROS 官方文档安装 ros-noetic-desktop-full。
然后创建工作空间并拉取驱动代码:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/HesaiTechnology/hesai_lidar.git cd ~/catkin_ws catkin_make编译之前记得 source 一下 ROS 环境:
source /opt/ros/noetic/setup.bash如果编译过程中提示缺少依赖包,根据报错信息用 apt 安装即可。编译完成后,配置驱动参数。关键文件在 hesai_lidar 包的 launch 目录下,打开对应的 AT128 launch 文件,把 server_ip 改成雷达的实际 IP,host_ip 改成你电脑的 IP。这里的 IP 必须和网络配置阶段保持一致,否则驱动收不到数据。
启动驱动:
source ~/catkin_ws/devel/setup.bash roslaunch hesai_lidar hesai_lidar.launch驱动启动后,终端里会持续输出接收到的点云帧信息。此时可以新开终端,用命令确认话题:
rostopic list你应该能看到类似/hesai/pandar或者包含 points 的点云话题。再看一眼话题的消息类型,应该是 sensor_msgs/PointCloud2。
5.3 RViz 中显示实时点云
确认话题存在后,启动 RViz:
rviz在 RViz 界面里,把左侧 Displays 面板的 Fixed Frame 设置为驱动 launch 文件里配置的 frame_id,通常类似 hesai/AT128。然后点击 Add,选择 By topic,找到点云话题,确认消息类型是 PointCloud2,点击 OK 添加。
这时你应该能在 RViz 的 3D 视图里看到和 PandarView 2 类似的点云画面了。RViz 默认的点云渲染方式是大方块,如果觉得太粗,可以在 PointCloud2 的 Display 属性里把 Style 改为 Points,Size 调小一点,看起来就细密多了。
如果 RViz 画面里看不到任何点,优先检查 Fixed Frame 是否和话题时间戳的 frame_id 匹配,这是新手最常犯的错误。另外,确认驱动端打印的帧数和点数是不是正常增长,如果驱动起来但没人订阅话题,有些驱动版本会默认不发布数据,需要在 launch 里设置 publish 参数为 true。
6. 常见问题速查与排障实录
6.1 高频问题速查表
把我在各种场合遇到的高频问题整理成一张速查表,按图索骥,命中率很高。
| 问题现象 | 可能原因 | 排查与解决 |
|---|---|---|
| tcpdump 收不到 UDP 包 | 网线问题、网卡未启用、IP 网段不一致 | 先查网线,再看 IP,然后看网卡协商速率 |
| PandarView 连接后无点云 | 雷达 IP 配置错误、端口错误、防火墙拦截 | 核对 IP,用默认端口,确认没有开启 ufw 或放行 UDP |
| 点云显示很稀疏 | 网卡协商百兆、网线质量问题、CPU 处理不过来 | 用 ethtool 查看速率,换六类线,关闭其他大流量应用 |
| 点云画面卡顿 | GPU 渲染性能不足、OpenGL 驱动异常 | 装 NVIDIA 驱动,用 glxinfo 验证渲染器 |
| RViz 里看不到点 | Fixed Frame 不匹配、话题未发布、frame_id 配置错误 | 检查 launch 配置,确认 rostopic hz 有数据 |
| 雷达上电后不工作 | 供电电压不足、线缆松动、设备故障 | 检查电源指示灯,用原装线缆,联系售后 |
6.2 两个隐藏比较深的坑
第一个坑是 UDP 丢包率。AT128 数据量很大,如果电脑网卡的接收缓冲区不够,内核丢包会在完全不知道的情况下发生。用netstat -su可以查看 UDP 丢包统计,如果发现大量的 receive buffer errors,可以适当调大网卡缓冲区:
sudo sysctl -w net.core.rmem_max=134217728这个参数让我在跑长时间采集任务时少了很多莫名其妙的问题,特别是在录制 bag 包的时候,推荐大家都设置一下。
第二个坑是时间戳。AT128 输出的点云数据带有时间戳,但如果雷达和电脑之间没有做时间同步,点云时间戳和系统时间可能对不上。后期做多传感器融合的时候,这个问题会变得致命。入门阶段不用太在意,但如果你要做相机和雷达的联合标定,一定要提前考虑 PTP 时间同步方案,从第一天开始就把时间戳问题纳入考虑范围。
6.3 关于 AT128 后续扩展的一些经验
整个流程跑通之后,你会发现 AT128 就是一个标准的数据源,后续想怎么玩完全取决于你的应用场景。比如做多雷达拼接,需要注意不同雷达之间的外参标定;做目标检测,需要同步采集图像和点云做融合;做点云配准和语义分割,可以先从公开数据集练手,再用实车数据做验证。基本链路是通的,剩下就是在算法和应用层面深挖。
写到这里,AT128 在 Ubuntu 20.04 上从零跑通实时点云的完整流程就讲完了。回看整个过程,真正困难的地方其实不是某一个具体步骤,而是每个环节里那些零碎的小坑。我自己在帮别人排错的时候体会最深的一句话是:先把链路一步步拆开验证,哪一步有问题就定位哪一步,千万别一口气把软件硬件全堆上去再查问题。照着这个原则来,哪怕你以后换别的型号激光雷达,处理思路也是一样的。