第三章 室内定位技术详解
各位同学,今天我们来聊聊室内定位。说实话,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告诉你大概位置,里程计告诉你走了多远,地图告诉你前面有没有路口。
融合架构
我画了一张图,展示多源融合的核心逻辑:
融合算法选型
实际项目中,最常用的融合算法有两种:
- 扩展卡尔曼滤波(EKF):轻量级,适合嵌入式平台。但线性化误差在强非线性场景下会累积。
- 因子图优化:精度高,适合离线处理或算力充足的场景。我最近的项目都在用这个。
我的建议:如果算力有限(比如STM32这类MCU),用EKF就够了。如果跑在树莓派或Jetson上,果断上因子图。我在一个仓储机器人项目里,从EKF换成因子图后,定位精度从50厘米提升到了15厘米。
融合中的关键问题
- 时间同步:不同传感器的时间戳必须对齐。我见过最离谱的bug——UWB和IMU的时间差了200毫秒,融合结果直接发散。
- 坐标系统一:UWB用的是全局坐标系,IMU用的是机体坐标系,视觉SLAM用的是相机坐标系。不统一的话,融合就是灾难。
- 置信度管理:每个传感器都有失效的时候。UWB被遮挡了怎么办?IMU在剧烈运动时饱和了怎么办?需要动态调整各传感器的权重。
避坑指南:我曾经在一个商场导航项目里,UWB信号被金属货架遮挡,定位直接跳了5米。当时融合算法没做异常检测,结果IMU也被带偏了。后来我加了一个「置信度门限」——如果某个传感器的观测值和预测值偏差超过3倍标准差,直接丢弃这次观测。效果立竿见影。
好了,室内定位技术就讲到这里。记住——没有银弹,只有合适的组合。下一章我们会讲地图构建,到时候再结合定位一起聊。
公众号:蓝海资料掘金营,微信deep3321