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

5
我正在开发一个车辆控制系统,使用9DOF传感器(加速度计、磁力计和陀螺仪)。在偏航角方面,我遇到了π弧度(180度)处的不连续性问题。
我正在使用PID控制器来控制车辆,当车辆转过180度时,符号会突然改变(从180变为-180),这使得控制器表现异常。当它转过-180度时,也会出现同样的问题。
作为方法,我正在使用方向余弦矩阵来计算欧拉角(这是Sparkfun传感器推荐的方法)。
我的问题是,我应该采用什么样的方法?如何处理使用PID控制器控制偏航角时的不连续性问题。

1
这个问题是关于如何添加360吗? - Eiko
2个回答

1

我也遇到过同样的问题,现在正在做以下操作:

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

两个角度之间的差异可以使用以下公式简单地转换为-180度至+180度。

在-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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接