2011-04-05 44 views
6

我正在嘗試使用指南針移動機器人。我們使用羅盤使機器人直線移動,它使用2個輪子,它們移動有點不同。 所以我們設置一個介於0和359之間的值作爲方向,然後檢查當前的方向,計算錯誤並修復它。像error = current_direction - 實際方向。指南針:從359到0度

問題是,如果例如我們的init方向是90度,而我們的機器人是45,那麼錯誤將會是45,它會修復它。如果它是0,錯誤將是90,它會修復它。問題是,如果它移動的比例大於0並且例如變爲359,則錯誤將是-269,因此不是在一個方向上移動90,而是在另一個方向上移動-29。

我使用錯誤的符號來決定要移動哪個輪來修復方向。 任何想法如何解決它?

回答

6
if (error > 180) { 
    error -= 360; 
} 

if (error < -180) { 
    error += 360; 
} 
+3

將這些'if's改爲'while':D – 2011-04-05 13:03:51

+0

@Jakub Hampl:你叫它Dizzybot? :D – Piskvor 2011-04-05 13:19:24

2

如果你的錯誤大於180°,你應該將它從360架起並且反轉符號。這樣做,你可以確保你的機器人總是以最短的方向移動。

1

如果您的誤差> 180度,只需切換您的校正算法,通過向相反方向移動來計算校正。一個簡單的if-else語句應該這樣做。

1

我不知道很多關於NXT和頭腦風暴,但基本上是圓形運動的共同問題。您可以簡單地使用兩個不同的座標系並互相轉換,這是最優雅的方式。否則,你可以從你的錯誤中減去360,如果符號爲負,但是這是一個黑客,而不是優雅的方式來解決,我曾經有一個機器人,能得到如此混亂,我們不得不問題;-)

+0

嗯,極座標?優雅,但我認爲這可能是慢的計算(尤其是在嵌入式平臺上)。 – Piskvor 2011-04-05 13:14:18

+0

是的,你可能是對的,因爲嵌入的東西大多是被黑客入侵的東西,但我不認爲NXT是_such embedded_ ;-) – tamasgal 2011-04-05 13:20:14

+2

我在考慮CPU速度以及它帶來的一切。雖然我對架構不太瞭解,但我不認爲NXT擁有四核i5 @ 2.8GHz,對嗎?我猜測速度可能會達到幾十MHz,最高可達幾百。是的,這比20年前我的電腦還要多,但在這樣的限制下你仍然必須認真對待性能。 – Piskvor 2011-04-05 13:32:05