2022数模国赛B题无人机第一题第一小问的简单编程

这篇具有很好参考价值的文章主要介绍了2022数模国赛B题无人机第一题第一小问的简单编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

2022年国赛B题是关于无人机定位的抽象模型,总体难度不大。接下来简单介绍一下第一题第一小问的程序实现,当时国赛仓促,写的比较简略,仅供参考。

背景介绍

无源定位

第一个关键词是无源定位,无源定位可以理解为需要通过计算才能求解出具体位置,位置不能直接测出。具备隐蔽性,一般不需要电磁波的发射。

无源定位有三种普遍的方法:交叉测向定位法,时差定位法和开普勒定位法,交叉测向法是通过多个基站接收信号,获得信号方位的角度,根据欧式几何来计算对应距离的一种方式,本题采用的方式与之类似。时差定位法和开普勒定位法,一个是根据信号传播的时差,一个是根据开普勒效应,发射信号和接收信号的物体具有相对速度时,接收到的信号的频率会发生变化。

交叉测向和纯方位定位

传统的交叉测向定位,是用两个基站接收运动物体的信号,接收到的信号是方位角,建立三角形,通过两个角,基站间的距离来计算基站和运动物体之间的距离。

本题中用到的纯方位定位,是被测无人机接收两架及两架以上基准无人机的信号,获得信号的角度差,通过位置分布关系和欧式几何计算距离。

问题重述

题目要求

2022数模国赛B题无人机第一题第一小问的简单编程

 问题重述

 已知无人机编队的相对位置(即距离),位置有偏差的无人机接收三个基准无人机信号夹角,试建立一个模型,输入角度和相对位置信息可以计算出距离,确定有偏差无人机的位置。

建模思路

误差范围

题干中(本文章未载入题干的图片)无人机飞行的相对位置保持不变,因此可以确定最大误差范围:

2022数模国赛B题无人机第一题第一小问的简单编程

 设半径是R,圆周上9架无人机均匀分布,角度为40°。可以计算出最大偏差半径为Rsin20°。

同时任意圆周无人机任意两点之间的弦长也可以计算:2Rsin(n20°),(n为间隔数)。

定位模型

如何通过角度来计算呢?因为相对位置保持不变,基准无人机编号已知,可以判断相对位置,根据相对位置关系来判断某信号是某无人机发射的。

可以设置一个数组,储存位置编号,输入基准无人机的编号和待测无人机的编号,可以返回出三架基准无人机的相对位置关系(左,中,右)。本文代码为了简单,直接固定了基准无人机,判断过程也直接给出。当然,稍微修改一下就可以通用了;

具体计算公式是用余弦定理给出来的。未知量是接收无人机和三架发射无人机之间的距离,x,y,z三个变量。已知量是三个角度alpha,beta,gama(对应任意两条信号的夹角),以及基准无人机之间的相对距离L1,L2,L3。

分别建立3个方程,对应的是3个三角形和余弦公式(接收无人机和两个圆周上的无人机,接收无人机和圆周上的一个无人机和圆心的无人机)

3个变量,3个方程,可以求出解。

编程思路

偏差位置

设置偏差位置,需要先建立坐标系,建立以圆心的极坐标系,可以表示出基准位置的坐标。同时相对于标准位置的偏差圆,半径设置为0-Rsin20°的随机值,相对于标准位置的角度随机,即可生成偏差位置的坐标。

相对位置信息

储存编号信息,输入3架基准无人机的编号和接收无人机的编号可以返回相对位置关系。

校准集和非校准集

这里可以玩的花一些,设置校准集和未校准集,随机从校准集里面选择两个作为圆周上基准的无人机,随机从未校准集中选取接收无人机。属于炫技操作,可以尝试一下,我没写。

定位求解距离

编写定位模型的函数,输入角度值,和相对位置关系,用符号变量syms建立方程组,用solve求解可行解。

筛选可行解

因为solve求解出的是所有的解析解,包含复数解和不满足题目要求的解,因此需要排除。

求解基准位置

定位嘛,终极目标是计算出基准位置距离自己的距离和方向,即确定基准位置和现在的位置。这个我没写,可以练练手,求解一下基准位置相对于圆心无人机信号的夹角,以及距离。

代码

废话不多说,代码来啦

主函数question1_1.m

clc;clear;
%基准位置的点坐标,为了便于计算,圆半径R假设为1
angle = 2*pi/9.*(0:8);R = 1;
xi = R.*cos(angle);yi = R.*sin(angle);
%相对位置保持不变,可以确定对于接收无人机的其他无人机的相对位置关系
queue = zeros(9);sign = [1:9,1:9];
for i = 1:9
    queue(i,:) = [sign(i+1:i+4),0,sign(i+5:i+8)];
