✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
PRISM是一种概率模型检测器,用于对概率系统进行建模、验证和分析。它可用于建立和验证各种系统,包括通信协议、嵌入式系统、生物学系统等。
PRISM模型使用概率性质和状态转移系统建模语言,可以处理具有不确定性和随机性的系统。通过指定系统的状态和可能的转移,以及状态上的概率性质,可以进行属性验证、性能分析和参数合成等任务。
在无人机控制领域,PRISM模型可以用于建立无人机行为模型、环境模型和人-机交互模型,以验证无人机控制策略的正确性和性能保证。它可以用来分析无人机的行为、路径规划、航迹跟随、碰撞避免和决策制定等问题。
基于PRISM(Probabilistic Reactive InSiMulation)模型实现无人机的目标搜索和避碰可以通过以下步骤实现:
-
配置无人机系统:确定无人机系统的硬件配置和传感器设置。这包括选择适当的无人机平台、安装相关传感器(如雷达、摄像头、激光测距仪等)以配置通信模块。
-
目标搜索策略设计:根据任务需求和搜索目标,设计无人机的目标搜索策略。这可以基于遗传算法、贪心算法或其他优化方法来确定无人机的搜索路径和行为。
-
传感和感知:利用传感器获取环境信息,如目标位置、障碍物位置、地形信息等。使用感知算法进行目标检测、跟踪和障碍物识别。
-
定位与航迹规划:基于感知结果和目标搜索策略,进行无人机的定位和航迹规划。确定无人机的当前位置,并计算移动到目标位置或规避障碍物的最佳路径。
-
PRISM模型应用:根据PRISM模型,计算不同路径的危险性概率。对于搜索过程中的潜在危险路径,根据风险评估调整无人机的航迹。
-
避碰与规避策略:程中,根据PRISM模型的风险评估和预测,实施避碰与规避策略。可以使用动态路径规划、速度调整、姿态控制等方法,确保无人机与障碍物或其他无人机的安全距离。
-
实时控制与监控:基于控制算法和无人机系统,实施实时控制方式以执行目标搜索和避碰策略。同时,监控无人机状态、环境变化和传感器数据,及时更新决策。
-
仿真与优化:进行仿真实验,评估基于PRISM的无人机目标搜索和避碰策略的性能和鲁棒性。根据仿真结果进行调优和优化。
需要注意的是,基于PRISM模型的无人机目标搜索和避碍缀技术涉及传感器融合、控制器设计和决策算法等多个方面。具体的实现方法和步骤可能会因实际需求、环境条件和任务要求而有差异,并需要综合考量飞行安全、可靠性和实性等因素。
⛄ 部分代码
% Get probabilities and averages of continuous-time model from collected
% data
function AverageProperties(SaveFile)
% close all
% clearvars -except h GlobalTime Count Run Runs SaveFile Data Agents Environment Sim
% clc
fprintf('Averaging properties for all runs...\n\n')
% Load dataset
load(SaveFile)
%% BASIC PROPERTIES
% Numbers of runs averaged
Props.NumRuns = length(AllProps);
% Average mission time
Props.AvgMissionTime = sum(cat(1,AllProps.MissionTime))/length(AllProps);
% Mission success probability
Props.MissionSuccess = sum(cat(1,AllProps.MissionOutcome))/length(AllProps);
%% RUN LOOP
% Initialise arrays
TotalStateTimes = {};
TotalStateDistances = {};
TotalStateTransitions = {};
TotalSystemsFault = [0 0];
TotalActuatorFault = [0 0];
TotalGrabberFault = [0 0];
% Loop runs
for i = 1:length(AllProps)
% STATE-SPECIFIC PROPERTIES -------------------------------------------
% Loop states
for j = 1:size(AllProps(i).AvgStateTimes,1)
% Current state
% CurrentState = AllProps(i).AvgStateTimes{j,1};
CurrentState = AllProps(i).TotalStateTimes{j,1};
% Current time
% CurrentTime = AllProps(i).AvgStateTimes{j,2};
CurrentTime = AllProps(i).TotalStateTimes{j,2};
% Current total
CurrentTotal = AllProps(i).TotalStateTimes{j,3};
% Current distance
% CurrentDistance = AllProps(i).AvgStateDistance{j,2};
CurrentDistance = AllProps(i).TotalStateDistance{j,2};
% Check if current state already exists in total matrix
if isempty(TotalStateTimes) || ~ismember(CurrentState,TotalStateTimes(:,1))
% If state doesn't exist, add it and initialise with first
% total
TotalStateTimes{end+1,1} = CurrentState;
TotalStateTimes{end,2} = CurrentTime;
% TotalStateTimes{end,3} = 1;
TotalStateTimes{end,3} = CurrentTotal;
TotalStateDistances{end+1,1} = CurrentState;
TotalStateDistances{end,2} = CurrentDistance;
% TotalStateDistances{end,3} = 1;
TotalStateDistances{end,3} = CurrentTotal;
else
% If state exists, add current value to total
% Get index of current state in array
k = find(ismember(TotalStateTimes(:,1),CurrentState));
% Add to counter
TotalStateTimes{k,2} = TotalStateTimes{k,2} + CurrentTime;
% TotalStateTimes{k,3} = TotalStateTimes{k,3} + 1;
TotalStateTimes{k,3} = TotalStateTimes{k,3} + CurrentTotal;
TotalStateDistances{k,2} = TotalStateDistances{k,2} + CurrentDistance;
% TotalStateDistances{k,3} = TotalStateDistances{k,3} + 1;
TotalStateDistances{k,3} = TotalStateDistances{k,3} + CurrentTotal;
end
end
% STATE TRANSITIONS ---------------------------------------------------
for j = 1:size(AllProps(i).StateTransitions,1)
% Current pair
CurrentPair = AllProps(i).StateTransitions(j,:);
% Check if current pair already exists in total matrix
if isempty(TotalStateTransitions) || ~any(all(ismember(TotalStateTransitions(:,1:2),CurrentPair(1:2)),2))
% If state pair doesn't exist, add it and initialise it with
% first total
TotalStateTransitions(end+1,:) = CurrentPair;
else
% If state pair exists, add current value to total
k = find(all(ismember(TotalStateTransitions(:,1:2),CurrentPair(1:2)),2));
% Add to counter
TotalStateTransitions{k,3} = TotalStateTransitions{k,3} + CurrentPair{3};
end
end
% AVERAGE OCCURRENCE OF FAULTS ----------------------------------------
% Systems fault
TotalSystemsFault = TotalSystemsFault...
+ [sum(AllProps(i).SystemsFault) length(AllProps(i).SystemsFault)];
% Actuator fault
TotalActuatorFault = TotalActuatorFault + [AllProps(i).ActuatorFault 1];
% Grabber fault
TotalGrabberFault = TotalGrabberFault + [AllProps(i).GrabberFault 1];
end
%% AVERAGE TOTALLED DATA
% Get average of each state, ignoring cases where the state did not occur
for j = 1:size(TotalStateTimes,1)
Props.AvgStateTimes{j,1} = TotalStateTimes{j,1};
Props.AvgStateTimes{j,2} = TotalStateTimes{j,2}/TotalStateTimes{j,3};
Props.AvgStateDistances{j,1} = TotalStateDistances{j,1};
Props.AvgStateDistances{j,2} = TotalStateDistances{j,2}/TotalStateDistances{j,3};
end
% Get average occurrences of state transitions
ProbStateTransitions = TotalStateTransitions;
for j = 1:size(TotalStateTransitions,1)
NextStates = TotalStateTransitions(ismember(TotalStateTransitions(:,1),TotalStateTransitions(j,1)),2);
TransOcc = TotalStateTransitions(ismember(TotalStateTransitions(:,1),TotalStateTransitions(j,1)),3);
TransOcc = sum(cat(1,TransOcc{:}));
ProbStateTransitions{j,3} = TotalStateTransitions{j,3}/sum(TransOcc);
end
% Sort state transitions
Props.ProbStateTransitions = sortrows(ProbStateTransitions,1);
% Average occurrence of systems fault
Props.ProbSystemsFault = TotalSystemsFault(1)/TotalSystemsFault(2);
% Average occurence of actuator fault
Props.ProbActuatorFault = TotalActuatorFault(1)/TotalActuatorFault(2);
% Average occurence of actuator fault
Props.ProbGrabberFault = TotalGrabberFault(1)/TotalGrabberFault(2);
%% SAVE AVERAGED DATA TO SAVE STRUCTURE
save(SaveFile,'Props','AllProps')
⛄ 运行结果
⛄ 参考文献
[1] 张立鹏,赵建辉,肖永德.基于最大可知度的无人机协同搜索控制方法[J].电光与控制, 2014, 21(11):8.DOI:10.3969/j.issn.1671-637X.2014.11.007.
[2] 刘振,胡云安,史建国.无人机动态目标搜索的建模及求解[J].电光与控制, 2013, 20(11):6.DOI:CNKI:SUN:DGKQ.0.2013-11-002.
⛳️ 代码获取关注我
❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料
🍅 仿真咨询
1.卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
2.图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
3.旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划
4.无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配
5.传感器部署优化、通信协议优化、路由优化、目标定位
6.信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号
7.生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化
8.微电网优化、无功优化、配电网重构、储能配置
9.元胞自动机交通流 人群疏散 病毒扩散 晶体生长