如何用蓝牙实现无线定位(一)--系统原理

news2025/1/19 11:10:27

1. 简介

  本项目将利用多个BLE4.0蓝牙模块,配合主控板、OLED显示屏等,构建一个无线定位系统。

  本项目的系统构成为:3个信号塔,1个中控台,2个被定位的目标。

       无线定位的用途有很多。比如,我们可以把固定的目标1看作等待救援的人或物,把可移动的目标2看作前来救援的机器人,就可以虚拟出一个救援场景模型。

       而现实中使用蓝牙技术进行无线定位,多见于商场、图书馆等室内环境的定位和导航。比如,在商场内安装数个蓝牙信号发射源;在商家门口安装蓝牙定位设备;对于顾客,则可以直接使用其智能手机的蓝牙模块,再配合一个商场专用的手机App或者小程序,就可以让顾客非常方便的在商场内部寻找自己想要到达的商家等。

2. 定位原理

(1)rssi无线接收信号强度

       Received Signal Strength Indication接收的信号强度指示,通过接收到的信号强弱测定信号点与接收点的距离,进而根据相应数据进行定位计算的一种定位技术。

       RSSI是射频信号理论术语,主要应用于发射机和接收机之间的距离测量。该方法是依据接收信号能量强度确定距离,对通信信道参数要求较高。其测距理论是:依据无线电波或声波在介质中传输,信号功率是随传播距离衰减的原理。根据信标节点已知信号的发射功率和节点接收的信号功率,通过信号与距离之间的衰减模型,就可以计算出节点间的距离。由于信号传播的过程中,受到距离和障碍物的影响。信号的功率强度随之衰减,间接影响精度。所以要求得到良好的精度,短距离才会体现这一点。

       RSSI的定位技术相比于TOA、TDOA、AOA、GPS具有成本低、容易实现等优势。如果室内定位精度要求不高,基于RSSI的定位技术完全可以满足。而且,现阶段对于作为节点的传感器,都能够完成发射测试信号功率的任务。主要进行实验时,节点发送数据包,也获取RSSI的测量值。该定位技术既无需额外硬件,又能完成复杂信息的分析处理,减小通信消费,节约成本,比较适用于无线传感器网络的定位系统。

几种测距方式对比 :

(2)rssi三点定位算法的基本原理

       三点定位算法在需要进行定位的空间放置3个AP(无线访问接入点),并且3个AP的位置已知,如果知道该空间内某位置的信号强度则可建立信号衰减模型,根据该信号强度计算出该位置到三个AP的距离。使用某位置移动设备的信号强度即可估算出其到附近AP的距离,如果能确定若干AP的位置,即可确定该移动设备的位置。由于障碍物的存在,信号衰减模型在实际使用时会存在一定误差。

       已知三个点的坐标和未知点到这三个点的rssi的信号值,求解未知点的坐标。

       首先是将rssi信号转换为距离:

           d=10^((ABS(RSSI)-A)/(10*n))

        其中d为距离,单位是m。

        RSSI为rssi信号强度,为负数。

        A为距离探测设备1m时的rssi值的绝对值,最佳范围在45-49之间。

        n为环境衰减因子,需要测试矫正,最佳范围在3.25-4.5之间。

        在获取未知点到三个点的距离后,剩下的就是求解未知点的坐标。我们都知道两个圆会相交于一个或者两个点(如果相交),那么三个圆如果相交的话,必然会交于一个点(三个探测设备在一条直线上的情况下有可能相交于两个点,这里不考虑),所以我们要求解的未知点便是以三个已知点为圆心,以他们与未知点之间的距离为半径画出的三个圆的交点。那么这个问题就转化为了求三个已知圆的交点,然后如果根据圆的方程:

       (x1 – x)^2 + (y1-y)^2 = r1^2

       (x2 – x)^2 + (y2-y)^2= r2^2

       (x3 – x)^2 + (y3-y)^2= r3^2

      求解的话,是非常难求出未知点的坐标的。

      这里介绍另一种程序容易实现的计算方法:

       ①、判断任意两个圆是否相切(内切或外切),这里可以设定一个误差允许值d,也就是 (x1 – x2)^2 + (y1-y2)^2= (r1+r2+d)^2

       满足上述公式时就认为两个圆相切,其中d为误差值,可以是正数或者负数。如果两个圆相切的话,那么交点就比较好求解了:

   x = x1+ (x2 - x1)*(r1/(r1 + r2));

   y = y1 + (y2- y1)*(r1/(r1 + r2));

       求解到x和y的坐标后,只需要用第三个圆进行验证,即求出这个点到第三个圆的圆心的距离,再和第三个圆的半径做比较,如果在误差允许范围内,那么就可以认为求得的x,y是三个圆的交点,也就是未知点的坐标。

       、没有任意两个圆相切,那么就先用两个圆求解两个交点,如下图:

 

       其中A,B是两个圆心,坐标分别为(xa,ya)和(xb,yb),C,D是两个圆的交点,E为AB与CD的交点。

        其中

   AB^2 = (xa – xb)^2 +(ya-yb)^2

        其中

    AC^2 =AE^2 + CE^2         ……………………1

    BC^2 = BE^2+ CE^2         ……………………2  

        AC = ra

        BC= rb

         AE + BE = AB = (xa – xb)^2+ (ya – yb)^2

   等式2转换为

        BC^2 = (AB - AE)^2 + CE^2

        BC^2 = AB^2 + AE^2 – 2*AB*AE + CE^2   ……………………3

       等式3减去等式1:

       BC^2 - AC^2 = AB^2 – 2*AB*AE

       AE = (rb ^2 - ra ^2 -AB^2)/( – 2*AB)

       于是可以根据以下公式求得CE

       CE^2 = AC^2 – AE^2

