码迷,mamicode.com
首页 > 其他好文 > 详细

ROS MoveBase与路径规划

时间:2020-12-10 10:40:16      阅读:2      评论:0      收藏:0      [点我收藏+]

标签:图片   image   宽度   loading   静态   dynamic   back   nbsp   isp   

一、MoveBase框架

技术图片

   上图中move_base节点提供用于配置,运行和与交互的ROS界面。上面显示了move_base节点及其与其他组件的交互的高级视图。主要包含了global_panner与local_panner,分别用于总体路径规划与局部路径规划。

   预期的机器人行为:

技术图片

  base_local_planner这个包通过地图数据,通过算法搜索到达目标的多条路经,利用一些评价标准(是否会撞击障碍物,所需要的时间等等)选取最优的路径,并且计算所需要的实时速度和角度。
  其中,Trajectory Rollout 和Dynamic Window approaches算法的主要思路如下:
  (1) 采样机器人当前的状态(dx,dy,dtheta);
  (2) 针对每个采样的速度,计算机器人以该速度行驶一段时间后的状态,得出一条行驶的路线。
  (3) 利用一些评价标准为多条路线打分。
  (4) 根据打分,选择最优路径。
  (5) 重复上面过程。

二、全局规划器

  1. Dijkstra与A*对比

  1) Dijkstra算法计算源点到其他所有点的最短路径长度,A*关注点到点的最短路径(包括具体路径)。

  2) Dijkstra算法建立在较为抽象的图论层面,A*算法可以更轻松地用在诸如游戏地图寻路中。

  3) Dijkstra算法的实质是广度优先搜索,是一种发散式的搜索,所以空间复杂度和时间复杂度都比较高。对路径上的当前点,A*算法不但记录其到源点的代价,还计算当前点到目标点的期望代价,是一种启发式算法,也可以认为是一种深度优先的算法。

  4) 由第一点,当目标点很多时,A*算法会带入大量重复数据和复杂的估价函数,所以如果不要求获得具体路径而只比较路径长度时,Dijkstra算法会成为更好的选择。

  2. Dijkstra

     Dijkstra 算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
计算过程:
创建两个表,OPEN, CLOSE。 OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
1. 访问路网中离起始点最近且没有被检查过的点,把这个点放入OPEN表中等待检查。 2. 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。 3. 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。 4. 重复2,3,步。直到OPEN表为空,或找到目标点。

 

  3. A Star

  A*(A-Star)算法是一种静态路网中求解最短路最有效的方法。

  公式表示为:        f(n)=g(n)+h(n), 
  其中f(n) 是节点n从初始点到目标点的估价函数,
  g(n) 是在状态空间中从初始节点到n节点的实际代价,即起始节点到当前节点的实际代价.
  h(n)是从n到目标节点最佳路径的估计代价。即当前节点到目标节点的估计代价.

       g(n):对g*(n)的一个估计,是当前的搜索图G中s到n的最优路径费用 g(n)≥g*(n)

  h(n):对h*(n)的估计,是从n到目标节点的估计代价,称为启发函数。

  例如:当h(n) = 0, g(n) = d, 则f(n) = g(n)就变为了宽度优先搜索,也就是如果不需要启发,那就是宽度优先搜索的算法了。

 

  保证找到最短路径(最优解的)条件,关键在于估价函数h(n)的选取:
  估价值h(n)<= n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。
  如果 估价值>实际值, 搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。
  估价值与实际值越接近,估价函数取得就越好。
  例如对于几何路网来说,可以取两节点间欧几理德距离(直线距离)做为估价值,即f=g(n)+sqrt((dx-nx)*(dx-nx)+(dy-ny)*(dy-ny));

  这样估价函数f在g值一定的情况下,会或多或少的受估价值h的制约,节点距目标点近,h值小,f值相对就小,能保证最短路的搜索向终点的方向进行。明显优于Dijstra算法的毫无方向。

