传感器基础:无人机感知世界的“五官”

各位同学,欢迎来到第二章。上一章我们聊了数据采集的整体框架,这一章咱们得把目光聚焦到最底层的硬件——传感器。

说白了,无人机能飞、能悬停、能避障,靠的就是这些传感器。它们就像人的五官,有的负责感知姿态,有的负责看路,有的负责测距。我做了这么多年无人机系统,见过太多因为传感器选型或配置不当而炸机的案例。嗯,咱们今天就把这些传感器的脾气秉性摸清楚。

核心观点:没有完美的传感器,只有合适的融合方案。每种传感器都有它的长处和短板,理解这些是做好数据采集的第一步。

无人机传感器体系结构图 飞行控制器 (FC) IMU (加速度计+陀螺仪) 磁力计 (电子罗盘) 气压计 GPS / RTK 激光雷达 (LiDAR) 视觉传感器 (相机) 超声波传感器 传感器数据融合原则 • 姿态组(红):高频更新,用于姿态控制,但存在漂移 • 定位组(绿):低频更新,提供绝对位置,用于修正漂移 • 环境组(紫):感知外部环境,用于避障与建图

2.1 惯性测量单元(IMU)——无人机的“前庭系统”

IMU 是无人机最核心的传感器,没有之一。它由加速度计和陀螺仪组成,有的还包含磁力计(那叫 AHRS,但咱们先不展开)。

加速度计测量的是比力,说白了就是物体受到的加速度(包括重力)。陀螺仪测量的是角速度,也就是旋转的快慢。

我个人习惯把 IMU 比作人的内耳前庭——你闭着眼睛也能感觉到自己在转、在加速,IMU 就是干这个的。但它有个致命问题:漂移。

避坑指南:我曾经在一个测绘项目里,只用 IMU 积分做位置估计,结果飞了 30 秒后位置误差就超过了 10 米。为什么?因为陀螺仪的零偏误差会随时间累积,加速度计积分两次得到位移,误差是指数级增长的。所以 IMU 必须配合其他传感器做融合。

IMU 的数据采集要点:

  • 采样率要高:通常 200Hz - 1kHz,太低的话控制环会发散。
  • 时间戳要准:IMU 数据是融合的基础,时间戳不准,后面所有算法都白搭。
  • 温漂补偿:温度变化会影响 IMU 的零偏,好的系统会做温度校准。

2.2 GPS / RTK 定位——无人机的“北斗导航”

GPS 大家都熟悉,但无人机上用的 GPS 和手机上的不太一样。我们关心的是:定位精度、更新频率、搜星数量。

普通 GPS 精度在 2-5 米,对于航拍够了,但对于测绘、植保、精准降落,完全不够。这时候就要上 RTK(实时动态差分定位)。

RTK 的原理其实不复杂:地面放一个基准站,天上无人机当流动站,两者同时接收卫星信号,基准站把差分修正量发给无人机,精度就能到厘米级。

参数 普通 GPS RTK GPS
水平精度 2-5 米 1-3 厘米
垂直精度 4-8 米 3-5 厘米
更新频率 5-10 Hz 10-20 Hz
成本 低 高(需基准站)
适用场景 航拍、娱乐 测绘、精准农业

经验之谈:RTK 虽然精度高,但有个大坑——初始化时间。我遇到过在树下开机,RTK 固定解死活出不来,等了 5 分钟才收敛。所以做测绘任务时,一定要提前到开阔地带完成 RTK 初始化。

GPS 数据采集要注意:

  • 数据格式通常是 NMEA 0183 协议,或者更高效的 u-blox 二进制协议。
  • 一定要解析 定位质量指示(比如 RTK 的 fix 状态),不要盲目相信坐标值。
  • GPS 更新频率低(5-20Hz),不能直接用于姿态控制,只能用来修正 IMU 的长期漂移。

2.3 气压计——无人机的“高度尺”

气压计通过测量大气压强来推算高度。原理很简单:海拔越高,气压越低。但实际用起来,问题不少。

你想想看,无人机在悬停时,螺旋桨下洗气流会直接冲击气压计,导致读数剧烈跳动。我见过新手把气压计装在机腹正下方,结果高度数据像心电图一样上下乱窜。

正确的做法:

  • 气压计要装在封闭的泡棉腔体内,隔绝气流扰动。
  • PCB 上要开小孔,保证内外气压平衡,但不能直通风。
  • 软件上要做低通滤波,截止频率通常设在 2-5 Hz。

避坑指南:我曾经在高原地区(海拔 4000 米以上)飞无人机,气压计直接失效了。为什么?因为气压-高度换算公式是基于标准大气模型的,高原地区气压变化率不同,误差能到几十米。所以高海拔飞行,建议用 RTK 或激光测距来辅助定高。

