汽车和山羊问题matlab仿真_Matlab----无人机集群对抗中的关键问题和仿真平台(开发中)案例...

本文探讨了无人机集群对抗的关键问题,包括基于拐弯半径的前进方向角度计算、相对方位角确定和轨迹预测。针对复杂动态的对抗环境,强调了自适应自主决策、智能控制方法和态势评估的重要性。提供MATLAB仿真案例,为解决此类问题提供理论与实践指导。
摘要由CSDN通过智能技术生成

无人机集群对抗,是自动驾驶中路径规划的新问题,并且连续两年出现在最近的中国大学生数学建模竞赛中。可见,这是一个急需解决的数学问题(体现了官方的军事战略意志),同时,还没有成熟解决方案的问题。

本人在自动驾驶无人艇领域也会碰到类似的路径规划的问题。海军装备每年组织的海上竞赛中,多无人艇编队的拦截、追踪、护航、穿插,都是军用无人艇的必考项目。

本文主要根据前期《无人机集群协同对抗仿真案例(2020数学建模MCM试题)》一题的工作研究,总结了一些基本方法。同时,这些方法,将会收录到无人机集群协同对抗工具包中。

若谷:Matlab仿真----无人机集群协同对抗仿真案例(2020数学建模MCM试题)​zhuanlan.zhihu.com
7e556f243f89e5df0dc2a1e9c29ed7f6.png

有兴趣的朋友,可以加微信,继续沟通。

若谷:《自动驾驶行业交流群》及公约​zhuanlan.zhihu.com
83e35172296342547e18374ce6075684.png

零、无人机集群对抗问题的关键问题

无人机集群对抗是未来无人机作战的重要模式,它是一群无人机对另一群无人机进行拦截而形成的空中协作式的缠斗,对抗中无人机具有自组织、自适应特点和拟人思维属性,通过感知环境,对周围态势进行判断,依据一定的行为规则,采取攻击、避让、分散、集中、协作、援助等有利策略,使得在整体上涌现出集群对抗系统的动态特性。

本文及后面一篇文章,将会重点分享无人机集群对抗仿真中的数学建模方法。

  1. 无人机集群协同对抗演化过程机理及其表述

由于集群对抗中信息的多元化和不完全、不确定性,对抗系统是一个复杂的动态随机过程,空战对抗态势随着时空不断演化,每个无人机作为一个智能体必须依据不断变化的态势并依据一定的准则调整自己的策略,进行己方个体之间的合作、与对方的博弈。因此,在充分分析无人机集群对抗演化过程特点及其内涵的基础上,理解无人机集群对抗的非线性动态过程演化机,利用系统动力学和复杂系统理论建立各种因素的相互作用和信息的传递关系的网络拓扑架构,利于对无人机集群对抗过程的定量和定性分析。

6f07ca52931941ee80cc78988ccaff73.png

2. 无人机自适应自主决策对抗行为

集群对抗中,无人机个体是直接动作发出和执行者,无人机个体不断与环境进行交互并相互作用,促使对抗过程不断演化。因此,集群对抗最终是要依赖于无人机的对抗规则,即无人机依据敌方态势、友机态势及自身飞行状态、武器状况、健康情况等因素,采取某种机动和攻击策略,如攻击敌机、威胁回避、支援友机、战术协同,使在最大化对敌杀伤、对敌态势、瓦解敌方意图和最小化自身损失等方面的综合效益取得最大化。

0d055425efffd1d5cde6926532e33657.png

3. 无人机集群智能控制方法

暂时略

4. 无人机集群探测与识别

复杂而多变的集群对抗环境具有极大的状态不确定性和极强的时间约束,对于敌我双方大规模无人机个体和集群进行精确地探测和识别是对抗行为成功与否的先决条件。

cfa71047d8e2e5ffe0b5979538a8f87b.png

5.无人机集群对抗态势评估

态势评估是对抗决策的依据,由于集群对抗威胁可以来自任意方向,数量多,友机与敌方飞机相互缠绕,信息量大,且存在不完全、不确定性,态势评估比单机对抗情况复杂的多。这就需要集群中每个无人机利用其对周围环境的感知信息和接收到的邻近友机传来的信息,根据所获得的综合数据信息进行数据挖掘,分析理解敌方的作战意图、战术战法。

3ad5bb93764ba1449aa201613c053894.png

6.无人机集群通信技术

暂时略

根据海军装备技术的发展纲要,军用低轨通信卫星,是十五规划的重点。

一、基于拐弯半径限制的前进方向角度

function [Angle_Left, Angle_Right] = UAVForwardDirection_TurningRadius(UAV_Motion_Status, UAV_Speed, StepTime, TurningRadius)

