Questions tagged «kalman-filter»

卡尔曼滤波器是具有高斯噪声的线性动力学系统的最佳估计器。通过扩展KF和无味KF包括对非线性系统的扩展。

5
为什么需要卡尔曼滤波器?
我正在设计一种无人机,其中将包括几种类型的传感器: 3轴加速度计 三轴陀螺仪 3轴磁力计 地平线传感器 全球定位系统 向下的超声波。 我的一个朋友告诉我,我需要将所有这些传感器数据通过卡尔曼滤波器进行过滤,但是我不明白为什么。为什么我不能直接将它直接放入微控制器。卡尔曼滤波器对我的传感器数据有何帮助?

2
如何融合传感器的线性和角度数据
我和我的团队正在建立一个室外机器人,该机器人配备编码器,商业级IMU和GPS传感器。机器人具有基本的油箱驱动器,因此编码器可充分提供左右车轮的滴答声。IMU以x,y和z给出滚动,俯仰,偏航和线性加速度。稍后我们可以添加其他IMU,这些IMU可以提供冗余,但也可以额外提供滚动,俯仰和偏航的角速率。GPS发布全局的x,y和z坐标。 知道机器人的xy位置和航向将对机器人进行定位和绘制导航环境很有帮助。机器人的速度还可用于做出平稳的运动决策。这是一个基于地面的机器人,因此我们不太在乎z轴。该机器人还具有激光雷达传感器和摄像头-因此侧倾和俯仰将有助于转换激光雷达和摄像头数据以获得更好的方向。 我试图找出如何将所有这些数字融合在一起,从而最佳地利用所有传感器的准确性。现在,我们使用卡尔曼滤波器[x, x-vel, x-accel, y, y-vel, y-accel]通过简单的转换矩阵生成的估算值: [[1, dt, .5*dt*dt, 0, 0, 0], [0, 1, dt, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, dt, .5*dt*dt], [0, 0, 0, 0, 1, dt], [0, 0, 0, 0, 0, 1]] 滤波器仅根据IMU提供的加速度估算状态。(IMU并不是最好的质量;在大约30秒内,它将显示机器人(静止时)从其初始位置漂移了20米。)我想知道如何从IMU以及可能的侧倾,俯仰和偏航率,来自车轮的编码器数据以及GPS数据,以改善状态估计。 通过一点数学,我们可以使用两个编码器在机器人上生成x,y和航向信息,以及线速度和角速度。编码器非常精确,但在室外场所可能会打滑。 在我看来,这里有两组独立的数据,很难融合: x,x-vel,x-accel,y,y-vel,y-accel的估计 侧倾,俯仰,偏航和侧倾,俯仰和偏航率的估计 即使这两套设备之间存在交叉,但我仍难以确定如何将它们组合在一起。例如,如果机器人以恒定速度行驶,则由其x-vel和y-vel确定的机器人方向将与其偏航相同。虽然,如果机器人处于静止状态,则无法通过x和y速度准确确定偏航。而且,由编码器提供的数据,转换为角速度,可能是偏航率的更新……但是如何才能最终获得更好的位置估计呢? …


2
EKF-SLAM更新步骤,卡尔曼增益变得奇异
我正在为SLAM使用EKF,并且更新步骤遇到了一些问题。我收到警告,说K奇异,rcond计算为near eps or NaN。我想我已经将问题追溯到Z的倒数了。有没有一种方法可以计算出Kalman增益而不倒数最后一项? 我不是100%肯定这是问题的原因,所以我也将整个代码放在这里。主要入口是slam2d。 function [ x, P ] = expectation( x, P, lmk_idx, observation) % expectation r_idx = [1;2;3]; rl = [r_idx; lmk_idx]; [e, E_r, E_l] = project(x(r), x(lmk_idx)); E_rl = [E_r E_l]; E = E_rl * P(rl,rl) * E_rl'; % innovation z = observation - e; Z …

