蓝牙物联网室内定位系统解决方案

目前国内外室内定位技术较多,常见的有无线局域网(Wireless Fidelity,WiFi)、射频识别(Radio FrequencyIdentification,RFID)、蓝牙低功耗(Bletooth Low EnergyBLE)、超宽带(Ultra Wide BandUWB)技术等。近几年智能设备的迅速发展和蓝牙设备的生产制造成本越来越低,使得基于蓝牙技术的室内定位系统成为当下的研究热点。

蓝牙定位系统建设成本较为低廉、使用较为方便,因此有许多厂商采用这一技术实现室内定位。但是,大部分厂商更关注于平台端的展示效果,而忽略了对定位精度的优化。

蓝牙定位标签具有体积较小、便于携带的特点,因此该系统应用场景较为广泛,比如在化工园区、大型工厂、智造车间、隧道施工等需要对人员或物品进行实时定位的典型场景,同时在一些需要室内导航的场景也具有广泛的应用,如博物馆、景区、商场等

1、系统总体设计方案

室内定位系统

室内定位系统使用蓝牙信标的方式进行定位,蓝牙信标广播当前的信号强度,经过滤波处理后进行距离转换,通过在具体场景下布设的多网关进行数据的 LoRa 上报:由基站进行数据汇总并传输给服务器,服务器通过定位引整中的多点定位算法获取定位终端的位置数据,并将位置信息实时展示在Web页面。

系统涉及到以下几个部分,包括定位终端、蓝牙LoRa网关、LoRa基站和室内位置信息服务云平台。

(1)定位终端(待定位点):

具备蓝牙 4.0 以上功能的标签、手环、工卡等均可作为能够持续向网关发送信号强度值和自身的 mac 地址信息的定位终端。本系统采用自主研发的定位终端设备和 BlueNRG-2 蓝牙低功耗片上系统,使用Beacon 方式定时广播信号(定时时间可调),通过加速度传感器(G-Sensor)进行运动状态检测。

当终端设备处于静止状态下,可设置每隔一段时间(时间可调) 发送一次心跳数据。对于不同的部署场景,可对定位终端进行相关配置以满足定位实时性和功耗等需求。例如,在固定资产的定位场景中,定位终端(通常为标签)需固定在资产物体上,对于功耗的要求较高且其位置并不经常移动的,只有当物体移动时才对其实时定位:物体保持静止状态时,每隔固定时间发出信号,若接收不到,后台根据判断机制触发报警。

对于特殊区域的人员定位场景,人员随身携带定位终端(通常为工卡手环).对定位的实时性要求较高,但对功耗要求不高。因此定位终端有必要设计运动状态检测、心跳上报等功能以满足不同定位场景的需求。

(2)蓝牙

LoRa 网关(定位错节点):蓝牙网关部署在定位终端所在的室内环境中,部署方式根据实际环境验证后决定。本系统采用自主研发的蓝牙 LoRa 网关,该网关采用BlueNRG-1低功耗蓝牙系统级芯片接收蓝牙信号,以Cortex-M4内核的STM32f407为主控芯片,将接收到的蓝牙信号数据采用 SX1276 芯片进行 LoRa 扩频调制发送,实现远距离信号传输。

(3) LoRa基站:

系统的 LoRa 基站采用SX1302 芯片进行 8 路数据接收,首先将多信道的 LoRa 信号接收到基站中接收的数据经过整合后通过 MQTT 协议发送至服务器。

(4)室内位置信息服务云平台:

具有云平台集成数据库定位算法引擎和 Web 展示等功能。云平台接收从基站发来的各类数据并保存至数据库中,调用定位算法引擎进行计算,得到定位终端的坐标信息并保存,定位数据可发送给 web 端进行地图显示等。

室内定位系统的工作原理为:将多个网关设备部署在待定位点所在的室内环境,网关中的蓝牙接收器接收定位终端(iBeacon)定时广播的信号并进行汇总打包;通过网关的SX1276芯片进行 LoRa 发送,LoRa 基站接收到网关的数据包信息后将这些数据人网,并通过4G/WiFi/ 有线等方式远距离传输至室内位置信息服务云平台,高精度的定位引擎实时计算定位终端位置,最终在 Web 端展示。

2、RSSI 测距模型的确立

物联网室内定位系统

