【基于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.pswp.cn/diannao/74289.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/diannao/74289.shtml
    英文地址,請注明出處:http://en.pswp.cn/diannao/74289.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    2025-03-23 吳恩達機器學習3——多維特征

    文章目錄 1 多元引入2 矢量化2.1 示例2.2 非矢量化實現2.3 矢量化實現2.4 應用 3 特征縮放3.1 舉例3.2 必要性3.3 方法3.3.1 最大最小值縮放&#xff08;Min-Max Scaling&#xff09;3.3.2 均值歸一化&#xff08;Mean Normalization&#xff09;3.3.3 Z 分數歸一化&#xff08…

    正點原子內存管理學習和修改

    由于項目需要用到內存管理進行動態申請和釋放&#xff0c;今天又重新學習了一下正點原子的內存管理實驗&#xff0c;溫習了一下內存管理的實質。首先先上正點原子內存管理的源代碼&#xff1a; malloc.c文件&#xff1a; #include "./MALLOC/malloc.h"#if !(__ARMC…

    時空觀測者:俯身拾貝

    目錄 中華文明時空貝殼集&#xff08;按時間排序&#xff09;1. 良渚玉琮&#xff08;約公元前3300-2300年&#xff09;2. 三星堆青銅神樹&#xff08;公元前1200年&#xff09;3. 殷墟甲骨文&#xff08;約公元前14世紀&#xff09;4. 京杭大運河&#xff08;公元前486年始建&…

    護網期間監測工作全解析:內容與應對策略

    護網期間監測工作全解析&#xff1a;內容與應對策略 一、引言 在數字化浪潮中&#xff0c;網絡安全的重要性愈發凸顯&#xff0c;護網行動作為保障關鍵信息基礎設施安全的關鍵舉措&#xff0c;備受矚目。護網期間&#xff0c;監測工作是發現潛在威脅、防范攻擊的重要防線。全…

    【Centos7搭建Zabbix4.x監控HCL模擬網絡設備:zabbix-server搭建及監控基礎05

    蘭生幽谷&#xff0c;不為莫服而不芳&#xff1b; 君子行義&#xff0c;不為莫知而止休。 5.zabbix監控HCL模擬網絡設備 在保證zabbix-server與HCL網絡相通的情況下進行如下操作。 5.1創建主機群 配置-主機群-創建主機群 圖 19 取名&#xff0c;添加。 圖 20 5.2 創建監控…

    趣味極簡品牌海報藝術貼紙設計圓潤邊緣無襯線粗體裝飾字體 Chunko Bold - Sans Serif Font

    Chunko Bold 是一種功能強大的顯示字體&#xff0c;體現了大膽極簡主義的原則 – 當代設計的主流趨勢。這種自信的字體將粗獷的幾何形狀與現代的趣味性相結合&#xff0c;具有圓潤的邊緣和強烈的存在感&#xff0c;與當今的極簡主義設計方法完美契合。無論是用于鮮明的構圖還是…

    Spring Boot(十七):集成和使用Redis

    Redis(Remote Dictionary Server,遠程字典服務器)是一個開源的、基于內存的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。Spring Boot 中集成和使用Redis主要涉及以下幾個步驟: 添加依賴 在項目的pom.xml文件中添加Redis的依賴。Spring Boot提供了對Redis的集…

    2025-03-21 Unity 序列化 —— 自定義2進制序列化

    文章目錄 前言1 項目結構1.1 整體1.2 代碼 2 實現2.1 Processor2.1.1 BaseType2.1.2 CollectionType2.1.3 CustomType 2.2 ByteFormatter2.3 ByteHelper 3 使用 前言 ? BinaryFormatter 類可以將 C# 類對象快速轉換為字節數組數據。 ? 在網絡開發時&#xff0c;不會使用 Bi…

    為WordPress自定義一個留言板

    要在WordPress中創建一個留言反饋表單&#xff0c;并實現后臺管理功能&#xff0c;您可以按照以下步驟進行操作&#xff1a; 1. 創建留言反饋表單 首先&#xff0c;您需要使用一個表單插件來創建表單。推薦使用 Contact Form 7 或 WPForms。以下是使用 Contact Form 7 的示例…

    嵌入式項目:利用心知天氣獲取天氣數據實驗方案

    【實驗目的】 1、利用心知天氣服務器獲取指定位置天氣數據 2、將天氣數據解析并可視化顯示到OLED屏幕 【實驗原理】 【實驗步驟】 官網注冊

    go-zero學習筆記

    內容不多&#xff0c;只有部分筆記&#xff0c;剩下的沒有繼續學下去&#xff0c;包括路由與處理器、日志中間件、請求上下文 文章目錄 1、go-zero核心庫1.1 路由與處理器1.2 日志中間件1.3 請求上下文 1、go-zero核心庫 1.1 路由與處理器 package mainimport ("github…

    【Go】Go語言繼承-多態模擬

    繼承&#xff08;結構體嵌入&#xff09;多態&#xff08;接口實現和空接口&#xff09; 1. 繼承&#xff08;結構體嵌入&#xff09; Go 語言沒有傳統的面向對象的繼承機制&#xff0c;但可以通過“結構體嵌入”實現類似繼承的效果。 結構體嵌入&#xff1a;在結構體中嵌入另…

    kotlin知識體系(四) : inline、noinline、crossinline 關鍵字對應編譯后的代碼是怎樣的 ?

    kotlin中inline、noinline、crossinline 關鍵字的作用 在 Kotlin 里&#xff0c;inline、noinline 和 crossinline 這幾個關鍵字和高階函數緊密相關&#xff0c;它們能夠對高階函數的行為進行優化和控制。下面為你詳細闡述它們的作用和原理。 inline 關鍵字 inline 關鍵字用…

    LabVIEW FPGA與Windows平臺數據濾波處理對比

    LabVIEW在FPGA和Windows平臺均可實現數據濾波處理&#xff0c;但兩者的底層架構、資源限制、實時性及應用場景差異顯著。FPGA側重硬件級并行處理&#xff0c;適用于高實時性場景&#xff1b;Windows依賴軟件算法&#xff0c;適合復雜數據處理與可視化。本文結合具體案例&#x…

    深度解析 Android Matrix 變換(二):組合變換 pre、post

    前言 在上一篇文章中&#xff0c;我們講解了 Canvas 中單個變換的原理和效果&#xff0c;即縮放、旋轉和平移。但是單個旋轉僅僅是基礎&#xff0c;Canvas 變換最重要的是能夠隨意組合各種變換以實現想要的效果。在這種情況下&#xff0c;就需要了解如何組合變換&#xff0c;以…

    Java并發編程之CountDownLatch

    1. 基本原理 計數器 CountDownLatch 在創建時需要指定一個初始計數值。這個值通常代表需要等待完成的任務數或線程數。 等待與遞減 等待&#xff1a;調用 await() 方法的線程會被阻塞&#xff0c;直到計數器變為 0。遞減&#xff1a;每當一個任務完成后&#xff0c;應調用 cou…

    C++|GLog開源庫的使用 如何實現自定義類型消息日志

    參考&#xff1a; C glog使用教程與代碼演示 C第三方日志庫Glog的安裝與使用超詳解 GLOG從入門到入門 glog 設置日志級別_glog C版本代碼分析 文章目錄 日志等級自定義消息創建使用宏定義 日志等級 在 glog 中&#xff0c;日志的嚴重性是通過 LogSeverity 來區分的&#xff0c…

    FAQ - VMware vSphere Web 控制臺中鼠標控制不了怎么辦?

    問題描述 在VMware vSphere vCenter Server 的 Web 控制臺中新建了一臺 Windows Server 2008 R2 虛擬機&#xff0c;但是鼠標進入控制臺后&#xff0c;可以看見鼠標光標&#xff0c;但是移動卻沒有反應。 根因分析 暫無。 解決方案 選中虛擬機>操作>編輯設置>添加新…

    Rust+WebAssembly:開啟瀏覽器3D渲染新時代

    引言 在當今的 Web 開發領域&#xff0c;隨著用戶對網頁交互體驗的要求日益提高&#xff0c;3D 渲染技術在 Web 應用中的應用愈發廣泛。從沉浸式的 Web 游戲&#xff0c;到逼真的虛擬展示場景&#xff0c;3D 渲染引擎承擔著將虛擬 3D 世界呈現到用戶瀏覽器中的關鍵任務。其性能…

    在小米AX6000中添加tailscale monitor

    經過測試&#xff0c;發現小米路由器中的tailscale可能會因為某種原因狀態異常&#xff0c; 為了讓tailscale恢復正常&#xff0c;所以又寫了monitor用來監控&#xff1a; #!/bin/sh# Define Tailscale related paths TAILSCALED_PATH"/tmp/tailscale/tailscale_1.80.3_a…