如何处理180度偏航角的不连续性

时间:2012-05-22 07:45:00

标签: pid gyroscope euler-angles

我正在研究车辆控制并使用9DOF传感器(加速度计,磁力计和陀螺仪)。对于偏航角,我在pi rad处有一个不连续性问题。 (180度)。 我用PID控制器控制车辆,当车辆转过180度时,标志突然变化(从180变为-180),这使得控制器表现得很奇怪。当它转动超过-180度时也会出现同样的问题。

作为方法,我使用方向余弦矩阵来计算欧拉角。 (火花传感器的推荐方法。)

我的问题是我应该使用什么样的方法?如何在使用PID控制器控制偏航角的情况下处理这种不连续性。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我正在做以下事情:

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

使用这样的公式可以简单地将2个角度的差异恢复到-180d / + 180d。

答案 1 :(得分: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

此方法总是选择一个方向,使控制输入变小。(你知道方向有两种选择)