#计算过程
创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
遍历当前节点的各个节点,将n节点放入CLOSE中,取n节点的子节点X,->算X的估价值->

 

  4. DWA与TEB

  DWA和TEB的总体思想都是预测/规划机器人沿给定视界的运动,同时最小化给定目标函数,同时遵守机器人的动力约束。

  只命令机器人执行第一个控制动作后,重复整个预测/优化过程。这一原理在控制理论中被称为退地平线控制或模型预测控制。但由于计算最优解的计算量较大,因此两种方法的近似最优解的方式不同,实际的优化策略也不同。

  动态窗口法(DWA)

  DWA执行基于样本的优化。它在可行速度空间(通常是平移/角速度对)中采样一个控制动作,并为这些特定的采样动作推出轨迹。铺展是指基于机器人运动模型,根据指定的水平长度对轨迹进行模拟。

  一个重要的细节是:整个预测阶段行动是保持不变的因此它不能预测运动逆转等。在对所有样本进行预测之后,根据指定的成本函数和约束条件(包括到全局路径的距离、平滑度、障碍清除度等)选择最佳候选样本。

  因此,DWA包括两个简化,以保持低的计算时间,同时达到一定数量的控制性能。不详细讨论由于固有次最优性而产生的稳定性和递归可行性,但是这种方法对于差分驱动和全向机器人非常有效。

  一个好处是,成本函数可以是非光滑的,因此它非常适合基于网格的评估。例如,轨迹可以栅格化到成本图中,以评估成本(考虑到致命网格单元和膨胀成本)。

  此外,DWA不会陷入基于初始化的局部极小值(当然,机器人仍然会因为有限的视界长度和较少的控制自由度而陷入困境)。由于DWA假定在预测范围内的控制行为是恒定的,因此类车机器人的控制是相当有限的。

  有一些基本的扩展将速度搜索空间限制为与汽车类似的兼容动作。但运动逆转仍然没有优化,因此在有限的空间停车、机动是棘手的。注意,当然,运动逆转可以在闭环控制期间进行,但它们不是开环解决方案/预测的一部分。

  总结:

  不需要运动反转的次优解(控制动作在预测范围内保持不变)

  非常适合于扩散驱动/全向机器人,但不适合类车机器人

  支持非平滑成本函数

  Timed-Elastic-Band (TEB)

  TEB主要尝试寻找时间最优的解决方案,但是您也可以为全局参考路径保真度配置它。该方法根据时间离散轨迹,并采用连续的数值优化方案因此,根据离散化分辨率,沿预测水平的自由度可以非常高,并支持运动逆转。

  将约束优化问题转化为无约束优化问题,缩短了计算时间。这也意味着在任何情况下约束(例如避障、速度界限等)都不能得到保证,所以建议检查机器人的基本驱动程序或专用节点的紧急情况。

  此外,优化器只找到局部解决方案,例如,如果轨迹初始化在一个障碍的左侧,它将保持在那里。teb_local_planner能够同时优化不同拓扑中的多个轨迹(比如左右),从而找到解决方案。由于该方法依赖于连续优化,成本函数必须是平滑的它不能处理网格和成本图的功能评估。

  目前,每个致命的障碍单元都被认为是点形状的障碍,它限制了小/中等规模的本地成本图大小(和相当粗的成本图分辨率)的方法。计划器还可以处理多边形形状的障碍(参见costmap_converter包将costmap转换为更原始的障碍,但它仍处于实验阶段)。

  然而,给定一定的计算能力和一个温和的问题大小,planner实现了更好的控制器性能,解决了更多的场景,还支持类车机器人的运动。

  在teb_local_planner的最新版本中,引入了对动态障碍的支持。其性能在很大程度上取决于障碍物跟踪和状态估计的精度。然而,成本图转换包尝试从本地成本图跟踪动态障碍(实验)。

  所规划的轨迹更接近实际的最优解,但约束仅作为惩罚执行。

       总结:

  适合所有类型的机器人

  在多种拓扑中规划多个候选轨迹

  动态障碍物支持(实验)

  大的计算负担

参考博客:

https://www.guyuehome.com/270

http://wiki.ros.org/move_base/

https://blog.csdn.net/hopeping128/article/details/78960326

https://zhuanlan.zhihu.com/p/104051892?utm_medium=social

https://www.cnblogs.com/guxuanqing/p/9610780.html

https://answers.ros.org/question/274564/difference-between-dwa-local_planner-and-teb-local_planner/

 

ROS MoveBase与路径规划

标签:图片   image   宽度   loading   静态   dynamic   back   nbsp   isp   

原文地址:https://www.cnblogs.com/xgth/p/14090584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!