2011-04-05 188 views
11

我正在計算機器人在具有多邊形障礙物的平面上的最短路徑。一切正常,快速,沒有問題。但是,如何平滑路徑使其變得曲線? 下面是用直線連接頂點的路徑的圖片。 P.S 機器人只是一個圓圈。機器人的平滑路徑

Vertices

+1

第一步:您需要定義機器人的轉彎半徑。如果它可以有效地開啓一角錢,爲什麼你會希望它走彎曲的道路? – 2011-04-05 18:33:53

+0

你說得對。我知道有人會問我。我的機器人將有一個完整的轉彎半徑,但我想知道它是如何完成的,即使如此。 「如何用曲線連接點」本來就是真正的問題。我道歉。 – nullpotent 2011-04-05 18:44:29

+2

我確實認爲這個數字是回答這個問題的內在因素。但是我們可以使用一些變量,比如'TR'來表示轉彎半徑。在這種情況下,你已經爲'TR = 0'的特殊情況回答了你自己的問題。 – 2011-04-05 18:50:37

回答

6

This paper可能是有用的。看起來這是一個不平凡的問題。摘要:

自動圖形抽屜需要計算一個簡單的多邊形的版本之間的路徑,除了留在內部需要顯示某些美學特性。其中一些要求包含一些關於多邊形形狀的信息,而不要離實際的最短路徑太遠。我們提出一種算法來計算局部凸區域,該區域「包含」簡單多邊形的兩個頂點之間的最短歐幾里得路徑。該區域具有「跟隨」最短路徑形狀的邊界形狀。區域內部的三次貝塞爾樣條曲線在兩個給定頂點之間提供了「短而平滑」的無碰撞曲線。獲得的結果似乎美觀愉快,所使用的方法可能是獨立的利益。它們是元素和可執行的。圖7是我們當前實現產生的示例輸出。

5

我試圖讓現實的飛行序列在Teragen中呈現時,我曾經玩過很多路徑計算技術。我最初嘗試使用Bézier Curves

Curves

但發現(至少飛行),他們是沒有多大用處的。原因是曲線之間的曲率是不連續的,所以不能用來計算飛越的連續正確的傾斜角度。另外,很難確定曲線不會與山脈相交。

我離題了。我最終決定的方式是一個簡單的基於質量彈簧的路徑,並放鬆下來。

將路徑細分爲許多小段,越多越好。對於每個點,將其沿一個方向稍微移動一點,以減少它與其鄰居之間的角度,並避開障礙物。重複多次,直到路徑安定下來。

k = 0.01 // Adjust the values of k and j to your liking. 
j = 0.01 // Small values take longer to settle. Larger values are unstable. 
For each point P 
    normal_vector  = vector_to_previous_point + vector_to_next_point 
    obstacle_vector = vector_to_nearest_obstacle 
    obstacle_distance = magnitude(obstacle_vector) 
    obstacle_vector *= obstacle_distance^2 
    P    += (normal_vector * k) - (obstacle_vector * j) 

這些種類的有限元放鬆技巧的好處是,你可以在這個各種約束的編程到它,路徑將解決他們之間的一些妥協,這取決於權重(J和K案件)。


如果您是機器人技術人員,爲什麼不來加入Robotics Proposal

+0

謝謝,你的方法一見鍾情,雖然我仍然需要實現和測試它。而且,哦,是的,我會支持該提議;) – nullpotent 2012-10-17 22:56:02

3

難道你不能只在路徑的實際執行中使路徑跟隨算法嗎?如果按照原樣離開路徑(即連接直線),實現約1米的前視距離(該值取決於機器人的速度以及填充配置空間以避開障礙物的數量)計算每個車輪速度的控制算法將自動消除路徑,而無需進行預處理。

下面是我的意思是一個快速圖像...紅色虛線表示機器人在根據前視距離控制點時實際執行的路徑。前視距離僅計算路徑下方某點的任意距離。

enter image description here

同樣,你不用擔心的唯一的事情是多少你填充的障礙,以確保你避免撞上他們。通常情況下,我相信障礙物的面積會被機器人半徑的一半填充,但如果您控制到前視距離,則可能需要稍微增大一點。

+0

最後,我選擇了與此處介紹的解決方案相同的解決方案。它需要一點調整,但它的工作。謝謝你;) – nullpotent 2013-09-26 12:45:57

0

在機器人的情況下,我們無法預知未來。我們必須知道每個點只知道機器人的位置和障礙物。用於製作最小長度曲線路徑的常用方法是用機器人建模一個圓,然後移動圓以保持與障礙物接觸。只需保持一個半徑,並且轉彎將是曲線。

如果您想要曲線而不是最小距離,請嘗試使上述半徑與距離多邊形頂點的距離成比例。

貝賽爾曲線的想法只能用於回顧彎曲的路徑。它改變了機器人的位置。通常情況下,機器人改變過去稱爲「作弊」。避免必須改變已經走過的道路的一種方法是展望未來。但機器人能看到四周的角落嗎?你必須更好地指定規則。