无线信号通过发送端发射,一般信号所带的能量在发射过程中会存在衰减“,即无线信号强度会随着距离的增大而衰减。通常无线设备常利用接收信导强度指示值 (ReceiveSignal Strength Indicator.RSSI)表示信号到达接收端的信号强度值。基于 RSSI的测距方法利用信号衰减程度与距离有一定数学关系,一般归纳为自由空间传播模型。

在实际定位环境中,存在人员的走动和物品位置的移动导致接收端接收的 RSSI 值存在抖动。如果直接通过接收信号的 RSSI值和公式(3) 换算得到接收端与发送端的距离会造成测距与真实距离误差过大,最终的定位点大幅度漂移因此,对于采集到的定位点 RSSI 值要经过一系列滤波处理后再进行距离的换算。

3、信号滤波方式

大量研究和实验表明,待定位点位于信号发送端固定距离的位置时,采集到的 RSSI值近似呈现为高斯分布”。因此,本文采用基于高斯滤波的方法对采集到的 RSSI值进行滤波处理,该处理方式的特点在于能够过滤掉因环境突变而出现的短时 RSSI过大或过小的抖动值。对于出现概率较大的值进行均值处理,从而得到对应距离的 RSSI特征值。

4、定位算法

基于 RSSI 测距是一种简单并容易实现的室内定位方法具体做法是利用 RSSI 值与距离的关系,得到待定位点(定位终端)与定位错节点(网关)的距离接着应用三边(三角)定位算法或多点定位算法将待定位点的位置估算出来由此实现了对定位终端的位置测算。

传统三边定位算法是基于圆形相交的原理,以三个定位错节点为圆心,以锚节点到待定位点的距离为半径做圆。由于信号的损耗,三个圆一般不会相交于一点,连接两个圆的圆心以及两个圆的交点、两条直线的交点即为策略点,则三个圆会得到三个策略点,策略点连线为一个三角形的区域,该区城的质心即为要求得的待定位点的坐标位置 。

出处:物联网技术

原标题:基于蓝牙技术的物联网室内定位系统

作者:葛敏婕 赵子涵

参考资料

https://www.hooketech.com/indoor-positioning-system.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/266549.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop入门学习笔记——六、连接到Hive

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 六、连接到Hive6.1. 使用Hive的Shell客户端6.2. 使用Beel…

ABC334 A-F

打的很懒的一场B卡了D看不懂题卡了F没看完题目理解错题意了,状态好差XD UNIQUE VISION Programming Contest 2023 Christmas (AtCoder Beginner Contest 334) - AtCoder A - Christmas Present 题意: 给出两个数B, G问哪个大 题解: 凑数…

nodejs微信小程序+python+PHP计算机网络在线考试系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

【数据结构入门精讲 | 第九篇】考研408排序算法专项练习(一)

前面几篇文章介绍的是排序算法,现在让我们开始排序算法的专项练习。 目录 判断题选择题填空题1.插入排序2.另类选择排序3.冒泡排序4.快速查找第K大元 判断题 1.希尔排序是稳定的算法。(错) 解析:稳定性是指如果两个元素在排序前后…

A Philosophy of Software Design 学习笔记

前言 高耦合,低内聚,降低复杂度:在软件迭代中,不关注软件系统结构,导致软件复杂度累加,软件缺乏系统设计,模块混乱,一旦需求增加、修改或者优化,改变的代价无法评估&…

LangChain 30 ChatGPT LLM将字符串作为输入并返回字符串Chat Model将消息列表作为输入并返回消息

LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…

docker笔记2-docker 容器

