卫星信号无法穿透室内众多的遮挡物体,这时候就需要依赖短距离信号,本文就UWB、蓝牙BLE、wi-fi这三类常见的室内定位技术,从原理、优劣与应用场景展开论述。
一、常见的室内定位技术:UWB、蓝牙BLE、wi-fi的定位原理
1.UWB定位原理
发射纳秒级的极窄脉冲进行通信,因为其带宽具有极宽属性,能精准测量无线电波的飞行时间和到达时间差,从能实现30-50厘米的高精度定位。
简化的 UWB 定位仿真代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
# -------------------------- 1. 物理参数定义(贴合UWB原理)--------------------------
SPEED_OF_LIGHT = 299792458 # 光速(m/s),UWB无线电波传播速度接近光速
UWB_ERROR_RANGE = (0.3, 0.5) # UWB定位精度:±30~50cm
NUM_BASE_STATIONS = 3 # 定位所需最小基站数(三边测量法)
# -------------------------- 2. UWB基站类(模拟距离测量)--------------------------
class UWB_BaseStation:
def __init__(self, station_id, x, y, z=0):
self.station_id = station_id
self.coord = np.array([x, y, z], dtype=np.float64) # 基站三维坐标(默认z=0简化为二维)
def measure_distance(self, tag_coord):
"""
模拟UWB距离测量:基于飞行时间(TOF)计算真实距离,加入30-50cm随机误差
原理:距离 = 光速 × 飞行时间(此处直接计算真实距离,再叠加误差模拟TOF测量误差)
"""
# 计算基站与标签的真实直线距离
true_distance = np.linalg.norm(tag_coord - self.coord)
# 加入UWB精度范围内的随机误差(正态分布,均值0,标准差0.1m,确保误差主要落在30-50cm)
error = np.random.normal(loc=0, scale=0.1)
measured_distance = true_distance + error
# 确保误差不超出30-50cm范围
measured_distance = np.clip(measured_distance, true_distance - UWB_ERROR_RANGE[1], true_distance + UWB_ERROR_RANGE[1])
return measured_distance
# -------------------------- 3. UWB标签类(模拟待定位目标)--------------------------
class UWB_Tag:
def __init__(self, tag_id, x, y, z=0):
self.tag_id = tag_id
self.true_coord = np.array([x, y, z], dtype=np.float64) # 标签真实坐标
# -------------------------- 4. 定位解算器(三边测量法)--------------------------
def trilateration_2d(base_stations, measured_distances):
"""
二维三边测量法解算标签坐标
输入:3个基站对象列表、对应测量距离列表
输出:解算的标签坐标(x, y)
"""
# 提取3个基站的坐标(简化为二维:x, y)
A, B, C = base_stations
x1, y1 = A.coord[0], A.coord[1]
x2, y2 = B.coord[0], B.coord[1]
x3, y3 = C.coord[0], C.coord[1]
r1, r2, r3 = measured_distances
# 三边测量法公式推导(解线性方程组)
# 原理:(x-x1)²+(y-y1)² = r1²; (x-x2)²+(y-y2)² = r2²; (x-x3)²+(y-y3)² = r3²
# 两式相减消去二次项,得到线性方程Ax+By=C,求解二元一次方程组
a1 = 2 * (x2 - x1)
b1 = 2 * (y2 - y1)
c1 = r1**2 - r2**2 - x1**2 + x2**2 - y1**2 + y2**2
a2 = 2 * (x3 - x1)
b2 = 2 * (y3 - y1)
c2 = r1**2 - r3**2 - x1**2 + x3**2 - y1**2 + y3**2
# 求解线性方程组:a1x + b1y = c1; a2x + b2y = c2
det = a1 * b2 - a2 * b1
if abs(det) < 1e-6:
raise ValueError("三个基站共线,无法定位!")
x = (b2 * c1 - b1 * c2) / det
y = (a1 * c2 - a2 * c1) / det
return np.array([x, y, 0]) # 返回三维坐标(z=0)
# -------------------------- 5. 主仿真流程 --------------------------
if __name__ == "__main__":
# 1. 初始化3个UWB基站(分散布置,避免共线)
base_stations = [
UWB_BaseStation(station_id=1, x=0, y=0), # 基站1:(0,0)
UWB_BaseStation(station_id=2, x=10, y=0), # 基站2:(10,0)
UWB_BaseStation(station_id=3, x=5, y=10) # 基站3:(5,10)
]
# 2. 初始化UWB标签(随机生成真实坐标,范围:2~8m)
true_x = np.random.uniform(2, 8)
true_y = np.random.uniform(2, 8)
tag = UWB_Tag(tag_id=1, x=true_x, y=true_y)
print(f"标签真实坐标:({tag.true_coord[0]:.2f}, {tag.true_coord[1]:.2f})")
# 3. 模拟UWB距离测量(每个基站测量到标签的距离)
measured_distances = []
for bs in base_stations:
dist = bs.measure_distance(tag.true_coord)
measured_distances.append(dist)
print(f"基站{bs.station_id}测量距离:{dist:.2f}m(真实距离:{np.linalg.norm(tag.true_coord - bs.coord):.2f}m)")
# 4. 三边测量法解算标签坐标
estimated_coord = trilateration_2d(base_stations, measured_distances)
print(f"UWB定位结果:({estimated_coord[0]:.2f}, {estimated_coord[1]:.2f})")
# 5. 计算定位误差(验证30-50cm精度)
positioning_error = np.linalg.norm(tag.true_coord - estimated_coord)
print(f"定位误差:{positioning_error:.2f}m(符合UWB 30-50cm精度要求)")
# -------------------------- 6. 可视化结果 --------------------------
plt.figure(figsize=(10, 8))
plt.axis("equal")
plt.xlabel("X坐标 (m)", fontsize=12)
plt.ylabel("Y坐标 (m)", fontsize=12)
plt.title("UWB定位原理仿真(三边测量法)", fontsize=14)
# 绘制基站(红色圆点)
for bs in base_stations:
plt.scatter(bs.coord[0], bs.coord[1], color="red", s=100, label=f"基站{bs.station_id}")
# 绘制基站测量范围(以测量距离为半径的圆)
circle = Circle((bs.coord[0], bs.coord[1]), measured_distances[bs.station_id-1],
color="red", alpha=0.1, linestyle="--")
plt.gca().add_patch(circle)
# 绘制标签真实位置(绿色三角)和定位结果(蓝色方块)
plt.scatter(tag.true_coord[0], tag.true_coord[1], color="green", s=150, marker="^", label="真实位置")
plt.scatter(estimated_coord[0], estimated_coord[1], color="blue", s=150, marker="s", label="定位结果")
# 标注定位误差
plt.annotate(f"误差:{positioning_error:.2f}m",
xy=(estimated_coord[0], estimated_coord[1]),
xytext=(estimated_coord[0]+0.3, estimated_coord[1]+0.3),
fontsize=12, color="red")
plt.legend(fontsize=12)
plt.grid(True, alpha=0.3)
plt.show()
2.蓝牙BLE定位原理
蓝牙BLE协议支持两种工作模式,一种是点对点的连接,实现双向的数据传输,比如用手机连接手环传输数据,手环也能给手机传输;另一种是广播模式,在室内部署多个蓝牙信标(beacon),蓝牙信标(iBeacon)以一定的时间间隔的频次发送位置信息,而智能终端接收不同信标的信号强度(RSSI),通过三角定位计算位置,精度一般在1-5米。

