Answers:
指南针的滞后是由于要抑制高频噪声的低通滤波器。
如果您坚持使用当前的指南针,则有两种可能的解决方案(警告,这确实会越来越先进,但是大多数人无需太多工作即可使用选项1)。
您可以尝试取消过滤器。这样可以消除滞后,但也会增加高频噪声。完成此操作后,您可以尝试根据新的航向估计值控制机器人。为此,您必须尝试计算出低通滤波器参数。例如,在离散时间内,您可能会发现:
θ(吨)吨θ吨
您可以通过进行实验来找到参数,在该实验中,您可以使用其他一些外部手段来测量基本事实。给定样本,您具有以下等式: Ñ + ķ + 1 [ θ(ķ )⋮ θ(ķ + Ñ ) ] = [ θ (ķ )θ (ķ - 1 )⋯ θ (0 )⋮ ⋮
您可以通过以下方法解决: 其中为的伪逆矩阵。没有确定确定方法,因此您可能只是猜测。对于奖励积分,这假设噪声是白色且独立的,但是您可以先对其进行白化以消除偏差,从而改善对参数的估计。
您可以将其转换为传递函数(在离散时域中也称为Z变换):
为了消除这种情况,我们可以取反函数(其中是航向的新估计):
转换回时域:
然后,我们可以使用来控制机器人。
这将非常嘈杂,因此您可能仍需要在使用前将通过低通滤波器(尽管可能滞后时间较小)。
上述解决方案仍然不是最佳方法。嘈杂的估计可能不是很有用。如果将其放入状态空间方程中,则可以设计一个卡尔曼滤波器,以及使用LQR(线性二次调节器)的全状态反馈控制器。卡尔曼滤波器和LQR控制器的组合也称为LQG控制器(线性二次高斯),并使用环路转移恢复来获得良好的控制器。
为此,提出(离散)状态空间方程式:
,
或:
其中表示电机转动机器人的功率,而,,,则根据位置和速度对航向的影响程度(您可以选择非零值对的其它元件矩阵和的第一行矩阵太)。
然后,您可以通过为过程噪声和测量噪声选择噪声估计和来构建观察者(卡尔曼滤波器)。给定关于噪声的那些假设,然后卡尔曼滤波器可以找到航向的最佳估计。在选择了噪声估计之后,实现仅取决于实现卡尔曼滤波器的代码(可以在Wikipedia上找到等式,因此在这里不再赘述)。
之后,您可以设计一个LQR控制器,这一次,选择和代表调节航向的权重,并尝试限制执行器的使用。在这种情况下,您可以选择和。之所以这样做,是因为LQR找到了使成本函数最小化的最优控制器:
然后,您将其通过离散时间代数Riccati方程进行求解:
并求解正定矩阵。
因此,您的控制律可以通过以下方式得出:
其中
最后,仅执行此操作将无法很好地进行,并且可能会由于噪音而变得不稳定。确实,这意味着选项1可能无法工作,除非您首先将通过低通滤波器(尽管不一定需要这么长的有效滞后时间)。这是因为虽然可以保证LQR稳定,但是一旦您使用卡尔曼滤波器,就会失去保证。
为了解决这个问题,我们使用“循环转移恢复”技术,您可以在其中调整卡尔曼滤波器,而是选择一个新的,其中是您的原始矩阵,已调整为使卡尔曼滤波器最佳。是任何正定对称矩阵,您可以选择它作为恒等矩阵()。然后,只需选择一个标量。尽管矩阵,结果控制器应该变得更稳定,如,这意味着它变得不太理想。Q 0 Q V V = 我q q →交通∞ Q ö
因此,只需增加直到稳定。可以尝试使其稳定的另一种方法是增加(或减小)以使LQR控制器变慢。- [R Ç Q Ç
这篇文章中的概念确实非常先进,但是如果您需要解决Riccati方程之类的问题,则可以使用MATLAB或其他软件来完成。可能已经有一些库已经实现了Kalman过滤器(再次,我相信MATLAB也可以做到这一点)。
对于嵌入式应用程序,尽管可能存在C实现,但是您可能需要自己实现Kalman过滤器。
陀螺仪是简单的答案。我一直听说,陀螺仪用于短测量,指南针用于长测量。实际上,在大多数情况下,两次之间都需要一杯卡尔曼过滤器。如今,一块6DOF陀螺/ acc板的价格不到20美元,太便宜了,根本不使用它。
一次,我通过别人的Kallman过滤器工作。并使其工作。实际上,卡尔曼滤波器更像是一种方法,而不是确切的实现,并且在陀螺仪的情况下,最终结果不需要使用矩阵数学。它使代码更简单。