end
%选取两个位置的无人机作为接收无人机
BaseSet = [1,2];NonBaseSet = 3:9;
fprintf('选择FY00,FY01,FY02作为基准发射无人机。\n');
fprintf('--------------------------------------- \n');
x0 = 0;y0 = 0;x1 = xi(1);y1 = yi(1);x2 = xi(2);y2 = yi(2);L = 2*R*sin(pi/9);
%对未校准的无人机设置随机偏差
%偏差半径
r = R*sin(pi/9);
%偏差坐标
% x = rand()*r*cos(rand()*2*pi)+xi(n);
% y = rand()*r*sin(rand()*2*pi)+yi(n);
%校准过程
for n = 3:9
    fprintf(['校准FY0',num2str(n),'无人机:\n']);
    xm = rand()*r*cos(rand()*2*pi)+xi(n);
    ym = rand()*r*sin(rand()*2*pi)+yi(n); 
    %判断相对位置关系
    queue1 = queue(n,:);n1 = find(queue1==1);n2 = find(queue1==2);
    if((n1<5)&&(n2<5))
        flag = [3,1,2];
    elseif((n1>5)&&(n2>5))
        flag = [1,2,3];
    elseif((n1<5)&&(n2>5))
        flag = [2,1,3];
    elseif((n1>5)&&(n2<5))
        flag = 0;
    end
    %计算角度
    [beta1,beta2,beta3] = Calangle(xm,ym,x0,y0,x1,y1,x2,y2);
    fprintf('beta1 = %f,beta2 = %f,beta3 = %f(角度制)\n', ...
        rad2deg(beta1),rad2deg(beta2),rad2deg(beta3));
    %计算与基准发射无人机的距离
    %x对应与FY0,y对应FY1,z对应FY2
    [x,y,Z] = resolve1(beta1,beta2,beta3,R,L,n);
    fprintf('x = %fR,y = %fR,z= %fR\n',x,y,Z);
    %计算接收无人机的极坐标
    theta = resolve2(flag,x,y,R);p = x;
    fprintf('theta = %f,p = %f(角度制)\n',rad2deg(theta),p);
    %计算准确率
    xx = p.*cos(theta);yy = p.*sin(theta);
    unaccurate = mean([abs((xx-xm)/xm),abs((yy-ym)/ym)]);
    fprintf(['准确率为: %.2f','%%','\n'],(1-unaccurate)*100);
    fprintf(['FY0',num2str(n),'无人机已校准。\n']);
    fprintf('--------------------------------------- \n');
end

生成夹角函数Calangle.m

function [beta1,beta2,beta3] = Calangle(xm,ym,x0,y0,x1,y1,x2,y2)
t1 = (y1-ym)/(x1-xm);t2 = (y2-ym)/(x2-xm);t3 = (ym-y0)/(xm-x0);
tan1 = abs((t1-t3)/(1+t1*t3));tan2 = abs((t2-t3)/(1+t2*t3));
tan3 = abs((t1-t2)/(1+t1*t2));
beta1 = atan(tan1);beta2 = atan(tan2);beta3 = atan(tan3);

 计算与发射无人机的距离resolve1.m

function [x,y,z] = resolve1(beta1,beta2,beta3,R,L,n)
if(n>5)
    l1 = 2*sin((10-n)*pi/9);
    if(n>6)
        l2 = 2*sin((11-n)*pi/9);
    else
        l2 = 2*sin((n-2)*pi/9);
    end
else
    l1 = 2*sin((n-1)*pi/9);
    l2 = 2*sin((n-2)*pi/9);
end
syms x y z
eqns = [2*x*y*cos(beta1) == x^2+y^2-R^2,2*z*x*cos(beta2) == x^2+z^2-R^2, ...
2*z*y*cos(beta3) == z^2+y^2-L^2];
vars = [x,y,z];assume([x,y,z]>0);
sol = solve(eqns,vars,'IgnoreAnalyticConstraints',true,'ReturnConditions',true);
x = round(double(vpa(sol.x)),6);y = round(double(vpa(sol.y)),6);
z = round(double(vpa(sol.z)),6);
x = real(x);y = real(y);z = real(z);
col = [find(x<R*(1-sin(pi/9)));find(x>R*(1+sin(pi/9)))];
x(col) = [];y(col) = [];z(col) = [];
col = [find(y<(l1-R*sin(pi/9)));find(y>(l1+R*sin(pi/9)))];
x(col) = [];y(col) = [];z(col) = [];
col = [find(z<(l2-R*sin(pi/9)));find(z>(l2+R*sin(pi/9)))];
x(col) = [];y(col) = [];z(col) = [];

