FA_建图和定位(ML)-超宽带(UWB)定位

FA:formulas and algorithm,ML:mapping and localization,UWB:Ultra-Wideband

一、超宽带定位(UWB)

超宽带(Ultra-Wideband, UWB) 是一种无线通信技术 ,其信号带宽超过 500 MHz 或相对带宽大于 20% 。由于其极短脉冲(纳秒级)和高时间分辨率,UWB 被广泛用于高精度室内定位(厘米级)。

复制代码
✅ 典型精度:10~30 cm
✅ 典型距离:10~50 米(视环境而定)

二、UWB 定位核心原理

UWB 定位基于 飞行时间(Time of Flight, ToF)到达时间差(Time Difference of Arrival, TDoA) 测量信号传播时间,再通过光速计算距离。

基本公式

d=c⋅td=c⋅td=c⋅t

  • ddd :距离(米)

  • ccc :光速(≈ 3×108 m/s3×108m/s )

  • ttt :信号飞行时间(秒)

    💡 例如:若 t=1 nst=1ns ,则 d=0.3 md=0.3m

三、UWB 定位的两种主流模式

模式 英文 原理 设备要求 适用场景
双边测距(Two-Way Ranging, TWR) TWR 主动标签与基站双向通信测距 标签需有 UWB 芯片 人员/资产追踪
到达时间差(Time Difference of Arrival) TDoA 多个基站同步接收信号,计算时间差 基站需严格时间同步 固定区域监控
复制代码
✅ TWR 更常用(无需基站同步),本文以 TWR 模式 + 三边定位 为例。

四、系统组成

  1. UWB 锚点(Anchors):固定位置的基站(≥3 个)

  2. UWB 标签(Tag):待定位的移动设备

  3. 中央处理器:运行定位算法(如 PC、嵌入式设备)

    📌 锚点坐标需已知(通过标定获得)

五、定位流程(以 TWR + 三边定位为例)

步骤 1:测距

  • 标签与每个锚点进行 TWR 通信,得到距离 d1,d2,d3,...d_1,d_2,d_3,...d1,d2,d3,...

步骤 2:三边定位(Trilateration)

  • 已知锚点坐标 (xi,yi)(xi,yi)
  • 已知到标签的距离 didi
  • 求解标签位置 (x,y)(x,y)

步骤 3:解算位置(非线性方程组 → 线性化求解)

六、数学推导:三边定位算法

设:

  • 锚点 ii 坐标: (xi,yi)(x_i,y_i)(xi,yi)
  • 标签真实位置: (x,y)(x,y)(x,y)
  • 测量距离: did_idi

理想情况下:
(x−xi)2+(y−yi)2=di2(i=1,2,3,... )(x−x_i)^2+(y−y_i)^2=d_i^2(i=1,2,3,... )(x−xi)2+(y−yi)2=di2(i=1,2,3,... )

线性化方法(最小二乘法)

将第 1 个方程作为基准,与其他方程相减:
(x−xi)2+(y−yi)2−[(x−x1)2+(y−y1)2]=di2−d12(x−x_i)^2+(y−y_i)^2−[(x−x_1)^2+(y−y_1)^2]=d_i^2−d_1^2(x−xi)2+(y−yi)2−[(x−x1)2+(y−y1)2]=di2−d12

展开并整理得:
2(x1−xi)x+2(y1−yi)y=di2−d12−xi2+x12−yi2+y122(x_1−x_i)x+2(y_1−y_i)y=d_i^2−d_1^2−x_i^2+x_1^2−y_i^2+y_1^22(x1−xi)x+2(y1−yi)y=di2−d12−xi2+x12−yi2+y12

写成矩阵形式:
Ap=bAp=bAp=b

其中:

  • p=[x,y]Tp=[x,y]^Tp=[x,y]T
  • A∈R(n−1)×2A∈R^{(n−1)×2}A∈R(n−1)×2
  • b∈R(n−1)b∈R^{(n−1)}b∈R(n−1)

解为:
p=(ATA)−1ATbp=(A^TA)^{−1}A^Tbp=(ATA)−1ATb

复制代码
当 n≥3n≥3 时,可用最小二乘法求最优解。

七、Python 代码实现

以下是一个完整的 UWB 三边定位模拟器,包含噪声处理和可视化。

bash 复制代码
import numpy as np
import matplotlib.pyplot as plt

