開(kāi)源了!機(jī)器人技術(shù)常用的路徑規(guī)劃算法(含動(dòng)畫(huà)演示)
【導(dǎo)語(yǔ)】:一個(gè)實(shí)現(xiàn)了機(jī)器人技術(shù)中常用的路徑規(guī)劃算法的開(kāi)源庫(kù),還有動(dòng)圖直觀演示運(yùn)行過(guò)程。該庫(kù)公開(kāi)時(shí)間不長(zhǎng),在 GitHub 已有 1200+ Star。
簡(jiǎn)介
在機(jī)器人研究領(lǐng)域,給定某一特定任務(wù)之后,如何規(guī)劃?rùn)C(jī)器人的運(yùn)動(dòng)方式至關(guān)重要。PathPlanning 是使用 Python 實(shí)現(xiàn)的存儲(chǔ)庫(kù),實(shí)現(xiàn)了機(jī)器人技術(shù)中常用的路徑規(guī)劃算法。開(kāi)發(fā)者還為每個(gè)算法設(shè)計(jì)了動(dòng)畫(huà)來(lái)演示運(yùn)行過(guò)程,相當(dāng)直觀清晰。
項(xiàng)目地址:
https://github.com/zhm-real/PathPlanning
這個(gè)項(xiàng)目的貢獻(xiàn)者目前是 4 位國(guó)內(nèi)開(kāi)發(fā)者。
目錄結(jié)構(gòu)
PathPlanning 庫(kù)實(shí)現(xiàn)的路徑規(guī)劃算法包括基于搜索和基于采樣的規(guī)劃算法,目錄結(jié)構(gòu)如下:
?

下面我們直接通過(guò)開(kāi)發(fā)者設(shè)計(jì)的動(dòng)圖了解各個(gè)算法的運(yùn)行過(guò)程:
基于搜索的路徑規(guī)劃算法
(1)最佳路徑優(yōu)先搜索算法
?

"""
Best-First?Searching
@author:?huiming?zhou
"""
import?os
import?sys
import?math
import?heapq
sys.path.append(os.path.dirname(os.path.abspath(__file__))?+
????????????????"/../../Search_based_Planning/")
from?Search_2D?import?plotting,?env
from?Search_2D.Astar?import?AStar
class?BestFirst(AStar):
????"""BestFirst?set?the?heuristics?as?the?priority?
????"""
????def?searching(self):
????????"""
????????Breadth-first?Searching.
????????:return:?path,?visited?order
????????"""
????????self.PARENT[self.s_start]?=?self.s_start
????????self.g[self.s_start]?=?0
????????self.g[self.s_goal]?=?math.inf
????????heapq.heappush(self.OPEN,
???????????????????????(self.heuristic(self.s_start),?self.s_start))
????????while?self.OPEN:
????????????_,?s?=?heapq.heappop(self.OPEN)
????????????self.CLOSED.append(s)
????????????if?s?==?self.s_goal:
????????????????break
????????????for?s_n?in?self.get_neighbor(s):
????????????????new_cost?=?self.g[s]?+?self.cost(s,?s_n)
????????????????if?s_n?not?in?self.g:
????????????????????self.g[s_n]?=?math.inf
????????????????if?new_cost?#?conditions?for?updating?Cost
????????????????????self.g[s_n]?=?new_cost
????????????????????self.PARENT[s_n]?=?s
????????????????????#?best?first?set?the?heuristics?as?the?priority?
????????????????????heapq.heappush(self.OPEN,?(self.heuristic(s_n),?s_n))
????????return?self.extract_path(self.PARENT),?self.CLOSED
def?main():
????s_start?=?(5,?5)
????s_goal?=?(45,?25)
????BF?=?BestFirst(s_start,?s_goal,?'euclidean')
????plot?=?plotting.Plotting(s_start,?s_goal)
????path,?visited?=?BF.searching()
????plot.animation(path,?visited,?"Best-first?Searching")??#?animation
if?__name__?==?'__main__':
????main()
(2)Dijkstra搜索算法
??

(3)A*搜索算法
?

(4)雙向A* 搜索算法
?

(5)重復(fù) A*搜索算法
?

(6)ARA* 搜索算法
?

(7)LRTA* 搜索算法
?

(8)RTAA* 搜索算法
?

(9)D* 搜索算法
?

(10)終身規(guī)劃 A* 搜索算法
?

(11)Anytime D* 搜索算法:變動(dòng)較小
?

(12)Anytime D* 搜索算法:變動(dòng)較大
?

基于采樣的路徑規(guī)劃算法
(1)RRT 算法
?

(2)目標(biāo)偏好 RRT 算法
?

(3)RRT_CONNECT 算法
?

(4)Extended_RRT 算法
?

(5)動(dòng)態(tài) RRT 算法
?

(6)N = 10000 時(shí),rrt * 算法
??

(7)N = 1000 時(shí),rrt*-Smart 算法
?

(8)FMT* 算法
?

(9)N =1000 時(shí),Informed rrt * 算法
?

(10)BIT* 算法
?

以上是開(kāi)發(fā)者設(shè)計(jì)的動(dòng)畫(huà),是不是很直觀生動(dòng)呢?對(duì)路徑規(guī)劃算法感興趣的童鞋可以到項(xiàng)目主頁(yè)詳細(xì)了解。
-?EOF -?
更多優(yōu)秀開(kāi)源項(xiàng)目(點(diǎn)擊下方圖片可跳轉(zhuǎn))
如果覺(jué)得本文介紹的開(kāi)源項(xiàng)目不錯(cuò),歡迎轉(zhuǎn)發(fā)推薦給更多人。
分享、點(diǎn)贊和在看
支持我們分享更多優(yōu)秀開(kāi)源項(xiàng)目,謝謝!
