1 写在前面
去年写了一篇文章《如何做实用、好用的矿用电子围栏》,初步探讨了一下矿用UWB的电子围栏的实现方法,阅读量超出预期,说明电子围栏需求度比较高,企业对安全生产越来越重视。当时写这篇文章时,由于时间和理解有限,有未尽之言,在这里再写个续篇,算是一个补充吧。
2 告别习惯性思维
申公豹曾经说过:“人心中的成见就像一座大山”。很多时候,技术人不要自我约束,有时候打破固有思维,会发现天地会广阔很多。上一篇文章提到,融合式UWB电子围栏是当前最优的选择。融合式UWB电子围栏除了具备自配的UWB卡片高速、准确的优点以外,还可以兼容识别人员定位厂家的卡片,这样无论是什么来源进入危险区域的人员,都能够进行识别处理,并进行相应报警,这种方案兼顾了效率和覆盖两个方面,是最为完备的。
来看一下当前精准人员定位系统的现状。根据《煤矿智能化建设指南(2021年版)》、《关于加快煤矿智能化发展的指导意见》以及《AQ 1119—2023 煤矿井下人员定位系统通用技术条件》等相关政策要求,近年来大多数煤矿已对原有的定位系统进行了改造升级,从区域定位提升至精确定位,以满足井下人员定位的高精度要求。 目前大型煤矿已普遍部署UWB系统,中小型煤矿覆盖率逐步提升,尤其在事故高发区域已实现高精度定位全覆盖。 国家矿山安全监察主管部门明确要求井口设置检测装置,对标识卡状态和唯一性进行核查,异常情况实时告警。每名下井人员,人员定位的标识卡是必需配戴的。所以,在矿井里面,人员定位卡可以作为一个基础,做一些扩展性工作,比如危险区域临近检测、电子围栏防护、车辆与人员安全互锁等,应用范围比较广泛,可以极大程度提高矿井生产的安全性。
融合式UWB电子围栏正是基于上述基础。这种电子围栏本身会配备的相应卡片,卡片信息可以发得很密集(毫秒级),测距精度比较高;除此之外,还可以识别人员定位厂家的卡片,可以避免没有佩戴电子围栏卡片人员进入危险区域时无法感知的问题。通常对于人员定位系统卡片,会按照1-2秒/次的频率进行测距,这样也能够最低程度符合安全要求。
3 关于监听
在这里需要探讨一下电子围栏系统兼容读取人员定位卡片的一些技术点(系统本身所自配的卡片不必多言)。电子围栏兼容读取人员定位卡片的信息后,一般需要按TDOA方式进行位置测算,这里面有一些需要关注的点。
3.1 监听的信息
人员定位系统中,通常的测距方法是TOF,这个通常由卡片发起Poll,读卡器回应Resp,卡片再次回应Final信息完成:
对于监听,需要关注的是Poll和Final两条信息。在监听时,应该同时监听Poll和Final,并且将这两个数据进行综合考虑,这样数据稳定性会好一些。
3.2 无读卡器情况
由于电子围栏可能会安装在运行的车辆上面,车辆位置会发生移动,需要考虑到周围没有读卡器时,也需要提供电子围栏的保护功能。此时,当携带人员定位卡片人员走入时,卡片因为没有感应到读卡器存在,通常情况会发出FIND信息(可以理解为一个简化的Poll),这个可以用作监听的基础。不同的厂家这个时长会有不同,一般比较常见是的1秒,有些会有2秒(如果是车辆卡片,间隔会成倍减少,即更加密集)。所以在这种情况下,仍然可以采用监听方式来确保安全。
3.3 多读卡器情况
需要注意到人员卡片可能处于多个读卡器之间的情况。从原理上看,此时无非就是多个读卡器都会返回Resp信息而已,对于增加的Resp信息我们可以不关注,它不会影响到测距结果。
3.4 卡尔曼滤波提升精度
因为采用TDOA进行二维定位,它的误差必然会大于TOF测距,因为现在是根据距离差进行测算,误差稍大一些时,会导致结果偏差较大。在这里可以采用卡尔曼滤波,对得到的结果进行适当的预测性滤波。下面是一个二维滤波的例子,在例子中,假定能够周期性得到卡片在二维平面的横、纵坐标数据,并将横、纵方向移动速度作为状态量,进行预测和分析。
import numpy as np
import matplotlib.pyplot as plt
#--------------- 公式中需要的一些变量定义 --------------------
#状态向量x
# x = [px, py, vx, vy],包括x,y的坐标,以及x,y方向的速度
# np.matrix函数是将传入一个二维数组来创建一个矩阵,采用.T进行转置
# x是一个四行一列的矩阵,初始全部初始化为0
x = np.matrix([[0.0, 0.0, 0.0, 0.0]]).T
#协方差P
# np.diag创建对角矩阵
# 初始化一个非常大的数,代表我们对初始状态非常不确定
P = np.diag([1000,1000, 1000, 1000])
#假设我们每1s获得一次观测
dt = 1
#状态转移矩阵F
# 匀速运动模型转移矩阵
F = np.matrix([[1.0, 0.0, dt, 0.0],
[0.0, 1.0, 0.0, dt],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]])
#观测矩阵H
# 二维点观测模型转换矩阵
H = np.matrix([[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0]])
#测量噪声协方差矩阵R
# 假定在x和y方向上都有最坏可能为1m的方差
R = np.matrix([[1, 0.0],
[0.0, 1]])
#过程噪声协方差矩阵Q
# 先不求甚解即可
Q = np.matrix([[6.25e-06,0.00e+00,1.25e-04,0.00e+00],
[0.00e+00,6.25e-06,0.00e+00,1.25e-04],
[1.25e-04,0.00e+00,2.50e-03,0.00e+00],
[0.00e+00,1.25e-04,0.00e+00,2.50e-03]])
#单位矩阵I
I = np.eye(4)
#--------------- 为了演示方便,制造一些观测值 --------------------
# stdpy,stdpy 按规律生成的位置信息
# px,py: stdpy,stdpy中间加入了扰动,可以理解为采样的数据
# resx,resy进行滤波输出的结果
#产生并保存三种数据,主要是为了下面绘图比较方便,以便于有感性认识
vx= 0.8 # 假设某物体在x方向上有0.8m/s的速度
vy= 0.4 # 在y方向上是0.4m/s的速度
px = []
py = []
stdpx=[]
stdpy=[]
resx=[]
resy=[]
#假设起始位置在(0,0)
stdx0 = 0
stdy0 = 0
px.append(0)
py.append(0)
stdpx.append(0)
stdpy.append(0)
resx.append(0)
resy.append(0)
#假设我们观测了50步
for step in range(1, 150):
stdx0 = stdx0 + vx*dt
stdy0 = stdy0 + vy*dt
stdpx.append(stdx0)
stdpy.append(stdy0)
#np.random.rand(): 生成[0, 1)区间内的均匀分布的随机数或随机数组。
x0 = stdx0 + 2.5 * np.random.randn() - 1.25
y0 = stdy0 + 2.5 * np.random.randn() - 1.25
px.append(x0)
py.append(y0)
## 使用np.vstack()函数堆叠数组
measurements = np.vstack((px,py))
#---------------------------- 卡尔曼滤波(套公式啦) --------------------------
#依次访问每个观测值
for n in range(len(measurements[0])): #0..49循环
#下面语句采用randshape,从预备数据中取值,并排列成2*1的二维数组,即测量向量z
z = measurements[:,n].reshape(2,1) # 获得当前访问的观测值
# 预测
x = F*x # 公式(1) 均值预测
P = F*P*F.T + Q # 公式(2) 计算误差协方差矩阵P
# 更新
K = (P*H.T) * np.linalg.pinv(H*P*H.T + R) # 公式(3) 计算卡尔曼增益
x = x + (K*(z - H*x)) # 公式(4) 更新状态(也就是输出滤波的结果)
P = (I - (K*H))*P # 公式(5) 更新误差协方差矩阵P
#将输出滤波的结果中的px,py记录到resx/resy中,便于下面绘图
resx.append(x[0,0])
resy.append(x[1,0])
print(K)
#---------------------------- 画出来 --------------------------
plt.figure()
plt.plot(px,py,'k+',label='measurements')
plt.plot(resx,resy,'b-',label='kalman')
plt.plot(stdpx,stdpy,'g',label='truth value')
plt.legend()
plt.xlabel('Iteration')
plt.ylabel('Voltage')
plt.show()
需要注意的是,对于通常的定位,有Poll和Final两条信息数据可以采用,兼听则明。
4 参考设备
在网上查找了一段时间,要把人员定位系统和电子围栏有机结合在一起的东西真不好找,Deepseek也不好使,因为这个点很奇特。好在功夫不负有心人,七山五岭中,终于找到了一个功能可以覆盖所构想的UWB电子围栏技术要求的产品。
在某宝中查找“太阳神鸟企业店”,打开这个店家的页面,可以看到一款“SUN-EF1700本安型UWB电子围栏”产品,这个产品暗合了《如何做实用、好用的矿用电子围栏》的思想,并且有所提升,不知道是用了什么样的黑科技。
4.1 基本功能
概括起来,这款产品除了可以自成一体的矿用电子围栏功能外,还能读取人员定位卡片信息,真是妙哉。
根据介绍,这款电子围栏只是一个核心器件,外围的断电器报警器之类设备还得自已配置。它可以读取现有UWB精准人员定位系统的卡片资源,对指定距离范围创建虚拟边界,限制人员进入危险区域。
这款电子围栏控制器安装于需要进行防护的设备上,并安装3根UWB全向天线,采用监听方式获得人员定位系统卡片位置信息。如果不在允许范围之内人员进入参数设定的危险区域时,会根据距离的不同,进行预警、报警或断电继电器输出。
个人感觉,介绍中提到的需要3根天线,这个也符合基本的数学思想,至少3根才能形成一个平面,这个是物理基础。
4.2 误差
一般而言,UWB测距总体来说比较精准,一般可以达到30厘米;有些厂家号称10厘米,也不是不对,只不过是离开应用场景谈精度没有多大的意义。在矿山复杂多径环境下,部分区域可能误差会大一些,只要在可以接受的范围之内,就可以达到目的。电子围栏作为接近式检测,此时周边环境还算是比较理想,测距精度应该基本可以达到要求。
据了解, 这款产品对不同的厂家卡片二维定位精度会不同,总体精度范围在0.3到1.0米左右。如果从原理上进行分析,个人感觉,估计是不同的厂家UWB通讯的速率不一样,导致TDOA可能会有差异。从原理上看,UWB通讯速率越高,TDOA精度也会越高。
4.3 优点
如果对这款产品特点进行综合,还是有不少亮点的:
- 广谱适配性: 兼容多品牌定位卡片。
- 精准二维定位:支持二维平面检测。
- 白名单:自动识别并排除特定人员。 全方位覆盖:
- 360°无死角检测,无检测盲区。
4.4 不足之处
目前这款电子围栏产品实现了多厂家的协议感知和二维定位功能,但是上面的软件看起来还是比较简单,不能查看轨迹,也不能存贮数据库。根据了解,它提供的Modbus接口,这一看就是做工控做得久了落下的后遗症:只对外作接口,后面的事你自已看着办。这一点不太友好,虽然本地使用基本够用,但是如果想进一步深化就需要费力气了,毕竟自已能够做上位机软件的企业,也不是满大街都是,如果有一个归一化的上位机程序,就更为理想了。
5 结语
矿用电子围栏是一个较新的事物,有很多种技术方案,各种方案也在逐步成熟之中。本文中所提到的方案只是目前比较合适的一种,仅为从技术角度开拓思路而已。在此只是希望这方面有更多安全产品面世,为矿山安全保驾护航。
总之还是那句话:生命是最宝贵的,安全是最重要的。