当前位置: 首页 > article >正文

如何做实用、好用的矿用电子围栏(续篇)

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.25px.append(x0)py.append(y0)## 使用np.vstack()函数堆叠数组
measurements = np.vstack((px,py))#----------------------------   卡尔曼滤波(套公式啦)  --------------------------
#依次访问每个观测值
for n in range(len(measurements[0])): #0..49循环#下面语句采用randshape,从预备数据中取值,并排列成2*1的二维数组,即测量向量zz = 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 结语

       矿用电子围栏是一个较新的事物,有很多种技术方案,各种方案也在逐步成熟之中。本文中所提到的方案只是目前比较合适的一种,仅为从技术角度开拓思路而已。在此只是希望这方面有更多安全产品面世,为矿山安全保驾护航。
       总之还是那句话:生命是最宝贵的,安全是最重要的。

相关文章:

如何做实用、好用的矿用电子围栏(续篇)

1 写在前面 去年写了一篇文章《如何做实用、好用的矿用电子围栏》,初步探讨了一下矿用UWB的电子围栏的实现方法,阅读量超出预期,说明电子围栏需求度比较高,企业对安全生产越来越重视。当时写这篇文章时,由于时间和理解…...

【多语言生态篇三】【DeepSeek×Go:高并发推理服务设计】