计算接收无人机相对与圆心极坐标的函数resolve2.m

function theta = resolve2(flag,x,y,R)
if(flag(1)>flag(2))
    flag = -1;
else
    flag = 1;
end
cosm = round((x.^2+R.^2-y.^2),6)/round((2.*x*R),6);
theta = flag.*acos(cosm);

运行结果

选择FY00,FY01,FY02作为基准发射无人机。
--------------------------------------- 
校准FY03无人机:
beta1 = 54.551826,beta2 = 71.317809,beta3 = 16.765983(角度制)
x = 1.044028R,y = 1.131464R,z= 0.482215R
theta = 67.181254,p = 1.044028(角度制)
准确率为: 100.00%
FY03无人机已校准。
--------------------------------------- 
校准FY04无人机:
beta1 = 36.564478,beta2 = 58.744293,beta3 = 22.179815(角度制)
x = 0.898470R,y = 1.566338R,z= 1.106549R
theta = 111.075167,p = 0.898470(角度制)
准确率为: 100.00%
FY04无人机已校准。
--------------------------------------- 
校准FY05无人机:
beta1 = 16.586498,beta2 = 40.803525,beta3 = 24.217027(角度制)
x = 0.703476R,y = 1.653833R,z= 1.420575R
theta = 151.828740,p = 0.703476(角度制)
准确率为: 100.00%
FY05无人机已校准。
--------------------------------------- 
校准FY06无人机:
beta1 = 2.562204,beta2 = 14.979231,beta3 = 17.541435(角度制)
x = 1.272246R,y = 2.269355R,z= 2.173401R
theta = -174.176871,p = 1.272246(角度制)
准确率为: 100.00%
FY06无人机已校准。
--------------------------------------- 
校准FY07无人机:
beta1 = 33.918911,beta2 = 14.002529,beta3 = 19.916382(角度制)
x = 1.006883R,y = 1.662772R,z= 1.946832R
theta = -111.896531,p = 1.006883(角度制)
准确率为: 100.00%
FY07无人机已校准。
--------------------------------------- 
校准FY08无人机:
beta1 = 48.476312,beta2 = 31.689534,beta3 = 16.786779(角度制)
x = 1.169586R,y = 1.258303R,z= 1.784202R
theta = -70.401922,p = 1.169586(角度制)
准确率为: 100.00%
FY08无人机已校准。
--------------------------------------- 
校准FY09无人机:
beta1 = 82.843083,beta2 = 57.542577,beta3 = 25.300506(角度制)
x = 0.915448R,y = 0.532339R,z= 1.126376R
theta = -31.883348,p = 0.915448(角度制)
准确率为: 100.00%
FY09无人机已校准。
---------------------------------------

B题其他问的思路浅析 

还记得去年第一次了解建模的时候,从网络上搜索相关国赛思路太难了,基本上搜不出来。所以,来年了解数模的学弟学妹们或许会如同我一开始的迷茫,因此这里给出其他题目的思路。助力一下~

第一题第二问

第一问发射无人机都在基准位置,且编号已知,即相对关系已知;第二问的话,发射无人机的编号未知,所以涉及到怎样判断圆心无人机和圆周无人机相对位置关系的问题。(核心)

怎么判断,思路可太多了~可以先基准无人机之间定位,确定基准无人机之间的相对位置关系;或者用接收无人机和基准无人机定位,建立三角形求出唯一解。

确定需要几个发射无人机,可以确定相对位置,求出唯一解。

第一题第三问

第三问,所有的发射无人机位置都不基准,编号未规定。(除了圆心的无人机和圆周的一架无人机)

可以用暴力破解的方法,用不基准的无人机当做基准来依次给其他无人机校准,校准之后的无人机再对其他无人机校准...存在随机性,主要是吸收态:一旦某一个无人机基准了,就可以把其他的都校准,同时所有的无人机都处于基准位置,就不会调整了。

也可以用别的思路。比如说,先用已确定的两架无人机对一个无人机进行校准,然后再依次校准。

第二题

锥形等距编队的定位方式。首先第一题的编队位置不会出现三点共线的问题,锥形编队是存在三点共线的,所以只能讨论不共线的定位模型。

用中心的三角形3的顶点作为基准无人机,来校准最近的非共线的顶点,就又构造了3各三角形,依次校准,需要6次,而且定位模型都一样。

结束

