第三章 室内定位技术详解

各位同学,今天我们来聊聊室内定位。说实话,GPS在室内基本就是个摆设——信号被楼板一挡,定位精度直接掉到几十米开外。那室内怎么办?我这些年折腾过的方案不少,今天把最核心的四种技术掰开揉碎了讲。

核心观点:没有一种室内定位技术是万能的。UWB精度高但部署贵,IMU不依赖外部信号但会漂移,视觉SLAM信息丰富但怕光照变化。真正靠谱的方案,一定是多源融合。

3.1 UWB超宽带定位

UWB,全称Ultra-Wideband。说白了就是发射极窄的脉冲信号,带宽通常在500MHz以上。为什么它能做到厘米级定位?因为信号时间分辨率高,多径效应影响小。

我在2019年做过一个工厂AGV导航项目,当时对比了蓝牙和UWB。蓝牙在空旷环境还能凑合,一进金属货架区,信号反射得一塌糊涂。换成UWB之后,定位误差从3米降到了20厘米以内。

UWB的定位原理

主要有三种方式:

  • TOF(飞行时间法):测量信号从标签到基站的单向时间,乘以光速得到距离。需要基站和标签时钟严格同步。
  • TDOA(到达时间差):标签发信号,多个基站接收,通过时间差解算位置。不需要标签和基站同步,但基站之间要同步。
  • AOA(到达角度法):通过天线阵列测量信号到达角度。精度不如前两种,但基站数量可以少一些。

我的经验:实际项目中TDOA用得最多。因为标签端不需要高精度时钟,成本低、功耗小。但注意——基站之间的时钟同步是最大的坑。我曾经用有线同步方案,布线成本比设备本身还高。后来改用无线同步,精度损失了大概5厘米,但部署成本降了60%。

UWB的优缺点

优势 劣势
精度高,可达10-30厘米 基站部署成本高,每100平米约需4-6个基站
抗多径干扰能力强 金属环境仍有反射问题
功耗低,纽扣电池可用数月 穿透性一般,隔墙信号衰减严重
数据安全性高 手机端支持有限(iPhone 11后才普及)

3.2 惯性导航(IMU)

IMU,就是加速度计+陀螺仪的组合。它不依赖任何外部信号,完全靠自己推算位置。你想想看,这在地下停车场、隧道这些没信号的地方,简直是救命稻草。

但IMU有个致命问题——误差会累积。我管这叫「越走越偏」。你走10米可能误差才几厘米,走100米误差就半米了,走1公里...嗯,可能已经偏到隔壁街区了。

IMU定位的核心流程

// 简化的IMU位置更新伪代码
// 实际项目中会用四元数或旋转矩阵,这里用欧拉角示意
void updatePosition(float ax, float ay, float az, 
                    float gx, float gy, float gz, float dt) {
    // 1. 姿态更新:用陀螺仪积分得到角度
    roll += gx * dt;
    pitch += gy * dt;
    yaw += gz * dt;
    
    // 2. 去除重力分量,得到世界坐标系下的加速度
    float accWorldX = ax * cos(pitch) + ay * sin(roll)*sin(pitch) + az * cos(roll)*sin(pitch);
    // ... 实际计算更复杂,这里简化
    
    // 3. 速度积分
    vx += accWorldX * dt;
    
    // 4. 位置积分
    px += vx * dt + 0.5 * accWorldX * dt * dt;
}

避坑指南:我曾经在一个机器人项目里只用IMU做定位,跑了5分钟就偏了2米。后来发现是加速度计的零偏没校准。记住——IMU必须定期校准,尤其是温度变化大的场景。零偏会随温度漂移,我见过最夸张的案例,从25度升到40度,零偏变了3倍。

IMU的误差来源

  • 零偏(Bias):静止时输出不为0,需要标定补偿
  • 噪声(Noise):白噪声和随机游走,无法完全消除
  • 尺度因子误差:输出值与真实值的比例偏差
  • 交轴耦合:三个轴之间的相互干扰

