當前位置:
首頁 > 科技 > 這可能是史上最全的 Python 演算法集!

這可能是史上最全的 Python 演算法集!

本文是一些機器人演算法(特別是自動導航演算法)的Python代碼合集。

其主要特點有以下三點:選擇了在實踐中廣泛應用的演算法;依賴最少;容易閱讀,容易理解每個演算法的基本思想。希望閱讀本文後能對你有所幫助。

前排友情提示,文章較長,建議收藏後再看。

目錄

環境需求

怎樣使用

本地化

擴展卡爾曼濾波本地化

無損卡爾曼濾波本地化

粒子濾波本地化

直方圖濾波本地化

映射

高斯網格映射

光線投射網格映射

k均值物體聚類

圓形擬合物體形狀識別

SLAM

迭代最近點匹配

EKF SLAM

FastSLAM 1.0

FastSLAM 2.0

基於圖的SLAM

路徑規劃

動態窗口方式

基於網格的搜索

迪傑斯特拉演算法

A*演算法

勢場演算法

模型預測路徑生成

路徑優化示例

查找表生成示例

狀態晶格規劃

均勻極性採樣(Uniform polar sampling)

偏差極性採樣(Biased polar sampling)

路線採樣(Lane sampling)

隨機路徑圖(PRM)規劃

Voronoi路徑圖規劃

快速搜索隨機樹(RRT)

基本RRT

RRT*

基於Dubins路徑的RRT

基於Dubins路徑的RRT*

基於reeds-shepp路徑的RRT*

Informed RRT*

批量Informed RRT*

三次樣條規劃

B樣條規劃

貝濟埃路徑規劃

五次多項式規劃

Dubins路徑規劃

Reeds Shepp路徑規劃

基於LQR的路徑規劃

Frenet Frame中的最優路徑

路徑跟蹤

純追跡跟蹤

史坦利控制

後輪反饋控制

線性二次regulator(LQR)轉向控制

線性二次regulator(LQR)轉向和速度控制

項目支持

環境需求

Python 3.6.x

numpy

scipy

matplotlib

pandas

cvxpy 0.4.x

怎樣使用

安裝必要的庫;

克隆本代碼倉庫;

執行每個目錄下的python腳本;

如果你喜歡,則收藏本代碼庫:)

本地化

擴展卡爾曼濾波本地化

該演算法利用擴展卡爾曼濾波器(Extended Kalman Filter, EKF)實現感測器混合本地化。

藍線為真實路徑,黑線為導航推測路徑(dead reckoning trajectory),綠點為位置觀測(如GPS),紅線為EKF估算的路徑。

紅色橢圓為EKF估算的協方差。

相關閱讀:

概率機器人學

http://www.probabilistic-robotics.org/

無損卡爾曼濾波本地化

該演算法利用無損卡爾曼濾波器(Unscented Kalman Filter, UKF)實現感測器混合本地化。

線和點的含義與EKF模擬的例子相同。

相關閱讀:

利用無差別訓練過的無損卡爾曼濾波進行機器人移動本地化

https://www.researchgate.net/publication/267963417_Discriminatively_Trained_Unscented_Kalman_Filter_for_Mobile_Robot_Localization

粒子濾波本地化

該演算法利用粒子濾波器(Particle Filter, PF)實現感測器混合本地化。

藍線為真實路徑,黑線為導航推測路徑(dead reckoning trajectory),綠點為位置觀測(如GPS),紅線為PF估算的路徑。

該演算法假設機器人能夠測量與地標(RFID)之間的距離。

PF本地化會用到該測量結果。

相關閱讀:

概率機器人學

http://www.probabilistic-robotics.org/

直方圖濾波本地化

該演算法是利用直方圖濾波器(Histogram filter)實現二維本地化的例子。

紅十字是實際位置,黑點是RFID的位置。

藍色格子是直方圖濾波器的概率位置。

在該模擬中,x,y是未知數,yaw已知。

濾波器整合了速度輸入和從RFID獲得距離觀測數據進行本地化。

不需要初始位置。

相關閱讀:

概率機器人學

http://www.probabilistic-robotics.org/

映射

高斯網格映射

本演算法是二維高斯網格映射(Gaussian grid mapping)的例子。

光線投射網格映射

本演算法是二維光線投射網格映射(Ray casting grid map)的例子。

k均值物體聚類

本演算法是使用k均值演算法進行二維物體聚類的例子。

圓形擬合物體形狀識

本演算法是使用圓形擬合進行物體形狀識別的例子。

藍圈是實際的物體形狀。

紅叉是通過距離感測器觀測到的點。

紅圈是使用圓形擬合估計的物體形狀。

SLAM

同時本地化和映射(Simultaneous Localization and Mapping,SLAM)的例子。

迭代最近點匹配

本演算法是使用單值解構進行二維迭代最近點(Iterative Closest Point,ICP)匹配的例子。

它能計算從一些點到另一些點的旋轉矩陣和平移矩陣。

相關閱讀:

機器人運動介紹:迭代最近點演算法

https://cs.gmu.edu/~kosecka/cs685/cs685-icp.pdf

EKF SLAM

這是基於擴展卡爾曼濾波的SLAM示例。

藍線是真實路徑,黑線是導航推測路徑,紅線是EKF SLAM估計的路徑。

綠叉是估計的地標。

相關閱讀:

概率機器人學

http://www.probabilistic-robotics.org/

FastSLAM 1.0

這是用FastSLAM 1.0進行基於特徵的SLAM的示例。

藍線是實際路徑,黑線是導航推測,紅線是FastSLAM的推測路徑。

紅點是FastSLAM中的粒子。

黑點是地標,藍叉是FastLSAM估算的地標位置。

相關閱讀:

概率機器人學

http://www.probabilistic-robotics.org/

FastSLAM 2.0

這是用FastSLAM 2.0進行基於特徵的SLAM的示例。

動畫的含義與FastSLAM 1.0的情況相同。

相關閱讀:

概率機器人學

http://www.probabilistic-robotics.org/

Tim Bailey的SLAM模擬

http://www-personal.acfr.usyd.edu.au/tbailey/software/slam_simulations.htm

基於圖的SLAM

這是基於圖的SLAM的示例。

藍線是實際路徑。

黑線是導航推測路徑。

紅線是基於圖的SLAM估算的路徑。

黑星是地標,用於生成圖的邊。

相關閱讀:

基於圖的SLAM入門

http://www2.informatik.uni-freiburg.de/~stachnis/pdf/grisetti10titsmag.pdf

路徑規劃

動態窗口方式

這是使用動態窗口方式(Dynamic Window Approach)進行二維導航的示例代碼。

相關閱讀:

用動態窗口方式避免碰撞

https://www.ri.cmu.edu/pub_files/pub1/fox_dieter_1997_1/fox_dieter_1997_1.pdf

基於網格的搜索

迪傑斯特拉演算法

這是利用迪傑斯特拉(Dijkstra)演算法實現的基於二維網格的最短路徑規劃。

動畫中青色點為搜索過的節點。

A*演算法

下面是使用A星演算法進行基於二維網格的最短路徑規劃。

動畫中青色點為搜索過的節點。

啟發演算法為二維歐幾里得距離。

勢場演算法

下面是使用勢場演算法進行基於二維網格的路徑規劃。

動畫中藍色的熱區圖顯示了每個格子的勢能。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

拒絕「佛系」程序員!
繼 Linux 之父之後,獨立開發者 Jonathan Blow 再次炮轟 C+是可怕的語言

TAG:CSDN |