三点定位法原理及实现——蓝牙定位
三点定位法原理及实现——蓝牙定位
- 前言
- 原理
- 两圆相交
- 两圆不相交
- 代码实现
前言
最近在做蓝牙室内定位,蓝牙定位用到的一个非常经典的算法就是三点定位法。
原理
三点定位法,顾名思义首先有三个圆点,同时我们也知道这三个圆的半径,最终求得三圆的交点,达到定位效果。如图:
我们的目的是求得O点,利用毕达哥拉斯定理我们可以快速求得O点坐标。不过事与愿违,现实情况并不总是如人意,而是这样:
甚至有的情况其中两个圆或者三个圆完全就不相交,如下图:
由于这些误差原因,实际上想要准确的知道使用者当前位置是相当困难的,但是我们可以通过运算得到一个近似解。为了应付这些情况,我们需从两个圆入手,先找到两两圆之间的中心点,再求三圆的中心点。
除去圆中圆的情况(现实基本上不存在),两圆关系可分为两种,相交,不相交。
两圆相交
可知此时两圆交点A,B,我们的目标点是AB中点C。根据勾股定理我们可知
{PQ=PC+QCQA2=QC2+AC2PA2=PC2+AC2\begin{cases} \quad PQ=PC+QC\\ \quad QA^2=QC^2+AC^2\\ \quad PA^2=PC^2+AC^2 \end{cases} ⎩⎪⎨⎪⎧PQ=PC+QCQA2=QC2+AC2PA2=PC2+AC2
解得:
PC=PQ2+PA2−QA22PQPC=\frac{PQ}{2}+\frac{PA^2-QA^2}{2PQ}PC=2PQ+2PQPA2−QA2
根据比例关系求得坐标:
{x=xP+(xQ−xP)PCPQy=yP+(yQ−yP)PCPQ\begin{cases} \quad x=x_P+\frac{(x_Q-x_P)PC}{PQ}\\ \quad \\ \quad y=y_P+\frac{(y_Q-y_P)PC}{PQ} \end{cases}⎩⎪⎨⎪⎧x=xP+PQ(xQ−xP)PCy=yP+PQ(yQ−yP)PC
两圆不相交
如图,我们需要求O点,简单的做法就是直接根据半径比例计算
{sum=rP+rQx=xP+(xQ−xP)rPsumy=yP+(yQ−yP)rPsum\begin{cases} \quad sum=r_P+r_Q\\ \quad \\ \quad x=x_P+\frac{(x_Q-x_P)r_P}{sum}\\ \quad \\ \quad y=y_P+\frac{(y_Q-y_P)r_P}{sum} \end{cases}⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧sum=rP+rQx=xP+sum(xQ−xP)rPy=yP+sum(yQ−yP)rP
代码实现
struct Point{ //点坐标int x; //x轴int y; //y轴Point() :x(0), y(0) {};
};//三点定位法
//dis:半径
//points:圆心
Point threePoints(float *dis, Point *ps) {Point p;if (dis == NULL || ps== NULL)return p;for (int i = 0; i < 3; ++i) {//检查距离是否有问题if (dis[i] < 0)return Point();for (int j = i + 1; j < 3; ++j) {//圆心距离float p2p = (float)sqrt((ps[i].x - ps[j].x)*(ps[i].x - ps[j].x) +(ps[i].y - ps[j].y)*(ps[i].y - ps[j].y));//判断两圆是否相交if (dis[i] + dis[j] <= p2p) {//不相交,按比例求p.x += ps[i].x + (ps[j].x - ps[i].x)*dis[i] / (dis[i] + dis[j]);p.y += ps[i].y + (ps[j].y - ps[i].y)*dis[i] / (dis[i] + dis[j]);}else {//相交则套用公式(上面推导出的)float dr = p2p / 2 + (dis[i] * dis[i] - dis[j] * dis[j]) / (2 * p2p); p.x += ps[i].x + (ps[j].x - ps[i].x)*dr / p2p;p.y += ps[i].y + (ps[j].y - ps[i].y)*dr / p2p;}}}//三个圆两两求点,最终得到三个点,求其均值p.x /= 3;p.y /= 3;return p;
}
三点定位法原理及实现——蓝牙定位相关推荐
- 揭秘蓝牙定位技术,实现精准室内导航
提及定位,我们首先想到的是GPS定位系统.然而,GPS主要适用于室外环境,在室内定位方面存在局限性,这主要归结于两个原因:首先,GPS信号功率极低,接收要求相当高,只有在天线对空无遮挡物的情况下才能接 ...
- 三点定位法(原理及实现)
三点定位法(原理及实现) 背景 学习笔记 参考 https://blog.csdn.net/jjwwwww/article/details/87714318#_4 由于文中大量数据来自上述博客,因此记 ...
- 全面阐述蓝牙高精度AOA定位技术原理,帮你解决蓝牙定位一切隐患-新导智能
随着市场对低功耗蓝牙定位服务的需求不断增长,越来越多的客户希望将定位服务支持整合到现有产品中,包括智能物流.智能医院病患监护和智能学校领域等.这对于苏州新导低功耗蓝牙高精度AoA定位的商业化非常重要. ...
- 蓝牙定位技术的原理和应用
蓝牙(Bluetooth)是一种短距离的无线通信技术,可以通过一个短距离的通讯网络,让计算机或移动设备与另一台计算机或智能设备建立通讯连接.蓝牙也被用来为移动电话和个人数字助理(PDA)设备实现定位. ...
- 室内定位常用定位技术_米级蓝牙定位方案,厘米级UWB定位方案
前言 随着物联网生态链逐渐走向成熟,各行各业对定位的需求也大大增加.由于GPS卫星信号在室内无法定位,且容易受到各种无线电信号的干扰,为实现"最后一公里"的室内位置服务,目前主流的 ...
- 商用蓝牙定位算法剖析
商用蓝牙定位算法剖析 前言 XXX公司定位算法 运用资源 定位算法逻辑 实体蓝牙布置 优点和缺点 XXXX公司定位算法 运用资源 定位算法逻辑 实体蓝牙布置 优点和缺点 前言 目前在做蓝牙定位,找了成 ...
- RFID+Lora+蓝牙定位技术解决室内人员定位技术难题,实现全方位定位监测-新导智能
要实现现实生活中人以及物的定位,并不是那么容易就能实现的,要根据具体情况具体分析,人的定位:养老院的老人,工地的工人,化工厂的作业人员.物的定位:机场手推车,仓库物资,文物展品等.具体要应用哪种定位技 ...
- BLE 蓝牙网关与蓝牙定位
参考:[IoT]BLE 蓝牙网关与蓝牙定位技术解析 地址:https://blog.csdn.net/liwei16611/article/details/85245109?spm=1001.2014 ...
- html5 接收蓝牙广播_蓝牙定位技术浅析(化工厂应用)
蓝牙定位基于RSSI(Received Signal Strength Indication,信号场强指示)定位原理.根据定位端的不同,蓝牙定位方式分为网络侧定位和终端侧定位.由于蓝牙由于是近场通信其 ...
- 蓝牙5.1定位--蓝牙定位信标--新导智能
蓝牙历经点对点音频传输运用,BLE 智能穿戴设备运用;Mesh智能家居运用;在昨日宣布正式进入准确认位商场范畴.依据行业观察,蓝牙定位服务的商场时机在过去几年中迅速增长,到2022年蓝牙定位解决计划产 ...
最新文章
- 38首经典华语情歌E文版
- 人工智能:决胜未来之道培训课程大纲
- 互联网绑上美国外交政策战车
- 学JS的心路历程Day28 - PixiJS -基础(二)
- python--微信小程序获取手机号码报错
- Web 标准实践系列(一)——Google 的首页
- DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
- AI 时代,为何机器人公司无法盈利只能走向倒闭?
- javascript中的时间处理
- 解决IE6、IE7、IE8、Firefox兼容的两种方案
- c读取txt文件内容并建立一个链表_面试官给我挖坑:rm删除文件之后,空间就被释放了吗?...
- socket用起始码分割_编码器基础——格雷码的编码美学
- html中的表格背景透明度标签,透明度 背景
- 小心 transmittable-thread-local 的这个坑
- 机器学习笔记之朴素贝叶斯分类算法
- LED智能紫外(UVC+UVA)消毒灯方案
- python后缀名是什么意思_python文件的后缀名是什么
- 解决:windows10网络图标被重名名为Network
- SMT钢网:MARK点如何选择?
- Anolis OS8.6QU1通过cephadm部署ceph17.2.0分布式块存储(三)添加其它主机和添加mgr节点
热门文章
- 笔记本电脑合上盖子不休眠设置方法
- 王慧文清华产品课(六)
- 手机计算机文件夹加密文件,手机文件夹加密锁软件加密步骤【图文教程】
- goland等IDE连接远程服务器
- LAYA_展示富文本
- 三种碎片化方法:RECAP, BRICS与eMolFrag
- 解决小程序直播组件live-player全屏问题
- burst什么意思_burst是什么意思_burst在线翻译_英语_读音_用法_例句_海词词典
- 安装bluefish
- linux dsi接口,RPi 树莓派 DSI 接口研究 MIPI raspberry pi