激光雷达选型与数据协议:机械式与固态雷达对比、点云数据格式、串口与网络通信协议

做机器人项目,选激光雷达往往是第一道坎。我见过不少团队,算法写得漂亮,结果雷达选错了,点云数据一塌糊涂,整个运动控制全乱套。说白了,选雷达不是挑贵的,是挑对的。

这一章,咱们就聊聊机械式雷达和固态雷达到底差在哪,点云数据长什么样,以及怎么跟雷达“对话”。嗯,内容有点干,但都是实战里必须啃下来的硬骨头。

机械式 vs 固态:两种雷达的“脾气”不一样

先看一张对比图,把核心差异摆出来。

对比维度 机械式激光雷达 固态激光雷达
扫描方式 电机带动激光头旋转 电子扫描(OPA/Flash)
视场角 360° 水平覆盖 通常 90°~120°(可拼接)
线数 16线、32线、64线、128线 等效线数,但分辨率更灵活
寿命 受限于电机轴承,约 1~3 万小时 无运动部件,5 万小时以上
成本 高(尤其是多线) 中低(量产优势明显)
典型场景 自动驾驶、高精度地图 AGV、服务机器人、安防

我个人习惯,做室内移动机器人优先考虑固态雷达。为什么?因为机械式雷达那个旋转电机,在震动环境下容易出问题。我曾经在一个仓储AGV项目里,用了某款16线机械雷达,跑了三个月,轴承磨损导致扫描角度偏移,点云直接歪了5厘米。排查了两天才找到原因,从那以后,我对机械雷达的可靠性就多留了个心眼。

但话说回来,如果你需要360°全向感知,比如做园区无人车,机械式雷达目前还是绕不开的选择。固态雷达虽然可以通过多台拼接实现360°,但成本和同步复杂度会直线上升。

核心结论: 机械式雷达适合“转着看”,固态雷达适合“盯着看”。选型时先问自己:我的机器人需要多大的水平视场角?运动控制对点云实时性的要求有多高?

点云数据格式:你拿到的“原始数据”长什么样

不管哪种雷达,最终给你的都是一堆点。每个点包含三个核心信息:距离、角度、反射强度。有些雷达还会输出时间戳和信噪比。

最常见的点云格式有两种:

  • 原始极坐标格式:直接输出 (距离, 角度, 强度) 三元组。优点是数据量小,解析快;缺点是需要你自己做坐标转换。
  • 笛卡尔坐标格式:输出 (x, y, z, 强度)。省去了转换步骤,但数据量稍大。

举个例子,某款单线雷达的原始数据包长这样:

// 极坐标格式示例(16进制)
AA 55 00 01  // 帧头 + 设备ID
0A 1B 2C 3D  // 时间戳
01 02 03 04  // 第1个点:距离0x0102,角度0x0304,强度0x05
05 06 07 08  // 第2个点
...
FF EE        // 校验和 + 帧尾

你想想看,如果直接拿这种原始数据做运动控制,CPU得累死。所以一般会在驱动层先做一步处理:把极坐标转成笛卡尔坐标,再丢给上层算法。

我的经验: 在嵌入式平台上,建议在雷达驱动里就完成坐标转换。别把原始数据往上抛,否则主控芯片的算力会被频繁的三角函数计算吃掉。我曾经在一个STM32项目里,就是因为没做这步优化,导致控制周期从10ms拖到了30ms。

串口与网络通信协议:怎么跟雷达“说话”

雷达跟主控通信,主流就两种方式:串口(UART)和网络(Ethernet/UDP)。选哪种,取决于你的数据量和实时性要求。

串口通信:简单可靠,但带宽有限

串口适合单线或低线数雷达,波特率通常 115200 或 921600。协议一般长这样:

  • 帧头:固定字节(如 0xAA 0x55)
  • 数据段:按固定长度打包,每个点占 3~5 字节
  • 校验:CRC16 或累加和
  • 帧尾:固定字节(如 0xFF 0xEE)

我建议,写串口驱动时一定要做超时处理和帧同步。为什么?因为串口线一松动,数据流就可能错位。我曾经遇到过一帧数据中间丢了一个字节,结果后面所有点的距离值都偏移了,机器人直接撞墙。从那以后,我的串口驱动里都会加一个“帧同步状态机”,确保每次解析都从帧头开始。

网络通信:高带宽,但延迟不稳定

多线雷达(16线以上)基本都用网络接口。协议通常是 UDP,因为 TCP 的重传机制会引入不确定延迟,对运动控制来说是灾难。

典型的网络数据包结构:

// UDP 数据包结构
struct LidarPacket {
    uint16_t packet_type;    // 包类型(点云/状态/配置)
    uint16_t packet_len;     // 数据长度
    uint32_t timestamp;      // 时间戳(微秒)
    uint8_t  data[];         // 点云数据(变长)
    uint16_t checksum;       // 校验和
};

这里有个坑:UDP 不保证包序。如果你的雷达数据包被拆成了多个 UDP 报文,接收端必须做重组和排序。我习惯在驱动层维护一个环形缓冲区,按时间戳排序后再往上抛。

注意: 网络通信的延迟抖动可能达到 5~10ms。如果你的运动控制周期是 20ms,这个抖动还能接受。但如果周期是 5ms,建议用串口或者带实时以太网(如 EtherCAT)的雷达。

一张图看懂本章知识体系

下面这张 SVG 图,把机械式 vs 固态、点云格式、通信协议的关系串起来了。你可以把它当作选型时的快速参考。

激光雷达选型与数据协议知识体系 激光雷达选型与数据协议知识体系 机械式激光雷达 固态激光雷达 360° 扫描 / 多线数 有运动部件 / 寿命有限 适合自动驾驶、高精度地图 有限视场角 / 等效线数 无运动部件 / 寿命长 适合AGV、服务机器人 点云数据格式:极坐标 (r, θ, I) 或 笛卡尔坐标 (x, y, z, I) 串口 (UART) 网络 (UDP) 注意:帧同步、超时处理、波特率匹配 注意:UDP包序重组、延迟抖动

选型实战:一个简单的决策流程

说了这么多,到底怎么选?我总结了一个三步决策法:

  1. 看视场角需求:需要 360° 吗?是 → 机械式;否 → 固态。
  2. 看数据量:单线或 16 线以下 → 串口够用;32 线以上 → 必须上网络。
  3. 看环境:震动大、灰尘多 → 固态优先;户外远距离 → 机械式更成熟。

避坑指南: 我曾经在一个项目里,为了省钱选了某款低端固态雷达,结果它的视场角只有 90°,机器人转弯时存在大范围盲区。最后不得不加装第二台雷达,成本反而更高。所以,选型时别只看参数表,一定要结合你的运动控制算法来评估。