這可能是史上最全的 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星演算法進行基於二維網格的最短路徑規劃。
動畫中青色點為搜索過的節點。
啟發演算法為二維歐幾里得距離。
勢場演算法
下面是使用勢場演算法進行基於二維網格的路徑規劃。
動畫中藍色的熱區圖顯示了每個格子的勢能。


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