本博客下载链接包含修改的word版本, 可免费下载阅览学习, 也可作为数学建模相关课程作业修改上交:
链接:https://pan.baidu.com/s/1HxzDk3q0p6y2xpuJyxPgvw?pwd=qtnc
提取码:qtnc
为保证无人机集群在遂行编队飞行时,尽可能的保持电磁静默减少电磁波信号的发射,可采用纯方位无源定位的方法调整无人机的位置。本文通过对无人机不同编队情况进行分析,给出了无人遂行编队飞行中的纯方位无源定位方法,以及相应的位置调整策略。
针对问题一第一问,由于均匀分布在圆周上发射信号的两架无人机编号已知且位置无偏差,我们可以得到三架发射信号的无人机的位置信息。因此,对该问题, 我们提出了两种方法实现被动接收信号无人机的位置定位。一种为建立极坐标, 根据已知的方向信息, 按照被动无人机是否在已知无人机位置中间的情况划分, 利用平面上三角形的正弦定理, 联立方程, 得到最终的结果;另一种为利用三角测量定位法, 将该问题转化为求解一个最小二乘问题,通过求解最小二乘问题,可以得到无人机的具体位置。
针对问题一第二问,由于无法得知FY00和FY01外其余发射信号的无人机的编号, 故无法直接利用三角测量定位法进行求解。需借助交叉定位的想法,构造两条相交的轨迹利用其交点确定无人机的具体位置。
针对问题一第三问,由于发送信号的无人机位置存在偏差, 为使得在发射信号的无人的数量尽可能的少的情况下,通过接收到的位置信息对无人位置进行调整,使其均匀分布与某一圆周上。我们利用目标拆分想法,将上述目标拆分为两个子目标,分别实现,从而避免在对无人机位置调整时,需要较多的无人机发送信号。
针对问题二,由于编队中无人机不一定保持同一高度飞行,并且无法得知初始位置信息。因此,我们结合模型特点,根据相邻无人机之间边角关系,构造了一种基于所需发射信号无人机数量最小的贪婪准则,并以此给出了问题二的无人机的位置调整方案。
关键词:三角测量定位法;交叉定位;贪婪策略;目标分解;调整策略
三角测量的定位算法Matlab程序
%三角测量的定位算法
%a1,a2,a3是三个夹角(假定坐标[x,y]未知)的模拟测量距离
function [P] = Triangle1(a1,a2,a3,R,k)
a1=a1*pi/180; a2=a2*pi/180; a3=a3*pi/180;%转换弧度制
alpha=2/9*pi;
theta=k*alpha;
dA=sqrt(R^2/(2*(1-cos(2*a1))));%%dA,dB,dC为相应第一小问中外接圆半径r1,r2,r3
dB=sqrt(R^2/(2*(1-cos(2*a2))));
dC=sqrt((R^2*(1-cos(theta))^2+(sin(theta)*R)^2)/(2*(1-cos(2*a3))));
A(1,1)=R/2;%%A,B,C为第一问中外接圆的圆心(x1,y1),(x2,y2),(x3,y3)
A(1,2)=sqrt(R^2/(2*(1-cos(2*a1)))-R^2/4);
B(1,2)=sqrt(dB^2+R^2*(1/2-sin(theta)^2/4))-R/2*sin(theta);
B(1,1)=R/(2*cos(theta))+tan(theta)*B(1,2);
eta=1+(1-cos(theta))^2/sin(theta)^2;
C(1,1)=R/eta+sqrt(abs(R^2/eta-dC^2/eta));
C(1,2)=(1-cos(theta))/sin(theta)*C(1,1);
%定义未知坐标x,y为符号变量
syms x y;
%距离方程,以信标节点为圆心,信标节点到未知节点的测量距离为半径作三个圆
f1 = (A(1)-x)^2+(A(2)-y)^2-dA^2;
f2 = (B(1)-x)^2+(B(2)-y)^2-dB^2;
f3 = (C(1)-x)^2+(C(2)-y)^2-dC^2;
%任两个方程联立,求任两圆交点
s1 = solve(f1,f2); %求A,B两圆的交点
s2 = solve(f2,f3); %求B,C两圆的交点
s3 = solve(f1,f3); %求A,C两圆的交点
%将结果(符号变量)转换为双精度数值
x1 = double(s1.x);
y1 = double(s1.y);
x2 = double(s2.x);
y2 = double(s2.y);
x3 = double(s3.x);
y3 = double(s3.y);
%选择内侧的三个交点
%两圆相交于两点,距第三个圆心近的为选定交点Pab,Pbc,Pac
d1(1) = sqrt(abs(((C(1)-x1(1))^2+(C(2)-y1(1))^2)));
d1(2) = sqrt(abs(((C(1)-x1(2))^2+(C(2)-y1(2))^2)));
if d1(1) <= d1(2)
Pab(1) = x1(1);
Pab(2) = y1(1);
else
Pab(1) = x1(2);
Pab(2) = y1(2);
end
d2(1) = sqrt(abs(((A(1)-x2(1))^2+(A(2)-y2(1))^2)));
d2(2) = sqrt(abs(((A(1)-x2(2))^2+(A(2)-y2(2))^2)));
if d2(1) <= d2(2)
Pbc(1) = x2(1);
Pbc(2) = y2(1);
else
Pbc(1) = x2(2);
Pbc(2) = y2(2);
end
d3(1) = sqrt(abs(((B(1)-x3(1))^2+(B(2)-y3(1))^2)));
d3(2) = sqrt(abs(((B(1)-x3(2))^2+(B(2)-y3(2))^2)));
if d3(1) <= d3(2)
Pac(1) = x3(1);
Pac(2) = y3(1);
else
Pac(1) = x3(2);
Pac(2) = y3(2);
end
%Pab
%Pbc
%Pac
%求三个圆内侧三个交点Pab,Pbc,Pac的质心,即为未知节点P,完成定位
P(1) = (Pab(1)+Pbc(1)+Pac(1))/3;
P(2) = (Pab(2)+Pbc(2)+Pac(2))/3;
end
第一问第三小问Matlab程序
clear all; clc;
orgin=[100,0;112,80.21;105,119.75;112,199.96;105,240.07;112,320.28];%原始数据
orgin(:,2)=orgin(:,2)*pi/180;%弧度制
orgin=[orgin(:,1).*cos(orgin(:,2)),orgin(:,1).*sin(orgin(:,2))];%换到平面直角坐标系
for i=1:length(orgin)
choose=orgin(i,:); %以编号为3的无人机为例,其余点只需更改坐标
direction=choose; %初步设定无人机移动方向
R=sqrt(choose(1).^2+choose(2).^2);%无人机到原点的距离
if R>98
direction=-direction;
end
direction=direction+20*rand(1,2);%给移动方向一个扰动
k=direction(2)/direction(1);
syms x y%求圆周与移动方向的交点
s=solve(x^2+y^2==98^2,y==k*x+-k*choose(1)+choose(2),x,y);
X=double(s.x);%双精度
Y=double(s.y);
dist=sqrt((X-choose(1)).^2+(Y-choose(2)).^2);
[temp,n]=min(dist);
point(1)=X(n); point(2)=Y(n);%找到距离无人机最近的交点
point %输出交点值
r = 98;%半径
a = 0;%圆心横坐标
b = 0;%圆心纵坐标
theta = 0:pi/20:2*pi; %角度[0,2*pi]
x1 = a+r*cos(theta);
y1 = b+r*sin(theta);
plot(x1,y1,'-')%画圆
hold on
line([choose(1),point(1)],[choose(2),point(2)],'Marker','*','MarkerIndices',[2]);
%画移动方向
axis equal
end