2012-05-22 313 views
5

我正在研究車輛控制並使用9DOF傳感器(加速計,磁力計和陀螺儀)。對於偏航角,我在pi弧上有一個不連續問題。 (180度)。 我用PID控制器控制車輛,當車輛轉過180度以上時,標誌突然改變(從180到-180),這使得控制器很奇怪。同樣的問題也會發生在超過-180度時。如何處理180度偏航角的不連續性

作爲方法,我使用方向餘弦矩陣來計算歐拉角。 (爲火花傳感器推薦的方法。)

我的問題是我應該使用什麼樣的方法?在使用PID控制器來控制偏航角的情況下如何處理這種不連續性。

+1

是這個問題確實有關如何添加360? – Eiko

回答

0

我有同樣的問題,我執行以下操作:

#define MOD(a) ((a > 180.0) ? (a - 360.0) : ((a < -180.0) ? (a + 360.0) : a)) 

的2個角度差可以簡單地被放回與這樣的公式來-180d/+ 180D。

+0

對於-180/+ 180度範圍,此條件何時有效? (a> 180.0)。角度永遠不會超過180.我錯了嗎? – tarik

0

這是你的問題?

After desired angle changes it's sign(ie. 180->-180) 
then suddenly control input(ie. P * error) becomes bigger. 

例如,

-------------------------------- 
| desired | real | error | 
|-----------|--------|---------| 
| 170 | 160 | 10 | 
| -170 | 160 | -330 | 
-------------------------------- 

如果您的問題與我所瞭解的相同,那麼如何? 在我們走之前,請注意假設每個角度值都在[-pi,pi]的範圍內。

error = desired - real; 
if(error > 180) 
    error = error - 360; 
else if(error < -180) 
    error = error + 360; 
else 
    error = error;//do nothing 

這種方法總是選擇一個方向,從而控制輸入變得更小。(你知道有兩種選擇方向)