⛄一、传统DWA算法

在传统的动态窗口法中,在模拟机器人的移动轨迹前,需要建立机器人的运动模型。图1为典型的移动机器人运动学模型示意图。

v (t)和w (t)分别代表了移动机器人在世界坐标系中的线速度和角速度。在每个采样周期内,对机器人的移动轨迹做近似化处理,将每个采样周期内的运动路径看作是直线,则t+1时刻的移动机器人位置(x (t+1),y (t+1))为

图1 典型移动机器人运动模型

即移动机器人沿着方位角方向线性移动v (t)Δt,其方位角相对于世界坐标系移动w (t)Δt。

根据移动机器人的运动模型,在获取速度的基础上,就可以进行轨迹推算。因此,动态窗口法算法的两个核心分别是:(1)根据障碍物环境及机器人自身的机械特性等形成速度约束,生成动态窗口进行速度采样。(2)依据评价函数,对所采样的速度相应的预测轨迹进行评分,从而获取最优路径并执行。

速度采样时,移动机器人的速度主要受如下约束:

(1)移动机器人受自身最大、最小速度的限制,也是DWA算法求解速度的最大范围Vi:

(2)受移动机器人自身电机的影响,其增速降速提供的力矩有限,因此,在模拟机器人前向移动的周期内,存在动态窗口,即该窗口内的速度是机器人在自身机械特性影响下所能实现的实际速度Vj:

(3)为了实现安全避障,不与占据一定空间的障碍物发生碰撞,在减速最大加速度条件下可得范围Vk,进一步缩小动态窗口范围:

式中:dist (v,w)为相应速度的预测轨迹上的障碍物距离最小值。

综上,根据机器人自身的机械特性和障碍物环境,可以定义动态窗口为

动态窗口中的采样轨迹如图2所示。运动轨迹主要是根据移动机器人每个线速度角速度的采样点以及前向仿真时间tsim生成的。

图2 动态窗口采样轨迹
获取移动机器人运动轨迹以后,需要评价函数对各个路径进行评分,选取其中分值最高的作为综合最优路径并执行:

式中:heading (v,w)为偏转角评价子函数,该子函数的作用是评价在该模拟轨迹速度下的轨迹末端方向与目标点之间的角度差,其公式为180°-θ(θ越小,得分越高,其中,θ为所采样轨迹末端点朝向与机器人和目标点连线的夹角),该子函数主要作用是促进移动机器人在运动过程中其方位角不断朝向目标点;distance (v,w)为安全系数评价子函数,该子函数的作用是剔除掉有可能与障碍物发生碰撞或者接触的采样路径,实现移动机器人的安全避障,为避免该评价函数占比过大,对没有障碍物的采样路径进行评分时,安全系数评价子函数设定为常数;velocity (v,w)为速度评价子函数,该子函数的作用是在可以实现安全避障的采样轨迹中,选择出速度最快的路径,以尽快到达目标点。

⛄二、部分源代码

%%

close all;
clear all;

disp(‘Dynamic Window Approach sample program start!!’)

%% 机器人的初期状态[x(m),y(m),yaw(Rad),v(m/s),w(rad/s)]
% x=[0 0 pi/2 0 0]‘; % 5x1矩阵 列矩阵 位置 0,0 航向 pi/2 ,速度、角速度均为0
x = [0.001 0.01 pi/10 0 0]’;

% 下标宏定义 状态[x(m),y(m),yaw(Rad),v(m/s),w(rad/s)]
POSE_X = 1; %坐标 X
POSE_Y = 2; %坐标 Y
YAW_ANGLE = 3; %机器人航向角
V_SPD = 4; %机器人速度
W_ANGLE_SPD = 5; %机器人角速度

goal = [10,10]; % 目标点位置 [x(m),y(m)]

xb = [3 2 0]';
obstacle = [6 6;
4 4;
2 5;
1 2; % Dynamic
4 4;
7 6;
7 9; % Dynamic
6 4;
8 9;
9 6];
obstacleR = 0.5;% 冲突判定用的障碍物半径
global dt;
dt = 0.1;% 时间[s]

% 机器人运动学模型参数
% 最高速度m/s],最高旋转速度[rad/s],加速度[m/ss],旋转加速度[rad/ss],
% 速度分辨率[m/s],转速分辨率[rad/s]]
Kinematic = [2.0,toRadian(20.0),0.2,toRadian(50.0),0.01,toRadian(1)];
%定义Kinematic的下标含义
MD_MAX_V = 1;% 最高速度m/s]
MD_MAX_W = 2;% 最高旋转速度[rad/s]
MD_ACC = 3;% 加速度[m/ss]
MD_VW = 4;% 旋转加速度[rad/ss]
MD_V_RESOLUTION = 5;% 速度分辨率[m/s]
MD_W_RESOLUTION = 6;% 转速分辨率[rad/s]]

