MATLAB三边定位算法:实现与应用

    前段时间完成了一个关于三边定位算法的课程设计。但是发现网上关于三边定位MATLAB的程序代码挺少的,所以想整理一下,供最初初初初级的初学者简单借鉴一下(拿来直接用)。

    三边定位中涉及到是否要将测距误差纳入考虑范围中,因此要考虑到不存在误差时的理想情况(三个圆交到一个点)和存在误差时的实际情况(三个圆无法交到一个点)。因此一共分为两章进行讨论。

PS:此文章仅供菜鸟做课题临时使用,程序有很大的漏洞,专业做课题的请不要看了,会浪费您的时间。同时欢迎有人能解决我第二章程序的疑问。

    ps:建议看完理想情况再看存在误差的实际情况,不要跳要不看不懂了。

一、理想情况下的三边定位

    三边定位(trilateration)法:分别以三个已知点位(例如雷达、测距仪)为圆心,待测点到已致点距离为半径作圆。三个圆相交点O为未知点位置。如下图1所示。

图1 三边定位

设未知点O坐标为(x0y0),三个测量点为圆心坐标分别为A(x1y1)、B(x2y2)、C(x3y3),三个已知点到未知点O距离分别为d1d2d3。那么三边定位公式如下图2。

图2 三边定位原理公式(不好意思b站一加公式就卡,只能截图了)

程序如下:

注意下边的程序是一个函数。需要新建一个函数源文件,然后再用这个程序!!!

function [locx,locy] = triposition(x1,y1,d1,x2,y2,d2,x3,y3,d3)
%              三点定位法                          %
%输入:
%   1.参考节点A(x1,y1),B(x2,y2),C(x3,y3)
%   2.定位节点O(locx,locy)到这三点的距离分别为d1,d2,d3
%   (locx,locy)为计算的定位节点O点的位置坐标

syms x y   %f符号变量
%--------------求解方程组------------------------------------
f1=(x1-x)^2+(y1-y)^2-d1^2;
f2=(x2-x)^2+(y2-y)^2-d2^2;
f3=(x3-x)^2+(y3-y)^2-d3^2;
% 解关于x,y的符号方程组,得到解的符号表示,并存入xx,yy
[xx,yy] = solve(f1,f2,f3,x,y);
px = eval(xx);  %解的数值px(1),px(2)
py = eval(yy);  %解的数值py(1),py(2)
locx = px;
locy = py;

测试:

寻找上边绿色的开始箭头“运行”  或者  “下边命令行窗口,输入下边的内容

输入:[locx,locy] = triposition(0, 0, 1, 2, 0, 1, 1, 1, 1)

输出:locx = 1;

           locy = 0;

二、实际情况下的三边定位

    由于测距误差的存在,因此以测量距离为半径的三个圆无法相交于一点,因此会出现如下图3所示情况。

图3 存在测距误差的三边定位实际情况

    直接上程序,我已经标明了改动部分,但这个程序是参考了别人的程序,恰巧发现能用,但为什么这么写-存在误差的时候能用我就不知道。仅供菜鸟快速完成课设使用,做专业课题的忽略掉我,谢谢。

(22年4月30日修改为什么能用,感谢评论区Ertist解析)

    下边使用高中方法解释一下,谁有更好解释可以再说一下。

    可以理解为:在理想的状态下,我两个方程f4、f5的解都是在x轴上,那么很成功我们能有一个公共的解。相对应的,在实际情况下,两个方程f4、f5的交点不在x轴了,但我仍然还是有一个交点。

手工画,大师造

手工画,真难看

    

function [locx,locy] = triposition(x1,y1,d1,x2,y2,d2,x3,y3,d3)
%              三点定位法                          %
%输入:
%   1.参考节点A(x1,y1),B(x2,y2),C(x3,y3)
%   2.定位节点O(locx,locy)到这三点的距离分别为d1,d2,d3
%   (locx,locy)为计算的定位节点O点的位置坐标

syms x y   %f符号变量
%--------------求解方程组------------------------------------
%-------理想情况到实际情况的变动部分-----------------------
f4=(x1-x)^2+(y1-y)^2-(x3-x)^2-(y3-y)^2-d1^2+d3^2;
f5=(x2-x)^2+(y2-y)^2-(x3-x)^2-(y3-y)^2-d2^2+d3^2;
% 解关于x,y的符号方程组,得到解的符号表示,并存入xx,yy
[xx,yy] = solve(f4,f5,x,y);
%--------------变动部分截止-------------------------------
px = eval(xx);  %解的数值px(1),px(2)
py = eval(yy);  %解的数值py(1),py(2)
locx = px;
locy = py;

当然%---理想情况到实际情况的变动部分--按照参考  CSDN博主「知行流浪」 进行稍微调整得到的如下,也是可以的

%-------理想情况到实际情况的变动部分-----------------------

f4 = 2*x*(x1-x3)+x3^2-x1^2+2*y*(y1-y3)+y3^2-y1^2-d3^2+d1^2;

f5 = 2*x*(x2-x3)+x3^2-x2^2+2*y*(y2-y3)+y3^2-y2^2-d3^2+d2^2;

% 解关于x,y的符号方程组,得到解的符号表示,并存入xx,yy

[xx,yy] = solve(f4,f5,x,y);

%--------------变动部分截止-------------------------------

测试:(实际情况章节内的两个程序,分别测试有、无误差的两种情况,测试输出结果相同)

①有误差时(无法交于一点):

输入:[locx,locy] = triposition(0, 0, 1.2, 2, 0, 1.3, 1, 1, 1.1)

输出:locx = 0.9375;

           locy = 0.1775;

②没有误差(能够交于一点):

输入:[locx,locy] = triposition(0, 0, 1, 2, 0, 1, 1, 1, 1)

输出:locx = 1;

           locy = 0;

三、拓展

    当然等之后深入一点你可以考虑质心定位算法,如图4。

图4 质心定位算法

如下图5所示,在未知点周围会出现Q、U、V三个交点那么运用质心定位算法是不是可以大致算出未知点/待测点(红星星)位置呢。

图5 在未知点周围会出现Q、U、V三个交点

这里只是提供一个思路因为是21年做的一个内容所以懒得再深究了,看到这里你已经知道最基本的三边定位怎么做了,所以后边的内容请大家自行学习,如果有做法,可以分享到评论区,给后人参考(可以是方法或者是网址都可以),我看22年4月底开始大家做课题的开始多了,互相分享吧加油!!!

深层次探究还请大家自行学习,仅供菜鸟入门,谢谢。

参考:

CSDN博主「知行流浪」https://blog.csdn.net/zengxiantao1994/article/details/70212895

如有侵权,请联系我我会删除。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空