def trilaterate(anchor_pos, distances):
    """
    使用最小二乘法进行三边定位
    :param anchor_pos: np.array, shape=(N, 2), 锚点坐标 [[x1,y1], [x2,y2], ...]
    :param distances: np.array, shape=(N,), 到标签的测量距离 [d1, d2, ...]
    :return: (x, y) 估计位置
    """
    N = len(anchor_pos)
    if N < 3:
        raise ValueError("至少需要3个锚点")
    
    # 构建 A 和 b
    A = []
    b = []
    x1, y1 = anchor_pos[0]
    d1 = distances[0]
    
    for i in range(1, N):
        xi, yi = anchor_pos[i]
        di = distances[i]
        A.append([2 * (x1 - xi), 2 * (y1 - yi)])
        b_val = di**2 - d1**2 - xi**2 + x1**2 - yi**2 + y1**2
        b.append(b_val)
    
    A = np.array(A)
    b = np.array(b)
    
    # 最小二乘解: p = (A^T A)^{-1} A^T b
    try:
        p = np.linalg.inv(A.T @ A) @ A.T @ b
        return p[0], p[1]
    except np.linalg.LinAlgError:
        # 矩阵奇异,返回平均值
        return np.mean(anchor_pos[:, 0]), np.mean(anchor_pos[:, 1])

# ==================== 模拟场景 ====================
if __name__ == "__main__":
    # 真实标签位置
    true_pos = np.array([5.0, 6.0])
    
    # 锚点位置(4个)
    anchors = np.array([
        [0.0, 0.0],
        [10.0, 0.0],
        [10.0, 10.0],
        [0.0, 10.0]
    ])
    
    # 计算真实距离
    true_distances = np.linalg.norm(anchors - true_pos, axis=1)
    
    # 添加测量噪声(标准差 0.1m)
    np.random.seed(42)
    noise = np.random.normal(0, 0.1, size=true_distances.shape)
    measured_distances = true_distances + noise
    
    # 定位
    est_x, est_y = trilaterate(anchors, measured_distances)
    estimated_pos = np.array([est_x, est_y])
    
    # 计算误差
    error = np.linalg.norm(estimated_pos - true_pos)
    
    # 可视化
    plt.figure(figsize=(8, 8))
    plt.plot(anchors[:, 0], anchors[:, 1], 'ro', markersize=10, label='Anchors')
    plt.plot(true_pos[0], true_pos[1], 'g*', markersize=15, label=f'True Pos ({true_pos[0]:.1f}, {true_pos[1]:.1f})')
    plt.plot(est_x, est_y, 'bx', markersize=12, label=f'Estimated ({est_x:.1f}, {est_y:.1f})')
    
    # 绘制距离圆(可选)
    for i in range(len(anchors)):
        circle = plt.Circle(anchors[i], measured_distances[i], color='gray', fill=False, linestyle='--', alpha=0.5)
        plt.gca().add_patch(circle)
    
    plt.grid(True)
    plt.axis('equal')
    plt.xlabel('X (m)')
    plt.ylabel('Y (m)')
    plt.title(f'UWB Trilateration (Error: {error:.2f} m)')
    plt.legend()
    plt.show()
    
    print(f"真实位置: ({true_pos[0]:.2f}, {true_pos[1]:.2f})")
    print(f"估计位置: ({est_x:.2f}, {est_y:.2f})")
    print(f"定位误差: {error:.2f} 米")

八、运行结果说明

  • 红色圆圈:UWB 锚点
  • 绿色星号:真实标签位置
  • 蓝色叉号:估计位置
  • 虚线圆:以锚点为中心、测量距离为半径的圆(理论上应交于一点)
  • 输出:显示定位误差(通常 < 0.2m,取决于噪声)

九、实际硬件对接(以 Decawave/DW1000 为例)

在真实系统中,你需要:

  • UWB 模块:如 Decawave DW1000、NXP NCJ29D5
  • 微控制器:STM32、ESP32 等读取距离数据
  • 通信接口:通过 UART/USB 将距离数据发送到 PC
  • Python 接收数据
bash 复制代码
import serial

ser = serial.Serial('/dev/ttyUSB0', 115200)  # Linux
# ser = serial.Serial('COM3', 115200)       # Windows

while True:
    line = ser.readline().decode().strip()
    # 假设格式: "d1,d2,d3,d4"
    distances = list(map(float, line.split(',')))
    x, y = trilaterate(anchors, distances)
    print(f"Position: ({x:.2f}, {y:.2f})")

十、UWB 定位的优缺点

优点

优势 说明
高精度 厘米级(10~30 cm)
抗多径 超短脉冲可分辨直达路径
低功耗 间歇发射,适合电池设备
安全性高 低功率、难被探测

缺点:

局限 说明
成本较高 UWB 芯片比蓝牙贵
视距要求 非视距(NLOS)会引入误差
部署复杂 需安装多个锚点并标定位置
覆盖范围有限 通常 < 50 米

十一、典型应用场景

  • 工业仓储:AGV 小车定位
  • 智能工厂:工具/人员追踪
  • 体育训练:运动员轨迹分析
  • AR/VR:室内空间定位
  • 汽车:无钥匙进入、自动泊车辅助

十二、市场上UWB的品牌和型号

截至 2026 年 ,UWB(超宽带)技术已广泛应用于高精度室内定位、无感车钥匙、智能终端互联、工业物联网等领域。市场上的 UWB 产品主要分为三大类:

  1. UWB 芯片原厂(提供底层芯片)
  2. UWB 模组/模块厂商(集成芯片+天线+固件)
  3. UWB 定位系统解决方案商(提供端到端软硬件)

下面从这三类出发,系统梳理主流品牌、代表型号、技术特点与适用场景,并进行横向对比

(1)、UWB 芯片原厂(核心底层)

品牌 国家 代表芯片型号 特点 应用领域
NXP(恩智浦) 荷兰 NCJ29D5, NCJ29D6 - 支持 FiRa 认证;- 集成 Secure Element;- 低功耗、高抗干扰 汽车数字钥匙(宝马、大众)、手机(三星 Galaxy)
Qorvo 美国 DW3000 系列(DW3110, DW3120) - 前身 Decawave(UWB 先驱);- 高精度 ToF(±2 cm);- 开源驱动生态好 工业定位、机器人、消费电子
Apple 美国 U1 / U2 - 自研芯片;- 深度集成 iOS 生态;- 仅用于 Apple 设备 iPhone、AirTag、HomePod、Vision Pro
Qualcomm(高通) 美国 QCC5181, QCM6490(SoC) - 三合一芯片(BT + Wi-Fi + UWB);- 主打手机/耳机生态 小米、OPPO、三星中高端机型
Samsung 韩国 自研(未公开型号) - 与 NXP 合作初期,逐步自研;- 用于 Galaxy S/Z 系列 手机、SmartTag+
华为海思 中国 Hi110x 系列(未完全公开) - 国产替代方案;- 支持星闪 SLB(部分对标 UWB);- 用于 Mate 60/70 系列 手机、汽车(鸿蒙生态)

芯片选型建议:

  • 工业/高精度:Qorvo DW3000
  • 汽车安全:NXP NCJ29D5
  • 手机集成:Qualcomm / Apple / Samsung

(2)、UWB 模组/模块厂商(中间层)

这些厂商基于上述芯片开发即插即用模组,适合快速集成。

品牌 国家 代表模组 基于芯片 特点
Acconeer 瑞典 XM122 Qorvo DW3110 超小尺寸(10×10 mm),低功耗,适合可穿戴
Inplay Technologies 美国 IPW2200 自研 + Qorvo 支持 TWR/TDoA,内置 RTOS
成都精位科技 中国 JUW-100 系列 Qorvo DW3000 国产化,支持煤矿 MA 认证
上海飞远光电(fyuwb) 中国 FY-UWB-M1 Qorvo/NXP 工业级,IP67,支持 10 cm 定位
四相科技 中国 M2/M3 系列 Qorvo 自研算法,支持 UWB+蓝牙 AOA 融合
联睿电子 中国 LR-UWB-200 自研芯片(LR100) "芯片+方案"双轮驱动,性价比高
复制代码
💡 注:国内模组多采用 Qorvo DW3000,因 NXP 芯片对工业客户开放较晚。

(3)、UWB 定位系统解决方案商(应用层)

提供从锚点、标签到软件平台的完整系统。

品牌 国家 核心能力 典型行业 优势
四相科技 中国 全栈自研(芯片→算法→平台) 矿山、制造、司法 - 拥有煤矿 MA/KA 认证;- 落地超 3500 项目;- 支持 UWB+蓝牙融合
上海飞远光电(fyuwb) 中国 自主 UWB 定位引擎 工业、化工、监狱 - 10~30 cm 精度;- 高抗金属/多径干扰
清研讯科 中国 清华背景,算法强 汽车制造、仓储 - 抗复杂电磁环境;- 与 MES/WMS 深度集成
联睿电子 中国 自研 UWB 芯片 司法、养老、机器人 - 成本低;- 提供 SDK 二次开发
Pozyx 比利时 开源生态好 教育、无人机、AR - 支持 ROS;- Python/C++ SDK 完善
Ubisense(已被 Zebra 收购) 英国 7D 精准定位 航空制造、军工 - 亚米级 3D 定位;- 高可靠性(但价格昂贵)