我们还可以获取E点的坐标(xE, yE)

       xE = xa + ( (xb- xa)*AE )/AB

       yE = ya + ( (yb- ya)*AE )/AB

然后我需要求得AB和CD的斜率KAB和KCD

      kAB = (yb - ya)/(xb - xa)

      kCD = (-1)/kAB //这里要注意kAB为0的情况

然后求得CD和x轴的夹角

      ∠CDX = atan(kCD)

这时候就可以求得C (xc, yc)和D(xd, yd)的坐标

      xc = xE + CE*cos(∠CDXs)

      yc = yE + CE*sin (∠CDXs)

      xd = xE - CE*cos(∠CDXs)

      yd = yE - CE*sin (∠CDXs) //这里也要注意sin (∠CDXs)和cos(∠CDXs)为nan的情况。

       至此,我们就求得了两个圆的两个交点坐标,然后只需要用这两个点去第三个圆做验证,就可以获得三个圆的交点,也就是我们要求的未知点。

       当我们基于rssi的三点定位算法实现蓝牙无线定位时,可按如下图所示位置放置蓝牙信号发射塔。

 

       在理想情况下,以三个定节点为圆心,各自与盲节点的距离为半径的圆会交于一点,但是实际测量中,因为有误差因素,导致三组方程出现6个解(即三圆两两相交,产生6个交点,如上图。选取靠内的三个交点(即图中的红色区域),取它们的坐标的平均值作为最终定位的盲节点坐标,即可完成定位。 

用蓝牙实现无线定位的完整内容请参考如何用蓝牙实现无线定位

---------------------------------------------------未完待续---------------------------------------------------

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zabbix拓扑图和聚合图形

目录 一、环境准备 1、搭建zabbix基础环境 2、创建被监控主机 二、拓扑图 1、拓扑图作用 2、拓扑图绘制步骤 三、聚合图形 1、聚合图形的作用 2、创建聚合图形 一、环境准备 1、搭建zabbix基础环境 zabbix基础环境部署参照:zabbix基础环境部署_桂安俊kyli…

方格取数 (两条路径,使得取得的数字和为最大)

设有 NN 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示: 某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。 在走过的路上&#xff0…

Vue中的组件生命周期

一个组件从创建到销毁的过程 成为生命周期。 在我们使用Vue3 组合式API 是没有 beforeCreate 和 created 这两个生命周期的 组件生命周期如下: onBeforeMount() 在组件DOM实际渲染安装之前调用。在这一步中,根元素还不存在。onMounted() 在组件的第一次…

【手把手】教你玩转SpringCloud Alibaba之Sentinel整合GateWay

1、网关流控介绍 在微服务系统中,网关提供了微服务系统的统一入口,所以在做限流的时候,肯定是要在网关层面做一个流量的控制,Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。 Sentinel 1.6.0 引入…

R语言隐马尔可夫模型HMM识别不断变化的市场条件

了解不同的市场状况如何影响您的策略表现可能会对您的收益产生巨大的影响。最近我们被客户要求撰写关于隐马尔可夫模型的研究报告,包括一些图形和统计输出。 某些策略在波动剧烈的市场中表现良好,而其他策略则需要强劲而平稳的趋势,否则将面…

【PdgCntEditor】解决PDF的目录页码和PDF实际页码不一致的问题,书签页码偏移页面偏移功能,PDF页面标签的添加

一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码,两者之间存在一定的偏移值;导致我们看目录后面的页码,并不能直接借此数字索引到对应页面,非常麻烦。 二、改变页码标签 这是第一种方法&…

电脑技巧:Win10粘贴文件到C盘提示没有权限的解决方法

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

VMware升级手册

1. 概述 1.1 实施范围 本次实施涉及上海SMVIC虚拟化平台的7台物理服务器、7台ESXI节点、一台VC(6.7升级到7.0),以及广德、如皋两个集群迁移到7.0VC。 1.2 实施内容 本项目中需要实施内容包括: 2. 前置准备 升级确认: 3. WBS 4. 实施过程 4.1 VC部署 运行安装包,点击…

R语言生存分析数据分析可视化案例

目标 本文的目的是对如何在R中进行生存分析进行简短而全面的评估。关于该主题的文献很广泛,仅涉及有限数量的(常见)问题。最近我们被客户要求撰写关于生存分析的研究报告,包括一些图形和统计输出。 可用的R包数量反映了对该主题的…

SpringBoot 配置文件这样加密,才足够安全!

1. 前景 在使用Springboot时,通常很多信息都是在application.yml中直接明文配置的,比如数据库链接信息,redis链接信息等等。但是这样是不安全的。 所以需要对敏感数据进行加密,这样防止密码泄露 Jasypt这个库为我们解决了这个问…

[附源码]计算机毕业设计springboot-大学生健康档案管理

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

初识Pytest自动化测试框架,我彻底懂了

初识Pytest Pytest是Python实现的一个测试工具,可以用于所有类型和级别的软件测试。 Pytest是一个可以自动查找到你编写的用例并运行后输出结果的测试框架。 Pytest的特点: 是一个命令行工具,编写用例简单,可读性强非常容易上手…

2023年高企申报准备工作,明光市企业可以提前做这些准备

为了帮助企业提前准备和更好地开展2023年高新技术企业认定申报工作,安徽省大力鼓励企业申报高新技术企业,相应出台了相关政策,同时对于高企申报也有很多奖补,下面小编汇总了滁州市2023年申报,企业提前准备工作有哪些。…

黑群晖从入门到入土,自编译适合自己硬件的黑群晖7.1.x引导(黑群晖DSM7.X引导用arpl编译教程)

写在前面的话 没啥好说的,只需要感谢在GitHub上开源代码的巴西老哥就好,好了废话不多说直接开始。 黑群晖DSM7.X引导用arpl编译教程写在前面的话一、需要的软硬件清单二、制作引导盘1、下载arpl镜像2.1.1、制作PE启动盘,这是使用msata硬盘或…

3. Vue.js 3.0 响应式系统原理

1.响应式系统原理-介绍 接下来通过模拟Vue3的响应式系统来深入了解它内部的工作原理。先来回顾一下Vue3重写了响应式系统,和Vue2相比,Vue3的响应式系统底层采用proxy对象实现,在初始化的时候不需要遍历所有的属性,把属性通过defi…

C语言——结构体(入门)

文章目录1.结构体的声明1.1.结构体是什么?1.2.结构体的声明1.3.结构体的定义和初始化2.结构体成员的访问3.结构体传参1.结构体的声明 1.1.结构体是什么? 在生活中往往很难用一个准确的数据类型来描述一个物体,例如一本书,描述它…

编码技巧——Mybatis分页插件PageHelper使用

本篇介绍Mybatis分页插件PageHelper的使用,本质上是Mybatis拦截器起作用,在执行目标SQL之前添加count语句及拼接limit到目标SQL后面,这里不再赘述,Mybatis拦截器相关知识可参考Mybatis——拦截器Interceptor,本篇仅简单…

12_AJAX

知识点1【定时器】(重要) 知识点2【日期Date对象】 知识点3【Math数学对象】(了解) ​编辑 知识点4【string对象】 indexof函数: substring()函数: 知识点5【全局函数】(了解) …

Android使用高德地图实现运动轨迹绘制和轨迹回放

功能的实现完全是使用高德地图进行实现的,先看一下效果图吧! 下图是在绘制轨迹的过程: 下图是在轨迹回放的过程: 下图是记录运动的时间区间: 其实这个实现起来还是很容易的,总体逻辑就是:定位—…

Meter接口测试使用教程哪里找?

接口测试是测试工程师的必备技能之一,运用JMeter工具一步步实现接口请求,数据参数化,断言等操作,通过常见的企业实际测试场景详解JMeter各项技术使用,最后结合Jenkins持续集成实现企业级小程序接口自动化测试&#xff…