当前位置: 首页 > article >正文

【基于ROS的A*算法实现路径规划】A* | ROS | 路径规划 | Python

### 记录一下使用Python实现ROS平台A*算法路径规划 ###

代码可自取  :Xz/little_projecthttps://gitee.com/Xz_zh/little_project.git


    目录

    一、思路分析

    二、算法实现

    三、路径规划实现


    一、思路分析

            要求使用A*算法实现路径规划,可以将该任务分为三大部分内容。首先需要对输入的图片和起点终点进行处理,其次就是通过A*算法输出规划的路径,最后再对路径进行处理并实现可视化。

            其中第一部分需要对输入的地图进行处理,将世界地图转化为栅格地图,如果是彩色地图还需要进行灰度处理并进行二值化处理(判断障碍点),存入相关信息。第二部分A*算法通过代价函数,遍历从起点到终点的路径点并找到f值最小的路径。最后需要将A*算法返回的栅格路径转化为世界地图坐标,再进行可视化。

            伪代码:

    # 初始化 ROS 节点
    初始化 ROS 节点 "astar_planner"
    订阅 "/map" 以获取 OccupancyGrid 地图
    订阅 "/move_base_simple/goal" 以获取 Rviz 选取的目标点
    发布 "/astar_path" 以发布路径
     
    # 处理地图数据
    函数 map_callback(msg):
        解析地图信息(宽度、高度、分辨率、原点)
        转换为二值栅格地图(障碍物=1, 可通行=0)
     
    # 世界坐标 <-> 栅格坐标转换
    函数 world_to_map(x, y):
        计算栅格坐标并限制范围
     
    函数 map_to_world(map_x, map_y):
        计算世界坐标
     
    # 处理选取的目标点
    函数 clicked_point_callback(msg):
        解析 Rviz 选取的点,转换为栅格坐标
        如果没有起点,设置为起点
        如果已经有起点,设置终点并运行 A* 规划
        调用 publish_path() 发送路径
     
    # A* 算法
    函数 astar(grid_map, start, end):
        初始化 开放列表 open_list,关闭集合 closed_set
        创建起点、终点节点
        while open_list 不是空:
            取出 f 最小的节点 current_node
            如果 current_node == 终点:
                回溯生成路径
                返回路径
            遍历当前节点的四个邻居:
                如果邻居是障碍物或已在 closed_set,跳过
                计算 g, h, f
                如果 f 值比 open_list 中的同位置节点更优,加入 open_list
        返回 None(无可行路径)
     
    # 发布路径
    函数 publish_path(path):
        构建 Path 消息
        依次添加路径点,转换回世界坐标
        发布 "/astar_path"

    二、算法实现

            A*算法是一种有序的搜索算法,常常用于优化问题求取最短路径。其特点主要在于对估价函数的定义上。A*算法主要通过其估价函数f^{^*}(n)来计算各点之间的代价值,从而找到代价最小的路径即为最优路径。估价函数 f(n)用于评估从起点经过当前节点 nn 到目标节点的总代价,其公式为:

    f(n)=g(n) + h(n)

    • g(n):从起点到当前节点 nn 的实际代价(已知值)。
    • h(n):从当前节点 nn 到目标节点的启发式估计代价(预测值)。通常情况下利用曼哈顿函数计算。

    这里关于A*算法的原理不在赘述。

            由于需要存储遍历点的上一节点和对应的f 值,这里可以利用类实现。每个点是Node类的对象,每个点有position(当前点的坐标)、parent(父节点坐标)、g、h、f(代价函数)。

    为了方便计算h值,封装曼哈顿函数:

    核心算法

    三、路径规划实现

    首先开启ROS核心

    启动map_server加载PGM图像

    运行A*算法代码

    Rviz实现规划路径可视化


    http://www.kler.cn/a/597926.html

    相关文章:

  • 通往自主智能之路:探索自我成长的AI
  • Linux信号的诞生与归宿:内核如何管理信号的生成、阻塞和递达?
  • 虚拟机安装centos7
  • 【RAGFlow】全由国内镜像源搭建docker版
  • SAP-ABAP:SAP BW模块架构与实战应用详解
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的数据验证:使用 Hibernate Validator
  • 蓝桥杯备考:动态规划之最长上升子序列打鼹鼠
  • 自动驾驶背后的数学:多模态传感器融合的简单建模
  • python接口自动化pytest+request+allure
  • Python实现deepseek接口的调用
  • C语言入门教程100讲(13)其他运算符
  • 2025年了,5G还有三个新变化
  • QEMU 引导时分离内核和文件系统
  • Shell中sed的用法
  • 安防监控视频平台EasyNVR级联视频上云系统EasyNVS出现“Login error”报错的原因排查
  • 基于TCN-BiLSTM-Attention的序列数据预测(功率预测、故障诊断)模型及代码详解
  • 常⻅中间件漏洞--Tomcat
  • bootstrap 表格插件bootstrap table 的使用经验谈!
  • Rocky Linux 软件安装:Last metadata expiration check:
  • 某视频的解密下载