当前位置: 首页 > news >正文

最大化窗口设置_ros导航-动态窗口方法(Dynamic Window Approach)

f7f3fad9b459849378a33688847ffc96.png

动态窗口方法(Dynamic window Approach,DWA)是一种常用的避障规划方法。这是一种选择速度的方法,该速度可以快速到达目标点,同时避免在速度搜索空间中可能与机器人发生碰撞的障碍物。该方法直接在速度空间中搜索机器人最优控制速度,将搜索空间减小到在动态约束下可达的速度,从而将机器人的动力学特性融入到该方法中。

1、 速度空间

我们假设每个时间间隔内速度保持不变,即其加速度为零。这种简化的原因是:(A)缩小的搜索空间是二维的,因而是可处理的;(B)每次时间间隔后都会重复搜索;(C)如果不给出新的命令,速度将自动保持不变。所生成的轨迹需与障碍物不相交。

为了生成从到给定目标点的轨迹,机器人必须确定在

个时间间隔内的速度

是平移速度,
是转动速度。动态窗口方法的本质即是每个时间间隔内选择合适的速度
,使得机器人无碰撞地向目标点移动。速度的可选范围构成一个速度空间,这些速度向量的搜索空间大小与所考虑的时间间隔数成指数关系。为了便于直观观察,我们把
构成的速度空间映射成二维平面,如图1所示。

1.1 允许速度范围

在机器人附近的环境区域内,障碍物的存在对机器人的旋转速度和平移速度都有一定的限制。机器人可允许的速度是机器人能够在到达障碍物的位置时及时停止的速度,这样就能够避免碰撞。设

为最大减速度限制,那么允许速度范围为

此即为允许机器人在不与障碍物相撞的情况下停止的合理速度范围。

5f913ac35ba47f20c250425f6f5ced87.png
图1 速度空间示意图

1.2 动态窗口

为了考虑到电机可发挥的有限的加速度,将整个速度搜索空间缩减为动态窗口,动态窗口只包含在下一个时间间隔内可以达到的速度。假设一个动态窗口的时间间隔为t,线加速度和角加速度为,那么动态窗口

定义为

动态窗口是以实际速度为中心的,它的扩展取决于可以施加的加速度。动态窗口外的所有轨迹都不能在下一个时间间隔内达到,因此可以不考虑避障。

1.3 结果搜索空间

以上在搜索空间施加的限制区域最终形成了一个结果空间

,这个空间里的速度是可供机器人运动的速度。设
是所有可能速度构成的空间,那么
本质上就是各个限制区域的交集,如图1白色区域所示

2、目标函数

在确定好结果搜索空间后,我们从中选择一个能最大化目标函数

的速度,这个目标函数由三个评价指标综合构成,target heading, clearance, velocity.

Target heading

是机器人当前姿态朝向与目标方向的夹角,那么

139388ee40e748c8913d0c3ebecc3df6.png
图2 目标航向角示意图

Clearance

函数dist(v,w)是与机器人运动轨迹圆弧相交的最近的障碍物的距离,如果没有障碍物相交,那么这个函数设置为一个很大的数。

Velocity

函数velocity(v,w)用于在相应的轨迹上评估机器人的进度,是平移速度的一个投影。

这三个指标是目标函数的重要组成部分,缺一不可。仅使clearance和velocity最大化,机器人始终在无障碍空间运动,但不会有向目标位置移动的趋势。单独最大化heading,机器人很快就会被阻碍其前进的第一个障碍所阻挡,无法在其周围移动。通过组合三个指标,机器人在上述限制条件下能够快速地绕过碰撞,同时朝着目标方向运动。

,
,
是可以根据需求调整的权重参数。

3、具体算法流程

下面我们就结合具体的代码详述一下DWA的算法流程。

可以直接运行的DWA算法的Python代码可以在下列链接中下载:

https://github.com/AtsushiSakai/PythonRobotics/blob/master/PathPlanning/DynamicWindowApproach/dynamic_window_approach.py​github.com

42745f628a0b79f292c429be83dd5cc7.gif
图3 DWA算法仿真动图