2
EKF中的协方差矩阵?
我在协方差矩阵的概念上苦苦挣扎。 现在,我的用于理解σ X X,σ ÿ ÿ,和σ θ θ,它们描述不确定性。例如,对于σ X XΣ=⎡⎣⎢σxxσyxσθxσxyσyyσθyσxθσyθσθθ⎤⎦⎥Σ=[σxxσxyσxθσyxσyyσyθσθxσθyσθθ] \Sigma = \begin{bmatrix} \sigma_{xx} & \sigma_{xy} & \sigma_{x \theta} \\ \sigma_{yx} & \sigma_{yy} & \sigma_{y \theta} \\ \sigma_{\theta x} & \sigma_{\theta y} & \sigma_{\theta \theta} \\ \end{bmatrix} σxxσxx\sigma_{xx}σyyσyy\sigma_{yy}σθθσθθ\sigma_{\theta \theta}σxxσxx\sigma_{xx},它描述了x值的不确定性。现在,我对其余的西格玛问题表示什么?如果它们为零意味着什么?我可以理解,如果是零,这意味着我没有关于x的值不确定性。σxxσxx\sigma_{xx} 注意,我正在阅读Howie Choset等人的《机器人运动原理-理论,算法和实现》。等,其中指出 通过这个定义是一样的σ 2 我的方差X 我。对于我≠ Ĵ,如果σ 我Ĵ = 0,则X 我和X …

3
使用里程表运动模型的扩展卡尔曼滤波器
在EKF定位的预测步骤中,必须进行线性化处理(如Probabilistic Robotics [THRUN,BURGARD,FOX]第206页中所述),使用速度运动模型时的雅可比矩阵定义为 ⎡⎣⎢xyθ⎤⎦⎥′=⎡⎣⎢xyθ⎤⎦⎥+⎡⎣⎢⎢⎢v^tω^t(−sinθ+sin(θ+ω^tΔt))v^tω^t(cosθ−cos(θ+ω^tΔt))ω^tΔt⎤⎦⎥⎥⎥[xyθ]′=[xyθ]+[v^tω^t(−sinθ+sin(θ+ω^tΔt))v^tω^t(cosθ−cos(θ+ω^tΔt))ω^tΔt]\begin{bmatrix} x \\ y \\ \theta \end{bmatrix}' = \begin{bmatrix} x \\ y \\ \theta \end{bmatrix} + \begin{bmatrix} \frac{\hat{v}_t}{\hat{\omega}_t}(-\text{sin}\theta + \text{sin}(\theta + \hat{\omega}_t{\Delta}t)) \\ \frac{\hat{v}_t}{\hat{\omega}_t}(\text{cos}\theta - \text{cos}(\theta + \hat{\omega}_t{\Delta}t)) \\ \hat{\omega}_t{\Delta}t \end{bmatrix} 计算为 GT=⎡⎣⎢⎢100010υtωt(−cosμt−1,θ+cos(μt−1,θ+ωtΔt))υtωt(−sinμt−1,θ+sin(μt−1,θ+ωtΔt))1⎤⎦⎥⎥GT=[10υtωt(−cosμt−1,θ+cos(μt−1,θ+ωtΔt))01υtωt(−sinμt−1,θ+sin(μt−1,θ+ωtΔt))001]G_{T}= \begin{bmatrix} 1 & 0 & \frac{υ_{t}}{ω_{t}}(-cos {μ_{t-1,θ}} + cos(μ_{t-1,θ}+ω_{t}Δ{t})) \\ 0 & 1 & …