3.3 视觉SLAM定位

视觉SLAM,就是让摄像头像人眼一样看周围环境,同时完成两件事:一是知道自己在哪里(定位),二是知道周围长什么样(建图)。

为什么视觉SLAM这几年这么火?因为摄像头便宜啊!一个工业相机才几百块,比UWB基站便宜多了。而且视觉信息丰富,能识别路标、二维码、甚至行人。

视觉SLAM的两种流派

特征点法 直接法
提取ORB、SIFT等特征点 直接使用像素灰度值
精度高,对光照变化鲁棒 计算快,适合纹理丰富场景
特征提取耗时,弱纹理场景失效 光照变化大时容易失败
代表:ORB-SLAM3 代表:LSD-SLAM、DSO

我个人习惯用特征点法。为什么?因为室内环境其实挺复杂的——白墙、玻璃、地毯,这些纹理稀疏的地方直接法很容易崩。特征点法虽然慢一点,但稳定。

一个小技巧:在弱纹理场景,可以主动投射红外点阵。我在一个地下车库项目里就是这么干的——摄像头加一个红外补光灯,墙上贴一些反光贴纸。效果立竿见影,特征点数量从几十个涨到上千个。

3.4 多源融合定位

好了,前面三种技术各有各的毛病。UWB精度高但覆盖有限,IMU不依赖外部但会漂移,视觉SLAM信息丰富但怕光照。那怎么办?融合呗。

多源融合,说白了就是「取长补短」。用UWB修正IMU的漂移,用视觉SLAM提供环境语义信息,用IMU填补UWB信号盲区。这就像你开车——GPS告诉你大概位置,里程计告诉你走了多远,地图告诉你前面有没有路口。

融合架构

我画了一张图,展示多源融合的核心逻辑:

多源融合定位系统架构 UWB基站 10-30cm精度 IMU惯性导航 短时高精度 视觉SLAM 环境语义信息 数据预处理:时间戳对齐、异常值剔除、坐标系统一 融合算法(扩展卡尔曼滤波 / 因子图优化) 状态预测 + 观测更新 + 置信度加权 最终定位结果(x, y, yaw, 置信度)

融合算法选型

实际项目中,最常用的融合算法有两种:

  1. 扩展卡尔曼滤波(EKF):轻量级,适合嵌入式平台。但线性化误差在强非线性场景下会累积。
  2. 因子图优化:精度高,适合离线处理或算力充足的场景。我最近的项目都在用这个。

我的建议:如果算力有限(比如STM32这类MCU),用EKF就够了。如果跑在树莓派或Jetson上,果断上因子图。我在一个仓储机器人项目里,从EKF换成因子图后,定位精度从50厘米提升到了15厘米。

融合中的关键问题

  • 时间同步:不同传感器的时间戳必须对齐。我见过最离谱的bug——UWB和IMU的时间差了200毫秒,融合结果直接发散。
  • 坐标系统一:UWB用的是全局坐标系,IMU用的是机体坐标系,视觉SLAM用的是相机坐标系。不统一的话,融合就是灾难。
  • 置信度管理:每个传感器都有失效的时候。UWB被遮挡了怎么办?IMU在剧烈运动时饱和了怎么办?需要动态调整各传感器的权重。

避坑指南:我曾经在一个商场导航项目里,UWB信号被金属货架遮挡,定位直接跳了5米。当时融合算法没做异常检测,结果IMU也被带偏了。后来我加了一个「置信度门限」——如果某个传感器的观测值和预测值偏差超过3倍标准差,直接丢弃这次观测。效果立竿见影。

好了,室内定位技术就讲到这里。记住——没有银弹,只有合适的组合。下一章我们会讲地图构建,到时候再结合定位一起聊。


公众号:蓝海资料掘金营,微信deep3321