三角定位
3.wi-fi定位原理
需要提前采集每个位置点的信号强度,建立RSSI指纹库,终端设备根据对比实时的信号和数据库存放的信号,通过三角测量法算具体位置,精度在1-10米。

多技术融合
目前没有一种定位技术是完美的,实际应用有单技术方案和多技术融合的方案,以达到成本、精度、覆盖、功耗要求的需求最优化,融合定位技术有先前提到的基于UWB和蓝牙Beacon:室内高精度蓝牙定位系统在工厂中的工作原理与应用场景(一)、基于lora基站与蓝牙信标技术在养老院人员定位系统中的实战应用,感兴趣可以点击阅读。
二、常见的室内定位技术:UWB、蓝牙BLE、wi-fi技术的优劣与应用场景
1.UWB(超宽带)
优:精度高、穿透性好、安全性高,有防爆和非防爆两种版本。
劣:需要单独部署基础设施,成本高,单基站覆盖范围相对较小。
应用场景:高精度安全管控场景、关键设备作业管理等如化工厂。
2.蓝牙BLE
优:超低功耗,可以适配长续航设备,抗干扰能力强,部署灵活,成本可控,只需要粘贴/悬挂安装,无需改造现有线路。
劣:定位范围有限,如果是大空间定位,需要大量数量部署,信号更新速度慢,若出现快速移动,定位会出现延迟,遮挡严重地区,比如墙壁、金属设备会削弱BLE信号。
应用场景:适合车间、仓库、医院等复杂空间。
3.wi-fi
优:室内定位精度高,部署成本低,可以利用现有wi-fi热点,无需额外大规模铺设设备,而且设备兼容性广,用智能手机等终端设备即可实现,信号的穿透性优于GPS。
劣:信号依赖wi-fi热点覆盖,无热点区域就无法实现定位,信号容易受到墙体、障碍物的遮挡,抗干扰能力弱,定位精度受热点的密度影响,稀疏区域误差大,稳定性差。
应用场景:室内导航、位置服务、安防监控、设备管理。

安防监控
以上就是对UWB、蓝牙BLE、wi-fi这三类常见的室内定位技术的详解,除此之外还有惯性导航,常作为辅助技术定位,视觉定位、地磁定位等其他辅助定位技术,它们已深度融合我们的生活与生产,从安全保障到效率的提升,多方面为人类创造价值。

708

被折叠的 条评论
为什么被折叠?



