作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
个人主页:Matlab科研工作室
个人信条:格物致知。
更多Matlab仿真内容点击
智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统
信号处理 图像处理 路径规划 元胞自动机 无人机
PRISM是一种概率模型检测器,用于对概率系统进行建模、验证和分析。它可用于建立和验证各种系统,包括通信协议、嵌入式系统、生物学系统等。
PRISM模型使用概率性质和状态转移系统建模语言,可以处理具有不确定性和随机性的系统。通过指定系统的状态和可能的转移,以及状态上的概率性质,可以进行属性验证、性能分析和参数合成等任务。
在无人机控制领域,PRISM模型可以用于建立无人机行为模型、环境模型和人-机交互模型,以验证无人机控制策略的正确性和性能保证。它可以用来分析无人机的行为、路径规划、航迹跟随、碰撞避免和决策制定等问题。
基于PRISM(Probabilistic Reactive InSiMulation)模型实现无人机的目标搜索和避碰可以通过以下步骤实现:
需要注意的是,基于PRISM模型的无人机目标搜索和避碍缀技术涉及传感器融合、控制器设计和决策算法等多个方面。具体的实现方法和步骤可能会因实际需求、环境条件和任务要求而有差异,并需要综合考量飞行安全、可靠性和实性等因素。
% Get probabilities and averages of continuous-time model from collected% datafunction AverageProperties(SaveFile)% close all% clearvars -except h GlobalTime Count Run Runs SaveFile Data Agents Environment Sim% clcfprintf('Averaging properties for all runs...\n\n')% Load datasetload(SaveFile)%% BASIC PROPERTIES% Numbers of runs averagedProps.NumRuns = length(AllProps);% Average mission timeProps.AvgMissionTime = sum(cat(1,AllProps.MissionTime))/length(AllProps);% Mission success probabilityProps.MissionSuccess = sum(cat(1,AllProps.MissionOutcome))/length(AllProps);%% RUN LOOP% Initialise arraysTotalStateTimes = {};TotalStateDistances = {};TotalStateTransitions = {};TotalSystemsFault = [0 0];TotalActuatorFault = [0 0];TotalGrabberFault = [0 0];% Loop runsfor 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 occurfor 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 transitionsProbStateTransitions = 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 transitionsProps.ProbStateTransitions = sortrows(ProbStateTransitions,1);% Average occurrence of systems faultProps.ProbSystemsFault = TotalSystemsFault(1)/TotalSystemsFault(2);% Average occurence of actuator faultProps.ProbActuatorFault = TotalActuatorFault(1)/TotalActuatorFault(2);% Average occurence of actuator faultProps.ProbGrabberFault = TotalGrabberFault(1)/TotalGrabberFault(2);%% SAVE AVERAGED DATA TO SAVE STRUCTUREsave(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.
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者