【路径规划】基于matlabGUI改进的DWA算法机器⼈动态避障路径规划【含
Matlab源。。。
⼀、DWA算法简介
DWA算法全称为dynamic window approach,其原理主要是在速度空间(v,w)中采样多组速度,并模拟这些速度在⼀定时间内的运动轨迹,再通过⼀个评价函数对这些轨迹打分,最优的速度被选择出来发送给下位机。
1 原理分析
2 速度采样
机器⼈的轨迹运动模型有了,根据速度就可以推算出轨迹。
因此只需采样很多速度,推算轨迹,然后评价这些轨迹好不好就⾏了。
(⼀)移动机器⼈受⾃⾝最⼤速度最⼩速度的限制
(⼆) 移动机器⼈受电机性能的影响:由于电机⼒矩有限,存在最⼤的加減速限制,因此移动机器⼈軌迹前向模拟的周期sim_period内,存在⼀个动态窗⼝,在该窗⼝内的速度是机器⼈能够实际达到的速度:
(三) 基于移动机器⼈安全的考虑:为了能够在碰到障碍物前停下来, 因此在最⼤减速度条件下, 速度有⼀个范围。
⼆、部分源代码
function varargout =Simulate(varargin)
clc
SamplingPeriod =0.1;
time =0;
timer1 =[];
txt_timer =[];
FuzzyLoaded =0;
Z1 =[];
Z2 =[];
W_Zone =20;
H_Zone =20;
data =importdata('fuzzytabledata.mat');
OUT1 = data.OUT1;
OUT2 = data.OUT2;
Z1 =reshape(OUT1(102:end,1)',101,[]);
Z2 =reshape(OUT2(102:end,1)',101,[]);
FuzzyLoaded =1;
scrsz =get(0,'ScreenSize');
% Create a figure that will have a uitable, axes and checkboxes
figure('Position',[15*scrsz(3)/10070scrsz(3)-2*(15*scrsz(3)/100)scrsz(4)-100],...
'WindowStyle','normal',...
'CloseRequestFcn',{@CloseFcn},...
'Name','具有动态障碍物的DWA仿真',...% Title figure
'NumberTitle','off')% Do not show figure number
%figure('Position',[15*scrsz(3)/10070scrsz(3)-2*(15*scrsz(3)/100)scrsz(4)-100],...
%'WindowStyle','normal',...
%'CloseRequestFcn',{@CloseFcn},...
%'Name','具有动态障碍物的DWA仿真',...% Title figure
%'NumberTitle','off',...% Do not show figure number
%'MenuBar','none');% Hide standard menu bar menus
% Create an axes set x and y limits to the value extremes, and format labels
W_Zone =ceil(W_Zone/10)*10;
H_Zone =ceil(H_Zone/10)*10;
haxes =axes('Units','normalized',...
'Position',[.25.050.750.9],...
'XLim',[-W_Zone/2 W_Zone/2],...
'YLim',[-H_Zone/2 H_Zone/2],...
'XLimMode','manual',...
'YLimMode','manual',...
'XTick',-W_Zone/2:1:W_Zone/2,...
'YTick',-H_Zone/2:1:H_Zone/2);%,...
%'XTickLabel',...
%{'-10 m','-5 m','0','5 m','10 m'},...
%'YTickLabel',...
%{'-10 m','-5 m','0','5 m','10 m'});
set(haxes,'DataAspectRatio',[111]);
title(haxes,'移动机器⼈动态避障仿真')% Describe data set
% Prevent axes from clearing when new lines or markers are plotted
hold(haxes,'all')
grid on;
uicontrol('Style','pushbutton',...
'Units','normalized',...
'Position',[.02.86.2.05],...
'String','开始仿真',...
'Value',0,...
'Callback',{@StartSimulation});
uicontrol('Style','pushbutton',...
'Units','normalized',...
'Position',[.02.81.2.05],...
'String','重新仿真',...
'Value',0,...
'Callback',{@ResetSimulation});
%% Create a text to show timer;
txt_timer =uicontrol('Style','text',...
'Units','normalized',...
'Position',[.02.915.2.035],...
'FontWeight','bold',...
fontweight属性bold'ForegroundColor',[0.2.8],...
'fontname','Helvetica',...
'fontsize',14,...
'BackgroundColor','w','String','00:00 00');
%% Create some texts to monitor variables;
txt_inp1 =uicontrol('Style','text','Units','normalized','Position',[.05.54.08.035],...
'FontWeight','bold','ForegroundColor',[000],'fontname','Helvetica','fontsize',12,'BackgroundColor',[0.90.90.9]); txt_inp2 =uicontrol('Style','text','Units','normalized','Position',[.14.54.08.035],...
'FontWeight','bold','ForegroundColor',[000],'fontname','Helvetica','fontsize',12,'BackgroundColor',[0.90.90.9]); txt_out1 =uicontrol('Style','text','Units','normalized','Position',[.05.47.08.035],...
'FontWeight','bold','ForegroundColor',[000],'fontname','Helvetica','fontsize',12,'BackgroundColor',[0.90.90.9]);
txt_out2 =uicontrol('Style','text','Units','normalized','Position',[.14.47.08.035],...
'FontWeight','bold','ForegroundColor',[000],'fontname','Helvetica','fontsize',12,'BackgroundColor',[0.90.90.9]);
uicontrol('Style','text','Units','normalized','Position',[.05.61.15.025],...
'FontWeight','bold','fontname','Helvetica','fontsize',10,...
'BackgroundColor',[0.80.80.8],'String','DWA权值调整');
uicontrol('Style','text','Units','normalized','Position',[.00.55.05.02],...
'FontWeight','bold','fontname','Helvetica','fontsize',9,...
'BackgroundColor',[0.80.80.8],'String','INPs :');
uicontrol('Style','text','Units','normalized','Position',[.00.48.05.02],...
'FontWeight','bold','fontname','Helvetica','fontsize',9,...
'BackgroundColor',[0.80.80.8],'String','误差值 :');
uicontrol('Style','text','Units','normalized','Position',[.05.58.08.02],...
'FontWeight','bold','fontname','Helvetica','fontsize',9,...
'BackgroundColor',[0.80.80.8],'String','⽬标航向⾓');
uicontrol('Style','text','Units','normalized','Position',[.14.58.08.02],...
'FontWeight','bold','fontname','Helvetica','fontsize',9,...
'BackgroundColor',[0.80.80.8],'String','障碍物');
uicontrol('Style','text','Units','normalized','Position',[.05.51.08.02],...
'FontWeight','bold','fontname','Helvetica','fontsize',9,...
'BackgroundColor',[0.80.80.8],'String','左偏离');
uicontrol('Style','text','Units','normalized','Position',[.14.51.08.02],...
'FontWeight','bold','fontname','Helvetica','fontsize',9,...
'BackgroundColor',[0.80.80.8],'String','右偏离');
uicontrol('Style','text','Units','normalized','Position',[.09.78.12.025],...
'FontWeight','bold','fontname','Helvetica','fontsize',10,...
'BackgroundColor',[0.80.80.8],'String','X Y');
uicontrol('Style','text','Units','normalized','Position',[.02.74.06.03],...
'FontWeight','bold','fontname','Helvetica','fontsize',10,...
'BackgroundColor',[0.80.80.8],'String','起始点坐标:');
uicontrol('Style','text','Units','normalized','Position',[.02.7.06.03],...
'FontWeight','bold','fontname','Helvetica','fontsize',10,...
'BackgroundColor',[0.80.80.8],'String',' ⽬标点坐标:');
%% Create a text get Robot X0 Pos;
edit_robot_x0 =uicontrol('Style','edit',...
'Units','normalized',...
'Position',[.09.74.06.035],...%'String',...%'Use Plot check boxes to graph columns',...
'FontWeight','bold',...
'fontname','Helvetica',...
'fontsize',12);
%% Create a text get Robot Y0 Pos;
edit_robot_y0 =uicontrol('Style','edit',...
'Units','normalized',...
'Position',[.16.74.06.035],...%'String',...%'Use Plot check boxes to graph columns',...
'FontWeight','bold',...
'fontname','Helvetica',...
'fontsize',12);
%% Create a text get Goal X Pos;
edit_goal_x =uicontrol('Style','edit',...
'Units','normalized',...
'Position',[.09.7.06.035],...%'String',...%'Use Plot check boxes to graph columns',...
'FontWeight','bold',...
'fontname','Helvetica',...
'fontsize',12);
%% Create a text get Goal Y Pos;
edit_goal_y =uicontrol('Style','edit',...
'Units','normalized',...
'Position',[.16.7.06.035],...%'String',...%'Use Plot check boxes to graph columns',...
'FontWeight','bold',...
'fontname','Helvetica',...
'fontsize',12);
uicontrol('Style','pushbutton',...
'Units','normalized',...
'Position',[.09.655.13.04],...%'TooltipString','Update Values Independently',...
'String','更新',...
'Value',0,...
'Callback',{@UpdateParams});
slider_x =uicontrol('Style','slider','Units','normalized','Position',[.02.41.2.025],...
'FontWeight','bold','fontname','Helvetica','fontsize',10,...
'BackgroundColor',[0.80.80.8],'Min',0,'Value',1,'Max',2,'SliderStep',[0.010.1]);
slider_y =uicontrol('Style','slider','Units','normalized','Position',[.02.37.2.025],...
'FontWeight','bold','fontname','Helvetica','fontsize',10,...
'BackgroundColor',[0.80.80.8],'Min',0,'Value',1,'Max',2,'SliderStep',[0.010.1]);
%uicontrol('Style','pushbutton',...
%'Units','normalized',...
%'Position',[0.35.95.25.05],...%'TooltipString','Update Values Independently',... %'String','Save Data',...
%'Value',0,...
%'Callback',{@SaveData});
%% Create an invisible marker plot of the data and save handles
%% to the lineseries objects; use this to simulate data brushing.
%% hmkrs =plot([1:10],[1:10].^2,'LineStyle','none',...
%%'Marker','o',...
%%'MarkerFaceColor','y',...
%%'HandleVisibility','off',...
%%'Visible','on');
% Create three check boxes to toggle plots for columns
%uicontrol('Style','checkbox',...
%'Units','normalized',...
%'Position',[.10.96.09.035],...
%'TooltipString','Check to plot column 1',...
%'String','Col 1',...
%'Value',0,...
%'Callback',{@plot_callback,1});
%
%% Create a text label to say what the checkboxes do
%uicontrol('Style','text',...
%'Units','normalized',...
%'Position',[.025.955.06.035],...
%'String','Plot',...
%'FontWeight','bold');
% Subfuntions implementing the two callbacks
%------------------------------------------
% function plot_callback(hObject, eventdata, column)
%% hObject Handle to Plot menu
%% eventdata Not used
%% column Number of column to plot or clear
%
% colors ={'b','m','r'};% Use consistent color for lines
% colnames =get(htable,'ColumnName');
% colname = colnames{column};
%if get(hObject,'Value')
%% Turn off the advisory text; it never comes back
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论