我的第一个问题是,我所见的差动驱动机器人的所有运动学模型都建议使用左右车轮的位移来评估机器人的姿态。机器人的下一个姿势。但是,在我的情况下,机器人仅吐出相对于运动起点的当前X和Y姿势。我可以将其用作状态估计值吗?
P = [x,y] T
P = [x0,y0] + [dx,dy]其中dx和dy分别在坐标中发生变化
如果以上可行,我该如何计算滤波器的状态协方差Q。
对于GPS,我该如何评估协方差R;我试图从一个固定点收集多个经度和纬度读数,但我不知道这是否正确,我只是无法从这些数据中评估协方差(感觉很愚蠢)。
期待。
#1 楼
关于您关于差速驱动的问题,听起来好像您的机器人正在使用运动学模型来估计位置,但这是在“内部”完成的(即,在嵌入式车载软件中)。是否可以接受取决于其使用的轮径和轮距(左右轮之间的距离)是否正确。如果不是(例如,您更换了车轮),则吐出的值将非常不准确。假设这些近似值是正确的,而不是左右轮的位移,则首先计算自上次测量以来的平移和旋转,即,dx
和dy
是您当前的测量值,而dtheta
,dx_prev
和dy_prev
是先前的测量值。请注意,我假设您的机器人也正在报告航向(theta)。如果不是这样,则意味着如果机器人在现场转动,您将无法分辨出位置没有变化。您的新输入
dtheta_prev
现在是translation = sqrt( (dx - dx_prev)^2 + (dy - dy_prev)^2 )
rotation = dtheta - dtheta_prev
在您输入的地方使用适当的运动学模型(例如,
u
中的更改为x
等)。为translation * cos(theta)
设置适当的协方差矩阵很棘手。我建议您凭经验确定它(即进行一系列实验,并根据结果确定应为u
添加多少不确定性)。从诸如u = [translation; rotation]
的猜测开始,并检查3σ椭圆是否覆盖实验后的实际位置。您还可以花哨并在每个时间戳上设置Q,并根据运动进行缩放,即
Q = [0.005^2, 0; 0, 0.005^2]
您可以在其中调整
u
,a
,b
的值,和c
。例如,这允许您在机器人转弯时添加更大的不确定性(d
和c
的较大值)。对于关于确定
d
矩阵的问题,而无需深入了解GPS的工作原理,您最好的选择可能是再次进行测试。一种简单的测试是测量地面上的某些位置(以便您知道它们的位置)。首先将初始纬度转换为(R
,x
)(请参见此处)。这将是您的出身。接下来开车到您的每个已知位置,并根据GPS计算(y
,x
),然后减去您的初始位置。从已知位置行驶到已知位置等(包括重新访问位置),然后根据GPS记录您的(y
,x
)。实验结束后,您将获得一个估计位置及其对应的真实位置的列表。由此,您可以使用统计数据计算平均不确定性,并可以适当设置y
。祝你好运!
评论
$ \ begingroup $
非常感谢您的详细答复。请您分享有关“凭经验确定状态协方差矩阵”的含义的更多信息。想到的是平移移动机器人,例如说1m并记录多次平移,然后评估其变化。对于旋转,发出固定的转弯命令并记录几次旋转值,然后也计算方差。是这样做的一种方式。
$ \ endgroup $
– Lex
2014年7月24日10:10
$ \ begingroup $
虽然您描述的方式是完全合理的,但另一种方式是建立运动学模型(即,如何将u转换为姿势(x,y,theta)),并使用它来估算您的姿势及其左右行驶(平移和旋转)后的3x3协方差矩阵(P)。通过P_(k + 1)= FPF ^ T + GQG ^ T传播每个时间步的协方差,其中F是关于您的状态的运动模型的雅可比行列,而G是关于u的雅可比行列。然后,您可以将P转换为误差椭圆,以检查真实位置是否在估算值的3个标准偏差之内。
$ \ endgroup $
– kamek
2014年7月24日13:28
$ \ begingroup $
请参阅我的其他答案之一,以了解类似的运动学模型及其雅可比定律。
$ \ endgroup $
– kamek
2014年7月24日13:29