最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【無人機編隊】基于動態(tài)窗口法實現(xiàn)的無人機編隊目標(biāo)分配及路徑規(guī)劃問題研究附matlab代

2022-10-30 19:35 作者:Matlab工程師  | 我要投稿

?作者簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進,matlab項目合作可私信。

??個人主頁:Matlab科研工作室

??個人信條:格物致知。

更多Matlab仿真內(nèi)容點擊??

智能優(yōu)化算法 ?神經(jīng)網(wǎng)絡(luò)預(yù)測 雷達通信 無線傳感器

信號處理 圖像處理 路徑規(guī)劃 元胞自動機 無人機

? 內(nèi)容介紹

動態(tài)窗口法(DWA)將局部路徑規(guī)劃問題描述為速度矢量空間上的約束優(yōu)化問題,是一種有效的局部避障算法[21]。DWA算法的主要思想是,根據(jù)機器人速度、加速度以及環(huán)境障礙約束,將速度矢量空間(v,ω)限制在一個動態(tài)窗口中,對此窗口內(nèi)的線速度v和角速度ω進行多組采樣;然后,預(yù)測每個采樣速度在下一個周期內(nèi)對應(yīng)的機器人運動軌跡;最后,引入一個評價函數(shù)對預(yù)測的運動軌跡進行評估,選擇得分最高的軌跡對應(yīng)的速度來控制機器人運動。DWA算法的核心在于動態(tài)窗口的建立以及評價函數(shù)的選擇,下面根據(jù)清掃機器人自身性能和環(huán)境的約束建立速度采樣動態(tài)窗口。

清掃機器人受硬件性能的約束,其最大、最小速度都被限制在一定范圍內(nèi),所以清掃機器人允許的極限速度矢量集合Vs為:

式中,vmax、vmin為清掃機器人的最大、最小線速度,ωmax、ωmin為清掃機器人的最大、最小角速度。為了保護自身的安全,清掃機器人要與障礙物保持一定距離,并且在碰到障礙物前能夠及時停止,因此,清掃機器人的安全速度矢量集合Vd可根據(jù)下式確定:

式中,dist(v,ω)為采樣速度(v,ω)對應(yīng)軌跡與障礙物的最小距離,v?a、ω?a分別為清掃機器人減速時的最大線加速度、最大角加速度。

根據(jù)清掃機器人的最大加減速能力,可以計算出某時刻采樣速度在下一個周期Δt內(nèi)的變化范圍,用Va表示:

式中,(vc,ωc)為當(dāng)前時刻采樣速度,v?b、ω?b分別為清掃機器人的最大線加速度、最大角加速度,Δt為采樣周期。將滿足Vs、Va、Vd的速度矢量空間構(gòu)建成動態(tài)窗口,可得到最終速度搜索空間Vr:

對于采樣的速度空間Vr,每一組采樣速度對應(yīng)的預(yù)測軌跡都滿足約束條件,需引入評價函數(shù)評估軌跡的優(yōu)劣性。最優(yōu)軌跡應(yīng)使清掃機器人在避開障礙物的情況下更快更準(zhǔn)地向目標(biāo)移動,因此本文采用的評價函數(shù)如下:

式中,heading(v,ω)為清掃機器人軌跡終點的航向與目標(biāo)點的夾角,dist(v,ω)為軌跡與障礙物的最小距離,vel(v,ω)為采樣速度,α、β、γ為權(quán)重比。

? 部分代碼

close all;

clear all;

clc;

disp('Formation program start!!')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%init%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

num=4;%參與編隊的無人機初始數(shù)量

target_num=4;

% quad_init_x=12*rand(num,1);%初始位置生成

% quad_init_y=12*rand(num,1);

%%%%%%%%%%%%%%%%%%%%%%%%quad_init_for_test%%%%%%%%%%%%%%%%%%%%%%%%%

quad_init_x=[9.940364; 10.902533; 8.463561; 2.919964];%[8.971954; 7.746414; 1.478634; 6.052774];%[8.971954; 7.746414; 1.478634; 6.052774];%[6.184407; 7.890367; 11.410982; 8.668182];%

