3、点云数据采集:Velodyne/HDL-64E数据采集、Ouster OS1数据采集、Livox Horizon数据采集

点云数据采集,说白了就是给雷达“喂”数据。你想想看,算法再牛,没有真实世界的点云数据,那就是纸上谈兵。我个人习惯,在讲这部分之前,先带大家摸一摸市面上主流的几款激光雷达。它们的工作原理、数据格式、采集方式,差别还挺大的。

今天咱们重点聊三款:Velodyne HDL-64E、Ouster OS1 和 Livox Horizon。这三款基本代表了机械式、固态式和混合固态式三种技术路线。我在项目里都折腾过,踩过不少坑,今天一并分享出来。

3.1 Velodyne/HDL-64E 数据采集

HDL-64E,老牌机械式雷达的经典代表。64线,360度旋转,当年无人驾驶的标配。嗯,这里要注意,它虽然经典,但用起来并不简单。

3.1.1 硬件连接与驱动

HDL-64E 通过以太网输出点云数据。你需要一根网线直连电脑,或者通过交换机。默认IP是 192.168.3.x 网段。我曾经因为忘记改电脑IP,折腾了半小时没连上,后来发现是网段不对。

驱动方面,Velodyne 官方提供了 ROS 驱动包 velodyne_driver。安装很简单:

sudo apt-get install ros-<distro>-velodyne

启动驱动前,记得配置好 launch 文件里的 device_ip 参数。我个人习惯写成这样:

<node name="velodyne_driver" pkg="velodyne_driver" type="driver_node">
  <param name="device_ip" value="192.168.3.100" />
  <param name="frame_id" value="velodyne" />
  <param name="model" value="64E" />
</node>

3.1.2 数据采集命令

启动驱动后,点云数据会以 sensor_msgs/PointCloud2 消息发布。你可以用 rosbag 录制:

rosbag record /velodyne_points -o hdl64e_data

这里有个坑:HDL-64E 的数据量很大,每秒约 130 万个点。录制时硬盘写入速度要跟上,否则会丢帧。我建议用 SSD 硬盘,机械盘容易扛不住。

3.1.3 数据格式解析

HDL-64E 的原始数据包是 UDP 格式,每个包包含 12 个数据块,每个数据块有 32 个激光点。我整理了一个简单的结构表:

字段 大小 说明
数据块头 2 字节 0xEEFF 标识
旋转角度 2 字节 0~35999,对应 0~360°
距离值 2 字节 × 32 每个激光点的距离(2mm 精度)
强度值 1 字节 × 32 0~255

解析时要注意字节序,HDL-64E 用的是小端模式。我曾经因为没注意这个,解析出来的距离全是乱码。

3.2 Ouster OS1 数据采集

Ouster OS1 是固态激光雷达的代表。它没有旋转部件,靠电子扫描。优点是体积小、寿命长,但视场角有限。我最早接触 OS1 是在一个园区无人车项目上,当时被它的点云清晰度惊艳到了。

3.2.1 硬件连接与驱动

OS1 同样通过以太网输出数据。默认 IP 是 192.168.1.100。它支持 PoE 供电,一根网线就能搞定数据和电源,这点比 HDL-64E 方便多了。

Ouster 官方提供了 Python SDK 和 ROS 驱动。安装 SDK:

pip install ouster-sdk

ROS 驱动安装:

sudo apt-get install ros-<distro>-ouster

启动驱动时,需要指定雷达的 hostname 或 IP:

roslaunch ouster_ros driver.launch sensor_hostname:=192.168.1.100

3.2.2 数据采集命令

OS1 的数据采集同样可以用 rosbag:

rosbag record /os_cloud_node/points -o os1_data

不过,OS1 还支持直接保存为 PCAP 文件,方便离线处理。我个人习惯用 ouster-cli 工具:

ouster-cli source 192.168.1.100 record --output-file os1_recording.pcap

这里要提醒一下:OS1 的点云密度可以配置。默认是 1024×128(水平×垂直),每秒约 130 万个点。如果你需要更高帧率,可以降低分辨率。我在做实时检测时,经常用 512×64 模式,帧率能翻倍。

3.2.3 数据格式特点

OS1 的数据包格式和 HDL-64E 完全不同。它采用 UDP 多播方式,每个包包含一整个扫描帧。数据字段包括:

  • 时间戳:纳秒级精度,支持 PTP 同步
  • 测量数据:距离、强度、信噪比、环境光
  • 姿态数据:内置 IMU 的加速度和角速度

OS1 的信噪比字段很有用。我曾在雨雾天气测试,通过信噪比阈值过滤,能有效去除噪声点。这个技巧在 HDL-64E 上可没有。

3.3 Livox Horizon 数据采集

Livox Horizon 是大疆旗下 Livox 推出的混合固态激光雷达。它采用棱镜扫描方式,视场角比纯固态大,但比机械式小。我最早用它是在一个物流仓储项目上,性价比确实高。

3.3.1 硬件连接与驱动

Horizon 同样通过以太网连接。默认 IP 是 192.168.1.50。它支持 100M 以太网,数据量比前两款小一些,但精度不差。

Livox 官方提供了 ROS 驱动 livox_ros_driver。安装方式:

cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/livox_ros_driver.git
catkin_make

启动驱动:

roslaunch livox_ros_driver livox_lidar.launch

这里有个坑:Horizon 的激光器数量是 1 个,但通过棱镜旋转形成 240° 的视场角。它的扫描轨迹是花瓣状的,不是传统的逐行扫描。我第一次看到点云时,还以为是雷达坏了。

3.3.2 数据采集命令

Horizon 的数据采集同样支持 rosbag:

rosbag record /livox/lidar -o horizon_data

Livox 还提供了 Livox Viewer 软件,可以实时查看点云并保存为 LAS 或 CSV 格式。我个人习惯用命令行采集,方便批量处理。

3.3.3 数据格式与注意事项

Horizon 的数据包格式比较特殊。它采用 Livox 自定义协议,每个包包含 100 个点。数据字段包括:

  • 坐标:x、y、z,单位米
  • 反射率:0~255
  • 标签:用于区分回波次数
  • 时间戳:相对于包起始的偏移

这里要特别提醒:Horizon 的视场角是 81.7°(水平)× 25.1°(垂直),比机械式小很多。如果你需要 360° 覆盖,得装多个雷达。我在项目中用过 4 台 Horizon 拼接,效果还不错。

核心要点总结:

  • HDL-64E:机械式,360° 覆盖,数据量大,适合室外大场景
  • OS1:固态,视场角有限,点云清晰,适合园区和室内
  • Horizon:混合固态,性价比高,视场角中等,适合特定场景

个人经验: 选雷达时别只看线数。我见过有人用 64 线雷达做室内 SLAM,结果因为点云太密,计算量爆炸。反过来,有人用 16 线雷达做高速自动驾驶,远距离目标根本看不清。说白了,场景决定选型。

避坑指南: 我曾经在户外采集时,没注意 HDL-64E 的防水等级,结果下雨天雷达进水,修了半个月。现在每次采集前,我都会检查雷达的防护等级和接口密封性。另外,OS1 和 Horizon 的窗口玻璃容易脏,记得带块镜头布。

好了,三种雷达的采集方法就聊到这儿。下一章咱们讲点云预处理,包括去噪、滤波和坐标变换。到时候我会分享一些实战中常用的技巧,比如怎么用 PCL 库快速处理点云。嗯,敬请期待。