2、点云生成原理:激光束发射与接收、时间飞行法测距、多线束扫描机制

好,咱们今天聊聊点云是怎么来的。很多人觉得点云就是一坨密密麻麻的点,没什么技术含量。其实不然。我刚开始接触激光雷达时,也以为它就是「发射-接收-算距离」这么简单。后来真正调过几款雷达,才发现里面的门道比想象中多得多。

说白了,点云生成的本质就三件事:怎么把激光打出去怎么算准距离怎么把单点变成一片。咱们一个一个拆开讲。

2.1 激光束的发射与接收

先说说发射端。激光雷达用的光源,通常是近红外波段的半导体激光器,波长在905nm或1550nm左右。为什么选这两个波段?905nm便宜,1550nm对人眼更安全,但成本高。我做过一个项目,客户非要1550nm的,结果光激光器成本就翻了三倍。嗯,选型时一定要想清楚。

发射过程是这样的:

  • 驱动电路给激光器一个窄脉冲电流,宽度通常在几纳秒到几十纳秒
  • 激光器瞬间发出高功率激光脉冲
  • 经过准直透镜,把发散角压缩到毫弧度级别
  • 射向目标物体

接收端呢?接收到的回波信号极其微弱。你想想看,激光打到几百米外的目标上,反射回来的能量可能只有发射时的百万分之一。所以接收端必须用高灵敏度的雪崩光电二极管(APD),配合跨阻放大器把信号放大。

关键点:发射和接收的光路必须严格同轴。我见过一台雷达,因为装配时镜片歪了0.1度,导致100米外的测距误差直接飙到2米。这种问题在产线上特别容易忽略。

2.2 时间飞行法测距

时间飞行法,英文叫Time of Flight,简称ToF。原理简单得让人不敢相信:

距离 = 光速 × 飞行时间 / 2

光速是3×10⁸ m/s,飞行时间是激光从发射到接收的往返时间。除以2是因为我们只想要单程距离。

举个例子:如果飞行时间是1微秒,那距离就是:

d = (3×10⁸ × 1×10⁻⁶) / 2 = 150米

听起来很简单对吧?但实际做起来,难点全在「怎么精确测量飞行时间」上。我给大家说两种主流方法:

2.2.1 脉冲法

直接测量发射脉冲和接收脉冲之间的时间差。这种方法适合远距离测量,但精度受限于计时电路的时钟频率。比如100MHz的时钟,理论分辨率只有10纳秒,对应1.5米的距离误差。这显然不够用。

怎么提高精度?我习惯用时间数字转换器(TDC),它能做到皮秒级的计时分辨率。一个100ps的TDC,对应的距离分辨率就是1.5厘米。嗯,这个精度就靠谱多了。

2.2.2 相位法

这个方法有点意思。它不直接测时间,而是测发射信号和接收信号之间的相位差。相位差跟距离的关系是:

d = (c × Δφ) / (4π × f)

其中f是调制频率,Δφ是相位差。相位法的优势在于精度高,但测距范围受限于调制波长。我做过一个对比测试,相位法在10米内的精度能做到±1cm,但超过50米就开始飘了。

我的经验:实际产品中,很多雷达是脉冲法和相位法混着用的。远距离用脉冲法,近距离用相位法,取长补短。这叫「混合ToF」,现在很多高端雷达都在用。

2.3 多线束扫描机制

单点测距只能得到一个点的距离。要生成一片点云,就得让激光束动起来。这就是扫描机制要做的事。

多线束雷达,说白了就是同时发射多束激光,每束激光对应一个垂直角度。常见的配置有16线、32线、64线,甚至128线。线束越多,垂直分辨率越高,点云越密。

扫描方式主要有两种:

扫描方式 原理 典型产品 优缺点
机械旋转式 整个激光收发模块绕垂直轴旋转 Velodyne HDL-64 结构简单,360°覆盖;但机械磨损大,寿命有限
MEMS微振镜式 用微振镜反射激光束实现扫描 Livox Horizon 体积小,固态化;但视场角受限

我最早接触的是机械旋转式雷达。记得有一次调试64线雷达,发现点云里总有一条「空洞带」。查了两天才找到原因——某个激光器的驱动电路虚焊了,导致那束激光根本没发射出去。这种问题在产线上特别容易漏检。

多线束的扫描机制,核心在于时序控制。每束激光的发射时刻、接收窗口、数据采集,都必须精确同步。我给大家看一个简化的时序伪代码:

for each 水平角度 θ in [0°, 360°):
    for each 线束 i in [1, 16]:
        发射激光(i, θ)
        启动计时器
        等待接收回波
        记录飞行时间 t(i, θ)
        计算距离 d(i, θ)
        存储点云 (θ, φ_i, d(i, θ))
    旋转到下一个角度 θ+Δθ

这里φ_i是第i束激光的固定垂直角度。实际产品中,这个循环是在硬件层面用FPGA实现的,速度极快。一个16线雷达,每秒能生成30万个点以上。

注意:多线束雷达有一个常见坑——串扰。相邻线束的激光如果发射时间太近,接收端可能误判回波来自哪束激光。我曾经遇到过一台雷达,在强阳光下串扰率飙升到5%,点云里全是鬼影。解决方案是给每束激光分配不同的发射时序,或者用编码脉冲区分。

2.4 点云生成的完整流程

把上面三部分串起来,点云生成的完整流程就是:

  1. 发射:驱动电路产生窄脉冲,激光器发射激光束
  2. 扫描:通过机械旋转或MEMS振镜,改变激光束的方向
  3. 接收:APD检测回波信号,放大并整形
  4. 测距:TDC或ADC计算飞行时间,换算成距离
  5. 编码:结合当前角度信息,生成三维坐标点 (x, y, z)
  6. 输出:所有点打包成点云帧,通过以太网或USB发送出去

每一步都有坑。我建议刚入行的朋友,先拿一款成熟的雷达产品(比如Velodyne VLP-16)做实验,用ROS驱动它,看看原始数据长什么样。然后再尝试自己写一个简单的点云生成程序。只有亲手调过,才能真正理解这些原理。

嗯,点云生成这块就先聊到这儿。下一节咱们讲点云预处理,包括去噪、滤波、下采样这些实操内容。到时候我会拿实际数据给大家演示。