从坐标到测距:蓝牙定位方案工程拆解(AoA RTLS / RSSI / Channel Sounding)
先说结论,避免后面绕:
- 要地图上的点 → 室内 AoA RTLS(标签 + 阵列网关 + 引擎 + 平台)。
- 要离车还有几米 → 车端 BLE 模组 + BCM。5.x 用 RSSI 标定;6.0 用 Channel Sounding(手机也得支持)。
- 这两条链路的天线、电源、认证都不同。蓝牙定位方案不要写成一颗 UART 模组“精度 0.3 m 全包”。
下文按工程笔记来写:数据流、事件、最小验证、踩坑。产品型号只当对照,不是广告页。
1. 需求先翻译成输出类型数字钥匙测距架构
项目里最常见的一句话是「做个蓝牙定位」。落到实现,蓝牙定位方案的输出只有两种:
| 输出 | 典型 API / 事件 | 你实际在维护什么 |
|---|---|---|
x, y, floorId, ts |
轨迹、围栏、找设备 | 网关点位、引擎、标签电量 |
distanceBand / rssi / csMeters |
迎宾、解锁、闭锁 | 天线、休眠、钥匙协议 |
if (needMapCoordinate) {
deploy AoA RTLS; // 医院 / 仓储
} else if (needUnlockDistance) {
deploy BLE key module; // PEPS / 数字钥匙
} else {
// LE Audio / CarPlay 不是定位问题
}
AoA 测的是到达角,引擎再解平面坐标;Channel Sounding 测的是两点距离(PBR + RTT)。把 CS 模组吊在天花板上当基站,或者把吸顶网关当数字钥匙天线,都属于类型用错。
室内完整业务背景可以看医院 RTLS;钥匙 5.3 量产路径看车规数字钥匙;CS 原理看测距与 BLE 6.0。
2. 室内 RTLS:标签 → 网关 → 引擎 → 平台
2.1 逻辑架构
flowchart LR
T1[Tag BLE ADV/AoA] --> GW[AoA Gateway<br/>BLE 5.4 / PoE]
T2[Tag ...] --> GW
GW -->|Ethernet| ENG[Locate Engine]
ENG --> PL[RTLS Platform]
PL --> HIS[HIS / WMS / MES]
PL --> API[REST / WS]
网关要阵列天线和安装高度,标签要续航和形态,引擎要平面图标定。少任何一层,你拿到的都不是「定位」,只是 RSSI 列表。
覆盖初值(必须步测修正):
coverageRadius ≈ installHeight * 2 // K3 类网关文档经验值
2.2 上行数据长什么样
引擎推给平台的最小字段,建议先锁死,再谈 UI:
{
"tagId": "T-1024",
"floorId": "F2",
"x": 12.4,
"y": 3.1,
"accuracyM": 0.6,
"ts": 1774000000,
"batteryPct": 81
}
围栏不要在标签里做,在平台做:
{
"rule": "geofence.exit",
"zoneId": "ward-3",
"tagId": "T-1024",
"action": "alarm"
}
2.3 最小验证(两周能跑通)
AOA-K3 是 1 网关 + 6 标签的评估包,用来验证「找得到」,不是全院施工图。
建议顺序:
- 平面图 + 层高(吸顶 / 侧挂一次定死)
- PoE 通网关,引擎能看到 ADV
- 标定 4~6 个已知点,看
accuracyM - 再接业务 API,不要先写大屏
人员标签形态可参考 FSC-BP110;套件总览见 AoA Kit。
3. 数字钥匙:手机 → 模组 → UART 事件 → BCM
3.1 逻辑架构
sequenceDiagram
participant Phone
participant MOD as BLE Module
participant MCU as Host / BCM
Phone->>MOD: ADV / Connect / Auth
MOD->>MOD: RSSI or Channel Sounding
MOD->>MCU: UART event (band/distance)
MCU->>MCU: lock / welcome / start auth
模组负责无线和测距相关事件,开锁逻辑在 BCM。不要在射频固件里写死门锁。
距离带是策略,不是空旷通信距离:
FAR -> sleep / lock
MID -> welcome
NEAR -> unlock enable
INSIDE -> start auth
RSSI 方案里这些带靠标定;CS 方案里带可以更稳,但实验室厘米数不能直接写 SOP。规范演进见蓝牙 6.3 信道探测。
3.2 主机侧事件(示意)
下面是主机协议的示意,不是某颗模组的真实 AT 表。量产以规格书为准。
# 模组 -> MCU
EVT,NEAR,rssi=-52
EVT,CS,dist_cm=95,quality=ok
EVT,LEFT
# MCU -> 模组
CMD,SLEEP
CMD,OTA,...
3.3 两条量产路径(不要混成一颗料)
| 路径 | 适用 | 对照模组 | 先确认 |
|---|---|---|---|
| BLE 5.3 + RSSI | 手机生态仍是 5.x,先把无感进入跑通 | FSC-BT3721V(EFR32BG22,UART/SPI,-40~+85℃) | 静态电流、学习、多钥匙 |
| BLE 6.0 + CS | 要更稳距离带、规划抗中继 | FSC-BT2004TV(CC2745R10-Q1,芯片 AEC-Q100) | 手机是否支持 Channel Sounding |
钥匙权限、分享、CCC 互操作在系统层,见 FeasyKey,不是测距模组能单独交付的。UWB 属于另一条第三代钥匙路径,和 AoA / CS 不是升级关系,见二代与三代数字钥匙。
座舱音频不要并进这条 UART。LE Audio 走 IVI,见座舱 LE Audio。
4. 测试用例(比再贴一张精度表有用)
室内:
[RTLS-01] 已知点标定,误差记到日志,不改发射功率碰运气
[RTLS-02] 围栏出界,告警时延
[RTLS-03] 标签掉电 / 遮挡,平台状态是否可解释
车侧:
[KEY-01] 口袋接近,NEAR 是否稳定
[KEY-02] 隔墙 / 邻车,不应 UNLOCK
[KEY-03] 离车 LEFT -> 闭锁,休眠电流
[KEY-04] 有条件:中继转发,CS 路径是否比 RSSI 更难被骗
Demo 空旷距离 和 SOP 指标 分开存。蓝牙定位方案的验收应以用例通过率为准。
5. 踩坑
- 规格书把 AoA、CS、AEC-Q100、PoE 写在同一行。 蓝牙定位方案在这里被买成了三套系统。拆仓库:RTLS BOM / 钥匙 BOM。
- 用 RSSI 承诺亚米级全场轨迹。 RSSI 做钥匙分区可以;室内轨迹用 AoA。
- CS 只测了模组,没测手机。 对端不支持 CS,事件永远不会来。
- 网关点位按宣传覆盖半径一次铺完。 层高、金属货架、玻璃隔断会改方向图,必须步测。
- 把引擎算的
accuracyM当成芯片指标对外承诺。 那是标定结果,换层高就变。
厂区已有 AoA、车队还要无感进入时,只在平台同步状态(人已进车间 / 车已授权),射频仍两套。
6. 小结
蓝牙定位方案在代码和 BOM 上要分开维护:
- 室内:
tagId + (x,y),硬件是网关阵列,验证包可以用 K3。 - 车侧:
distanceBand,硬件是车规模组;5.3 走 BT3721V,6.0 CS 走 BT2004TV。 - 音频、UWB、云端钥匙生命周期各自有栈,不要塞进定位模组固件。
能跑通最小验证、用例能复现,再谈精度数字。数字是测出来的,不是从发射功率栏抄下来的。