第一章:项目背景与选型考量 1.1 DeepSeek推理服务的业务挑战 日均请求量突破1.2亿次(峰值QPS达38万) 典型请求特征:50ms超时限制 | 10KB输入+2KB响应 流量特征:工作日周期性波动(早10点至晚8点负载增长300%) 1.2 Go语言脱颖而出的五大优势 (敲黑板!这里用餐馆厨房…...

【ThreeJS Basics 1-5】动画 Animations

文章目录 Three JS 中的动画window.requestAnimationFrame(fn)基本代码修改显示器刷新率的对比基础的动画尝试不同帧率导致动画速率不同解决方案一:DeltaTime解决方案2:Clock方法3: 动画库 Gsap如何选择方案? Three JS 中的动画 …...

WSL进阶使用指南

WSL2通过 Hyper-V 技术创建了一个轻量级的虚拟机(VM),在这个虚拟机之上可以运行一个真正的 Linux 内核,这给希望同时使用 Windows 和 Linux 的开发人员提供了无缝高效的体验。本文会介绍一些使用WSL的知识,帮助你更好地…...

工业机器视觉3D视觉行业分析

一、行业现状与市场前景 市场规模与增长 中国工业机器视觉市场近年来呈现高速增长态势,预计2025年市场规模将达到数百亿元,年复合增长率(CAGR)超过20%579。其中,3D视觉技术因在智能制造、人形机器人、自动驾驶等领域的广泛应用,成为核心增长点。全球3D成像与传感市场预计…...

我是如何从 0 到 1 找到 Web3 工作的?

作者:Lotus的人生实验 关于我花了一个月的时间,从 0 到 1 学习 Web3 相关的知识和编程知识。然后找到了一个 Web3 创业公司实习的远程工作。 👇👇👇 我的背景: 计算机科班,学历还可以(大厂门槛水平) 毕业工…...

leetcode 题目解析 第3题 无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”…...

如何通过外链提升网站SEO排名?

外链的作用非常明显,它不仅能提高网站的排名,还能增加网站的曝光量。Google排名的算法会考虑到网站的外链数量、质量和多样性。简单来说,更多的高质量外链意味着你的网站更有可信度,更容易被搜索引擎优待。 但是,过度…...

Prompt:创造性的系统分析者

分享的提示词: 你是一个创造性的系统分析者,作为咨询师,你具有以下特质: 基础能力: 深入理解我的系统性模式 识别模式间的隐藏联系 发现出人意料的关联 提供令人惊讶的洞见 工作方式: 在每次回应中至少…...

DeepSeek服务器繁忙 多种方式继续优雅的使用它

前言 你的DeepSeek最近是不是总是提示”服务器繁忙,请稍后再试。”,尝试过了多次重新生成后,还是如此。之前DeepSeek官网连续发布2条公告称,DeepSeek线上服务受到大规模恶意攻击。该平台的对话框疑似遭遇了“分布式拒绝服务攻击”&#xff0…...

量子计算的基本运算:Hadamard 门、CNOT 门、Pauli 门详解

量子计算是现代计算科学的前沿领域,它与经典计算机在处理信息的方式上有着本质的区别。量子计算机利用量子比特(qubit)的叠加态和量子纠缠等特性来进行计算,从而在某些特定任务上超越传统计算机。量子计算的核心运算单元是量子门,它们通过作用于量子比特来操控量子状态。本…...

mysql之Innodb数据页

Innodb数据页结构 InnoDB数据页结构一、数据页基础概念二、数据页核心结构1. 头部控制区2. 数据存储区3. 尾部与目录区 三、关键机制详解1. 记录链表与删除优化2. 页目录与二分查找3. 空间复用与碎片管理4. 数据页的合并与分裂 四、应用与性能影响1. 索引效率2. 插入优化3. 事务…...

ThinkORM模型静态方法create好像对MongoDB不支持

软件版本 think-orm&#xff1a;3.0PHP&#xff1a;8.4.1MongoDB&#xff1a;8.0.4 &#xff08;本地单数据 非集群&#xff09;注&#xff1a;我是在 webman 框架下使用think-orm&#xff0c;并非在 thinkphp框架下使用 使用场景 定义的模型如下&#xff1a; <?php na…...

nginx配置:nginx.conf配置文件

nginx.conf配置文件说明 基本结构 全局块&#xff1a;位于最外层&#xff0c;定义影响整个Nginx服务器的设置。事件块&#xff1a;配置网络连接相关的设置。HTTP块&#xff1a;定义HTTP服务器以及反向代理、负载均衡等特性。Server块&#xff1a;定义虚拟主机&#xff0c;即响…...

基于 PyQt5 的聊天机器人程序(AI)

这是一个基于 PyQt5 的聊天机器人程序&#xff0c;通过 API 接入硅基流动&#xff08;Silicon Flow&#xff09;或其他的聊天服务&#xff0c;支持用户与聊天机器人进行交互。 API 设置&#xff1a;通过菜单栏的“设置”选项&#xff0c;用户可以修改 API 地址和 API 密钥。 设…...

[实现Rpc] 服务端 | RpcRouter实现 | Builder模式

目录 项目服务端独用类的实现 1. RpcRouter类的实现 ServiceDescribe SDescribeFactory ⭕ Builder模式 1. 动机 2. 模式定义 3. 要点总结 4. 代码感受 ServiceManager RpcRouter 4. 代码感受 ServiceManager RpcRouter 前文我们就将 Rpc 通用类都实现完啦&#…...

红外人体传感器选型和电路解析

红外人体传感器选型和电路解析 背景&#xff1a;想要制作一套IoT系统&#xff0c;基于HA构建上层管理&#xff0c;蓝牙和蓝牙MESH构建无线网络&#xff0c;以及多种传感器和控制器作为底层&#xff0c;其中人体红外传感器作为一个重要的选项&#xff0c;需要考虑好。 红外人体传…...

rtthread的串口框架、485框架

一、串口接收超时中断的实现。 1. rtthread中定义的串口超时结构体 定义串口接收超时的结构体 CM_TMR0_TypeDef 为TM0的实例(实际有CM_TMR0_1 CM_TMR0_2 对应华大460的两个TMR0单元 ) channel 每个timer0有两个通道(TMR0_CHA、TMR0_CHB) clock 为FCG2_PERIPH_TMR0_1、FCG…...

Embedding模型

检索的方式有那些 关键字搜索&#xff1a;通过用户输入的关键字来查找文本数据。 语义搜索&#xff1a;它的目标是理解用户查询的真实意图&#xff0c;不仅考虑关键词的匹配&#xff0c;还考虑词汇之间的语义 &#xff08;文字&#xff0c;语音&#xff0c;语调...&#xff0…...

如何使用Spring Boot实现商品的管理系统

1. 项目初始化 1.1 使用 Spring Initializr 创建项目 访问 Spring Initializr,进行如下配置: Project:选择 Maven Project。Language:选择 Java。Spring Boot:选择合适的版本,如 3.1.x。Group:填写项目的组织名,例如 com.example。Artifact:填写项目名称,如 general…...

最新扣子(Coze)案例教程:全自动DeepSeek 写影评+批量生成 + 发布飞书,提效10 倍!手把手教学,完全免费教程

&#x1f468;‍&#x1f4bb;群里有同学是做影视赛道的博主&#xff0c;听说最近DeepSeek这么火&#xff0c;咨询能不能用DeepSeek写影评&#xff0c;并整理电影数据资料&#xff0c;自动发布到飞书文档&#xff0c;把每天的工作做成一个自动化的流程。 那今天斜杠君就为大家…...

Qt程序退出相关资源释放问题

目录 问题背景&#xff1a; aboutToQuit 代码举例 资源释放函数注意事项 closeEvent事件 代码举例 程序退出方式 quit() exit(int returnCode 0) close() 问题背景&#xff1a; 实际项目中程序退出前往往需要及进行一些资源释放、配置保存、线程中断等操作&#xff0c…...

Ubuntu 22.04安装K8S集群

以下是Ubuntu 22.04安装Kubernetes集群的步骤概要 一、设置主机名与hosts解析 # Master节点执行 sudo hostnamectl set-hostname "k8smaster" # Worker节点执行 sudo hostnamectl set-hostname "k8sworker1"# 所有节点的/etc/hosts中添加&#xff1a; ca…...

Kubernetes的Ingress 资源是什么?

在Kubernetes中&#xff0c;Ingress资源是一种用于管理集群外部对内部服务访问的API对象&#xff0c;主要用于将不同的外部请求路由到集群内的不同服务&#xff0c;以下是关于它的详细介绍&#xff1a; 定义与作用 Ingress资源定义了从集群外部到内部服务的HTTP和HTTPS路由规…...

Apifox 增强 AI 接口调试功能:自动合并 SSE 响应、展示DeepSeek思考过程

在现代的API接口调试中&#xff0c;效率和精确性对于开发者和测试人员来说至关重要。Apifox&#xff0c;作为一款功能强大的API管理和调试工具&#xff0c;近年来不断提升其用户体验和智能化功能。最近&#xff0c;Apifox 推出了增强版的AI接口调试功能&#xff0c;其中包括自动…...

MATLAB基础学习相关知识

MATLAB安装参考&#xff1a;抖音-记录美好生活 MATLAB基础知识学习参考&#xff1a;【1小时Matlab速成教程-哔哩哔哩】 https://b23.tv/CnvHtO3 第1部分&#xff1a;变量定义和基本运算 生成矩阵&#xff1a; % 生成矩阵% 直接法% ,表示行 ;表示列 a [1,2,3;4,5,6;7,8,9];%…...

DeepSeek赋能智慧文旅:新一代解决方案,重构文旅发展的底层逻辑

DeepSeek作为一款前沿的人工智能大模型&#xff0c;凭借其强大的多模态理解、知识推理和内容生成能力&#xff0c;正在重构文旅产业的发展逻辑&#xff0c;推动行业从传统的经验驱动向数据驱动、从人力密集型向智能协同型转变。 一、智能服务重构&#xff1a;打造全域感知的智…...

蓝桥与力扣刷题(蓝桥 交换瓶子)

题目&#xff1a;有 N 个瓶子&#xff0c;编号 1 ~ N&#xff0c;放在架子上。 比如有 5 个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起 2 个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这么简单的情况&#x…...

腿足机器人之十一- 深度强化学习

腿足机器人之十一- 深度强化学习 机器人能力腿足机器人RL问题建模强化学习解决方案 强化学习算法库选择建议 深度学习技术已经在语音、图像、视频、文本等领域应用广泛&#xff0c;其和强化学习的结合使得基于深度学习的大模型能力更是上升一个台阶。因而用在腿足机器人的运动中…...

纠错检索增广生成论文

一、摘要 动机&#xff1a;RAG严重依赖于检索文档的相关性&#xff0c;如果检索出错&#xff0c;那么LLM的输出结果也会出现问题 解决方案&#xff1a;提出纠正性检索增强生成&#xff08;CRAG&#xff09;即设计一个轻量级的检索评估器&#xff0c;用来评估针对某个查询检索…...