% Function: 根据过去一步的运动方向(历史轨迹,x,y,Angle_Motion),基于拐弯半径的限制,以及步长和飞行速度,计算下一步的运动方向范围。

fdaab09283afb2cef9155643b699560e.png
function [Angle_Left, Angle_Right] = UAVForwardDirection_TurningRadius(UAV_Motion_Status, UAV_Speed, StepTime, TurningRadius)
%% Definition
% Input:
% UAV_Motion_Status:[x,y,Direction]*1, UAV的运动轨迹
% UAV_Speed: x m/s, 比如250m/s
% StepTime: x s仿真步长,比如0.2s
% TurningRadius: x km, N个红色UAV运输机,即红色UAV的中心位置
% Output: 
% Angle_Left, Angle_Right: 前行方向的左右边界(指北为零,顺时针为正,范围是[0, 2*pi)  )
% Function: 根据过去一步的运动方向(历史轨迹,x,y,Angle_Motion),基于拐弯半径的限制,以及步长和飞行速度,计算下一步的运动方向范围。
%% Steps:
% 1 获取BlueUAV_Trajectory的维度;
% 2 如果维度为1,直接向右方(默认的飞行方向),出行一个步长;
% 3 如果维度为2,向外延伸一个步长;
% 4 如果维度大于或等于3,向外延伸,取得方向,再延伸一个步长;
% Author: ruogu7(380545156@qq.com)
% Date: Sep, 28th.
% Latest update: Sep, 28th.
% Example:
% UAV_Motion_Status = [0 25 90]  
% UAV_Speed = 0.25   % km/s
% StepTime = 0.4;  % s
% TurningRadius = 0.5  % km
% [Angle_Left, Angle_Right] = UAVForwardDirection_TurningRadius(UAV_Motion_Status, UAV_Speed, StepTime, TurningRadius)
% 

Arc_length = UAV_Speed * StepTime;
Arc_Angel = Arc_length/(TurningRadius*2*pi); 
TurnningAngle = Arc_Angel/2;

