<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://www.gentoo-zh.org/extern.php?action=feed&amp;tid=105&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / 简易卡尔曼滤波（仅供学习）]]></title>
		<link>https://www.gentoo-zh.org/viewtopic.php?id=105</link>
		<description><![CDATA[简易卡尔曼滤波（仅供学习） 最近发表的帖子。]]></description>
		<lastBuildDate>Thu, 18 Aug 2022 12:37:39 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[简易卡尔曼滤波（仅供学习）]]></title>
			<link>https://www.gentoo-zh.org/viewtopic.php?pid=111#p111</link>
			<description><![CDATA[<p>#include &lt;stdio.h&gt;</p><br /><p>float Q_angle=0.001;//过程噪声的协方差<br />float Q_gyro=0.003;//0.003 过程噪声的协方差 过程噪声的协方差为一个一行两列矩阵<br />float R_angle=0.5;// 测量噪声的协方差 既测量偏差<br />float dt=0.005;//注意：dt的取值为kalman滤波器采样时间;<br />float P[2][2] = {{ 1, 0 },{ 0, 1 }};<br />float Angle,Angle_dot;<br />float Pdot[4] ={0,0,0,0};<br />const char C_0 = 1;<br />float Q_bias, Angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;</p><p>/**************************************************************************<br />函数功能：简易卡尔曼滤波<br />入口参数：加速度、角速度<br />返回&#160; 值：无<br />**************************************************************************/<br />void Kalman_Filter(float Angle_m,float Gyro_m) //gyro_m:gyro_measure<br />{<br />&#160; &#160; Angle+=(Gyro_m-Q_bias) * dt;//先验估计误差协方差的微分<br />&#160; &#160; Pdot[0]=Q_angle - P[0][1] - P[1][0];// Pk-先验估计误差协方差的微分<br />&#160; &#160; Pdot[1]=- P[1][1];<br />&#160; &#160; Pdot[2]=- P[1][1];<br />&#160; &#160; Pdot[3]=Q_gyro;<br />&#160; &#160; <br />&#160; &#160; P[0][0] += Pdot[0] * dt;// Pk- 先验估计误差协方差微分的积分<br />&#160; &#160; P[0][1] += Pdot[1] * dt;// = 先验估计误差协方差<br />&#160; &#160; P[1][0] += Pdot[2] * dt;<br />&#160; &#160; P[1][1] += Pdot[3] * dt;<br />&#160; &#160; <br />&#160; &#160; Angle_err = Angle_m - Angle;//zk-先验估计<br />&#160; &#160; <br />&#160; &#160; PCt_0 = C_0 * P[0][0];<br />&#160; &#160; PCt_1 = C_0 * P[1][0];<br />&#160; &#160; <br />&#160; &#160; E = R_angle + C_0 * PCt_0;<br />&#160; &#160; <br />&#160; &#160; K_0 = PCt_0 / E;//Kk<br />&#160; &#160; K_1 = PCt_1 / E;<br />&#160; &#160; <br />&#160; &#160; t_0 = PCt_0;<br />&#160; &#160; t_1 = C_0 * P[0][1];<br />&#160; &#160; <br />&#160; &#160; P[0][0] -= K_0 * t_0;//后验估计误差协方差<br />&#160; &#160; P[0][1] -= K_0 * t_1;<br />&#160; &#160; P[1][0] -= K_1 * t_0;<br />&#160; &#160; P[1][1] -= K_1 * t_1;<br />&#160; &#160; <br />&#160; &#160; Angle += K_0 * Angle_err;//后验估计<br />&#160; &#160; Q_bias += K_1 * Angle_err;//后验估计<br />&#160; &#160; Angle_dot = Gyro_m-Q_bias;//输出值(后验估计)的微分 = 角速度<br />}</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Thu, 18 Aug 2022 12:37:39 +0000</pubDate>
			<guid>https://www.gentoo-zh.org/viewtopic.php?pid=111#p111</guid>
		</item>
	</channel>
</rss>
