我正在研究車輛控制並使用9DOF傳感器(加速計,磁力計和陀螺儀)。對於偏航角,我在pi弧上有一個不連續問題。 (180度)。 我用PID控制器控制車輛,當車輛轉過180度以上時,標誌突然改變(從180到-180),這使得控制器很奇怪。同樣的問題也會發生在超過-180度時。如何處理180度偏航角的不連續性
作爲方法,我使用方向餘弦矩陣來計算歐拉角。 (爲火花傳感器推薦的方法。)
我的問題是我應該使用什麼樣的方法?在使用PID控制器來控制偏航角的情況下如何處理這種不連續性。
我正在研究車輛控制並使用9DOF傳感器(加速計,磁力計和陀螺儀)。對於偏航角,我在pi弧上有一個不連續問題。 (180度)。 我用PID控制器控制車輛,當車輛轉過180度以上時,標誌突然改變(從180到-180),這使得控制器很奇怪。同樣的問題也會發生在超過-180度時。如何處理180度偏航角的不連續性
作爲方法,我使用方向餘弦矩陣來計算歐拉角。 (爲火花傳感器推薦的方法。)
我的問題是我應該使用什麼樣的方法?在使用PID控制器來控制偏航角的情況下如何處理這種不連續性。
我有同樣的問題,我執行以下操作:
#define MOD(a) ((a > 180.0) ? (a - 360.0) : ((a < -180.0) ? (a + 360.0) : a))
的2個角度差可以簡單地被放回與這樣的公式來-180d/+ 180D。
對於-180/+ 180度範圍,此條件何時有效? (a> 180.0)。角度永遠不會超過180.我錯了嗎? – tarik
這是你的問題?
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
這種方法總是選擇一個方向,從而控制輸入變得更小。(你知道有兩種選擇方向)
是這個問題確實有關如何添加360? – Eiko