% 评价函数参数 [heading,dist,velocity,predictDT]
% 航向得分的比重、距离得分的比重、速度得分的比重、向前模拟轨迹的时间
evalParam = [0.05, 0.2 ,0.5, 0.0,0.3, 3.0];

area = [-1 11 -1 11];% 模拟区域范围 [xmin xmax ymin ymax]

% 模拟实验的结果
result.x=[]; %累积存储走过的轨迹点的状态值
tic; % 估算程序运行时间开始
%% 小车动画
figure(‘color’,[1 1 1])
h1 = axes();
data = my_gritsbot_patch;
this.robot_body = data.vertices;
th = x(YAW_ANGLE)-pi/2;
rotation_matrix = [
cos(th) -sin(th) x(POSE_X);
sin(th) cos(th) x(POSE_Y);
0 0 1];
transformed = this.robot_body*rotation_matrix’;
% movcount=0;
%% Main loop 循环运行 5000次 指导达到目的地 或者 5000次运行结束
max_flag = 0; % 障碍物到达最大边界的标志
min_flag = 0; % 障碍物到达最小边界的标志

%% draw picture
for i = 1:5000
% DWA参数输入 返回控制量 u = [v(m/s),w(rad/s)] 和 轨迹
[u,traj] = DynamicWindowApproach(x,Kinematic,goal,evalParam,obstacle,obstacleR);
x = f(x,u);% 机器人移动到下一个时刻的状态量 根据当前速度和角速度推导 下一刻的位置和角度
ub = [0.7,0]';
if xb(1) >= 8
max_flag = 1;
min_flag = 0;
elseif xb(1) <= 0
max_flag = 0;
min_flag = 1;
end

⛄三、运行结果



⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]卞永明,季鹏成,周怡和,杨濛.基于改进型DWA的移动机器人避障路径规划[J].中国工程机械学报. 2021,19(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

【路径规划】基于matlab DWA动态避障路径规划【含Matlab源码 2356期】相关推荐

  1. 【Matlab语音处理】声音信号频谱分析仪【含GUI源码 325期】

    一.代码运行视频(哔哩哔哩) [Matlab语音处理]声音信号频谱分析仪[含GUI源码 325期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  2. 【Matlab图像检索】综合特征图像检索【含GUI源码 395期】

    一.代码运行视频(哔哩哔哩) [Matlab图像检索]综合特征图像检索[含GUI源码 395期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  3. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】

    一.代码运行视频(哔哩哔哩) [Matlab肌电信号]肌电信号处理[含GUI源码 966期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨 ...

  4. 【Matlab条形码识别】二维条形码识别【含GUI源码 607期】

    一.代码运行视频(哔哩哔哩) [Matlab条形码识别]二维条形码识别[含GUI源码 607期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  5. A星融合DWA的路径规划算法,可实现静态避障碍及动态避障,代码注释详细,matlab源码

    A星融合DWA的路径规划算法,可实现静态避障碍及动态避障,代码注释详细,matlab源码 ID:4525679980340317云的歌儿

  6. 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  7. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  8. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  9. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

最新文章

  1. c++ 函数指针_开发经验分享(5) 修改Makefile实现C/C++混合编程
  2. 最大公共子序列、子串、可重叠重复子串
  3. 如何安装Windows10+CentOS7双系统_自用成功版——注意看评论的注意事项
  4. JetBrains 发布Kotlin 1.0
  5. python安装matlabb库_Python调用MATLAB的方法(mlab接口库)(未总结)-Go语言中文社区...
  6. Arrays 工具类
  7. Oracle的配置文件
  8. Doker : Docker 容器与宿主机共享文件
  9. 2016年开源软件排名TOP50,最受IT公司欢迎的50款开源软件
  10. mysql命令的依赖库_3.EZMM工程(常用shell命令,及需要用到的基本依赖库)
  11. jni java参数签名,什么是“方法签名”参数调用使用JNI的Java方法?
  12. LA 3268 号码簿分组(最大流+二分)
  13. Eclipse ADT 进行android应用签名打包详解
  14. Python Tkinter 音乐播放器 Demo
  15. ps怎么更改背景图层大小_ps怎么修改图层大小
  16. 信息安全——密码学(下)
  17. 加密狗加密excel ,方法之 C#开发Excel自定义函数
  18. 微信useragent java_微信内置浏览器和小程序的 User Agent 区别及判断方法
  19. Xtend调用Scilab
  20. QGIS进行坐标转换

热门文章

  1. 倒计时(小时:分钟:秒钟)【JS原生代码】
  2. EzOES报盘、接口及平台
  3. python使用Canny算法和HoughCiecle算法实现圆的检测与定位
  4. 有关联想拯救者Y7000重装window10系统
  5. 二叉树的遍历和线索线索二叉树
  6. error C1083:无法打开文件stddef.h或crtd bg.h
  7. Apache IoTDB 鼠年总结
  8. 小米应用使用时间统计_屏幕使用时间
  9. 计算机重装后不能启动怎么办,电脑重装系统后开不了机怎么处理
  10. 对象的属性名和属性值