1
错误状态(间接)卡尔曼滤波器的模糊定义
我对术语“间接卡尔曼滤波器”或“错误状态卡尔曼滤波器”的确切含义感到困惑。 我发现的最合理的定义是在Maybeck的书[1]中: 顾名思义,在总状态空间(直接)公式中,诸如车辆位置和速度之类的总状态属于过滤器中的状态变量,其测量值是INS加速度计输出和外部源信号。在错误状态空间(间接)公式中,INS指示的位置和速度中的错误属于估计变量,并且提供给滤波器的每个测量值都是INS与外部源数据之间的差。 20年后,Roumeliotis等人。在[2]中写道: 通过选择陀螺仪建模可以避免特定车辆的繁琐建模及其与动态环境的交互。陀螺仪信号出现在系统(而不是测量)方程中,因此问题的提出需要间接(误差状态)卡尔曼滤波方法。 自Lefferts等人以来,我无法理解大胆的部分。在[3]中写得更早: 对于自主航天器,使用惯性参考单元作为模型替代品可以规避这些问题。 然后继续使用陀螺建模模型展示EKF的不同变体,这些变体根据Maybeck的定义显然是直接卡尔曼滤波器:状态仅由姿态四元数和陀螺仪偏置组成,而不是误差状态。实际上,没有单独的INS可以使用错误状态卡尔曼滤波器估算其错误。 所以我的问题是: 我不知道间接(错误状态)卡尔曼滤波器的定义是否有所不同,也许是较新的定义? 陀螺仪建模与一方面与使用适当的动态模型相反,另一方面与使用直接或间接卡尔曼滤波器的决策有何关系?我的印象是两者都是独立的决定。 [1] Maybeck,Peter S.随机模型,估计和控制。卷 1.学术出版社,1979年。 [2] Roumeliotis,Stergios I.,Gaurav S. Sukhatme和George A. Bekey。“规避动态建模:评估应用于移动机器人定位的错误状态卡尔曼滤波器。” 机器人与自动化,1999年。会议论文集。1999年IEEE国际会议上。卷 2. IEEE,1999年。 [3] Lefferts,Ern J.,F。Landis Markley和Malcolm D. Shuster。“卡尔曼滤波用于航天器姿态估计。” 引导,控制和动力学杂志5.5(1982):417-429。

3
如何旋转协方差?
我正在开发EKF,并且对协方差矩阵的坐标框架转换有疑问。假设我用对应的6x6协方差矩阵一些测量。这种测量和在一些坐标框架中给出。我需要将测量值转换为另一个坐标系。转换测量本身并不容易,但我还需要转换其协方差,对吗?和之间的平移应该无关紧要,但是我仍然需要旋转它。如果我是正确的,我将如何做?对于,之间的协方差(x,y,z,roll,pitch,yaw)(x,y,z,roll,pitch,yaw)(x, y, z, roll, pitch, yaw)CCCCCCG1G1G_1G2G2G_2G1G1G_1G2G2G_2xxxyyy和,我的第一个想法是简单地应用3D旋转矩阵,但这仅适用于完整6x6协方差矩阵内的3x3子矩阵。我是否需要对所有四个块应用相同的旋转?zzz

1
为什么仍应使用EKF代替UKF?
Unscented Kalman滤波器是Extended Kalman滤波器的一种变体,它使用不同的线性化,该线性化依赖于变换一组“ Sigma点”而不是一阶Taylor级数展开。 UKF不需要计算雅可比行列式,可以用于不连续变换,并且最重要的是,对于高度非线性的变换,UKF比EKF更准确。 我发现的唯一缺点是“ EKF通常比UKF快一点”(概率机器人)。对于我来说,这似乎可以忽略不计,并且它们的渐近复杂度似乎是相同的。 那么,为什么每个人似乎仍然比EKF更喜欢EKF?我是否错过了UKF的一大劣势?