这个链接包含有很多经典的规划算法(A*,RRT)及仿真动图。

步骤一:设置初始参数,目标点

,障碍物的位置,机器人的初始姿态(x,y,θ,v,w).

步骤二:开始计算速度指令。根据机器人目前姿态和机器人自身的结构参数计算一个矩形动态窗口dw(calc_dynamic_window函数)。

步骤三:动态窗口本身是连续的,因此这个区域内的目标函数难以用公式表达。因此为了获得定义域域为该动态窗口中的目标函数的最小值,(前面讲解原理的时候目标函数是最大化指标,在这个代码的具体实现中,我们采取的最小化指标,即对每个指标取倒数,但是本质是一样的),我们在动态窗口中均匀采点,然后计算每个点对应的机器人姿态,计算该姿态下机器人的三个指标和总目标函数,然后选取目标函数最小的点作为机器人的速度输入。

步骤四:根据步骤三获取的速度输入计算机器人的新姿态,并将新姿态更新为目前姿态。如果目前机器人位置没有到达目标点,那么返回步骤二继续计算。如果到达目标点,那么结束计算。机器人所经过的所有位置即为DWA算法计算出的轨迹。

参考文献:

1、YoonSeok Pyo、HanCheol Cho、RyuWoon Jung、TaeHoon Lim,ROS Robot Programming:From the basic concept to practical programming and robot application.

2、Fox D , Burgard W , Thrun S . The dynamic window approach to collision avoidance[J]. IEEE Robotics & Automation Magazine, 1997, 4(1):23-33.

3、https://github.com/AtsushiSakai/PythonRobotics#dynamic-window-approach

4、zhm-real/PathPlanning

相关文章:

  • 像素位移_哈苏专访 4亿像素H6D中画幅魅力在哪?
  • 化工图纸中LISP_别再问我化工工程师是干什么的了,这是最好的解释
  • c++排查线程hang住_show status和set gtid_mode 导致线程死锁案例
  • 夯大力_【技术交流】通定高速路基边坡夯拍及三背回填振动液压夯实技术
  • vscode中安装webpack_GitHub - lpreterite/vscode-mocha-webpack-example: 用webpack写个现代的JavaScript包...
  • c语言课设代写一般多少钱_cs代写 math代写
  • vs2019 值可能为0_【完整版】针对零基础小白的VS2019安装攻略
  • bin和cue怎么合并_用foobar进行APE分割及合并,cue的制作
  • vsftp如何确定地址_西门子S71500数字量输入模块如何编址?
  • adsense 注册_三天google AdSense帐户申请经验分享
  • plc和pc串口通讯接线_基础教程--RS232通讯用到串口调试软件的应用
  • host ntrip 千寻rtk_合众思壮新品RTK UFO U5连接千寻cors账号的方法教程
  • ipad鼠标圆圈变成箭头_iPad当作Mac mini 的显示器的方法
  • mc有什么红石机器人_Minecraft游戏理论:远古“巨石阵”之谜,探索mc史前高科技文明...
  • 整活插件 炉石传说_炉石传说:整活被盯上了,卡德加可能被移除,拔网线也被点名!...
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Javascript 原型链
  • JavaScript设计模式之工厂模式
  • js学习笔记
  • LeetCode18.四数之和 JavaScript
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Terraform入门 - 3. 变更基础设施
  • tweak 支持第三方库
  • 半理解系列--Promise的进化史
  • 编写高质量JavaScript代码之并发
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 简单易用的leetcode开发测试工具(npm)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 温故知新之javascript面向对象
  • 移动端 h5开发相关内容总结(三)
  • 栈实现走出迷宫(C++)
  • 字符串匹配基础上
  • PostgreSQL之连接数修改
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (14)Hive调优——合并小文件
  • (Git) gitignore基础使用
  • (python)数据结构---字典
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)一些感悟
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net Memory Profiler的使用举例
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net web项目 调用webService
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .skip() 和 .only() 的使用
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [.net] 如何在mail的加入正文显示图片