局部路径规划
局部路径规划简介
机器人在获得目的地信息后,首先经过全局路径规划规划出一条大致可行的路线,然后调用局部路径规划器根据这条路线及costmap的信息规划出机器人在局部时做出具体行动策略,ROS中主要是使用了DWA算法。在ROS中每当move_base处于规划状态就调用DWA算法计算出一条最佳的速度指令,发送给机器人运动底盘执行。

DWA算法
DWA算法全称为dynamic window approach,其原理主要是在速度空间(v,w)中采样多组速度,并模拟这些速度在一定时间内的运动轨迹,再通过一个评价函数对这些轨迹打分,最优的速度被选择出来发送给下位机。
1.确定机器人模型
在动态窗口算法中,要模拟机器人的轨迹,需要知道机器人的运动模型。假设两轮移动机器人的轨迹是一段一段的圆弧或者直线(旋转速度为0时),一对(vt,wt)就代表一个圆弧轨迹,具体推导如下:
假设不是全向运动机器人,它做圆弧运动的半径为:

当旋转速度w不等于0时,机器人坐标为:


2.速度采样
机器人的轨迹运动模型有了,根据速度就可以推算出轨迹。因此只需采样很多速度,推算轨迹,然后评价这些轨迹好不好就行了。
(一)移动机器人受自身最大速度最小速度的限制

(二) 移动机器人受电机性能的影响:由于电机力矩有限,存在最大的加減速限制,因此移动机器人軌迹前向模拟的周期sim_period内,存在一个动态窗口,在该窗口内的速度是机器人能够实际达到的速度:

(三) 基于移动机器人安全的考虑:为了能够在碰到障碍物前停下来, 因此在最大减速度条件下, 速度有一个范围:

3.评价函数
当采样完速度后,就对每个速度所形成的每条轨迹进行评价,采用的评价函数如下:

局部路径规划程序架构
1.程序模块流程

(1)初始化:为DWA算法做准备,加载参数和实例化对象等
(2)采样速度样本:计算出需要评价的速度样本
(3)样本评分:对计算出的速度样本进行逐一评分,记录下评价最高的样本
(4)发布plan:发布得到的局部路径规划策略
2.DWA算法程序分析
(1)初始化:
在move_base节点中,通过类加载模块载入了BaseLocalPlanner(局部路径规划)的子类DWAPlannerROS的实例tc_,并调用其初始化函数,获取了一些初始状态信息比如机器人当前位置等,并创建了真正实现DWA算法的DWAPlanner类的实例dp_,最后设置了动态参数配置服务。dp_的构造函数做了一系列参数获取的操作,最重要的是将几种cost计算方法的实例加入一个名为critics的vector容器里。
(2)采样速度样本:
当move_base调用tc_的computeVelocityCommands方法后,tc_会调用dwaComputeVelocityCommands方法,并在其中调用dp_的findBestPath方法。findBestPath方法里调用SimpleTrajectoryGenerator类的实例generator_的initialise函数,这个函数就是主要负责速度采样的。
每个维度速度需要采样的养本数存放在vsamples_这个结构体内,vsamples_[0]是x方向样本数,vsamples_[1]是y方向样本数,vsamples_[2]是z方向样本数。首先计算各个方向的最大速度和最小速度,DWA算法只在第一步进行采样,所以最大速度为:
Max_vel=max(max_vel,vel+acc_lim*sim_period)
最小速度为:
Min_vel=min(min_vel,vel-acc_lim*sim_period)
其中max_vel,min_vel为人为设定的最大和最小速度,vel是当前速度,acc_lim是人为设定的最大加速度,sim_period是第一步的模拟时间,由人为设定的局部路径规划频率决定,默认为0.05。
当计算出各个维度的最大最小速度后,就创建三个VelocityIterator类的对象,并传入最大最小速度和样本数目,此对象的构造函数会生成同样数目的速度样本并放入samples_这个容器内。具体做法是先计算步长step_size:
step_size=(max-min)/(nums_samples-1)
max为最大速度,min为最小速度,nums_samples为样本数目。从最小速度每次多累加一次step_size即为一个速度样本,直到达到最大速度。将每个维度的速度样本取得后,再全部循环每个样本组里选择一个组合放入结构体vel_sample,最后将这些vel_sample放入sample_params_的容器里。至此,速度采样就完成了。
(3)样本评分
速度采样完成后,逐一循环对样本空间内的样本进行评分。对每一组速度调用scoreTrajectory函数计算其评分,而scoreTrajectory函数则对这一组速度调用所有critics容器里的costfunction计算每个cost从而累加算出总的cost。在计算过程中,一旦累加的cost大于当前最小的cost则抛弃这组速度。
之前说到的几种cost成本函数为下列所示:
ObstacleCostFunction
这个成本函数基于感知障碍物来评估轨迹。它或者由于轨迹通过障碍物而返回负值,或者0。
MapGridCostFunction
这个成本函数类基于轨迹离全局路径或者接近目标点有多近来评估轨迹。这个尝试利用距离预计算地图有相同距离的路径或者目标点的所有的规划,来优惠计算速度。
在 dwa_local_planner中,代价函数因为不同的目的,被多次实例化。保持轨迹接近于路径,使机器人朝局部目标前进,并且使机器人的前段点指向局部目标。代价函数是一个启发,可以带来坏的结果或者不合适的参数的失败。
OscillationCostFunction
震荡发生在X,Y,theta维度上,正/负值被连续的选择。为了阻止震荡,当机器人在任何方向移动时,与下一个循环相反的方向被标记为无效,直到机器人已经从所设置标记的位置移动而并且超过一定的距离。这个成本函数类帮助减少某些震荡,虽然这可以有效的阻止这些震荡,如果使用不合适的参数,但是有可能阻止良好的解。
PreferForwardCostFunction
考虑到好的激光扫描范围只在机器人的前面,这个成本函数类被设计在像PR2一样的机器人上。成本函数更喜欢正面向前运动,惩罚背面运用及扫射动作。在其他机器人上或者其他领域,这可能是非常不可取的行为。
(4)发布plan
通过上述几种评分机制,选取最优的一组速度样本,传递给move_base,并发布相应的local plan。move_base如果收到了可用的速度则发布给底盘,否则发布0速度,且如果寻找最优速度的时间超过了限制就会执行障碍物清理模式,state_会变为CLEARING。