quad_init_y=[7.070779; 11.266800; 10.746024; 7.274714];%[4.167136; 1.105772; 1.774194; 2.378036];%[4.167136; 1.105772; 1.774194; 2.378036];%[4.800957; 9.982456; 1.612060; 0.725601];%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

goal=[3 3;?

? ? ? 3 8;

? ? ? 8 3;

? ? ? 8 8];% 目標(biāo)點位置 [x(m),y(m)]

temp_goal=goal;

goal_series=[1;2;3;4];

obstacleR=0.5;% 沖突判定用的障礙物半徑

global dt; dt=0.1;% 時間[s]


% 機器人運動學(xué)模型

% 最高速度m/s],最高旋轉(zhuǎn)速度[rad/s],加速度[m/ss],旋轉(zhuǎn)加速度[rad/ss],

% 速度分辨率[m/s],轉(zhuǎn)速分辨率[rad/s]]

Kinematic=[1.0,toRadian(120.0),0.4,toRadian(60.0),0.01,toRadian(1)];

% 評價函數(shù)參數(shù) [heading,dist,velocity,predictDT]

evalParam=[0.1,0.2,0.2,3.0 ];

area=[-1 12 -1 12];% 模擬區(qū)域范圍 [xmin xmax ymin ymax]

mirror_dis=zeros(4,4);

% 模擬實驗的結(jié)果

result.quad1=[];

result.quad2=[];

result.quad3=[];

result.quad4=[];

traj1=[];

traj2=[];

traj3=[];

traj4=[];

tic;

% Main loop

% writerObj=VideoWriter('formation.avi');? % 定義一個視頻文件用來存動畫??

% open(writerObj);? ? ? ? ? ? ? ? ? ? % 打開該視頻文件??

%Target Allocation

[goal]=Target_Allocation(goal,quad_init_x,quad_init_y,num,target_num,goal_series,temp_goal,mirror_dis);

x=[quad_init_x(1,1) quad_init_y(1,1) atan2((goal(1,2)-quad_init_y(1,1)),(goal(1,1)-quad_init_x(1,1))) 0 0;

? ?quad_init_x(2,1) quad_init_y(2,1) atan2((goal(2,2)-quad_init_y(2,1)),(goal(2,1)-quad_init_x(2,1))) 0 0;

? ?quad_init_x(3,1) quad_init_y(3,1) atan2((goal(3,2)-quad_init_y(3,1)),(goal(3,1)-quad_init_x(3,1))) 0 0;

? ?quad_init_x(4,1) quad_init_y(4,1) atan2((goal(4,2)-quad_init_y(4,1)),(goal(4,1)-quad_init_x(4,1))) 0 0]';% 機器人的初期狀態(tài)[x(m),y(m),yaw(Rad),v(m/s),w(rad/s)]

% x=[quad_init_x(1,1) quad_init_y(1,1) pi/2 0 0;

%? ? quad_init_x(2,1) quad_init_y(2,1) pi/2 0 0;

%? ? quad_init_x(3,1) quad_init_y(3,1) pi/2 0 0;

%? ? quad_init_x(4,1) quad_init_y(4,1) pi/2 0 0]';% 機器人的初期狀態(tài)[x(m),y(m),yaw(Rad),v(m/s),w(rad/s)]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for i=1:5000

? ? % DWA參數(shù)輸入

? ? obstacle1=[x(1,2) x(2,2) x(3,2) x(4,2);x(1,3) x(2,3) x(3,3) x(4,3);x(1,4) x(2,4) x(3,4) x(4,4)];

? ? obstacle2=[x(1,1) x(2,1) x(3,1) x(4,1);x(1,3) x(2,3) x(3,3) x(4,3);x(1,4) x(2,4) x(3,4) x(4,4)];

? ? obstacle3=[x(1,1) x(2,1) x(3,1) x(4,1);x(1,2) x(2,2) x(3,2) x(4,2);x(1,4) x(2,4) x(3,4) x(4,4)];