2
具有激光扫描+已知图的扩展卡尔曼滤波器
我目前正在为一个学校项目工作,该项目需要为带有激光扫描仪的点机器人实现扩展的卡尔曼滤波器。机器人可以以0度转弯半径旋转并向前行驶。所有运动都是分段线性的(驱动,旋转,驱动)。 我们使用的模拟器不支持加速,所有运动都是瞬时的。 我们还需要定位一个已知的地图(png图像)。我们可以在图像中进行光线跟踪以模拟激光扫描。 我和我的搭档对我们需要使用的运动和传感器模型几乎不感到困惑。 到目前为止,我们将状态建模为向量。(x,y,θ)(x,y,θ)(x,y,\theta) 我们使用更新公式如下 void kalman::predict(const nav_msgs::Odometry msg){ this->X[0] += linear * dt * cos( X[2] ); //x this->X[1] += linear * dt * sin( X[2] ); //y this->X[2] += angular * dt; //theta this->F(0,2) = -linear * dt * sin( X[2] ); //t+1 ? this->F(1,2) = linear …

2
如何在卡尔曼滤波器中建模不可预测的噪声?
背景: 我正在实现一个简单的卡尔曼滤波器,用于估计机器人的前进方向。该机器人配有指南针和陀螺仪。 我的理解: 我想代表我的国家作为一个2D向量,其中X是当前的前进方向和 ˙ X是旋转速率报告的陀螺仪。(x,x˙)(x,x˙)(x, \dot{x})xxxx˙x˙\dot{x} 问题: 如果我的理解是正确的,则过滤器中将没有控制项。是真的吗 如果将状态作为一维矢量(x )怎么办?然后呢我˙ X变,控制项ú?这两种方法会产生不同的结果吗?uuu(x)(x)(x)x˙x˙\dot{x}uuu 众所周知,当指南针处于扭曲磁场中时,主要噪声源来自指南针。在这里,我认为高斯噪声不太明显。但是磁失真是完全不可预测的。我们如何在卡尔曼滤波器中对其建模? 在卡尔曼滤波器中,是否有必要假设“所有噪声都是白色的”?说,如果我的噪声分布实际上是拉普拉斯分布,是否仍可以使用卡尔曼滤波器?还是我必须切换到另一个滤波器,例如扩展卡尔曼滤波器?

1
链接卡尔曼滤波器
我的团队正在构建一个机器人,可以在室外环境中自主导航。最近,我们获得了一个新的集成式IMU / GPS传感器,该传感器显然在芯片上进行了一些扩展的卡尔曼滤波。它给出了俯仰,滚动和偏航,北,东和下速度以及纬度和经度。 但是,我们的车轮上还装有一些编码器,它们可提供线性和角速度。在获得这种新型IMU / GPS传感器之前,我们使用编码器和其他一些低成本传感器制作了自己的EKF来评估状态。我们不仅要使用这种新传感器的片上滤波器,而且还要将我们的编码器结合到一起。 链接过滤器有什么问题吗?我的意思是,我们将使用IMU / GPS传感器的片上EKF的输出作为对自己EKF的更新,就像我们使用从编码器读取的数据作为对EKF的更新一样。对我来说似乎很合理,但是我想知道在这种情况下通常应该做什么。

2
将四旋翼引向目标
我正在研究四旋翼。我知道它的位置- ,在那里我想去-目标位置b,并从我计算矢量c ^ -将带我去我的目标的单位向量:一个aabbbCcc c = b - a c = normalize(c) 由于四旋翼飞机可以在没有旋转的情况下向任何方向移动,所以我试图做的是 通过机器人偏航角旋转Ccc 将其分为分量X ,ÿx,yx, y 将它们作为侧倾角和俯仰角传递给机器人。 问题在于,如果偏航角为0°±5,则此方法有效,但如果偏航角接近+90或-90,则它将失败并转向错误的方向。我的问题是我在这里缺少明显的东西吗?
9 quadcopter  uav  navigation  slam  kinect  computer-vision  algorithm  c++  ransac  mobile-robot  arduino  microcontroller  machine-learning  simulator  rcservo  arduino  software  wifi  c  software  simulator  children  multi-agent  ros  roomba  irobot-create  slam  kalman-filter  control  wiring  routing  motion  kinect  motor  electronics  power  mobile-robot  design  nxt  programming-languages  mindstorms  algorithm  not-exactly-c  nxt  programming-languages  mindstorms  not-exactly-c  raspberry-pi  operating-systems  mobile-robot  robotic-arm  sensors  kinect  nxt  programming-languages  mindstorms  sensors  circuit  motion-planning  algorithm  rrt  theory  design  electronics  accelerometer  calibration  arduino  sensors  accelerometer 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.