轉載:https://www.cnblogs.com/huyanan/articles/6243694.html
什么是Reeds-Shepp曲線?
想象你下班開車回家,到了小區后想把車停到你個人的停車位里面。作為一個喜歡追求挑戰的老司機,你想找一條最短的路徑把車停進去。那么這樣的路徑是什么呢?答案就是Reeds-Shepp曲線。Reeds-Shepp曲線由Reeds和Shepp二人在1990年的文章《Optimal paths for a car that goes both forwards and backwards》中提出。
Reeds-Shepp曲線是什么樣的曲線?
既然是最短路徑,我們首先想到的就是直線段,那么它是直線嗎?嗯…,在某些情況下,它確實是直線。比如下圖左所示的情況,汽車車頭剛好對准了停車位(綠色表示停車位,紅色表示汽車的起始狀態,灰色表示汽車,狀態是指汽車的位置和車頭的朝向)。可是實際顯然不會這么簡單,會有各種可能,比如下圖右所示的情況:車在停車位的右側,且車頭和停車位平行(側位停車)。由於汽車都有一個最小轉向半徑,所以你不能讓汽車向螃蟹一樣橫着開進去,這時求最短路徑就沒那么簡單了。圖中汽車中心運動形成的黑色曲線就是Reeds-Shepp曲線。Reeds-Shepp曲線由幾段半徑固定的圓弧和一段直線段拼接組成,而且圓弧的半徑就是汽車的最小轉向半徑。這里的路徑長度是指汽車中心運動軌跡的長度,也就是所有圓弧的弧長和直線段的長度之和。


下圖展示了更一般的情況,汽車從不同的初始位置和朝向進入同一個停車位:
什么是Dubins曲線?
Dubins曲線和Reeds-Shepp曲線差不多,只不過多了一個約束條件:汽車只能朝前開,不能后退(不能掛倒擋)。Dubins曲線由Dubins在1957年的文章《On curves of minimal length with a constraint on average curvature and with prescribed initial and terminal positions and tangents》中提出。Dubins曲線如下圖所示。
Reeds-Shepp曲線和Dubins曲線對任意的起止位姿都存在嗎?
答案是肯定的,任意的起始狀態和終止狀態之間都存在這樣的曲線,如下圖所示。這時為了清晰起見,我用箭頭表示汽車的朝向,紅色曲線是Reeds-Shepp曲線,而黑色曲線是Dubins曲線。注意二者有時是重合的。
當環境中存在障礙物時,Reeds-Shepp曲線和Dubins曲線對任意的起止位姿都存在嗎?
Reeds-Shepp曲線和Dubins曲線特指沒有障礙物時的最短路徑。如果存在障礙物,那么這樣的曲線不再是傳統意義上的RS和Dubins曲線了,不過為了保持一致我們還是這么稱呼它們吧。
生活從來沒那么簡單,你在停車時可能周圍會有各種障礙物,比如其它車輛、垃圾桶、樹木。這時是否仍然存在RS曲線和Dubins曲線似乎沒那么容易回答了。不過慶幸的是這個問題已經被人解決了,答案是:只要存在連接起止位姿的無碰撞路徑,那么就存在無碰撞的Reeds-Shepp曲線。然而這個結果對Dubins曲線卻不適用。這個答案好像沒什么出人意料,不過稍微品味一下卻讓人很吃驚。注意這里的前提:“連接起止位姿的無碰撞路徑”,除了無碰撞的要求以外,我沒說其它任何的要求,比如存在一條類似“Z”這樣完全由直線組成的折線路徑也可以。很奇妙吧?不管你的路徑由什么線(直線/任意曲線)組成,不管它有多怪異多扭曲,只要你能找到一條這樣的路徑,那么就一定存在滿足要求的Reeds-Shepp曲線,即連接起止位姿,並且汽車不會碰到障礙物。在電影《車手》中就出現了神奇的一幕——汽車原地直角拐彎。其實理論上,不需要原地拐彎,汽車也能通過狹窄的直角胡同。

Dubins曲線和Reeds-Shepp曲線差不多,只不過多了一個約束條件:汽車只能朝前開,不能后退(不能掛倒擋)。Dubins曲線由Dubins在1957年的文章《On curves of minimal length with a constraint on average curvature and with prescribed initial and terminal positions and tangents》中提出。Dubins曲線如下圖所示。