(4)、主流 UWB 模块参数对比(典型型号)

表格

型号 芯片 测距精度 定位精度 功耗(Tx) 通信距离 接口 价格(参考)
DW3110 模组(Qorvo) DW3110 ±2 cm 10~30 cm 120 mA 50 m(LOS) SPI/UART $8~12
NCJ29D5 模组(NXP) NCJ29D5 ±5 cm 20~50 cm 90 mA 30 m SPI $10~15
JUW-100(精位) DW3000 ±3 cm 10~20 cm 110 mA 40 m UART ¥60~80
FY-UWB-M1(飞远) DW3110 ±2.5 cm 10~30 cm 100 mA 50 m UART/Ethernet ¥70~90
M3 Tag(四相) DW3120 ±2 cm 10 cm 80 mA(低功耗模式) 60 m BLE + UWB ¥100+
复制代码
📌 注:LOS = Line of Sight(视距),NLOS 下精度下降 30%~100%

(5)、按应用场景推荐品牌

表格

场景 推荐品牌 理由
工业安全生产(矿山、化工) 四相科技、飞远光电 具备防爆认证(MA/KA),抗恶劣环境
智能制造/AGV 定位 清研讯科、四相科技 与 MES/PLC 集成能力强
司法监所人员管控 联睿电子、沃旭通讯 支持电子围栏、行为分析
消费电子/手机互联 Apple、Samsung、小米(用 Qualcomm) 生态闭环,体验优先
汽车无钥匙进入 NXP(Tier1 供应商:大陆、博世) 符合 CCC 车联盟标准
科研/教育/原型开发 Pozyx、Qorvo 官方开发板 开源 SDK,支持 Python/ROS

(6)、国产 vs 国际品牌对比

表格

维度 国际品牌(NXP/Qorvo) 国产品牌(四相/飞远/联睿)
芯片自主性 强(原厂) 弱(多用 Qorvo),联睿自研中
定位精度 相当(10~30 cm) 相当,部分场景优化更好
行业认证 全球认证齐全 国内认证强(如煤矿 MA)
价格 较高 低 20%~40%
本地服务 有限 快速响应,定制化强
生态整合 手机/汽车强 工业物联网强

(7)、未来趋势(2026+)

  • 手机普及加速:小米、OPPO、vivo 将在 2026 年全面导入 UWB
  • 汽车标配:比亚迪、蔚来、极氪等将 UWB 作为数字车钥匙标准
  • 国产芯片突破:华为海思、联睿、北纬科技等加速自研
  • 多技术融合:UWB + Bluetooth AoA + IMU 融合定位成主流
  • FiRa 联盟主导标准化:互操作性提升,打破生态壁垒

十三、结束语

项目 内容
技术基础 ToF / TWR 测距 + 三边定位
核心算法 最小二乘法解非线性方程
精度 10~30 cm(视环境)
关键挑战 NLOS 误差、锚点标定
工程建议 结合 IMU 融合(如 Kalman Filter)提升鲁棒性
复制代码
一句话总结: 
UWB 定位是"用无线电波的飞行时间算距离,再用几何交汇算位置------这就是 UWB 的厘米级魔法"。 
测距精度通常2cm,定位精度20cm。
精度要求越高,穿透能力越弱,基站要求越密集。
相关推荐
Navigator_Z1 小时前
LeetCode //C - 964. Least Operators to Express Number
c语言·算法·leetcode
罗政1 小时前
AI批量识别社保卡信息实战:一键提取姓名、卡号、银行账号到Excel
人工智能
郝学胜-神的一滴1 小时前
Effective Modern C++ 条款40:深入理解 Atomic 与 Volatile 的多线程语义
开发语言·c++·学习·算法·设计模式·架构
摸鱼仙人~1 小时前
算法题避坑指南:数组/循环范围的 `+1` 到底什么时候加?
算法
liliangcsdn2 小时前
基于似然比的显著图可解释性方法的探索
人工智能·算法·机器学习
正宗咸豆花2 小时前
Gemini 3.1 Pro架构深度解析与AGI能力评测
人工智能·架构·agi
向上的车轮2 小时前
VLA模型如何理解“我渴了”这类指令?
机器人
骇城迷影2 小时前
代码随想录:二叉树篇(中)
数据结构·c++·算法·leetcode
systeminof2 小时前
OpenClaw极速进化:20天迭代10余次,接入Gemini 3.1与Apple Watch
人工智能·chatgpt·ai编程