欢迎光临散文网 会员登陆 & 注册

【路径规划】基于改进动态窗口法DWA实现机器人动态避障matlab源码含 GUI

2021-08-04 22:59 作者:Matlab工程师  | 我要投稿

一、简介

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)/100 70 scrsz(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)/100 70 scrsz(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 .05 0.75 0.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',[1 1 1]); 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',...            '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', [0 0 0], 'fontname', 'Helvetica', 'fontsize', 12, 'BackgroundColor', [0.9 0.9 0.9]); txt_inp2 = uicontrol('Style', 'text', 'Units', 'normalized', 'Position', [.14 .54 .08 .035],...            'FontWeight', 'bold', 'ForegroundColor', [0 0 0], 'fontname', 'Helvetica', 'fontsize', 12, 'BackgroundColor', [0.9 0.9 0.9]); txt_out1 = uicontrol('Style', 'text', 'Units', 'normalized', 'Position', [.05 .47 .08 .035],...            'FontWeight', 'bold', 'ForegroundColor', [0 0 0], 'fontname', 'Helvetica', 'fontsize', 12, 'BackgroundColor', [0.9 0.9 0.9]); txt_out2 = uicontrol('Style', 'text', 'Units', 'normalized', 'Position', [.14 .47 .08 .035],...            'FontWeight', 'bold', 'ForegroundColor', [0 0 0], 'fontname', 'Helvetica', 'fontsize', 12, 'BackgroundColor', [0.9 0.9 0.9]); uicontrol('Style', 'text','Units', 'normalized', 'Position', [.05 .61 .15 .025],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 10,...            'BackgroundColor', [0.8 0.8 0.8], 'String', 'DWA权值调整');         uicontrol('Style', 'text','Units', 'normalized', 'Position', [.00 .55 .05 .02],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 9,...            'BackgroundColor', [0.8 0.8 0.8], 'String', 'INPs :'); uicontrol('Style', 'text','Units', 'normalized', 'Position', [.00 .48 .05 .02],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 9,...            'BackgroundColor', [0.8 0.8 0.8], 'String', '误差值 :'); uicontrol('Style', 'text','Units', 'normalized', 'Position', [.05 .58 .08 .02],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 9,...            'BackgroundColor', [0.8 0.8 0.8], 'String', '目标航向角'); uicontrol('Style', 'text','Units', 'normalized', 'Position', [.14 .58 .08 .02],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 9,...            'BackgroundColor', [0.8 0.8 0.8], 'String', '障碍物'); uicontrol('Style', 'text','Units', 'normalized', 'Position', [.05 .51 .08 .02],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 9,...            'BackgroundColor', [0.8 0.8 0.8], 'String', '左偏离'); uicontrol('Style', 'text','Units', 'normalized', 'Position', [.14 .51 .08 .02],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 9,...            'BackgroundColor', [0.8 0.8 0.8], 'String', '右偏离');         uicontrol('Style', 'text','Units', 'normalized', 'Position', [.09 .78 .12 .025],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 10,...            'BackgroundColor', [0.8 0.8 0.8], 'String', 'X             Y'); uicontrol('Style', 'text','Units', 'normalized', 'Position', [.02 .74 .06 .03],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 10,...            'BackgroundColor', [0.8 0.8 0.8], 'String', '起始点坐标:'); uicontrol('Style', 'text','Units', 'normalized', 'Position', [.02 .7 .06 .03],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 10,...            'BackgroundColor', [0.8 0.8 0.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.8 0.8 0.8],'Min',0,'Value',1,'Max',2,'SliderStep',[0.01 0.1]); slider_y = uicontrol('Style', 'slider','Units', 'normalized', 'Position', [.02 .37 .2 .025],...            'FontWeight', 'bold', 'fontname', 'Helvetica', 'fontsize', 10,...            'BackgroundColor', [0.8 0.8 0.8],'Min',0,'Value',1,'Max',2,'SliderStep',[0.01 0.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');

三、运行结果

在这里插入图片描述


在这里插入图片描述


【路径规划】基于改进动态窗口法DWA实现机器人动态避障matlab源码含 GUI的评论 (共 条)

分享到微博请遵守国家法律