2.4 磁力计——无人机的“电子罗盘”

磁力计测量的是地球磁场方向,用来确定无人机的航向(偏航角)。但说实话,磁力计是无人机上最“娇气”的传感器。

为什么?因为电磁干扰太严重了。电机、电调、电源线、甚至 PCB 上的大电流走线,都会产生磁场,把磁力计读数带偏。

我建议:

  • 磁力计要尽量远离电机和电源线,至少保持 10cm 以上距离。
  • 装机后必须做硬铁和软铁校准,消除机载磁场的影响。
  • 校准方法:让无人机绕各个轴缓慢旋转 360 度,采集数据拟合椭球。

磁力计的数据采集频率通常在 50-100Hz,但它的响应比较慢,而且容易受高频噪声干扰。所以融合时,一般只用来修正 IMU 的偏航角漂移,不会直接用于控制。

2.5 超声波传感器——近距测距的“老实人”

超声波传感器通过发射声波并测量回波时间来计算距离。它的优点是:便宜、可靠、不受光照影响。

但缺点也很明显:

  • 测量范围有限:通常 0.1 - 10 米,再远就衰减得厉害。
  • 波束角宽:声波会扩散,容易打到旁边的物体,造成误测。
  • 受温度和湿度影响:声速会随温度变化,需要补偿。
  • 不能测透明物体:比如玻璃、水面,声波直接穿透了。

超声波在无人机上最常见的用途是近地定高和辅助降落。比如无人机降落时,GPS 高度误差太大,用超声波测距能精确到厘米级,保证平稳触地。

经验之谈:超声波传感器有个“盲区”——发射后的一小段时间内,接收器还在震荡,无法接收回波。所以最近测量距离通常有 10-20cm 的死区。做降落逻辑时,要考虑到这一点,别等到 10cm 才切换控制模式。

2.6 激光雷达(LiDAR)——无人机的“3D 扫描仪”

LiDAR 是近年来无人机感知领域的大热门。它通过发射激光脉冲并测量飞行时间(ToF)来计算距离,精度高、速度快、抗干扰能力强。

LiDAR 主要分两类:

  • 单线 LiDAR:只扫描一个平面,用于避障或地形跟随。
  • 多线 LiDAR:扫描多个平面,生成 3D 点云,用于建图和导航。

LiDAR 的数据量非常大。一个 16 线 LiDAR,每秒能产生 30 万个点。怎么处理这些数据?

// 伪代码:LiDAR 点云数据采集流程
while (lidar_connected) {
    // 1. 读取原始数据包(通常通过 UDP 或串口)
    raw_packet = lidar.readPacket();
    
    // 2. 解析数据包,提取距离、角度、强度
    for (i = 0; i < packet.points; i++) {
        point.x = distance * cos(angle);
        point.y = distance * sin(angle);
        point.z = 0;  // 单线 LiDAR 通常假设在同一平面
        point.intensity = raw_intensity;
        
        // 3. 时间戳标记(非常重要!)
        point.timestamp = get_system_time_us();
        
        // 4. 存入环形缓冲区,供后续算法使用
        point_buffer.push(point);
    }
    
    // 5. 检查缓冲区是否溢出
    if (point_buffer.isFull()) {
        // 丢弃最旧的数据,或者触发处理线程
        point_buffer.popOldest();
    }
}

避坑指南:LiDAR 最怕什么?太阳光干扰。强太阳光中的红外成分会淹没激光信号,导致测距失败。我曾在正午的沙漠里飞 LiDAR 无人机,测距距离直接从 100 米掉到 20 米。所以户外作业,尽量避开正午强光,或者选用抗阳光能力更强的 LiDAR 型号。

2.7 视觉传感器——无人机的“眼睛”

视觉传感器(相机)是无人机感知环境最直观的方式。它不直接测距,但通过图像处理,可以提取出丰富的环境信息。

视觉传感器的数据采集要点:

  • 帧率:视觉里程计(VO)通常需要 20-60 FPS,太低的话运动估计会失败。
  • 曝光控制:无人机飞行时光照变化剧烈,需要自动曝光或全局快门。
  • 同步触发:如果要用视觉和 IMU 做融合(VIO),必须保证图像和 IMU 数据的时间戳对齐。

视觉传感器的两大主流应用:

  • 视觉里程计(VO):通过跟踪图像特征点,估算相机的运动轨迹。
  • 视觉 SLAM:在未知环境中同时定位和建图。

我个人觉得,视觉传感器最大的优势是信息丰富——你能看到纹理、颜色、形状,这是 LiDAR 做不到的。但它的短板也很明显:对光照敏感、计算量大、在弱纹理环境(比如白墙、水面)容易失效。