当前位置:   article > 正文

机器人路径规划:基于Bug算法的机器人路径规划(提供Python代码)_机器人路径规划python

机器人路径规划python

一、Bug算法简介

Bug 算法是一种基于追踪障碍物的路径规划算法,它模拟了一种昆虫寻找巢穴的行为,因此得名Bug算法。Bug算法的基本思路是:当机器人遇到障碍物时,他会沿着障碍物的边缘行走,直到到达目标点。该算法可以分为两个主要步骤:表示空间中的点和算法实现。

在Bug算法中,空间被表示为二维网格,其中每个单元格可以是空的,包含障碍物或表示起点和终点。每个单元格可以表示一个网格点,该点的坐标可以用(x,y)表示。通过搜索算法,机器人可以在此网格中寻找路径,并移动到相应的点。Bug算法可以分为两个主要阶段:接近目标(Approach Phase)和沿障碍物行走(Follow Boundary Phase)。

(1)接近目标

在接近阶段,机器人按直线行驶到目标点,如果遇到障碍物,则计算机器人到目标点的距离,然后自动开始沿着障碍物行走,直到到达目标点或绕过障碍物。

(2)沿障碍物行走

在Bug算法中,移动机器人沿连接目标点和 起点的最短直线前进,在遇到障碍物时采用边缘 跟踪的方法绕过障碍物,然后再次沿直线前进。 Bug算法在移动机器人未知环境导航中是经典通 用的算法。需求的存储容量小。如果在机器人起 点和目标终点间存在可行路径的话,那么这种纯 粹的应激式算法肯定会完成路径规划,保证算法 的全局收敛。 Bug算法在寻找两点间可行路径上并不能保 证最优。标准的算法是在起点和终点的直线方向 上产生,遇到障碍物时沿相同的方向绕行。这种 算法能保证寻找到一条安全路径,但并不保证能 迅速到达目标终点,如下图所示:

Bug算法由两种模式来共同保证全局收敛: 趋向目标模式(Moving toward the Goal)和边线 沿走模式(Boundary Following)。开始时移动机 器人执行“趋向目标”模式,遇到障碍物时转向 “边线沿走”模式。

(3)Bug1算法

在Bug1算法中,机器人被假定为搭载接触传感器并能获取精确位置,且能测量两点之间的距离:

(4)Bug2算法

在Bug2算法中,机器人遇到障碍物后,机器人沿障碍物边界运动,直到找到起始点连接的直线上比初始接触障碍物点距目标更近的点。若机器人再次遇到原来的出发点,则没有通往目标的路径。

参考文献:

[1]康亮,赵春霞,郭剑辉.未知环境下基于三次螺线Bug算法的移动机器人路径规划[J].工程图学学报, 2010(1):9.DOI:10.3969/j.issn.1003-0158.2010.01.006.

[2]赵文瑜.基于Bug算法的移动机器人路径规划研究[J].无线互联科技, 2020, 17(6):2.DOI:CNKI:SUN:WXHK.0.2020-06-050.

二、部分代码

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. show_animation = True
  4. class BugPlanner:
  5. def __init__(self, start_x, start_y, goal_x, goal_y, obs_x, obs_y):
  6. self.goal_x = goal_x
  7. self.goal_y = goal_y
  8. self.obs_x = obs_x
  9. self.obs_y = obs_y
  10. self.r_x = [start_x]
  11. self.r_y = [start_y]
  12. self.out_x = []
  13. self.out_y = []
  14. for o_x, o_y in zip(obs_x, obs_y):
  15. for add_x, add_y in zip([1, 0, -1, -1, -1, 0, 1, 1],
  16. [1, 1, 1, 0, -1, -1, -1, 0]):
  17. cand_x, cand_y = o_x+add_x, o_y+add_y
  18. valid_point = True
  19. for _x, _y in zip(obs_x, obs_y):
  20. if cand_x == _x and cand_y == _y:
  21. valid_point = False
  22. break
  23. if valid_point:
  24. self.out_x.append(cand_x), self.out_y.append(cand_y)
  25. def mov_normal(self):
  26. return self.r_x[-1] + np.sign(self.goal_x - self.r_x[-1]), \
  27. self.r_y[-1] + np.sign(self.goal_y - self.r_y[-1])

三、部分结果

四、完整Python代码

见下方名片

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/490946
推荐阅读
相关标签
  

闽ICP备14008679号