hello~这里是维构lbs智能定位,如果有项目需求和技术交流欢迎来私信我们~点击文章最下方可获取免费获取技术文档和解决方案
基于UWB定位技术的工地安全管理系统解决施工现场人员安全难保障、作业过程无法透明监管、人力成本缺乏依据等核心管理痛点,实现从"被动响应"到"主动预防"的数字化管控升级。本文将从从技术原理到功能应用展开论述。
一、基于UWB定位技术的工地安全管理系统的技术原理
1.数据收集
由感知层的uwb定位标签发出信号,通过定位法测算人员位置数据,定位基站接收信号后上传至引擎层。
2.数据传输
引擎层接收数据后通过网络层的有线网络/5G传输/WIFI传输人员位置数据。
3.数据分析
网络层接收数据后传输到引擎层,由引擎层中的解算引擎经过算法模型、并行框架、定位解算层层解算人员的具体位置,再由服务引擎对解算好的数据进行处理,完成无线网络到有线网络的数据在系统内部的标准化处理,
4.数据应用
平台层对解算好的定位数据进行存储、分析、挖掘和集成其他需要对接的系统,进而实现应用层的应用。
import time
import random
import numpy as np
from dataclasses import dataclass
from typing import List, Dict, Optional, Any
import json
# ===================== 【感知层:数据收集】 =====================
# UWB定位标签-人员绑定实体:模拟现场人员佩戴的UWB标签,持续发出定位信号
@dataclass
class UWBTraceTag:
"""UWB定位标签(感知层核心组件)"""
tag_id: str # 标签ID
person_id: str # 绑定人员ID
person_name: str # 绑定人员姓名
signal_strength: int # 信号强度
def send_position_signal(self) -> Dict[str, Any]:
"""UWB标签发出原始定位信号(模拟真实硬件的信号发射)"""
# 原始信号包含:标签信息+原始坐标+信号时间戳+基站测距值(真实场景为多基站测距原始数据)
raw_data = {
"tag_id": self.tag_id,
"person_id": self.person_id,
"person_name": self.person_name,
"raw_x": round(random.uniform(0, 100), 2), # 原始X坐标
"raw_y": round(random.uniform(0, 100), 2), # 原始Y坐标
"raw_z": round(random.uniform(0, 5), 2), # 原始Z坐标(楼层高度)
"ranging_value": [round(random.uniform(1, 50), 2) for _ in range(4)], # 4个基站测距值
"signal_ts": time.time(),
"signal_strength": self.signal_strength
}
return raw_data
class UWBLocateStation:
"""UWB定位基站(感知层-信号接收)"""
def __init__(self, station_id: str, station_name: str):
self.station_id = station_id
self.station_name = station_name
def receive_signal(self, tag: UWBTraceTag) -> Optional[Dict[str, Any]]:
"""基站接收UWB标签的定位信号,接收成功则上传至引擎层"""
if tag.signal_strength > 30: # 信号强度阈值过滤:弱信号丢弃
raw_position_data = tag.send_position_signal()
print(f"【感知层-基站{self.station_id}】成功接收人员[{tag.person_name}]的UWB信号,原始数据已上传引擎层")
return raw_position_data
else:
print(f"【感知层-基站{self.station_id}】人员[{tag.person_name}]的UWB信号强度不足,丢弃该数据")
return None
# ===================== 【网络层:数据传输】 =====================
class NetworkLayer:
"""网络层:提供 有线网络/5G传输/WIFI传输 三种标准化传输方式,引擎层双向数据传输"""
TRANSMISSION_MODE = ["WIRED", "5G", "WIFI"] # 支持的传输方式
@staticmethod
def transmit_data(raw_data: Dict[str, Any], mode: str = "5G") -> Optional[Dict[str, Any]]:
"""
核心传输方法:将感知层原始数据传输至引擎层,支持指定传输方式
:param raw_data: 感知层上传的原始定位数据
:param mode: 传输方式,默认5G(工业场景最优)
:return: 传输成功返回原始数据,失败返回None
"""
if mode not in NetworkLayer.TRANSMISSION_MODE:
print(f"【网络层】传输方式[{mode}]不支持,可选:{NetworkLayer.TRANSMISSION_MODE}")
return None
if raw_data and isinstance(raw_data, dict):
# 模拟网络传输时延(工业场景毫秒级)
time.sleep(0.001)
print(f"【网络层】采用[{mode}]方式传输原始定位数据,传输成功 ✅")
return raw_data
else:
print(f"【网络层】待传输数据为空,传输失败 ❌")
return None
# ===================== 【引擎层:数据分析 核心层】 =====================
class SolveEngine:
"""解算引擎(引擎层核心组件1):负责 算法模型→并行框架→定位解算 三层解算逻辑,输出精准位置"""
@staticmethod
def algorithm_model_process(raw_data: Dict[str, Any]) -> Dict[str, Any]:
"""第一步:算法模型预处理 - 过滤异常值、数据归一化、基站测距值校验"""
processed_data = raw_data.copy()
# 过滤原始坐标异常值
processed_data["raw_x"] = max(0, processed_data["raw_x"])
processed_data["raw_y"] = max(0, processed_data["raw_y"])
# 基站测距值归一化(0-1区间)
processed_data["norm_ranging"] = [round(x/50, 3) for x in processed_data["ranging_value"]]
print(f"【引擎层-解算引擎】算法模型预处理完成,过滤异常值+数据归一化")
return processed_data
@staticmethod
def parallel_frame_calc(processed_data: Dict[str, Any]) -> Dict[str, Any]:
"""第二步:并行框架计算 - 模拟多线程并行解算多基站测距值,提升解算效率"""
parallel_data = processed_data.copy()
# 模拟并行计算:多基站测距值加权平均(真实场景为多线程并行解算)
parallel_data["weight_ranging"] = round(np.mean(parallel_data["norm_ranging"]) * 50, 2)
print(f"【引擎层-解算引擎】并行框架计算完成,多基站测距值加权融合")
return parallel_data
@staticmethod
def position_solve(final_data: Dict[str, Any]) -> Dict[str, Any]:
"""第三步:定位解算(核心)- UWB经典三边定位算法,输出厘米级精准位置坐标"""
solve_result = final_data.copy()
# 三边定位解算核心逻辑:基于多基站测距值修正原始坐标,输出精准位置
solve_result["accurate_x"] = round(final_data["raw_x"] + (final_data["weight_ranging"]/100), 3)
solve_result["accurate_y"] = round(final_data["raw_y"] + (final_data["weight_ranging"]/100), 3)
solve_result["accurate_z"] = round(final_data["raw_z"], 3)
solve_result["solve_ts"] = time.time()
print(f"【引擎层-解算引擎】定位解算完成,输出精准位置:X={solve_result['accurate_x']} Y={solve_result['accurate_y']} Z={solve_result['accurate_z']}")
return solve_result
def full_solve_flow(self, raw_data: Dict[str, Any]) -> Dict[str, Any]:
"""完整解算流程:算法模型 → 并行框架 → 定位解算"""
step1 = self.algorithm_model_process(raw_data)
step2 = self.parallel_frame_calc(step1)
step3 = self.position_solve(step2)
return step3
class ServiceEngine:
"""服务引擎(引擎层核心组件2):负责 标准化处理+协议转换+数据清洗,完成【无线→有线】系统内标准化"""
@staticmethod
def standardize_data(solved_data: Dict[str, Any]) -> Dict[str, Any]:
"""
核心标准化处理:
1. 无线网络UWB原始数据 → 有线网络系统标准格式
2. 统一字段命名、数据类型、时间戳格式
3. 过滤无效字段,保留核心业务数据
"""
standard_data = {
"person_info": {
"person_id": solved_data["person_id"],
"person_name": solved_data["person_name"],
"tag_id": solved_data["tag_id"]
},
"position_info": {
"accurate_x": solved_data["accurate_x"],
"accurate_y": solved_data["accurate_y"],
"accurate_z": solved_data["accurate_z"],
"floor": int(solved_data["accurate_z"]) # 楼层号标准化
},
"system_info": {
"signal_ts": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(solved_data["signal_ts"])),
"solve_ts": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(solved_data["solve_ts"])),
"data_source": "UWB_LOCATE",
"network_type": "WIRED_STANDARD" # 标记为有线网络标准格式
}
}
print(f"【引擎层-服务引擎】数据标准化处理完成 ✅,已完成无线网络→有线网络格式转换")
return standard_data
# ===================== 【平台层+应用层:数据应用】 =====================
class PlatformLayer:
"""平台层:负责 数据存储+数据分析+数据挖掘+第三方系统集成,承上启下对接应用层"""
def __init__(self):
self.position_db = [] # 模拟数据库:存储历史定位数据
self.warning_area = {"x1": 20, "x2": 80, "y1": 20, "y2": 80} # 电子围栏预警区域
def data_storage(self, standard_data: Dict[str, Any]) -> None:
"""数据存储:将标准化数据存入系统数据库(模拟)"""
self.position_db.append(standard_data)
print(f"【平台层】定位数据已存入数据库,累计存储 {len(self.position_db)} 条人员定位记录")
def data_analysis(self, person_id: str) -> Optional[Dict[str, Any]]:
"""数据分析:按人员ID查询最新定位、历史轨迹、停留时长"""
person_data = [d for d in self.position_db if d["person_info"]["person_id"] == person_id]
if not person_data:
return None
latest_data = person_data[-1]
analysis_result = {
"latest_position": latest_data["position_info"],
"track_count": len(person_data),
"stay_time": round(len(person_data)*0.5, 1) # 模拟停留时长(分钟)
}
print(f"【平台层】数据分析完成,人员[{latest_data['person_info']['person_name']}]最新定位已提取")
return analysis_result
def data_mining(self) -> List[Dict[str, Any]]:
"""数据挖掘:挖掘人员活跃区域、越界风险、轨迹规律等增值数据"""
mining_result = []
for data in self.position_db:
x = data["position_info"]["accurate_x"]
y = data["position_info"]["accurate_y"]
# 挖掘1:是否越界预警
is_warning = not (self.warning_area["x1"] < x < self.warning_area["x2"] and
self.warning_area["y1"] < y < self.warning_area["y2"])
mining_result.append({
"person_name": data["person_info"]["person_name"],
"position": data["position_info"],
"is_cross_border": is_warning,
"risk_level": "HIGH" if is_warning else "LOW"
})
print(f"【平台层】数据挖掘完成,挖掘出人员越界风险、活跃区域等核心信息")
return mining_result
def integrate_third_system(self, standard_data: Dict[str, Any]) -> Dict[str, Any]:
"""第三方系统集成:标准化数据对接安防系统、考勤系统、调度系统(模拟)"""
third_system_data = {
"platform_data": standard_data,
"third_system": {
"security_system": {"status": "ONLINE", "sync": "SUCCESS"},
"attendance_system": {"status": "ONLINE", "sync": "SUCCESS"},
"dispatch_system": {"status": "ONLINE", "sync": "SUCCESS"}
}
}
print(f"【平台层】第三方系统集成完成,定位数据已同步至安防/考勤/调度系统")
return third_system_data
class ApplicationLayer:
"""应用层:最终业务落地,所有定位能力的可视化/业务化呈现"""
@staticmethod
def person_position_monitor(analysis_data: Dict[str, Any]) -> None:
"""应用1:人员实时定位监控(核心应用)"""
print("\n===== 【应用层-实时定位监控】 =====")
print(f"人员姓名:{analysis_data['latest_position']['person_name'] if 'person_name' in analysis_data else '未知'}")
print(f"精准位置:X={analysis_data['latest_position']['accurate_x']} m, Y={analysis_data['latest_position']['accurate_y']} m, 楼层={analysis_data['latest_position']['floor']}")
print(f"历史轨迹点:{analysis_data['track_count']} 个,停留时长:{analysis_data['stay_time']} 分钟")
@staticmethod
def cross_border_warning(mining_data: List[Dict[str, Any]]) -> None:
"""应用2:电子围栏越界预警(工业场景核心需求)"""
print("\n===== 【应用层-越界预警提醒】 =====")
warning_person = [d for d in mining_data if d["is_cross_border"]]
if warning_person:
for person in warning_person:
print(f"⚠️ 预警:人员【{person['person_name']}】进入危险区域,风险等级【{person['risk_level']}】,位置:{person['position']}")
else:
print("✅ 所有人员均在安全区域内,无越界风险")
@staticmethod
def person_track_tracking(mining_data: List[Dict[str, Any]]) -> None:
"""应用3:人员轨迹追踪"""
print("\n===== 【应用层-人员轨迹追踪】 =====")
for person in mining_data:
print(f"人员【{person['person_name']}】当前轨迹点:{person['position']},风险状态:{person['risk_level']}")
# ===================== 【系统总调度:串联全流程】 =====================
class UWBLocateSystem:
"""UWB人员定位系统总调度类:一键运行【数据收集→传输→分析→应用】完整流程"""
def __init__(self):
# 初始化全层组件
self.trace_tag = UWBTraceTag(tag_id="UWB_TAG_001", person_id="P001", person_name="张三", signal_strength=45)
self.locate_station = UWBLocateStation(station_id="STATION_001", station_name="一号基站")
self.network = NetworkLayer()
self.solve_engine = SolveEngine()
self.service_engine = ServiceEngine()
self.platform = PlatformLayer()
self.application = ApplicationLayer()
def run_full_flow(self, transmission_mode: str = "5G") -> None:
"""运行完整业务流程"""
print("="*80)
print("【UWB人员定位系统】开始运行完整流程:数据收集 → 数据传输 → 数据分析 → 数据应用")
print("="*80)
# 1. 数据收集:感知层 - 标签发信号 → 基站接收 → 上传原始数据
raw_data = self.locate_station.receive_signal(self.trace_tag)
if not raw_data: return
# 2. 数据传输:网络层 - 有线/5G/WIFI 传输原始数据至引擎层
transmit_data = self.network.transmit_data(raw_data, transmission_mode)
if not transmit_data: return
# 3. 数据分析:引擎层 - 解算引擎三层解算 → 服务引擎标准化处理
solved_data = self.solve_engine.full_solve_flow(transmit_data)
standard_data = self.service_engine.standardize_data(solved_data)
# 4. 数据应用:平台层存储分析挖掘 → 应用层业务落地
self.platform.data_storage(standard_data)
analysis_data = self.platform.data_analysis(self.trace_tag.person_id)
mining_data = self.platform.data_mining()
self.platform.integrate_third_system(standard_data)
# 应用层最终呈现
self.application.person_position_monitor(analysis_data)
self.application.cross_border_warning(mining_data)
self.application.person_track_tracking(mining_data)
print("="*80)
print("【UWB人员定位系统】完整流程运行结束 ✅")
print("="*80)
# ===================== 【程序入口】 =====================
if __name__ == "__main__":
# 初始化系统并运行,可切换传输方式:"WIRED"/"5G"/"WIFI"
uwb_system = UWBLocateSystem()
uwb_system.run_full_flow(transmission_mode="5G")

