我正在研究车辆控制并使用9DOF传感器(加速度计,磁力计和陀螺仪)。对于偏航角,我在pi rad处有一个不连续性问题。 (180度)。 我用PID控制器控制车辆,当车辆转过180度时,标志突然变化(从180变为-180),这使得控制器表现得很奇怪。当它转动超过-180度时也会出现同样的问题。
作为方法,我使用方向余弦矩阵来计算欧拉角。 (火花传感器的推荐方法。)
我的问题是我应该使用什么样的方法?如何在使用PID控制器控制偏航角的情况下处理这种不连续性。
答案 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
此方法总是选择一个方向,使控制输入变小。(你知道方向有两种选择)