part1:
規劃的本質是搜尋,即在構造空間中搜尋處一條最優的軌跡,它包含了路徑資訊和速度配置資訊。
規劃在不同的領域有不同的含義:機械人領域:涉及rrt, a*,d* 等,控制領域,涉及mpc,lqr等,
而在最新的人工智慧領域,是生成狀態道動作的對映,如強化學習,模仿學習等。
無人車的規劃問題,如果簡單定義為乙個路徑搜尋問題(靜態路網路徑查詢),典型的可以使用bfs dfs a*等
多種方法。這些方法需要我們對全域性路網都有乙個預先的認知。但事實上我們只能得到附近的環境資訊,此時我們
可以用貪心的策略,或者一種增量式的手段解決。對於動態路網,還有d*演算法,d*也是目前月球無人車領域的主流
演算法。有乙個目標函式,可以衡量距離,平滑度等等;啟發式搜尋的方法;區域性規劃中的增量式搜尋(貪心)的思想
但還缺少不少東西:
對動態障礙物的考慮;計算的實時性要求;考慮運動學約束(汽車是典型的非完整約束系統);交通規則的考慮;
part2:
運動規劃的基本方法有:
rrt 、lattice(+polinomial)、基於優化的方法
【ps: 貌似目前是基於取樣和基於優化的兩種方法,基本上以基於優化的方法為主,基於lattice的方法計算量,調參難度更大一些】
首先,我們需要解決的問題是連續空間如何離散化的問題。
方法之一是 roadmap法 。構造乙個簡單的連通圖,visibility graph將起始節點,所有障礙物的頂點和目標節點相互連線來構建路線圖。這種方法對原始空間做了很多的抽象,把空間事實上降為成了一維的線路圖,在連線結束時,建圖的工作也完成了,圖搜尋只需要在這些已有的線中找結果就可以了。
方法之二是比較主流的網格劃分法。cell decomposition將整個空間分割成乙個個cell。
方法之三就是,potential field勢場法,就是直接用微分方法處理。其實就是優化法最後所用的方法
prm演算法:一種常用的抽象連續空間的方法叫做prm(隨機路標圖演算法)。它在整個配置空間隨機取樣一些點,如果點在障礙物上則去掉,然後將這些點連線起來,如下圖所示的紫色點,最終點與點之間連城路網,當然,我們可以控制撒點的數量,以及周圍連線點的個數等等。對於區域性感知,我們可以用增量式的演算法解決問題。
rrt演算法:(一種增量式的搜尋prm方法)以根節點為起始點,然後隨機取樣,增加葉子節點。每次撒點之後,若在目標點附近,則完成搜尋,否則,選取已有節點中離新撒的點最近的點做延伸,如果被擋了就重新撒點。這種演算法能夠快速找出一條路徑,但是他的曲率是不連續的。mit提出使用平滑曲線進行連線的方法。但是該方法得到的路徑還是不夠平滑,另外對動態障礙物的處理也存在問題。
lattice網格法:這種方法就是網格化後對不同路徑取樣,正常情況下這種方法的搜尋空間是呈指數增長的。許多**的工作是如何剪枝,壓縮搜尋量,如固定每個距離上sampling的點,簡化計算。另外,在xy座標系撒點不合適,這種方法進一步變成了在sl座標系中撒點。sl座標系下,有乙個撒點方式是做分解,在s-t,l-t中分別取樣。此外,還可以使用路徑-速度迭代優化的方法對lattice方法進行優化,也就是polynomial方法。它將問題降維,分成了path 和 speed兩個維度逐漸優化,這是一種iterative的處理方式。
最後一種方法就是,還可以把曲線functional化,對整個問題建模,設計相應的代價函式。二次規劃就是其中一種常用的方法。
part3:
ACM模組解析之 動態規劃
動態規劃 一.簡介 在acm中,動態規劃是一種將乙個複雜問題分為多個簡單的小問題的思想。在使用動態規劃時,原問題須滿足重疊子問題和最優子結構這個性質。運用動態規劃思想設計的演算法一般比樸素的演算法高效很多。因為在計算某個狀態的時候,已經被計算的子問題將不需要重複計算,而是呼叫之前儲存下的結果。這樣就...
python筆記之模組
在當前檔案中匯入要使用的py檔案,那麼系統就會把被匯入的py檔案作為模組處理 模組是具有預編譯過程的 import model msg model.name print msg 匯入語句可以放在任意位置 將.py檔案作為匯入源,則該檔案就是模組,檔名就是模組名 import m2 函式名就是函式變數...
Lua學習筆記之模組
模組require 使用模組 module 建立模組 通過require 來載入乙個模組,返回乙個全域性變數table型別。local a require mod foo require 函式,搜尋模組名時,使用乙個 分隔的路徑。我遇到過乙個載入路徑的問題,最後得到的結論是 那一串路徑中一般第乙個 ...