二、基于UWB定位技术的工地安全管理系统的 功能应用
1.全时定位与轨迹回溯
安全作业管理和实时轨迹回放:2D/3D地图动态展示人员实时位置,支持分类查看与快速查找,接入视频联动功能,实时查看现实动态;随时根据时间点、段查询人员的历史轨迹,实现行动轨迹精准回溯,可分析活动规律,减少管理漏洞。

2 .智能预警与应急响应
电子围栏预警和SOS一键呼救:根据管理自定义划定危险区域(如吊装区、基坑),触发越界、滞留、长时间静止预警等,立即推送至管理人员,预防意外突发;人员在紧急情况可触发报警,系统实时定位并弹窗提示,提升紧急事件处理时效。

3.智能巡检与实时数据
巡检巡查管理和数字孪生:巡检巡查管理可制定巡检路线、配置巡检任务、巡检打卡签到、自动生成巡检记录等一系列操作。
(1)制定巡检路线:支持管理人员设定多个巡检点、配置多条巡检路线;
(2)配置巡检任务:支持管理人员配置巡检任务、巡检人员、巡检时段、巡检周期等;
(3)巡检打卡签到:巡检人员到达指定地点,通过定位硬件识别位置打卡,系统记录打卡时间和地点;
(4)巡检记录:系统自动生成巡检记录,巡检任务的结果、完成点位、未检点位、巡检时间等情况。
4.可视化数字孪生
基于真实BIM/GIS模型,通过可视化数据面板实时动态展示人员分布情况,实时监控人员位置及状态,同步生成各类统计图表,如人员变化趋势、区域统计、异常事件占比、人员分布热力图等,为资源调配与安全预警提供直观依据,助力管理者快速掌握全局态势。

基于UWB定位技术的工地安全管理系统以高精度定位为核心,串联人员管控、风险预警、巡检管理全流程,用数字化手段筑牢施工安全防线,降本增效的同时,推动工地安全管理向精细化、智能化转型。
希望本篇对大家有所帮助~点击下方可获取免费获取技术文档和解决方案↓↓↓↓↓↓↓