【无人机控制】基于PRISM模型实现无人机目标搜索及避碰附matlab代码

文章介绍了PRISM模型在无人机控制中的应用,用于建立无人机行为、环境和交互模型,验证控制策略的正确性和性能。通过配置无人机系统、设计搜索策略、利用传感器感知环境、路径规划和避碰策略,实现目标搜索和避碰。代码示例展示了如何从收集的数据中获取连续时间模型的平均属性。
摘要由CSDN通过智能技术生成

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

PRISM是一种概率模型检测器,用于对概率系统进行建模、验证和分析。它可用于建立和验证各种系统,包括通信协议、嵌入式系统、生物学系统等。

PRISM模型使用概率性质和状态转移系统建模语言,可以处理具有不确定性和随机性的系统。通过指定系统的状态和可能的转移,以及状态上的概率性质,可以进行属性验证、性能分析和参数合成等任务。

在无人机控制领域,PRISM模型可以用于建立无人机行为模型、环境模型和人-机交互模型,以验证无人机控制策略的正确性和性能保证。它可以用来分析无人机的行为、路径规划、航迹跟随、碰撞避免和决策制定等问题。

基于PRISM(Probabilistic Reactive InSiMulation)模型实现无人机的目标搜索和避碰可以通过以下步骤实现:

  1. 配置无人机系统:确定无人机系统的硬件配置和传感器设置。这包括选择适当的无人机平台、安装相关传感器(如雷达、摄像头、激光测距仪等)以配置通信模块。

  2. 目标搜索策略设计:根据任务需求和搜索目标,设计无人机的目标搜索策略。这可以基于遗传算法、贪心算法或其他优化方法来确定无人机的搜索路径和行为。

  3. 传感和感知:利用传感器获取环境信息,如目标位置、障碍物位置、地形信息等。使用感知算法进行目标检测、跟踪和障碍物识别。

  4. 定位与航迹规划:基于感知结果和目标搜索策略,进行无人机的定位和航迹规划。确定无人机的当前位置,并计算移动到目标位置或规避障碍物的最佳路径。

  5. PRISM模型应用:根据PRISM模型,计算不同路径的危险性概率。对于搜索过程中的潜在危险路径,根据风险评估调整无人机的航迹。

  6. 避碰与规避策略:程中,根据PRISM模型的风险评估和预测,实施避碰与规避策略。可以使用动态路径规划、速度调整、姿态控制等方法,确保无人机与障碍物或其他无人机的安全距离。

  7. 实时控制与监控:基于控制算法和无人机系统,实施实时控制方式以执行目标搜索和避碰策略。同时,监控无人机状态、环境变化和传感器数据,及时更新决策。

  8. 仿真与优化:进行仿真实验,评估基于PRISM的无人机目标搜索和避碰策略的性能和鲁棒性。根据仿真结果进行调优和优化。

需要注意的是,基于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.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量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.元胞自动机交通流 人群疏散 病毒扩散 晶体生长

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值