【目标定位跟踪-原理及应用】Matlab仿真01 质心定位算法及其Matlab实现

质心定位算法原理及其Matlab实现

目标定位算法是获取目标位置的手段之一,利用观测信息、采用最合理的定位算法、结合实际应用领域的特点进行目标定位能达到较好的效果。定位算法不能完全得到与目标真实情况一致的位置信息,但它能最大限度地逼近真实位置,使定位误差降到合理的阈以下。
非测距定位,广泛地指不依赖任何信息,无须测量目标与观测站之间的距离和角度等信息,或者当测量的目标与观测站之间的距离和角度误差非常大的时候,只能用它们作为权值来处理。这类定位算法,只能依靠观测站的物理部署和简单的探测到目标的“有/无”的二进制探测信息对目标位置进行估计。非测距定位算法主要有质心定位算法、加权质心定位算法和网格定位算法等,它们虽然能够估计出具体位置,但是这个位置与目标真实位置的偏差依赖于观测站的部署密度,一般偏差是比较大的。

质心定位算法主要依赖对目标质心的估计,质量中心简称为质心,指物质系统上被认为质量集中于此的一个假想点。三角形中三条中线的交点、平行四边形的对角线、正六边形的对角线交点,这些点都可以看做这些几何图形的质心。
那么对于多质点的系统,假定每个质点的重量为 m i m_i mi,位置为 p ( x i , y i , z i ) p(x_i,y_i,z_i) p(xi,yi,zi),那么该系统的质心计算方法如下:
{ x c = ∑ m i x i m i y c = ∑ m i y i m i z c = ∑ m i z i m i \left\{ \begin{array}{rcl} x_c =\frac{\sum m_ix_i}{m_i} \\ y_c =\frac{\sum m_iy_i}{m_i}\\ z_c =\frac{\sum m_iz_i}{m_i} \end{array}\right. xc=mimixiyc=mimiyizc=mimizi
如果考虑各质点的质量一样,那么质心的计算方法则简化为:
{ x c = ∑ i = 1 N x i N y c = ∑ i = 1 N y i N z c = ∑ i = 1 N z i N \left\{ \begin{array}{rcl} x_c =\frac{\sum_{i=1}^N x_i}{N} \\ y_c =\frac{\sum_{i=1}^N y_i}{N} \\ z_c =\frac{\sum_{i=1}^N z_i}{N} \\ \end{array}\right. xc=Ni=1Nxiyc=Ni=1Nyizc=Ni=1Nzi
将质心定理用在定位算法上,那么假定每一个观测站的位置为 p ( x i , y i , z i ) p(x_i,y_i,z_i) p(xi,yi,zi),将探测到目标的所有观测站看成一个多质点系统,按照上式可以计算得到一个位置,这个位置便是目标位置的估计值。显然,当观测站的分布很稀疏时,这个定位误差会很大。

实例1:假定有6个观测站,随机分布在长100米,宽100米的场地上,每个观测站完全相同,它们的探测距离是50m。一个目标随机出现在该监测场地,被其中的几个观测站探测到,并计算估计位置,用MATLAB实现这个过程。
主程序代码如下:

%% %%%%%%%%%%%%% function CentroidLocalization 质心点位算法
% 定位初始化
Length = 100;      %场地空间 长
Width =100;         %场地空间 宽
d = 50;      %单个观测站对目标的探测距离
N = 6;        %观测站的个数
% 观测站位置初始化
for i = 1:N
    Node(i).x = Length*rand;
    Node(i).y = Width*rand;
end
% 目标的位置也进行随机化处理
Target.x = Length*rand;
Target.y = Width*rand;
O =[ ];        %空列表,保存能够探测到目标的观测站的位置集合
for i = 1:N
    if getDist(Node(i),Target)<= d      %调用距离计算函数
        O = [O;Node(i).x,Node(i).y];    %记录探测到目标的观测站的位置
    end
end
M = size(O,1);   %求数组O的第一个维度的数量,即探测到目标的观测站的个数
if M>0
    Est_Target.x = sum(O( :,1))/M;     %   调用公式用质心算法估计目标的位置x
    Est_Target.y = sum(O( :,1))/M;
    Error_Dist = getDist(Est_Target,Target);     %计算目标真实位置与估计位置的偏差距离
end

%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure
hold on
box on;
axis([0 100 0 100]);  %输出图形的框架
for i =1:N
    h1 = plot(Node(i).x,Node(i).y,'ko','MarkerFace','g','MarkerSize',12);
    text(Node(i).x+2,Node(i).y,['Node',num2str(i)]);       %标记观察站的号码
end
% 画目标的真实位置和估计位置并标注
h2 = plot(Target.x,Target.y,'k^','MarkerFace','b','MarkerSize',12);
text(Target.x+2,Target.y,'Target Position');
h3 = plot(Est_Target.x,Est_Target.y,'ks','MarkerFace','r','MarkerSize',12);
text(Est_Target.x+2,Est_Target.y,'Estimate Position');
% 将估计位置和真实位置用线连起来
line([Target.x,Est_Target.x],[Target.y,Est_Target.y],'Color','k');
% 画出目标半径d的范围
circle(Target.x,Target.y,d);
% 标明h1,h2,h3
legend([h1,h2,h3],'Observation Station','Target Position','Estimate Position');
xlabel(['error=',num2str(Error_Dist),'m']);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

距离计算子程序代码

function  dist= getDist(A,B)
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
dist = sqrt((A.x-B.x)^2+(A.y-B.y)^2);

画半径子程序代码

function   circle(x0,y0,r)
%UNTITLED 此处显示有关此函数的摘要
%   此处显示详细说明
theta = 0:pi/20:2*pi;
plot(x0+r*cos(theta),y0+r*sin(theta));


下面是两次运行的结果,可以看到特别是第一次定位误差是非常大的,定位误差和观测站的位置及部署的疏密程度关系密切。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子-Alex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值