2019年数维杯国际大学生数学建模
B题 无人机避障问题设计规划
问题重述:
任务1:假设无人机在飞行过程中不受风向、湿度等外界因素的影响,飞行速度和拍摄角度恒定,无人机对一定宽度的区域进行直线飞行模式航拍。执行此航拍的飞行无人机的高度范围是多少,并提出指定拍摄角度下的最佳航拍高度。
任务2:假设无人机飞行高度固定,飞行速度恒定,无人机需要在实际地面条件下进行更精确的图像采集,请计算无人机拍摄角度的最佳射程。
任务3:假设无人机的飞行高度是固定的,飞行速度是恒定的,无人机正在收集地面上某个运动物体的轨迹。请计算无人机射击角度的变化模式。
任务4:无人机在飞行过程中遇到信号塔、电线杆、房屋等障碍物,请计算出最佳飞行速度、飞行高度和拍摄角度,并提供相关数据模拟实验。
整体求解过程概述(摘要)
随着技术的不断进步,无人机在社会生活中的应用越来越广泛。但是,对于第一架无人机的新手来说,很难掌握无人机的拍摄。如何使用无人机拍出令人满意的照片是需要解决的问题之一。本文以无人机为实验平台,研究飞行高度、速度。本文的主要研究工作和结论如下:
本文利用图像之间的几何关系计算无人机位置特征值,并以地面目标分辨率为参考。本文利用基于单幅图像的相机姿态算法推导无人机的最佳飞行距离。
本文研究了在无人机飞行高度固定、飞行速度恒定的条件下,拍摄角度对地面物体成像的影响。利用基本矩阵分解算法建立飞行高度、速度和射击角度的优化函数。在地面物体图像的清晰度要求下,估计无人机拍摄角度的最佳范围。
研究了无人机射击角度的动态优化过程。首先,用轨迹序列表示轨迹,描述轨迹的运动结构,对飞行高度、速度和射击角度的基本矩阵函数进行分割,得到无人机的射击;计算无人机拍摄角度的变化规律。
针对无人机在飞行过程中遇到障碍物的情况,采用人工势场算法进行路径规划和避障。结合无人机的线性飞行特性,确定无人机的拍摄角度。仿真实验验证了算法的有效性。
模型假设:
假设1:假设无人机在飞行过程中不受风向、湿度和天气变化等外部因素的影响。
假设2:假设无人机相机没有质量问题。快门瞬间开启和关闭,无延迟,正常对焦,曝光适当。
假设3:假设无人机飞行过程中没有高频抖动、GPS定位系统干扰、电池电量低等异常情况。
问题分析:
对问题一的分析
首先,本课题主要考察无人机飞行高度、拍摄角度与地面物体成像之间关系的研究。在这里我们可以将无人机的最佳飞行高度解释为可以区分地面物体的最佳高度。因为我们用无人机拍摄的是一张图片,通过图片进行解释,图片呈现在图片中是分辨率的大小。根据组成关系,我们可以知道飞行高度应该是根据项目地面分辨率的要求来设计的。这种情况适用于拍摄角度正上方的情况。当拍摄角度改变时,构图关系也会发生变化。地面分辨率在与投影点不同的位置发生变化。距离越远,分辨率越小。我们需要建立目标位置与飞行高度、物镜尺寸之间的夹角关系,然后使用上面的高度设计进行调整。
对问题二的分析
我们可以将这个问题表示为优化问题。优化目标是最佳拍摄角度。物镜功能是地面物体成像最清晰在这个拍摄角度。也就是说,得到的高分辨率约束是飞行的高度和速度是固定的。因此,首先,它们应该在飞行的高度和速度以及射击角度的影响下建立。分辨率的目标是优化方法可以选择线性规划。
对问题三的分析
根据任务三的描述,可以得出结论,这是一个动态优化问题。所谓动态优化,是指对车辆运动轨迹进行动态切割。所谓动态切割,是指可以根据不同的运动规律将飞行器的运行轨迹切成几段,然后在飞行高度和速度以及拍摄角度的影响下建立每一段,它们协同工作所使用的分辨率的目标是获得最大的优化方法。
对问题四的分析
这也是优化类别之一。这里我们可以选择图论和遗传算法的组合优化思想来构建。首先,我们使用图论算法对每个主要障碍点进行校准,并记录航拍区域内的重要观测和记录对象。我们的最终目标是避开上述障碍,同时拍摄高分辨率物体分辨率。那么我们的优化可以按照这个思路,首先,目标函数仍然是获得高分辨率的地面物体图像。由于飞行高度和速度的原因,另一个目标函数是采取较短的时间,约束条件是越过障碍物,即避开图论中的障碍物,加上其他约束,如面积大小、电量等,约束方法可以选择多目标规划模型,选择遗传算法可用于求解多目标优化模型。
模型的建立与求解整体论文缩略图
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
程序代码:
部分Matlab程序如下:
function [Rp, tp] = CaculPose ( Camerb, Object)
XXc = Camerb;
XXw = Object;
n = size(XXw,2);
Q = zeros(4,1);
for i = 1:n
if i == 1 || i == 2
continue
end
a1 = XXw(:,1)-XXw(:,i);
a2 = XXw(:,2)-XXw(:,i);
a3 = xcross(a1,a2);
a4 = xcross(a2,a3);
a2 = a2/norm(a2);
a3 = a3/norm(a3);
a4 = a4/norm(a4);
A = [a4 a2 a3];
b1 = XXc(:,1)
-XXc(:,i);
b2 = XXc(:,2)
-XXc(:,i);
b3 = xcross(b1,b2);
b4 = xcross(b2,b3);
b2 = b2/norm(b2);
b3 = b3/norm(b3);
b4 = b4/norm(b4);
B = [b4 b2 b3];
Ri = B * A';
Qi = quater(Ri);
Q = Q + Qi;
end
Qp = Q /(n
-2);
Rp = Eler(Qp);
t = zeros(3,1);
for j = 1:n
t = t + XXc(:,j);
end
tp = t / n;
return
function c = xcross(a,b)
c = [a(2)*b(3)
-a(3)*b(2);
a(3)*b(1)
-a(1)*b(3);
a(1)*b(2)
-a(2)*b(1)];
return
function Q = quater(R)
r11 = R(1); r12 = R(4);r13 = R(7);
r21 = R(2); r22 = R(5);r23 = R(8);
r31 = R(3); r32 = R(6);r33 = R(9);
q1 = 0.5*sqrt(1+r11+r22+r33);
q2 = 0.25*(r32-r23)/q1;
q3 = 0.25*(r13-r31)/q1;
q4 = 0.25*(r21-r12)/q1;
Q = [q1 q2 q3 q4]';
return
function R = Eler(Q)
q0 = Q(1);q1 = Q(2);q2 = Q(3);q3 = Q(4);
r11 = (q0)^2+(q1)^2-(q2)^2-(q3)^2;
r12 = 2*(q1*q2-q0*q3);
r13 = 2*(q1*q3+q0*q2);
r21 = 2*(q1*q2+q0*q3);
r22 = (q0)^2-(q1)^2+(q2)^2-(q3)^2;
r23 = 2*(q2*q3-q0*q1);
r31 = 2*(q1*q3-q0*q2);
r32 = 2*(q0*q1+q2*q3);
r33 = (q0)^2-(q1)^2-(q2)^2+(q3)^2;
R = [r11 r12 r13;
r21 r22 r23;
r31 r32 r33];
return
function main()
MM=size(G,1); % G Topographic map is 01 matrix, if 1 is an obstacle
Tau=ones(MM*MM,MM*MM); % Tau initial pheromone matrix
Tau=8.*Tau;
K=100; % Number of iterations
M=50;
S=1 ; % The starting point of the shortest path
E=MM*MM; % destination of the shortest path
Alpha=1; % Alpha A parameter that characterizes the importance of the pheromone
Beta=7; % Beta A parameter that characterizes the importance of a heuristic factor
Rho=0.3 ; % Rho pheromone evaporation coefficient
Q=1; % Q pheromone increases the intensity factor
Minkl=inf;
Mink=0;
Minl=0;
D=G2D(G);
N=size(D,1); %N indicates the size of the problem (number of pixels)
a=1; the side length of the % small square pixel
Ex=a*(mod(E,MM)-0.5); %End point abscissa
if Ex==-0.5
Ex=MM-0.5;
end
Ey=a*(MM+0.5-ceil(E/MM));%Terminal point ordinate
Eta=zeros(N); % heuristic information, taken as the reciprocal of the straight line distance to the
target point
% following heuristic information matrix
For i=1:N
Ix=a*(mod(i,MM)-0.5); if ix==-0.5
ix=MM-0.5;
end
iy=a*(MM+0.5-ceil(i/MM));
if i~=E
Eta(i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5;
else
Eta(i)=100;
end
end
ROUTES=cell(K,M); % uses the cell structure to store the crawling route of each ant of each
generation.
PL=zeros(K,M);
%Use matrix to store the length of crawling route of each ant of each generation
% Start K round ant foraging activities, sending M ants per round
for k=1:K
for m=1:M
W=S; % current node is initialized to the starting point
Path=S; % crawl route initialization
PLkm=0; % crawl route length initialization
TABUkm=ones(N); % taboo table initialization
TABUkm(S)=0; % is already at the initial point, so to exclude
DD=D; % adjacency matrix initialization
% next step can go to the node
DW=DD(W,:);
DW1=find(DW);
for j=1:length(DW1)
if TABUkm(DW1(j))==0
DW(DW1(j))=0;
end
end
end
LJD=find(DW);
Len_LJD=length(LJD);
while W~=E&&Len_LJD>=1
% reel gambling method choose how to go nextPP=zeros(Len_LJD);
for i=1:Len_LJD
PP(i)=(Tau(W,LJD(i))^Alpha)*((Eta(LJD(i)))^Beta);
end
end
sumpp=sum(PP);
PP=PP/sumpp;
Pcum(1)=PP(1);
for i=2:Len_LJD
Pcum(i)=Pcum(i-1)+PP(i);
end
Select=find(Pcum>=rand);
to_visit=LJD(Select(1)); % establish probability distribution
Path=[Path,to_visit]; % path increase
PLkm=PLkm+DD(W,to_visit); % path length increased
w=to_visit;
for kk=1:N
if TABUkm(kk)==0
DD(W,kk)=0;
DD(kk,W)=0;
end
end
TABUkm(W)=0; % visited nodes are removed from the taboo table
DW=DD(W,:);
DW1=find(DW);
for j=1:length(DW1)
if TABUkm(DW1(j))==0
DW(j)=0;
end
end
LJD=find(DW);
Len_LJD=length(LJD); % number of optional nodes
end
% note the foraging route and route length of each ant for each generation ROUTES{k,m}=Path;
if Path(end)==E
PL(k,m)=PLkm;
if PLkm<minkl
mink=k;minl=m;minkl=PLkm;
end
else
PL(k,m)=0;
end
end
Delta_Tau=zeros(N,N); % update amount initialization
for m=1:M
if PL(k,m)
ROUT=ROUTES{k,m};
TS=length(ROUT)-1; % hops
PL_km=PL(k,m);
for s=1:TS
x=ROUT(s);
y=ROUT(s+1);
Delta_Tau(x,y)=Delta_Tau(x,y)+Q/PL_km;
Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km;
end
end
end
Tau=(1
-Rho).*Tau+Delta_Tau;
end
% drawing
plotif=1;
if plotif==1 % draw convergence curve
minPL=zeros(K);
for i=1:K
PLK=PL(i,:);
Nonzero=find(PLK);
PLKPLK=PLK(Nonzero);
minPL(i)=min(PLKPLK);
end
figure(1)
plot(minPL);
hold on
grid on
title(' Convergence curve change trend ');
xlabel(' Number of iterations ');
ylabel(' Minimum path length ');
figure(2)
axis([0,MM,0,MM])
for i=1:MM
for j=1:MM
if G(i,j)==1
x1=j
-1;y1=MM
-i;
x2=j;y2=MM
-i;
x3=j;y3=MM
-i+1;
x4=j
-1;y4=MM
-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
hold on
else
x1=j
-1;y1=MM
-i;
x2=j;y2=MM
-i;
x3=j;y3=MM
-i+1;
x4=j
-1;y4=MM
-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
hold on
end
end
end
hold on
title('Drone movement track ');
xlabel
('coordinatex');
ylabel('coordinatey');
ROUT=ROUTES{mink,minl};
LENROUT=length(ROUT);
Rx=ROUT;
Ry=ROUT;
for
ii=1:LENROUT
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);
if
Rx(ii)==-0.5
Rx(ii)=MM-0.5;
end
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));
end
plot(Rx,Ry)
end
plotif2=0;
if plotif2==1
figure(3)
axis([0,MM,0,MM])
for i=1:MM
for j=1:MM
if G(i,j)==1
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x3=j;y3=MM-i+1;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
hold on
else
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x3=j;y3=MM-i+1;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
hold on
end
end
end
for k=1:K
PLK=PL(k,:);
minPLK=min(PLK);
pos=find(PLK==minPLK);
m=pos(1);
ROUT=ROUTES{k,m};
LENROUT=length(ROUT);
Rx=ROUT;
Ry=ROUT;
for ii=1:LENROUT
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);
if Rx(ii)==-0.5
Rx(ii)=MM-0.5;
end
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));
end
plot(Rx,Ry)
hold on
end
end
function D=G2D(G)
l=size(G,1);
D=zeros(l*l,l*l);
for i=1:l
for j=1:l
if G(i,j)==0
for m=1:l
for n=1:l
if G(m,n)==0
im=abs(i-m);jn=abs(j-n);
if im+jn==1||(im==1&&jn==1)
D((i-1)*l+j,(m-1)*l+n)=(im+jn)^0.5;
end
end
end
end
end
end
end