程序员SLAM技术交流Linux

# 动态窗口算法运动规划

2019-03-06  本文已影响2人  8416ac9040d9

动态窗口算法运动规划

image

引自 http://adrianboeing.blogspot.com/2012/05/dynamic-window-algorithm-motion.html

动态窗口方法是一种基于速度的局部规划器,可计算达到目标所需的机器人的最佳无碰撞(“允许”)速度。它将笛卡尔目标(x,y)转换为移动机器人的速度(v,w)命令。

该算法有两个主要的步骤,计算有效的速度 搜索空间,并选择 最佳速度搜索空间由一组能够产生安全的运动轨迹(即允许机器人在碰撞前停止)的速度构成,这些速度是机器人在其动态(“动态窗口”)的下一个时间片中可以实现的速度集。选择最佳速度以最大化机器人与障碍物的间隙,最大化速度并获得最接近目标的航向。

下面是DWA算法的伪代码:

BEGIN DWA(robotPose,robotGoal,robotModel)
   desiredV = calculateV(robotPose,robotGoal)
   laserscan = readScanner()
   allowable_v = generateWindow(robotV, robotModel)
   allowable_w  = generateWindow(robotW, robotModel)
   for each v in allowable_v
      for each w in allowable_w
      dist = find_dist(v,w,laserscan,robotModel)
      breakDist = calculateBreakingDistance(v)
      if (dist > breakDist)  //can stop in time
         heading = hDiff(robotPose,goalPose, v,w)
         clearance = (dist-breakDist)/(dmax - breakDist)
         cost = costFunction(heading,clearance, abs(desired_v - v))
         if (cost > optimal)
            best_v = v
            best_w = w
            optimal = cost
    set robot trajectory to best_v, best_w
END

代码解释

总结

通过这篇简短的伪代码,我们大致了解了ROS中常用的一种局部避障规划算法DWA,如果你觉得这篇文章帮助到了你,请分享给其他人,或者扫码关注公众号 : )。

参考链接

上一篇下一篇

猜你喜欢

热点阅读