改进的 A*算法的路径规划(路径规划+代码+毕业设计)下

简介: 改进的 A*算法的路径规划(路径规划+代码+毕业设计)

正文


子节点优化选择策略


(1)子节点选择方式


为了找到从起始点到终点的路径,需定义一种可以选择后续节点的方式。在A*算法中两种常见的方法为 4-邻接(见图 5-7(a))和 8-邻接 (见图 5-7(b)),但考虑到在复杂越野环境上,我们希望智能车辆允许更多的自由运动来更好规避危险,因此本文选择 16-邻接(见图 5-7©)。如图 5-8 所示,4-邻接规划的路径具有很多的直角拐点且路径最长,其次是 8-邻接规划的路径,而 16-邻接规划的路径平滑、拐点数少、路径短,适合复杂越野环境智能车的需求。

edc6a691dd3226c689e255a18644ff82_60dc7e502c9a407286cbb4a4803d7f5c.png

(2)优化子节点选择


传统 A*算法在子节点选取上,仅考察子节点周围是否为障碍物,而未考察子节点与障碍物位置的相关性,从而规划出路线存在斜着通过障碍物栅格顶点的问题,导致车辆可能与障碍物发生碰撞。因为本文中所构建环境模型具有更危险的威胁物存在,所以优化了子节点的选择规则。

如图 5-9,为 16 个子节点分布图。本文结合越野环境栅格地图设计的子节点选择规则为:

**1:**若子节点 4 或子节点 12 具有威胁(在越野环境栅格地图中值1),则子节点 2、子节点 6、子节点 3、子节点 5 或子节点 13、子节点 9、子节点 14、子节点11 不作为预选点。

**2:**若子节点 16 或子节点 8 具有威胁,则子节点 2、子节点 13、子节点 15、

子节点 1 或子节点 6、子节点 9、子节点 10、子节点 7 不作为预选点。

**3:**均无具威胁,则不做处理。

优化子节点选择后,规划后的路径避开具有威胁栅格的顶点,避免智能车辆

1040e166def56597f44502f379e767a3_41a6257a39f942b08312d51222378a36.png


代码部分


###############创建A-Star类############
class AStar:
    # 描述AStar算法中的节点数据
    class Node:  
        #初始化
        def __init__(self, point, startPoint,endPoint, g=0,w=1,p=1):
            self.point = point  # 自己的坐标
            self.father = None  # 父节点
            self.g = g       # g值,g值在用到的时候会重新算
            # 计算h值,采用曼哈顿距离
            #self.h = (abs(endPoint.x - point.x) + abs(endPoint.y - point.y)) * 10  
            #采用欧几里得距离
            #self.h = math.pow((math.pow((endPoint.x - point.x),2) + math.pow((endPoint.y - point.y),2)),0.5)*10
            #采用对角距离
            pp=(1-p)+0.2*math.exp((math.pow((math.pow((endPoint.x - point.x),2) + math.pow((endPoint.y - point.y),2)),0.5))/(math.pow((math.pow((endPoint.x - startPoint.x),2) + math.pow((endPoint.y - startPoint.y),2)),0.5)))
            Diagonal_step = min((endPoint.x - point.x),(endPoint.y - point.y))
            straight_step = (abs(endPoint.x - point.x) + abs(endPoint.y - point.y)) - 2*Diagonal_step
            self.h  =(straight_step + math.pow(2,0.5)*Diagonal_step)*10*pp
            #print(pp)
    #初始化A-start
    def __init__(self, map2d, startPoint, endPoint, passTag=1.0):#map2d地图信息,startPoint起点, endPoint终点, passTag=1.0为不可行驶区域
        # 开启表
        self.openList = []
        # 关闭表
        self.closeList = []
        # 寻路地图
        self.map2d = map2d
        # 起点终点
        if isinstance(startPoint, Point) and isinstance(endPoint, Point):
            self.startPoint = startPoint
            self.endPoint = endPoint
        else:
            self.startPoint = Point(*startPoint)
            self.endPoint = Point(*endPoint)
        # 不可行走标记
        self.passTag = passTag
    def getMinNode(self):
        """
        获得openlist中F值最小的节点
        :return: Node
        """
        currentNode = self.openList[0]
        for node in self.openList:
            if node.g + node.h < currentNode.g + currentNode.h:
                currentNode = node
        return currentNode#返回最小代价的点


结果对比


f46abb15c1fa9412ffadff0956f8bc17_7942a33c49f74ffdb3c08febfc1cdd73.png

35c41029eb38805421072e8e6d75a499_e939c4bdd5754a8fa520b788ba6b2788.png


越野环境路径规划对比


366f39cb49bb1750263a5e08da955a7e_8f3c81606ab8410aa00309d198a92294.png


敏感度衡量对比


6c99a1ef9972599521066816062202c2_15dfa983729345b38c989e46759d8ef0.png


结论


本节针对越野场景路径规划问题,采用栅格法建立障碍物、威胁物和越野道路模型,模拟真实的越野环境场景。引入方向变化惩罚和局部区域复杂度惩罚来优化A算法,使算法规划出的路径更平滑,算法效率更高效。采用改进 Floyd 算法对路径进行双向平滑,并且进行了防碰撞处理,来确保规划出路径的安全可靠性。仿真结果表明,所改进的 A算法与传统算法相比较,效率提高了 30%,拐点数减少了

4 倍,所提算法能够在越野环境多重因素综合影响以及不同车辆性能和任务的要求下快速的规划出安全的路径。


全部代码可私信




相关文章
|
5天前
|
机器学习/深度学习 算法 API
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
9 0
|
5天前
|
算法 关系型数据库 C语言
卡尔曼滤波简介+ 算法实现代码(转)
卡尔曼滤波简介+ 算法实现代码(转)
20 4
|
5天前
|
运维 算法
基于改进遗传算法的配电网故障定位(matlab代码)
基于改进遗传算法的配电网故障定位(matlab代码)
|
5天前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
|
5天前
|
算法
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
|
5天前
|
算法
基于蜣螂优化算法DBO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
基于蜣螂优化算法DBO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
|
5天前
|
算法
基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
|
5天前
|
算法 调度 决策智能
基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理(matlab代码)
基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理(matlab代码)
|
5天前
|
机器学习/深度学习 算法 数据挖掘
基于改进ISODATA算法的负荷场景曲线聚类(matlab代码)
基于改进ISODATA算法的负荷场景曲线聚类(matlab代码)
|
5天前
|
算法 Serverless 调度
基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究(matlab代码)
基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究(matlab代码)