部分参考自 http://blog.csdn.net/heyijia0327/article/details/44983551

激光SLAM导航系列(五)局部路径规划相关推荐

  1. 激光SLAM导航系列(二)SLAM与导航系统框架

    激光SLAM系统框架 在激光SLAM系统中,Gmapping获取扫描的激光雷达信息以及里程计数据可动态的生成2D栅格地图.导航包则利用这个栅格地图,里程计数据和激光雷达数据做出适合的路径规划和定位,最 ...

  2. 激光SLAM导航系列(三)Costmap(代价地图)(上)

    Costmap(代价地图)(上) Costmap是机器人收集传感器信息建立和更新的二维或三维地图,可以从下图简要了解. 上图中,红色部分代表costmap中的障碍物,蓝色部分表示通过机器人内切圆半径膨 ...

  3. DWA算法在局部路径规划中的应用

    ROS的路径规划器分为全局路径和局部路径规划,其中局部路径规划器使用的最广的为dwa,个人理解为: 首先全局路径规划会生成一条大致的全局路径,局部路径规划器会把全局路径给分段,然后根据分段的全局路径的 ...

  4. 无人驾驶路径规划(三)局部路径规划-Frenet坐标系下的动态轨迹规划

    前言:对于无人驾驶路径规划系列的第二篇RRT算法的改进部分,由于有些内容属于个人想到的创新点,有想法投一篇小论文所以暂时没有公开,等后续完成后我会再公开介绍.今天第三篇内容开启一个新的算法介绍:Fre ...

  5. ros局部路径规划器dwa

    ROS的路径规划器分为全局路径和局部路径规划,其中局部路径规划器使用的最广的为dwa,个人理解为: 首先全局路径规划会生成一条大致的全局路径,局部路径规划器会把全局路径给分段,然后根据分段的全局路径的 ...

  6. 局部路径规划算法——实现DWA(dynamic window approach)控制空间采样

    DWA算法是局部路径规划算法,在全局路径规划算法完成后,DWA算法能够根据当前小车(机器人)位置.障碍物.终点的位置进行控制空间(速度.角速度)的采用,从而完成局部路径规划. DWA算法流程: 初始化 ...

  7. a算法和a*算法的区别_机器人路径规划算法,全局路径规划与局部路径规划究竟有哪些区别?...

       若步智能                  移动这一简单动作,对于人类来说相当容易,但对机器人而言就变得极为复杂,说到机器人移动就不得不提到路径规划,路径规划是移动机器人导航最基本的环节,指的是 ...

  8. DWA局部路径规划算法论文阅读:The Dynamic Window Approach to Collision Avoidance。

    DWA(动态窗口)算法是用于局部路径规划的算法,已经在ROS中实现,在move_base堆栈中:http://wiki.ros.org/dwa_local_planner DWA算法第一次提出应该是1 ...

  9. ROS常用局部路径规划算法比较

    本博文主要讨论ROS导航包中集成的局部路径规划算法,DWA.TEB.MPC等算法在使用过程中的各自的优缺点.以下均为自己在使用过程中总结的经验及查阅资料得来,如有理解不到位的地方,还希望在评论区多多讨 ...

最新文章

  1. linux系统下管理网口ip设置密码,Linux系统管理-(12)-网络配置IP命令
  2. STC89C52单片机 LCD1602液晶显示屏
  3. 学习记录:CONCAT()
  4. 当Linux提权不能反弹Shell时利用metasploit进行提权
  5. STIMULUS(二) —— Hello, Stimulus
  6. SAP Spartacus layout设计原理
  7. .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono
  8. MYSQL执行计划EXPLAIN
  9. Ubuntu无法使用快捷键ctrl + alt + T打开命令行终端或唤醒终端窗口的解决办法
  10. bzoj3668 [Noi2014]起床困难综合症
  11. 新的 Windows Azure 网络安全性白皮书
  12. 四分之一波长阻抗变换器
  13. 全程2分钟!教你如何免费下载Windows 10
  14. 荒岛余生最后一个包裹_你会为一个排球哭泣吗?电影《荒岛余生》
  15. 数据库设计规范(详细)
  16. java 12306验证码识别_12306验证码图片库大全
  17. 色彩构成与搭配——人对色彩的感觉
  18. 怎么在一张图片中隐藏文件?
  19. 使用vite插件编写tsx文件
  20. 大型企业CA认证系统部署应用案例解析

热门文章

  1. 快速排序的按区间的三个版本及优化--友友们不一定了解
  2. 机器学习实战 | 自动化特征工程工具Featuretools应用
  3. Winegrape数据集下载
  4. 国内动态ip 通过派克斯来支持宽带拨号实现换ip的目的
  5. 反编译 Progress .r 文件
  6. 辽宁省劳动经济学校计算机专业,辽宁省劳动经济学校
  7. python中复制n次字符串_python字符串操作方法大全
  8. 第二周:优化算法 (Optimization algorithms)
  9. BotVS趋势交易策略-MA均线
  10. Spring框架核心之(一)Spring简介