数学建模并不是很难,分析问题,建立模型,编写程序这些才是重要的能力,希望把数学建模当做是检验自己能力的测试,而不是定向研究套路取得高分的考试。最后,希望大家多了解了解看似枯燥其实特别精彩的数学和编程。瑞思拜~文章来源地址https://www.toymoban.com/news/detail-460144.html

到了这里,关于2022数模国赛B题无人机第一题第一小问的简单编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 反无人机系统技术分析,无人机反制技术理论基础,无人机技术详解

    近年来,经过大疆、parrot、3d robotics等公司不断的努力,具有强大功能的消费级无人机价格不断降低,操作简便性不断提高,无人机正快速地从尖端的军用设备转入大众市场,成为普通民众手中的玩具。 然而,随着消费级无人机市场的快速增长,功能越来越先进的新式无人机

    2024年02月19日
    浏览(52)
  • 无人机数据链技术,无人机数据链路系统技术详解,无人机数传技术

    早期的无人机更多的为军事应用服务,如军事任务侦查等,随着技术和社会的发展,工业级无人机和民用无人机得到快速的发展,工业级无人机用于农业植保、地理测绘、电力巡检、救灾援助等;民用无人机用于航拍、物流等等领域。 无人机数据链 数据链系统是飞行器与地

    2024年02月20日
    浏览(46)
  • 无人机编程实战第1讲——无人机简介

    目录 前言 一、飞控是什么? 二、扫盲行动!!! 1.微控制器 2.传感器 3.处理? 4.无人机飞行姿态 总结         随着开源无人机飞行控制器的不断发展,越来越多优秀的代码与算法不断涌现,无人机领域的技术不断趋于成熟,也使得无人机领域的门槛一再降低,现在国内工

    2024年02月11日
    浏览(43)
  • 无人机概述及系统组成,无人机系统的构成

    无人机的定义  无人驾驶航空器,是一架由遥控站管理(包括远程操纵或自主飞行)的航空器,也称遥控驾驶航空器,以下简称无人机。  无人机系统的定义 无人机系统,也称无人驾驶航空器系统,是指一架无人机、相关的遥控站、所需的指令与控制数据链路以及批准的型号

    2024年02月21日
    浏览(44)
  • 无人机巡检技术要点解读,无人机巡检方案实现

    随着技术的不断发展,无人机巡检已经成为一种新兴的技术,它为巡检提供了更加高效、安全且可持续的解决方案。无人机巡检源于人们对更高效、安全的巡检方式的需求,源自行业对于巡检数据的采集和传输有了更高的要求,以及传统巡检从业人员渴望更安全的操作环境。

    2024年02月14日
    浏览(51)
  • 无人机快递(物流)技术方案,无人机快递(物流)基础知识

    无人机快递技术是一种利用无人机进行快递配送的先进技术。通过利用无人机,快递企业能够在偏远地区或难以通行的地区提供配送服务,同时提高配送效率并降低人力成本。 无人机基本情况 无人驾驶飞机简称“无人机”,是利用无线电遥控设备和自备的程序控制装置操纵

    2024年02月22日
    浏览(54)
  • 无人机基础知识:多旋翼无人机各模式控制框图

    无人机(Unmanned Aerial Vehicle),指的是一种由动力驱动的、无线遥控或自主飞行、机上无人驾驶并可重复使用的飞行器,飞机通过机载的计算机系统自动对飞行的平衡进行有效的控制,并通过预先设定或飞机自动生成的复杂航线进行飞行,并在飞行过程中自动执行相关任务和

    2023年04月09日
    浏览(138)
  • (无人机方向)ros小白之键盘控制无人机(终端方式)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ubuntu 18.04 pycharm ros melodic 做一个在终端中键盘输入指令,控制飞机起飞以及进入offbaord File-Settings-Project Interpreter-右边小齿轮Show All-选中正在使用的python 点击右边最下面的图标,打开Interpreter Path 添加/

    2024年02月15日
    浏览(46)
  • 力扣经典150题第一题:合并两个有序数组

    合并两个有序数组问题详解与解决方法 1. 介绍 在编程面试中,合并两个有序数组是一个经典的问题。它要求将两个有序数组合并为一个新的有序数组。本篇博客将深入讨论这个问题,并提供解决方法。 2. 问题描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两

    2024年04月23日
    浏览(41)
  • 无人机机巢有哪些,无人机机场/机场的主要分类

    随着无人机技术的飞速发展,无人机已经渗透到了物流、农业、救援、公共安全等多个领域。而为了使这些无人机能更加高效、灵活地运行,一个新的概念应运而生,那就是无人机机巢(UAV Nest)。复亚智能无人机机巢是一种供无人机停放、充电、保养和自动调度的设施。它

    2024年02月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包