用于RSSI距离近似的Kalman滤波器
我目前正在研究一个使用RSSI信号来确定用户与三个信标之间的距离的项目.尽管我有粗糙的三角剖分公式,但我试图使某些事情变得更加准确. 通过我的所有研究,我发现了卡尔曼过滤器.从我一直在阅读的有关它们的内容来看,它们似乎只是我想要使用的内容.但是,我发现的所有例子都相当复杂且难以理解. 以前有没有人使用过与RSSI信号合并的Kalmon过滤器? 任何人是否有能力指出我或向我解释Kalmon过滤器如何以简单的方式工作? 解决方案 以前有没有人使用过与RSSI信号合并的Kalmon过滤器? 是的,请参见: Kalman Smoother 有人能够指向我或向我解释Kalmon过滤器如何以简单的方式工作? 到目前为止,我发现的最可读的介绍是 Siggraph课程包.
14 2024-04-19
编程技术问答社区
OpenCV卡尔曼过滤器
我有三个陀螺仪值:螺距,滚动和偏航.我想添加卡尔曼过滤器以获得更准确的值.我找到了实现Kalman过滤器的OpenCV库,但我不明白它如何真正起作用. 您能给我任何可以帮助我的帮助吗?我没有在互联网上找到任何相关主题. 我试图使其适用于一个轴. const float A[] = { 1, 1, 0, 1 }; CvKalman* kalman; CvMat* state = NULL; CvMat* measurement; void kalman_filter(float FoE_x, float prev_x) { const CvMat* prediction = cvKalmanPredict( kalman, 0 ); printf("KALMAN: %f %f %f\n" , prev_x, prediction->data.fl[0] , prediction->data.fl[1] ); measurement->data.f
2 2024-04-08
编程技术问答社区
在测量缺失且只知道位置的情况下进行卡尔曼滤波预测
我正在尝试实现卡尔曼过滤器.我只知道职位.在某些时间步骤中缺少测量.这就是我定义矩阵的方式: 过程噪声矩阵 Q = np.diag([0.001, 0.001]) 测量噪声矩阵 R = np.diag([10, 10]) 协方差矩阵 P = np.diag([0.001, 0.001]) 观察Matirx H = np.array([[1.0, 0.0], [0.0, 1.0]]) 过渡矩阵 F = np.array([[1, 0], [0, 1]]) 状态 x = np.array([pos[0], [pos[1]]) 我不知道它是否正确.例如,如果我在t=0上看到目标并且看不到t = 1,我将如何预测其位置.我不知道速度.这些矩阵定义正确吗? 解决方案 您需要扩展模型并添加速度的状态(如果需要加速).过滤器将根据位置估算新状态并使用它们来预测位置,即使您没有位置测量. 您的矩阵看起来像这样: 过程
2 2024-03-29
编程技术问答社区
经过卡尔曼过滤的GPS数据仍然波动很大
他大家! 我正在编写一个使用设备GPS计算车辆驾驶速度的Android应用程序.这应该是准确到约1-2 km/h的,我正在通过查看两个GPS位置之间的距离,然后将其分开时,这些位置分开,很简单,然后为此做到这一点最后三个记录的坐标和晚上. 我在背景服务中获取GPS数据,该数据有一个操作员,因此每当我从locationListener获得新位置时,我都会调用Kalmans Update()方法并在处理程序中调用Prective()在预测之后() 之后,定期致电SendementDelayedMessage将其定期及 我已经阅读了平滑的GPS数据,实际上也尝试在Github中实现过滤器由Villoren提供的回答该主题,这也产生了波动的结果. 然后,我已经从本教程我发表评论的部分 /*// K = P * H^T *S^-1 double k = m_p0 / s; // double LastGain = k; // X = X + K*Y m_x0 += y0 *
0 2024-02-05
编程技术问答社区
卡尔曼滤波器和内部状态变量的质量
我正在尝试为Android开发运动检测应用.应用程序应该能够跟踪手机在太空中的运动并将其映射到计算机屏幕上的运动.我正在使用3轴加速度计,并且由于数据非常嘈杂,因此我使用的是Kalman Filter. 内部状态为6个组件向量[speed-x,speed-y,speed-z,accel-x,accel-y,accel-z],测得的状态为3个组件矢量[ACCEL-X,ACCEL-X,ACCEL-Y,ACCEL-Y, Accel-Z]. 滤波器在测量值上效果很好,但是速度仍然非常嘈杂. 现在,我想知道这是正常行为还是我做错了什么,因为我对卡尔曼过滤器的理解非常基本.我正在使用JKALMAN库和以下状态转变矩阵(DT为1/15,是近似传感器刷新率) double [] [] [] a = { {1,0,0,DT,0,0}, {0,1,0,0,0,dt,0}, {0,0,1,0,0,0,dt}, {0、0、0、1、0、0}, {0,0,0,0,1,1,0}, {0,0,0
8 2024-02-04
编程技术问答社区
用于GPS安卓系统的卡尔曼滤波器
要从GPS获取更准确的数据,建议使用Kalman Filter.但是我找不到任何教程如何实现GPS,Android的Kalman过滤器. 解决方案 GPS数据已经大量过滤.这是在GPS接收器内完成的. 如果您创建自己的Kalman过滤器,请不要指望位置上的准确性(LAT/LON). 此外,您没有内部GPS接收器的信息.在输出一个位置之前,它将其内部卡尔曼过滤器1000时间/每秒馈送. 在您自己的帖子处理过滤器中,您可能会获得更平滑的曲目(与可视化位置有关).但是更顺畅的不是更准确,只能更愉快. 另一个主题是GPS位置是否必须实时可用,例如在屏幕上显示当前位置.如果您想在(非实时)之后平滑轨道,则可能会成功,但是我不会在这种情况下使用Kalman过滤器. Kalman过滤器非常适合实时过滤,用于发布后处理,您可以使用三角形窗口过滤器(易于实现,而Kalman非常komplex)尝试平均滑动平均值) 其他解决方案 您可以通过Google和Wikipedia找到很多
26 2024-02-03
编程技术问答社区
安卓GPS数据的获取和过滤,如何改善位置信息
我开始处理Android 2.1(HTC Hero)上的GPS数据,并环顾有关Kalman过滤器和适合位置数据的最小二乘的主题.在使用手机接收和记录GPS数据时,如果保持到位,我发现小型分散体,但是坐标在移动时非常准确.这是一个问题: - getlatitude()和getLongitude()函数提供"原始"坐标,或者数据已由Android预先过滤(而位置是固定的或在移动期间)? 我很好奇是否有人在Android上测试了Kalman,可以说您对GPS有所改进.就我而言,我每3秒读取GPS数据(以指南针数据和加速度计将移动网络发送到服务器,进行了每3秒钟).因此,我可以在设备或服务器上进行过滤.如果要在设备读取上进行操作,可以更频繁地进行,但是在服务器上,我可以使用其他计算能力. 解决方案 我在我的领域与Kalman过滤器一起工作. Kalman过滤器是一种基于系统模型的传感器A 收集的质量.如果您要实现Kalman过滤器,为此,您需要第二个传感器,例如速度传感器或等等.
28 2024-01-31
编程技术问答社区
滤除旋转加速度(卡尔曼滤波器的适当用途?)
我正在研究一个项目,其中将杆在旋转轴的一端附着.因此,当轴从0到〜100度旋转(在XY平面)时,杆也是如此.我在移动杆的末端安装了3轴加速度计,并测量了加速度计与旋转中心(即杆的长度)的距离约为38厘米.我收集了很多数据,但是我需要帮助才能找到过滤它的最佳方法.首先,这是原始数据的图: 我认为这些数据是有道理的:如果数据正在加速,那么我认为那时加速度应该线性增加,然后当数据升高时,应该线性降低.如果它不断移动,则加速度将为〜零.请记住,有时速度从一个"试验"到另一个"试验"变化(更高).在这种情况下,有〜120个"试验"或运动/扫描,以148 Hz采样. 对于过滤,我尝试了一个低通滤波器,然后呈指数下降的移动平均值,这两个图都不太热.尽管我不擅长解释这些:这是我在编码功率频率图时得到的: 我希望在这里获得帮助的是,获得了一种非常好的方法,可以通过它过滤这些数据.不断一次又一次地出现的一件事(尤其是在此网站上)是卡尔曼过滤器.尽管在线上有很多代码可以在MATLAB中实施这
8 2024-01-09
编程技术问答社区
从加速器和陀螺仪(IMU)获取轨迹
我很清楚这个问题但是我的会有所不同.我也知道,这种方法可能存在重大错误,但我也想从理论上理解配置. 我有一些基本问题,我很难清楚地回答这些问题.关于加速度计和陀螺仪有很多信息,但我仍然没有找到一些基本属性的"第一原理"的解释. 因此,我有一个包含加速度计和陀螺仪的板传感器.我现在跳过了一个磁力计. 加速度计在每次t中提供有关临时加速度向量a =(ax,ay,az)在m/s^2中根据固定坐标系的信息. 陀螺仪以DEG/s的形式给出了3D载体,其中说三个轴的旋转速度(OX,OY和OZ).从这些信息中,可以获得与坐标系的无穷小旋转相对应的旋转矩阵(根据上一刻). 在这里是一些解释如何获得quaternion,代表r. 因此,我们知道可以根据位置的第二个导数来计算无限运动. 想象一下您的传感器已固定在手或腿上.在第一刻,我们可以将其在3D空间中的点为(0,0,0),并且在此物理点也附加了初始坐标系.因此,在第一个步骤中,我们将有 r (1)= 0.5 a (
60 2024-01-09
编程技术问答社区
卡尔曼滤波器:如何在没有 "状态转换模型 "的情况下使用它?
我正在使用Android手机使用加速度计.我想过滤加速度计返回记录手机的动作的可怕噪音. 我在Kalman过滤器上阅读,因为低通票还不够. ,但我没有从ACCELERATION(k-1)到ACCELERATION(k)的过渡模型,因为它是用户的运动.因此,我没有状态过渡矩阵(不同论文中的h或f,在等式xk = h xk-1 + xk-1 + b 命令 +噪声中乘以xk-1 我看到有些人在简单的示例中采用了身份矩阵.它如何用于动态加速度? 我知道卡尔曼过滤器,人们总是会产生一些h矩阵,我只是不知道如何在我的情况下. 解决方案 Kalman滤波器通常被认为是一个线性滤波器,您拥有所有模型矩阵,但是过滤器及其第一个应用程序的想法来自非线性模型.在这种情况下,您使用函数而不是矩阵. 如果用于预测和更新的功能是高度非线性的,则可以使用统计方法在线估算您的参数.首先,您可以接受的是无知的Kalman filter 确定性抽样技术的平均和协方差 - unscent"r
0 2024-01-09
编程技术问答社区
IMU速度估计
您知道我可以在哪里找到来自IMU(ACC+Gyro+磁力计)数据的速度估算的代码或示例.我从IMU站立的数据中计算出偏见.我想用某种过滤器(Kalman/补充)实现速度估计,但找不到任何速度.我也有相机速度估计,也许可以作为某种融合有帮助? 先感谢您! 亲切的问候 解决方案 我没有示例代码,可以完全适合您的情况.但是这种方法可以帮助(基于过去的经验), 卡尔曼过滤器: 决定并制定状态X,控制输入U,输出,预测和观察方程. 实施/重复了Kalman过滤器的某些实现.这是一个基于simulink的设置测量噪声和预测误差方差.以后可能需要进行一些微调. 验证KF是否反对某些参考.如果您有另一种测量速度的方法,请检查针对它的KF速度. 状态和控制输入: 状态可以是包含 的数组 线性速度[VX,VY,VZ] 角速度[Omega_x,Omega_y,Omega_z] 陀螺仪中的偏见.这种偏见在很大程度上是恒定的,但会随温度和其他因素而变化. KF将使用加速
24 2024-01-09
编程技术问答社区
如何利用加速器和陀螺仪数据确定相对位置
我正在设计一个机器人,需要跟踪机器人运动的距离和方向,没有3D,我只需要x,y和x y平面的角度. 我的问题: 是否可以将陀螺仪和加速度计与卡尔曼过滤或任何其他方法一起使用 跟踪这个? (我没有电动机编码器) 我的约束:我没有空间包括GPS(由于电源要求) 或电机编码器(由于电动机支撑) 解决方案 不,不是.如果您将加速度计值集成两次,则会获得位置,但错误是可怕的.它在实践中是没有用的. 这是解释为什么(Google Tech Talk) 23:20. 一个相关的问题可能是 this .
16 2024-01-09
编程技术问答社区
如何用安卓加速器检测行走
我正在编写一个应用程序,我的目的是检测用户何时行走. 我正在使用这样的卡尔曼过滤器: float kFilteringFactor=0.6f; gravity[0] = (accelerometer_values[0] * kFilteringFactor) + (gravity[0] * (1.0f - kFilteringFactor)); gravity[1] = (accelerometer_values[1] * kFilteringFactor) + (gravity[1] * (1.0f - kFilteringFactor)); gravity[2] = (accelerometer_values[2] * kFilteringFactor) + (gravity[2] * (1.0f - kFilteringFactor)); linear_acceleration[0] = (accelerom
20 2024-01-09
编程技术问答社区
如何在CamShift中平滑跟踪
我正在使用OPENCV库功能进行手动跟踪项目.通过使用Camshift()功能,我能够跟踪我的手,但是它不稳定,即使我使手稳定,跟踪几乎没有运动.因此,我无法在正确的位置执行鼠标单击操作.有人请帮助我弄清楚这一点. void TrackingObjects::drawRectangle(CvRect objectLocation){ CvPoint p1, p2,mou; CvRect crop; p1.x = objectLocation.x; p2.x = objectLocation.x + objectLocation.width; p1.y = objectLocation.y; p2.y = objectLocation.y + objectLocation.height; cvRectangle(image,p1,p2,CV_RGB(0,255,0),1,CV_AA,0); mou.x=(p2.x-p1.x)/2; mou.x=p1.x+mou.x; mou.y
24 2023-11-20
编程技术问答社区
使用卡尔曼滤波器来跟踪一个物体的位置,但需要知道该物体的位置作为卡尔曼滤波器的输入。发生了什么事?
我正在尝试研究如何使用Kalman过滤器跟踪对象(Ball)我自己以视频序列移动的对象(Ball),因此请在我的孩子时向我解释一下. 通过某些算法(颜色分析,光流...),我能够获得每个视频框架的二进制图像,其中有跟踪对象(白色像素)和背景(黑色像素) - >我知道对象大小,对象质心,对象位置 - >只是简单地绘制对象周围的边界框 - >完成.为什么我需要在这里使用Kalman过滤器? 好吧,有人告诉我,因为由于噪声而无法在每个视频框架中检测到对象,所以我需要使用Kalman滤波器来估计对象的位置.好的.但是,如我所知,我需要为卡尔曼过滤器提供输入.它们是以前的状态和测量. 以前的状态(我认为这是上一个帧中对象的位置,速度,加速度...) - >好吧,这对我来说很好. 测量当前状态:这是我无法理解的.可以测量什么? - 对象在当前帧中的位置?这很有趣,因为如果我知道对象的位置,我所需要的只是在对象周围绘制一个简单的边界盒(矩形).为什么我在这里需要Kalman过滤
10 2023-11-18
编程技术问答社区
C ++/OPENCV -KALMAN过滤器用于视频稳定
我尝试使用卡尔曼过滤器稳定视频以进行平滑.但是我有一些问题 每次我都有两个框架:一个电流和另一个. 在这里我的工作流程: 计算GoodFeatuRestotrack() 使用calptricationflowpyrlk() 计算光流 只保留好点 估计刚性转换 使用卡尔曼过滤器平滑 图片的翘曲. ,但我认为卡尔曼有问题,因为最后我的视频仍然没有稳定,它根本不光滑,它比原始视频更糟... 在这里我的卡尔曼代码 void StabilizationTestSimple2::init_kalman(double x, double y) { KF.statePre.at(0) = x; KF.statePre.at(1) = y; KF.statePre.at(2) = 0; KF.statePre.at(3) = 0; KF.transitionMatri
18 2023-11-18
编程技术问答社区
请解释一下卡尔曼滤波器在本教程中的用途。
一个人发表的家伙但是,一个人发布了以下问题:" 在此代码中,您在每个帧中都进行了检测,并且作为Kalman过滤器的输入提供了此输出.SO背景减法和Kalman滤波器将给出类似的结果.因此,请您在此处解释使用Kalman Filter. " 我和他有同样的想法. 有人可以在此处解释使用Kalman过滤器吗? 解决方案 用背景减法的简单检测将在每个样本期间都会产生结果,但是结果将是嘈杂的(由于测量噪声以及可能的量化),并且检测错误将产生巨大的影响. > 如果您想观察一个对象,您通常会对它的移动方式有所了解.它不会从一个位置跳到下一个位置,而要连续地移动.卡尔曼过滤器结合了简单检测算法的测量结果,并将它们与您对对象的模型知识相结合(位置无法跳跃),因此它过滤了测量并考虑了测量的历史记录.考虑到线性系统,您可以证明卡尔曼过滤器是考虑系统测量噪声的最佳方法. 编辑:在本教程中,卡尔曼过滤器显然用于预测下一步的球位置.在向下运动中,这效果很好.由于过滤器对地板一无所知,当
26 2023-10-25
编程技术问答社区
卡尔曼跟踪-测量方差
我正在使用安装在向下朝下的摄像头安装的天花板跟踪移动对象进行一些工作.我必须要检测到每个帧中所需对象的位置. 我正在考虑使用Kalman滤波器跟踪对象的位置和速度在场景中,并且已经到达了一个绊脚石.我已经设置了系统,除了测量差异外,还拥有Kalman过滤器的所有必需部分. 我希望能够为每个测量值分配有意义的差异,以允许校正阶段以明智的方式使用新信息.我有几种措施分配给我检测到的对象,从理论上讲,这些措施在确定位置的准确程度上很有用,并且尝试结合它们以得出合适的方差似乎是合乎逻辑的. 我是以正确的方式来接近这一点吗? 任何帮助都非常感谢. 解决方案 我认为你是对的.根据这篇文章: 传感器与Kalman Filter融合 确定方差为100%实验.在我看来,您拥有对差异进行良好估计所需的一切. 其他解决方案 对不起,回复了.我个人在以前的项目中遇到了同样的问题.我在他的传感器融合演讲幻灯片中找到了建议的建议(幻灯片的第10页)非常有价值. 总结:
12 2023-10-24
编程技术问答社区
关于使用卡尔曼滤波器跟踪移动的球的问题
我想学习使用卡尔曼过滤器跟踪移动的球.尽管有很多教程可用,但我仍然有一些问题. 如果我们可以在视频序列的每个帧中提取球,我们将知道球的位置.那么,为什么我们需要再使用Kalman智能? Kalman过滤器的工作是什么? 卡尔曼滤波器:x(k + 1)= a.x(k) + b.u(k) +噪声 y(k) = C.x(k) + noise 那么,我们如何定义A,B,C?假设我们想跟踪移动的球? 3.如果我们知道先前的状态X(K-1)和当前状态y(k)的测量,则可以计算估计的状态.在跟踪移动球的情况下,"测量"是什么? 解决方案 基本上您使用跟踪方法来跟随场景中的球.您仍然必须在每个时间步中检测到球. (1) 假设您进入了另一个球进入现场的地步.因此,您需要找到一种识别每个球的方法.使情况变得更糟,甚至让他们彼此交叉或在可能隐藏一会儿的方式上遇到障碍. 您的跟踪方法(即卡尔曼过滤器)将根据球以前的移动方式继续其在
8 2023-10-24
编程技术问答社区
过滤流数据以减少噪声,Kalman Filter C#
我将数据流到了惯性传感器的C#应用​​程序中.数据有点嘈杂,因此我需要添加一个过滤器以使其平滑.我有一个Kalman过滤器实现,在给出数组时效果很好,但是我无法围绕如何在恒定数据流上使用它. 我有: double sensorData; //the noisy value, constantly updating from another class. 过滤器: public static double[] noisySine = new double[20] { 40, 41, 38, 40, 45, 42, 43, 44, 40, 38, 44, 45, 40, 39, 37, 41, 42, 70, 44, 42 }; public static double[] clean = new double[20]; public static void KalmanFilter(double[] noisy) {
10 2023-09-30
编程技术问答社区