【路徑規劃】基於matlab GUI改進的DWA演算法機器人靜態避障路徑規劃【含Matlab原始碼 678期】
一、簡介
DWA演算法全稱為dynamic window approach,其原理主要是在速度空間(v,w)中取樣多組速度,並模擬這些速度在一定時間內的運動軌跡,再通過一個評價函式對這些軌跡打分,最優的速度被選擇出來傳送給下位機。\ 1 原理分析\ \ \ \ 2 速度取樣
機器人的軌跡運動模型有了,根據速度就可以推算出軌跡。\ 因此只需取樣很多速度,推算軌跡,然後評價這些軌跡好不好就行了。\ (一)移動機器人受自身最大速度最小速度的限制\ (二) 移動機器人受電機效能的影響:由於電機力矩有限,存在最大的加減速限制,因此移動機器人軌跡前向模擬的週期sim_period內,存在一個動態視窗,在該視窗內的速度是機器人能夠實際達到的速度:\ (三) 基於移動機器人安全的考慮:為了能夠在碰到障礙物前停下來, 因此在最大減速度條件下, 速度有一個範圍。
二、原始碼
```c 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',[15scrsz(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',[15scrsz(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'); ```
三、執行結果
\
四、備註
版本:2014a
- 【路徑規劃】基於matlab GUI改進的DWA演算法機器人靜態避障路徑規劃【含Matlab原始碼 678期】
- 【目標檢測】基於matlab GUI差分法運動目標檢測【含Matlab原始碼 1284期】
- 【交通預測】基於matlab GUI交通預測四階段法交通分配【含Matlab原始碼 1140期】
- 【路徑規劃】基於matalb遺傳演算法機器人柵格地圖路徑規劃【含Matlab原始碼 022期】
- 【路徑規劃】基於matlab改進的人工勢場演算法機器人避障路徑規劃【含Matlab原始碼 1151期】
- 【飛行器】基於matlab多源資訊融合演算法多旋翼無人機組合導航系統【含Matlab原始碼 1267期】
- 【無人機】基於matlab無人機追蹤軌跡【含Matlab原始碼 1152期】
- 【影象加密】基於matlab混沌演算法影象加密解密【含Matlab原始碼 1218期】
- 【影象檢測】基於matlab GUI比值 歸一化 相關係數遙感影象【含Matlab原始碼 737期】
- 【影象加密】基於matlab混沌系統圖像加密【含Matlab原始碼 1190期】
- 【影象分類】基於matlab極限學習分類器對遙感影象分類【含Matlab原始碼 150期】
- 【影象增強】基於matlab GUI暗通道影象去霧【含Matlab原始碼 740期】
- 【優化求解】基於matlab差分進化演算法求解函式極值問題【含Matlab原始碼 1199期】
- 【身份證識別】基於matlab GUI身份證號碼識別【含Matlab原始碼 014期】
- 【三維路徑規劃】基於matlab RRT演算法無人機路徑規劃【含Matlab原始碼 155期】
- 【優化求解】基於matlab GUI模擬退火演算法求解全域性最大值最小值問題【含Matlab原始碼 1242期】
- 【優化充電】基於matlab蒙特卡洛演算法求解電動汽車充電優化問題【含Matlab原始碼 1164期】
- 【定位問題】基於matlab GUI SLAM模擬地圖構建和定位【含Matlab原始碼 1120期】
- 【水果識別分類】基於matlab形態學水果識別分類【含Matlab原始碼 1132期】
- 【數學建模】基於matlab UKF腳踏車狀態估計【含Matlab原始碼 1111期】