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 库快速处理点云。嗯,敬请期待。