机器人路径规划:基于Bug算法的机器人路径规划(提供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.

二、部分代码

import numpy as np
import matplotlib.pyplot as plt

show_animation = True


class BugPlanner:
    def __init__(self, start_x, start_y, goal_x, goal_y, obs_x, obs_y):
        self.goal_x = goal_x
        self.goal_y = goal_y
        self.obs_x = obs_x
        self.obs_y = obs_y
        self.r_x = [start_x]
        self.r_y = [start_y]
        self.out_x = []
        self.out_y = []
        for o_x, o_y in zip(obs_x, obs_y):
            for add_x, add_y in zip([1, 0, -1, -1, -1, 0, 1, 1],
                                    [1, 1, 1, 0, -1, -1, -1, 0]):
                cand_x, cand_y = o_x+add_x, o_y+add_y
                valid_point = True
                for _x, _y in zip(obs_x, obs_y):
                    if cand_x == _x and cand_y == _y:
                        valid_point = False
                        break
                if valid_point:
                    self.out_x.append(cand_x), self.out_y.append(cand_y)

    def mov_normal(self):
        return self.r_x[-1] + np.sign(self.goal_x - self.r_x[-1]), \
               self.r_y[-1] + np.sign(self.goal_y - self.r_y[-1])

三、部分结果

四、完整Python代码

见下方名片

  • 32
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器⼈python路径规划_基于Q-learning的机器⼈路径规划系统 (matlab) 0 引⾔ Q-Learning算法是由Watkins于1989年在其博⼠论⽂中提出,是强化学习发展的⾥程碑,也是⽬前应⽤最为⼴泛的强化学习算法。Q- Learning⽬前主要应⽤于动态系统、机器⼈控制、⼯⼚中学习最优操作⼯序以及学习棋类对弈等领域。 1 项⽬概述 Q学习在机器⼈路径规划领域有较为⼴泛的应⽤,由于其只需要与环境进⾏交互,且仅需感知当前状态和环境即可对下⼀步动作进⾏决策。 本研究以 MATLAB为基础,设计基于Q学习的最短路径规划算法,并考虑智能体的斜 向运动,更加符合实际情况。同时使⽤DQN⽹络对Q 值更新进⾏⼀定的优 化,使得Q值表能够更加符合实际应⽤。 本次研究的具体步骤如下: 设计⼀个有障碍物的地图,⽤户可以修改障碍物布局,可以指定起点和终点; 使⽤MATLAB编程实现Q-learning算法,⽤于机器⼈规划最短路径,学习算法参数可以由⽤户设置; 使⽤⽤可视化界⾯演⽰Q值变化过程及最短路径探测过程。 2 Q-learning算法思想 Q-Learning算法是⼀种off-policy的强化学习算法,⼀种典型的与模型⽆关的算法算法通过每⼀步进⾏的价值来进⾏下⼀步的动作。基于 QLearning算法智能体可以在不知道整体环境的情况下,仅通过当前状态对下⼀步做出判断。 Q-Learning是强化学习算法中value-based的算法,Q是指在某⼀时刻的某⼀状态下采取某⼀动作期望获得的收益。环境会根据智能体的动 作反馈相 应的回报,所以算法的主要思想就是将状态与动作构建成⼀张Q值表,然后根据Q值来选取能够获得最⼤的收益的动作。 3 算法步骤 (⼀)Q-学习步骤 初始化Q值表。构造⼀个n⾏n列(n为状态数)的 Q值表,并将表中的所有值初始化为零。 基于当前Q值表选取下⼀个动作a。初始状态时,Q值 均为零,智能体可有很⼤的选择空间,并随机选择下⼀步动作。随着迭代次数增 加,Q值表不断更新,智能体 将会选择回报最⼤的动作。 计算动作回报。采⽤动作a后,根据当前状态和奖励,使⽤Bellman ⽅程更新上⼀个状态的Q(s, t)。 NewQ(s,a) = (1 α)Q(s,a) + α(R(s,a) + γmaxQ (s ,a )) 其中, NewQ(s,a)——上⼀个状态s和动作a的新Q值 Q(s,a)——当前状态s和动作a的Q值 R(s,a)——当前状态s和动作a的奖励r maxQ (s ,a )——新的状态下所有动作中最⼤的Q值 重复步骤3,直到迭代结束,得到最终的Q值表。 根据Q值表选择最佳路径。 (⼆)算法改进 避免局部最优 Q-learning本质上是贪⼼算法。如果每次都取预期奖励最⾼的⾏为去 做,那么在训练过程中可能⽆法探索其他可能的⾏为,甚⾄会进 ⼊"局部 最优",⽆法完成游戏。所以,设置系数,使得智能体有⼀定的概率采取 最优⾏为,也有⼀定概率随即采取所有可采取的⾏动。 将⾛过的路径纳⼊ 记忆库,避免⼩范围内的循环。 增加斜向运动 将斜向运动的奖励值设置为 2/ 2 ,取近似值0.707,可以避免出现如机器 ⼈先向左上⽅移动再向左下⽅移动⽽不选择直接向左移动两格 的情况。设 置为此值是根据地图的两格之间的相对距离确定的。 4 MATLAB实现代码 %% 基于Q-learning算法的机器⼈路径规划系统 clear %% ⾸先创造⼀个机器⼈运动的环境 % n是该运动的运动环境的矩阵environment(n,n)的⾏列⼤⼩ n = 20; % 新建⼀个全为1的n*n维environment矩阵 environment = ones(n,n); %下⾯设置环境中的障碍物,将其在矩阵中标为值-100(可⾃⾏设置障碍物) environment(2,2:5)=-100; environment(5,3:5)=-100; environment(4,11:15)=-100; environment(2,13:17)=-100; environment(7,14:18)=-100; environment(3:10,19)=-100; environment(15:18,19)=-100; environment(3:10,19)=-100; environment(3:10,7)=-100; environment(9:19,2)=-100; environment(15:17,7)=-100; environment(10,3:7)=-100; environment(13,5:8)=-100; environment(6:8,4)=-100; environment(13:18,4)=-100; environment(6
基于瞬态优化的机器人路径规划算法是一种基于最优控制理论的算法,用于解决机器人路径规划问题。该算法通过优化控制输入来寻找机器人的最优路径。 以下是该算法的基本思路: 1. 问题建模:将机器人路径规划问题转化为一个优化问题。定义目标函数和约束条件,目标函数可以是路径长度、时间消耗、能量消耗等。约束条件可以包括避免障碍物、满足运动学限制等。 2. 状态空间建模:将机器人的状态表示为一组状态变量,如位置、速度、加速度等。根据问题的具体要求,确定状态空间的维度和表示方式。 3. 动力学模型建立:根据机器人的运动特性和动力学方程,建立机器人的动力学模型。这个模型描述了机器人在给定控制输入下的运动轨迹。 4. 瞬态优化过程:通过优化控制输入来寻找最优路径。具体步骤如下: - 初始化控制输入:随机生成一组初始控制输入作为种群。 - 状态演化:根据动力学模型,模拟机器人在当前控制输入下的状态演化。 - 目标函数评估:根据目标函数,计算机器人在当前控制输入下的目标函数值。 - 优化控制输入:根据优化算法(如遗传算法、粒子群优化等),对控制输入进行优化,以改善目标函数值。 - 终止条件判断:根据预设的终止条件(如达到最大迭代次数、目标函数收敛等),判断是否终止优化过程。 5. 输出最优路径:在优化过程结束后,输出具有最优目标函数值的控制输入作为最优路径。 需要注意的是,基于瞬态优化的机器人路径规划算法是一种启发式算法,通过优化控制输入来寻找最优路径。算法的性能和效果受到多个因素的影响,包括问题建模的准确性、动力学模型的精度、优化算法的选择和参数设置等。因此,在实际应用中需要根据具体问题进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值