2019年数维杯国际大学生数学建模B题无人机避障问题设计规划求解全过程文档及程序

news2024/11/16 9:50:40

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
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot(一): SpringBoot的创建和使用

Spring的创建和使用1. 什么是Spring&#xff1f;2. SpringBoot的优点3. SpringBoot项目的创建3.1 使用IDEA创建3.2 使用网页创建4. 项目目录介绍和运行4.1 目录介绍4.2 项目运行4.3 输出hello world4.4 约定大于配置1. 什么是Spring&#xff1f; Spring的诞生是为了简化Java程…

Spring-boot启动失败 Unregistering JMX-exposed beans on shutdown 异常处理

目录一、异常错误二、原因三、解决方法一、异常错误 Spring-boot启动Run时&#xff0c;出现 o.s.j.e.a.AnnotationMBeanExporter - Unregistering JMX-exposed beans on shutdown 错误 *************************** APPLICATION FAILED TO START Description: The Tomcat conn…

【小程序】包与数据共享

文章目录使用 npm 包Vant WeappAPI Promise化全局事件共享MobX分包分包概念使用分包独立分包分包预下载使用 npm 包 目前&#xff0c;小程序中已经支持使用 npm 安装第三方包&#xff0c;从而来提高小程序的开发效率。但是&#xff0c;在小程序中使用npm 包有如下 3 个限制&am…

【韩顺平Linux】学习笔记3

【韩顺平Linux】学习笔记3一、文件目录指令pwd指令 ls指令cd指令mkdir指令rmdir指令touch指令cp指令rm指令mv指令cat指令more指令less 指令echo指令 head指令tail指令> 指令 >>指令ln指令history指令二、时间日期指令三、查找指令四、压缩和解压一、文件目录指令 根目…

【前端】Vue项目:旅游App-(3)TabBar:点击active效果、点击路由跳转

文章目录目标代码与过程设置active主题颜色添加点击active效果点击路由跳转效果总代码修改或新增的文件common.cssindex.csstab-bar.vue目标 添加点击active效果实现点击路由跳转效果 上一篇TabBar搭建&#xff1a;【前端】Vue项目&#xff1a;旅游App-&#xff08;2&#xff…

LVGL学习笔记12 - 复选框CheckBox

目录 1. Parts 1.1 LV_PART_MAIN 1.2 LV_PART_INDICATOR 2. 状态 3. 样式 3.1 设置字符串颜色 3.2 设置点击框外框颜色 3.3 修改点击框弧度 3.4 修改字符串与点击框的间隔 4. 事件 复选框通过lv_checkbox_create创建。一个CheckBox由一个点击框加一个Label组成。 obj1 …

Minikube Mac 安装 使用

Minikube Mac 安装 使用 环境要求 硬件要求 至少 2核 CPUs2GB 以上内存20GB 以上磁盘空间网络环境容器或虚拟机, 例如: Docker, QEMU, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation 本机环境 Mac Pro 10.13.6 Docker 18.09.1 …

半导体行业相关术语

目录 1.晶圆&#xff08;wafer&#xff09; 2. 自动化测试设备&#xff08;ATE Automatic Test Equipment&#xff09; 3.晶盒&#xff08;Cassette&#xff09; 4. 待测设备(DUT Device Under Test) 5. 探针接口板(PIB Prober Interface Board) 6. 设备接口板(DIB D…

干货 | web自动化总卡在文件上传和弹框处理上?

在有些场景中&#xff0c;需要上传文件&#xff0c;而 Selenium 无法定位到弹出的文件框&#xff0c;以及网页弹出的提醒。这些都是需要特殊的方式来处理。input 标签使用自动化上传&#xff0c;先定位到上传按钮&#xff0c;然后 send_keys 把路径作为值给传进去.如图所示&…

【计算机网络-物理层】通信基础

文章目录1 码元、速率、波特、带宽1.1 码元1.2 波特率1.3 比特率1.4 带宽1.5 相关例题2 奈氏准则、香农定理2.1 奈氏准则&#xff08;采样定理&#xff09;2.2 香农定理2.3 相关例题3 编码方式3.1 归零编码&#xff08;RZ&#xff09;3.2 非归零编码&#xff08;NRZ&#xff09…