? ? obstacle4=[x(1,1) x(2,1) x(3,1) x(4,1);x(1,2) x(2,2) x(3,2) x(4,2);x(1,3) x(2,3) x(3,3) x(4,3)];

%? ? ?obstacle4=[8 8;x(1,2) x(2,2);x(1,3) x(2,3)];

% [Pt b]=FindIntersection(x(1,3),x(2,3),goal(3,1),goal(3,2),x(1,4),x(2,4),goal(4,1),goal(4,2));

? ? if norm(x(1:2,1)-goal(1,:)')>0.1

? ? ? ? [x(:,1),traj1]=distributed_planning(x(:,1),Kinematic,goal(1,:),evalParam,obstacle1,obstacleR);

? ? end

? ? if norm(x(1:2,2)-goal(2,:)')>0.1

? ? ? ? [x(:,2),traj2]=distributed_planning(x(:,2),Kinematic,goal(2,:),evalParam,obstacle2,obstacleR);

? ? end

? ? if norm(x(1:2,3)-goal(3,:)')>0.1

? ? ? ? [x(:,3),traj3]=distributed_planning(x(:,3),Kinematic,goal(3,:),evalParam,obstacle3,obstacleR);

? ? end

? ? if norm(x(1:2,4)-goal(4,:)')>0.1

? ? ? ? [x(:,4),traj4]=distributed_planning(x(:,4),Kinematic,goal(4,:),evalParam,obstacle4,obstacleR);

? ? end

? ??

? ? % 模擬結(jié)果的保存

? ? result.quad1=[result.quad1; x(:,1)'];

? ? result.quad2=[result.quad2; x(:,2)'];

? ? result.quad3=[result.quad3; x(:,3)'];

? ? result.quad4=[result.quad4; x(:,4)'];

? ? % 是否到達目的地

? ? ? ? if norm(x(1:2,1)-goal(1,:)')<0.1 && norm(x(1:2,2)-goal(2,:)')<0.1 && norm(x(1:2,3)-goal(3,:)')<0.1 && norm(x(1:2,4)-goal(4,:)')<0.1

? ? ? ? ? ? disp('Arrive Goal!!!');break;

? ? ? ? end

? ? ? ? if norm(x(1:2,1)-x(1:2,2))<obstacleR || norm(x(1:2,1)-x(1:2,3))<obstacleR || norm(x(1:2,1)-x(1:2,4))<obstacleR || norm(x(1:2,2)-x(1:2,3))<obstacleR || norm(x(1:2,2)-x(1:2,4))<obstacleR || norm(x(1:2,3)-x(1:2,4))<obstacleR

? ? ? ? ? ?disp('Error!!!');break;

? ? ? ? end

? ??

? ? %====Animation====

? ? hold off;

? ? ArrowLength=0.5;%?

? ? % 機器人?

? ? plot(result.quad1(:,1),result.quad1(:,2),'-b');hold on;

? ? plot(result.quad2(:,1),result.quad2(:,2),'-m');hold on;

? ? plot(result.quad3(:,1),result.quad3(:,2),'-r');hold on;

? ? plot(result.quad4(:,1),result.quad4(:,2),'-c');hold on;? ??

? ? plot(goal(1,1),goal(1,2),'*b');hold on;

? ? plot(goal(2,1),goal(2,2),'*m');hold on;

? ? plot(goal(3,1),goal(3,2),'*r');hold on;

? ? plot(goal(4,1),goal(4,2),'*c');hold on;

? ??

% [Pt b]=FindIntersection(x(1,1),x(2,1),goal(1,1),goal(1,2),x(1,3),x(2,3),goal(3,1),goal(3,2))


% str=['***1 ' num2str(toDegree(x(3,1)))];

% disp(str);

% str=['***3 ' num2str(toDegree(x(3,3)))];

% disp(str);

? ? % 探索軌跡

? ? if ~isempty(traj1)

? ? ? ? for it=1:length(traj1(:,1))/5

? ? ? ? ? ? ind=1+(it-1)*5;

? ? ? ? ? ? plot(traj1(ind,:),traj1(ind+1,:),'-g');hold on;

? ? ? ? end

? ? end

? ??

? ? if ~isempty(traj2)

? ? ? ? for it=1:length(traj2(:,1))/5

? ? ? ? ? ? ind=1+(it-1)*5;

? ? ? ? ? ? plot(traj2(ind,:),traj2(ind+1,:),'-g');hold on;

? ? ? ? end

? ? end

? ? ? ??

? ? if ~isempty(traj3)

? ? ? ? for it=1:length(traj3(:,1))/5

? ? ? ? ? ? ind=1+(it-1)*5;

? ? ? ? ? ? plot(traj3(ind,:),traj3(ind+1,:),'-g');hold on;

? ? ? ? end

? ? end

? ? ? ??

? ? if ~isempty(traj4)

? ? ? ? for it=1:length(traj4(:,1))/5

? ? ? ? ? ? ind=1+(it-1)*5;

? ? ? ? ? ? plot(traj4(ind,:),traj4(ind+1,:),'-g');hold on;

? ? ? ? end

? ? end

%? ? ?DrawQuadrotor(x(1,1),x(2,1));

? ? quiver(x(1,1),x(2,1),ArrowLength*cos(x(3,1)),ArrowLength*sin(x(3,1)),'ok');hold on;

%? ? ?DrawQuadrotor(x(1,2),x(2,2));

? ? quiver(x(1,2),x(2,2),ArrowLength*cos(x(3,2)),ArrowLength*sin(x(3,2)),'ok');hold on;

%? ? ?DrawQuadrotor(x(1,3),x(2,3));

? ? quiver(x(1,3),x(2,3),ArrowLength*cos(x(3,3)),ArrowLength*sin(x(3,3)),'ok');hold on;

%? ? ?DrawQuadrotor(x(1,4),x(2,4));

? ? quiver(x(1,4),x(2,4),ArrowLength*cos(x(3,4)),ArrowLength*sin(x(3,4)),'ok');hold on;? ??

? ? axis(area);

? ? grid on;

? ? drawnow;

%? ? ?frame = getframe;? ? ? ? ? ? %// 把圖像存入視頻文件中??

%? ? ?writeVideo(writerObj,frame); %// 將幀寫入視頻??

end

toc

% close(writerObj); %// 關(guān)閉視頻文件句柄??

close all;

? 運行結(jié)果

? 參考文獻

[1]孫航. 無人機編隊,路徑規(guī)劃目標(biāo)點交換方法,系統(tǒng),介質(zhì)及終端:, CN112578812A[P]. 2021.

[2]袁塘, 李廷元. 融合A*算法與動態(tài)窗口法的無人機路徑規(guī)劃研究[J]. 現(xiàn)代計算機:下半月版, 2022(028-001).

?? 關(guān)注我領(lǐng)取海量matlab電子書和數(shù)學(xué)建模資料

??部分理論引用網(wǎng)絡(luò)文獻,若有侵權(quán)聯(lián)系博主刪除



【無人機編隊】基于動態(tài)窗口法實現(xiàn)的無人機編隊目標(biāo)分配及路徑規(guī)劃問題研究附matlab代的評論 (共 條)

分享到微博請遵守國家法律
莫力| 苏尼特左旗| 星子县| 屏东县| 大城县| 通道| 嘉善县| 鸡泽县| 周至县| 新巴尔虎左旗| 桂平市| 房产| 灵川县| 耿马| 扶绥县| 甘泉县| 城步| 色达县| 温宿县| 晋江市| 汝州市| 张家界市| 岑巩县| 工布江达县| 自治县| 田东县| 青川县| 峨眉山市| 安远县| 梁山县| 耒阳市| 龙岩市| 西丰县| 吴川市| 浮梁县| 阿拉善左旗| 大冶市| 栖霞市| 高碑店市| 农安县| 霞浦县|