% 前行方向的左右边界(指北为零,顺时针为正,范围是[0, 2*pi)
% Angle_Left, Angle_Right  
Temp_Angle_Left = UAV_Motion_Status(1,3)*pi/180 - TurnningAngle + 2*pi;
Angle_Left = Temp_Angle_Left - fix(Temp_Angle_Left/(2*pi))*(2*pi);

Temp_Angle_Right = UAV_Motion_Status(1,3)*pi/180 + TurnningAngle + 2*pi;
Angle_Right = Temp_Angle_Right - fix(Temp_Angle_Left/(2*pi))*(2*pi);

二、两个点的相对方位角

function [azimuth, dist ] = GetAzimuth_2points(point1, point2)

功能:求Point1相对与Point2的相对方位和距离
% point的格式:[x,y]
% azimuth: 指北方向为0度,然后顺时针为正,直到360度,保留1位小数

function [azimuth, dist ] = GetAzimuth_2points(point1, point2)
%% 功能:求Point1相对与Point2的相对方位和距离
% point的格式:[x,y]
% azimuth: 指北方向为0度,然后顺时针为正,直到360度,保留1位小数
% point1 = [-1 1];
% point2 = [1 -1];
% [azimuth, dist ] = GetAzimuth_2points(point1, point2)

P_local = [point1(1)-point2(1) point1(2)-point2(2)];

dist = sqrt(P_local(1)^2+P_local(2)^2);

sin_value = P_local(2)/dist;
cos_value = P_local(1)/dist;

if (P_local(1)>=0) && (P_local(2)>=0)  % 第一象限
    azimuth = 90-asin(P_local(2)/dist) * 180/pi;
    return;
end
if (P_local(1)<=0) && (P_local(2)>=0)   % 第二象限
    azimuth = asin(P_local(2)/dist)*180/pi+270 
    return;
end
if (P_local(1)<=0) && (P_local(2)<=0)   % 第三象限
    azimuth = 180 + asin(-P_local(1)/dist) * 180 / pi;
    return;
end
if (P_local(1)>=0) && (P_local(2)<=0)   % 第四象限
    azimuth = 180 - asin(P_local(1)/dist) * 180 / pi;
    return;
end

三、根据历史轨迹,预测其轨迹

function BlueUAV_Location_next =Forecast_BlueUAV_Location(BlueUAV_Trajectory,BlueUAV_speed,N)

(预防后面求多个位置的根据要求,计算% Output: BlueUAV_Location_next(x,y)% function: 基于BlueUAV的轨迹,预测其下一时刻的位置

function BlueUAV_Location_next = Forecast_BlueUAV_Location(BlueUAV_Trajectory,BlueUAV_speed,N)
% BlueUAV_Trajectory:[x,y] * N
% BlueUAV_speed: 0.3km/s
% N: N个步长。(预防后面求多个位置的根据要求,计算
% Output: BlueUAV_Location_next(x,y)
% function: 基于BlueUAV的轨迹,预测其下一时刻的位置
% Steps:
% 1 获取BlueUAV_Trajectory的维度;
% 2 如果维度为1,直接向右方(默认的飞行方向),出行一个步长;
% 3 如果维度为2,向外延伸一个步长;
% 4 如果维度大于或等于3,向外延伸,取得方向,再延伸一个步长;
% Author: ruogu7(380545156)
% Date: sep, 21th.
% Latest update: sep, 21th.
% Example:
% BlueUAV_Trajectory = [ 2  3 ; 3  4 ; 4  5; 5  6;]  
% BlueUAV_speed = 0.25
% N  = 1;
% BlueUAV_Location_next = Forecast_BlueUAV_Location(BlueUAV_Trajectory,BlueUAV_speed,N)
% 
% 

import math.*

Num_Points_BlueUAV_Trajectory = size(BlueUAV_Trajectory,1)
BlueUAV_Trajectory
if Num_Points_BlueUAV_Trajectory == 1
    % x
    BlueUAV_Location_next(1,1) =  BlueUAV_Trajectory(1,1) + BlueUAV_speed * N;
    % y
    BlueUAV_Location_next(1,2) =  BlueUAV_Trajectory(1,2);
    return;
end 
if Num_Points_BlueUAV_Trajectory == 2
    % 确定方向
    [azimuth_BlueUAV, dist ] = GetAzimuth_2points(BlueUAV_Trajectory(2,:), BlueUAV_Trajectory(1,:))
    % x
    BlueUAV_Location_next(1,1) =  BlueUAV_Trajectory(end,1) + BlueUAV_speed * N * cos((360-(azimuth_BlueUAV-90))*pi/180);
    % y
    BlueUAV_Location_next(1,2) =  BlueUAV_Trajectory(end,2) + BlueUAV_speed * N * sin((360-(azimuth_BlueUAV-90))*pi/180);
    return;
end 

% 当轨迹点的数量等于3
if Num_Points_BlueUAV_Trajectory == 3
    % 确定方向
    % 连续两个中点的相对方位,作为整体方位。
    Front_centor = [(BlueUAV_Trajectory(1,1) + BlueUAV_Trajectory(2,1))/2 (BlueUAV_Trajectory(1,2) + BlueUAV_Trajectory(2,2))/2]
    Back_centor = [(BlueUAV_Trajectory(2,1) + BlueUAV_Trajectory(3,1))/2 (BlueUAV_Trajectory(2,2) + BlueUAV_Trajectory(3,2))/2]
    [azimuth_Red, dist ] = GetAzimuth_2points(Back_centor, Front_centor)

    % import math.*
    % x = 1:100;
    % y = -0.3*x + 2*randn(1,100);
    % [p,S] = polyfit(x,y,1);
    % azimuth_BlueUAV = math.atan(p(1))
    % x
    BlueUAV_Location_next(1,1) =  BlueUAV_Trajectory(end,1) + BlueUAV_speed * N * cos((360-(azimuth_Red-90))*pi/180);
    % y
    BlueUAV_Location_next(1,2) =  BlueUAV_Trajectory(end,2) + BlueUAV_speed * N * sin((360-(azimuth_Red-90))*pi/180);
    return;
end 



% 当轨迹点的数量多于3,则基于最后4个轨迹点,进行线性回归
if Num_Points_BlueUAV_Trajectory > 3
    % 确定方向
    % 连续两个中点的相对方位,作为整体方位。
    Front_centor = [(BlueUAV_Trajectory(1,1) + BlueUAV_Trajectory(2,1))/2 (BlueUAV_Trajectory(1,2) + BlueUAV_Trajectory(2,2))/2]
    Back_centor = [(BlueUAV_Trajectory(3,1) + BlueUAV_Trajectory(4,1))/2 (BlueUAV_Trajectory(3,2) + BlueUAV_Trajectory(4,2))/2]
    [azimuth_Red, dist ] = GetAzimuth_2points(Back_centor, Front_centor)

    % import math.*
    % x = 1:100;
    % y = -0.3*x + 2*randn(1,100);
    % [p,S] = polyfit(x,y,1);
    % azimuth_BlueUAV = math.atan(p(1))
    % x
    BlueUAV_Location_next(1,1) =  BlueUAV_Trajectory(end,1) + BlueUAV_speed * N * cos((360-(azimuth_Red-90))*pi/180);
    % y
    BlueUAV_Location_next(1,2) =  BlueUAV_Trajectory(end,2) + BlueUAV_speed * N * sin((360-(azimuth_Red-90))*pi/180);
    return;
end 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值