答案是肯定的,任意的起始狀態和終止狀態之間都存在這樣的曲線,如下圖所示。這時為了清晰起見,我用箭頭表示汽車的朝向,紅色曲線是Reeds-Shepp曲線,而黑色曲線是Dubins曲線。注意二者有時是重合的。

Reeds-Shepp曲線和Dubins曲線特指沒有障礙物時的最短路徑。如果存在障礙物,那么這樣的曲線不再是傳統意義上的RS和Dubins曲線了,不過為了保持一致我們還是這么稱呼它們吧。
生活從來沒那么簡單,你在停車時可能周圍會有各種障礙物,比如其它車輛、垃圾桶、樹木。這時是否仍然存在RS曲線和Dubins曲線似乎沒那么容易回答了。不過慶幸的是這個問題已經被人解決了,答案是:只要存在連接起止位姿的無碰撞路徑,那么就存在無碰撞的Reeds-Shepp曲線。然而這個結果對Dubins曲線卻不適用。這個答案好像沒什么出人意料,不過稍微品味一下卻讓人很吃驚。注意這里的前提:“連接起止位姿的無碰撞路徑”,除了無碰撞的要求以外,我沒說其它任何的要求,比如存在一條類似“Z”這樣完全由直線組成的折線路徑也可以。很奇妙吧?不管你的路徑由什么線(直線/任意曲線)組成,不管它有多怪異多扭曲,只要你能找到一條這樣的路徑,那么就一定存在滿足要求的Reeds-Shepp曲線,即連接起止位姿,並且汽車不會碰到障礙物。在電影《車手》中就出現了神奇的一幕——汽車原地直角拐彎。其實理論上,不需要原地拐彎,汽車也能通過狹窄的直角胡同。
理論上存在沒有給我們提供實際尋找的方法,這時我們可以采用隨機搜索的方法,如下圖。(黑色表示障礙物)

Dubins曲線和Reeds-Shepp曲線有什么用?
這里我們以汽車為例介紹了最短路徑。實際上,汽車只是一類更廣泛系統的特例,這類系統叫做“非完整約束系統”。非完整約束系統就是受到非完整約束的系統(廢話)。可以用直觀的例子解釋,人站在平地上就不受非完整約束,因為人可以往任意方向移動,前后左右隨便你怎么動都可以。可是如果你騎在自行車上就受非完整約束了,因為你的運動方向受到前后輪的限制,只能沿着前輪指向的方向運動,盡管你可以通過調整車把改變前輪的朝向,但是你無法向車輪的側方移動。當然,如果別人從側面踹了你一腳或者路太滑,自行車可能會向側方移動,這時你就違反非完整約束了,但是我們暫時不考慮這些特例。這些特例,比如路滑,確實有可能發生。可是為了讓問題簡單一點,我們不得不理想化處理,認為自行車車輪不會發生側滑,哪怕一毫米也不會有。因此,具有車輪的東西都屬於非完整約束系統,比如獨輪車。注意這里的車輪是指普通的車輪,不包括特殊的車輪(比如麥克納姆輪)。那些帶掛斗有很多輪子的大貨車屬於非完整約束系統嗎?這就要看情況了。一般貨車掛斗上的輪子不能轉向,在貨車拐彎的時候,有些輪子必然會側滑,至於哪些會側滑取決於路面的條件。因此嚴格來說,它不是一個非完整約束系統,雖然看上去的表現像受到非完整約束。即便這樣,我們也可以按照非完整約束處理。
非完整約束有什么特別的地方嗎?給車輛或移動機器人規划軌跡的工程師都不喜歡它,它也因為難以處理而臭名昭著。對於簡單的系統,例如前面的汽車模型(相對於真實的汽車已經簡化了),我們還能得到滿足非完整約束的最短路徑,可是對於復雜的模型就很難了,比如變量更多、約束形式更復雜的模型,或者環境中存在障礙物的情況。所以人們一般用Dubins曲線和Reeds-Shepp曲線作為復雜模型的近似最短路徑,在實際執行時並不一定嚴格地遵循這些曲線。