【路径规划】基于matlab GUI改进的DWA算法机器人静态避障路径规划【含Matlab源码 678期】
【摘要】
一、DWA算法简介
DWA算法全称为dynamic window approach,其原理主要是在速度空间(v,w)中采样多组速度,并模拟这些速度在一定时间内的运动轨迹,再通过一个评价函数对这些轨迹打分...
一、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)/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');
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/115419361
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)