【简单DP】[NOIP2007 普及组] 守望者的逃离

P1095 [NOIP2007 普及组] 守望者的逃离 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题意&#xff1a;思路&#xff1a;独立做出来的一道DP&#xff01;一开始我去模拟过程找子问题&#xff0c;然后去找阶段是什么本来想的是以路程作为阶段&#xff0c;但是1e8数组开不下那么…

如何看待PyTorch 2.0?

作者&#xff5c;吴育昕 1 为什么是TorchDynamo Graph capture 把用户 Python 写的模型代码变成 graph&#xff0c;是一切编译的根基。而 PyTorch 在试了这么多方案之后似乎已经锁定 TorchDynamo 作为 graph capture 的未来方向了&#xff0c;所以写一点关于 TorchDynamo 的…

假如面试官问你Babel的原理该怎么回答

1. 什么是 Babel 简单地说&#xff0c;Babel 能够转译 ECMAScript 2015 的代码&#xff0c;使它在旧的浏览器或者环境中也能够运行。 // es2015 的 const 和 arrow function const add (a, b) > a b;// Babel 转译后 var add function add(a, b) {return a b; };Babel…

pwr | 谁说样本量计算是个老大难问题!?(二)(独立样本均值篇)

1写在前面 上次介绍了两组发生率的样本量计算方法&#xff0c;通过pwr包进行计算非常简单&#xff0c;可以有效地减少我们的工作量。&#x1f618; 有时候我们想比较两组之间的均值&#xff0c;如何计算样本量又一次成了老大难问题。&#x1f912; 本期我们还是基于pwr包&#…

【自学Java】Windows安装PyCharm IDE

Windows安装PyCharm IDE PyCharm下载 PyCharm下载地址 https://www.jetbrains.com/pycharm/PyCharm下载 打开上面的链接&#xff0c;打开 Python 的开发工具 PyCharm 的下载页面&#xff0c;如下图所示&#xff1a; 这里我们点击 Download&#xff0c;跳转到新的页面&#…

错过短视频,微博奔向新浪

以后新浪或许会被叫做“微博新浪”。 2022年12月23日晚&#xff0c;港股微博发布公告称&#xff0c;拟斥资15亿元收购新浪网技术有限公司100%股权。此举被外界解读为微博将反向收购新浪。 曾经&#xff0c;微博还是新浪移动互联网时代的“船票”。随着门户网站逐渐凋零&#…

基于ODX/OTX诊断的整车扫描

| ODX (Open Diagnostic data eXchange) 是基于XML语言、开放的诊断数据格式&#xff0c;用于车辆整个生命周期中诊断数据的交互。它一开始由ASAM提出并形成标准MCD-2D&#xff0c;后来以ODX2.2.0为基础形成了ISO标准——ISO 22901-1。 | OTX (Open Test sequence eXchange) …

Redis主从复制哨兵模式

Redis主从复制&哨兵模式一 什么是Redis主从复制1.1 主从复制的架构1.2 主从复制的原理1.3 主库是否要开启持久化1.4 辅助配置&#xff08;主从数据一致性配置&#xff09;二 主从复制配置2.1 slave 命令2.2 配置文件三 主从复制常见问题四 Redis哨兵机制4.1 什么是哨兵模式…

WebSocket服务端和客户端代码示例

目录一、WebSocket简介二、WebSocket服务端代码示例三、WebSocket客户端代码示例四、运行服务端和客户端&#xff0c;查看输出结果一、WebSocket简介 WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工&#xff08;full-duplex&#xff09;通信&#x…

UE4 优化笔记

一、衡量场景性能的指标(这些指标优化前就要先记录下来&#xff0c;这样才知道优化了多少&#xff01;) 1.stat unit&#xff1a;单元的状态。最开始根据这个数据&#xff0c;确定大致的优化方向 Frame&#xff1a;每帧消耗的总时长 Game&#xff1a;游戏线程运行消耗的时间 D…