docker 容器的运行 docker run 镜像名:版本标签: 创建 启动容器 docker run 镜像名 ,如果镜像不存在,则会在线下载镜像。 注意事项: 容器内的进程必须处于前台运行状态,不能后台(守护进程运行…

单片机的RTC获取网络时间

理解网络同步校准RTC的原理需要考虑NTP、SNTP、RTC这三个关键组件的作用和交互。下面详细解释这个过程: 1. NTP(Network Time Protocol): 协议目的:NTP是用于同步计算机和设备时钟的协议。它通过在网络上与时间服务器通…

小白入门之安装Navicat

重生之我在大四学JAVA 第四章 安装Navicat (mysql可视化工具) 这里Navicat是15版本,不是最新版,有新版强迫症的自行百度 傻瓜式安装一直下一步就行 完成后切记不要打开,不要打开,不要打开 可以打开刚刚安装的navicat了 切…

【XML】TinyXML 详解(二):接口详解

【C】郭老二博文之&#xff1a;C目录 1、XML测试文件&#xff08;laoer.xml&#xff09; <?xml version"1.0" standalone"no" ?> <!-- Hello World !--> <root><child name"childName" id"1"><c_child…

Unity手机移动设备重力感应

Unity手机移动设备重力感应 一、引入二、介绍三、测试成果X Y轴Z轴横屏的手机&#xff0c;如下图竖屏的手机&#xff0c;如下图 一、引入 大家对重力感应应该都不陌生&#xff0c;之前玩过的王者荣耀的资源更新界面就是使用了重力感应的概念&#xff0c;根据手机的晃动来给实体…

无需改动现有网络,企业高速远程访问内网Linux服务器

某企业为数据治理工具盒厂商&#xff0c;帮助客户摆脱数据问题困扰、轻松使用数据&#xff0c;使得客户可以把更多精力投入至数据应用及业务赋能&#xff0c;让数据充分发挥其作为生产要素的作用。 目前&#xff0c;该企业在北京、南京、西安、武汉等地均设有产研中心&#xff…

体验一下 CodeGPT 插件

体验一下 CodeGPT 插件 0. 背景1. CodeGPT 插件安装2. CodeGPT 插件基本配置3. (可选)CodeGPT 插件预制提示词原始配置(英文)4. CodeGPT 插件预制提示词配置(中文)5. 简单验证一下 0. 背景 看到B站Up主 “wwwzhouhui” 一个关于 CodeGPT 的视频&#xff0c;感觉挺有意思&#…

DQL-基本查询

概念&#xff1a; 1&#xff0c;数据库管理系统一个重要功能就是数据查询&#xff0c;数据查询不应只是简单返回数据库中存储的数据&#xff0c;还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示 2&#xff0c;MySQL提供了功能强大、灵活的语句来实现这些操作 3…

docker笔记1-安装与基础命令

docker的用途&#xff1a; 可以把应用程序代码及运行依赖环境打包成镜像&#xff0c;作为交付介质&#xff0c;在各种环境部署。可以将镜像&#xff08;image&#xff09;启动成容器&#xff08;container&#xff09;&#xff0c;并提供多容器的生命周期进行管理&#xff08;…

Dash中 callback 5

app.callback 在Dash中&#xff0c;app.callback 被用于创建交互性应用程序&#xff0c;它用于定义一个回调函数&#xff0c;该函数在应用程序中发生特定事件时被触发。回调函数可以修改应用程序的布局或更新图表等内容&#xff0c;从而实现动态交互。 下面是一个简单的 app.…

BUG记录 | 使用阿里云OSS实现文件上传后,得到的url无法在浏览器中打开

项目背景 SpringBoot的项目&#xff0c;使用阿里云对象存储OSS对项目中的文件进行存储&#xff0c;所需文件也会通过IDEA中由官方Demo改编而成的工具类作为接口&#xff0c;调用接口后上传 问题描述 使用阿里云OSS实现文件上传后&#xff0c;通过postman测试得到的url无法在…

Python量化投资——金融数据最佳实践: 使用qteasy+tushare搭建本地金融数据仓库并定期批量更新【附源码】

用qteasytushare实现金融数据本地化存储及访问 目的什么是qteasy什么是tushare为什么要本地化使用qteasy创建本地数据仓库qteasy支持的几种本地化仓库类型配置本地数据仓库配置tushare 的API token 配置本地数据源 —— 用MySQL数据库作为本地数据源下载金融历史数据 数据的定期…

SQL分类

SQL分类 DDL 查询库 查询表 创建表 修改表 DML 添加数据 修改数据 删除数据 DQL 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 执行顺序 DCL 管理用户 管理权限 数据类型 数值类型 字符串类型 日期类型

Go自定义PriorityQueue优先队列使用Heap堆

题目 分析 每次找最大的&#xff0c;pop出来 然后折半&#xff0c;再丢进去 go写法 go如果想用heap&#xff0c;要实现less\len\swap\push\pop 但可以偷懒&#xff0c;用sort.IntSlice,已经实现了less\len\swap 但由于目前是大根堆&#xff0c;要重写一下less 因此&#xff…