📄 卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).htm
字号:
<TD class=f03
style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: #ffffff 0.5pt solid"
vAlign=bottom bgColor=#d1d9e2> </TD></TR>
<TR>
<TD class=f03
style="BORDER-RIGHT: #ffffff 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: #bbbbbb 0.5pt solid; BORDER-BOTTOM: #bbbbbb 0.5pt solid"
align=left width="19%" bgColor=#d1d9e2><IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif"
width=7>2008-02-18,22:35:08 </TD>
<TD class=f03
style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: #bbbbbb 0.5pt solid"
vAlign=top width="81%" bgColor=#d1d9e2 ?>
<TABLE width="100%">
<TBODY>
<TR>
<TD align=left><IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=7>
<A class=tt4
href="http://www.ouravr.com/bbs/user_information.jsp?user_name=linxianke"
target=_blank>资料</A> <IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=7>
<SPAN class=f01>邮件</SPAN> </TD>
<TD align=right><IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<A class=tt4
href="http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1685378&bbs_id=9999"
target=_blank><SPAN class=f01><FONT
color=#699bcd>本主题已经审核通过</FONT></SPAN></A> <IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<SPAN class=f01>编辑</SPAN> <IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<SPAN class=f01>删除</SPAN> <IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
<IMG height=1
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/pixel.gif" width=1>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0
cellPadding=6 width="100%" border=0>
<TBODY>
<TR>
<TD class=f03
style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: #bbbbbb 0.5pt solid; BORDER-BOTTOM: #bbbbbb 0.5pt solid"
vAlign=top align=left width="19%" bgColor=#e8e8e8 rowSpan=2>【1楼】 <FONT
color=#000000>vivalite </FONT><BR><IMG height=84
src="卡尔曼滤波算法的程序哪位有啊? (ourdev_cn 我们的电子开发社区).files/armok01359331.jpg"
width=112><BR>积分:<FONT color=#000000>2457</FONT><BR>派别:<FONT
color=#000000></FONT><BR>等级:<FONT color=#000000>------</FONT><BR>来自:<FONT
color=#000000>彼岸</FONT><BR></TD>
<TD class=f03
style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"
vAlign=top width="81%" bgColor=#e8e8e8><FONT
color=#000000>============================kalman.h================================
<BR><BR>// kalman.h: interface for the kalman class.
<BR>//
<BR>//////////////////////////////////////////////////////////////////////
<BR><BR>#if !defined(AFX_KALMAN_H__ED3D740F_01D2_4616_8B74_8BF57636F2C0__INCLUDED_)
<BR>#define AFX_KALMAN_H__ED3D740F_01D2_4616_8B74_8BF57636F2C0__INCLUDED_
<BR><BR>#if _MSC_VER > 1000 <BR>#pragma once
<BR>#endif // _MSC_VER > 1000
<BR><BR>#include <math.h> <BR>#include "cv.h"
<BR><BR> <BR><BR>class kalman <BR>{ <BR>public:
<BR> void init_kalman(int x,int xv,int y,int yv);
<BR> CvKalman* cvkalman; <BR> CvMat* state;
<BR> CvMat* process_noise; <BR> CvMat* measurement;
<BR> const CvMat* prediction;
<BR> CvPoint2D32f get_predict(float x, float y);
<BR> kalman(int x=0,int xv=0,int y=0,int yv=0);
<BR> //virtual ~kalman(); <BR><BR><BR>};
<BR><BR>#endif // !defined(AFX_KALMAN_H__ED3D740F_01D2_4616_8B74_8BF57636F2C0__INCLUDED_)
<BR><BR><BR>============================kalman.cpp================================
<BR><BR>#include "kalman.h" <BR>#include <stdio.h>
<BR><BR><BR>/* tester de printer toutes les valeurs des vecteurs...*/
<BR>/* tester de changer les matrices du noises */
<BR>/* replace state by cvkalman->state_post ??? */
<BR><BR><BR>CvRandState rng;
<BR>const double T = 0.1;
<BR>kalman::kalman(int x,int xv,int y,int yv)
<BR>{
<BR> cvkalman = cvCreateKalman( 4, 4, 0 );
<BR> state = cvCreateMat( 4, 1, CV_32FC1 );
<BR> process_noise = cvCreateMat( 4, 1, CV_32FC1 );
<BR> measurement = cvCreateMat( 4, 1, CV_32FC1 );
<BR> int code = -1;
<BR>
<BR> /* create matrix data */
<BR> const float A[] = {
<BR> 1, T, 0, 0,
<BR> 0, 1, 0, 0,
<BR> 0, 0, 1, T,
<BR> 0, 0, 0, 1 <BR> };
<BR>
<BR> const float H[] = {
<BR> 1, 0, 0, 0,
<BR> 0, 0, 0, 0,
<BR> 0, 0, 1, 0,
<BR> 0, 0, 0, 0 <BR> };
<BR>
<BR> const float P[] = {
<BR> pow(320,2), pow(320,2)/T, 0, 0,
<BR> pow(320,2)/T, pow(320,2)/pow(T,2), 0, 0,
<BR> 0, 0, pow(240,2), pow(240,2)/T,
<BR> 0, 0, pow(240,2)/T, pow(240,2)/pow(T,2)
<BR> };
<BR><BR> const float Q[] = {
<BR> pow(T,3)/3, pow(T,2)/2, 0, 0,
<BR> pow(T,2)/2, T, 0, 0,
<BR> 0, 0, pow(T,3)/3, pow(T,2)/2,
<BR> 0, 0, pow(T,2)/2, T
<BR> }; <BR>
<BR> const float R[] = {
<BR> 1, 0, 0, 0,
<BR> 0, 0, 0, 0,
<BR> 0, 0, 1, 0,
<BR> 0, 0, 0, 0 <BR> };
<BR> <BR>
<BR> cvRandInit( &rng, 0, 1, -1, CV_RAND_UNI );
<BR><BR> cvZero( measurement );
<BR>
<BR> cvRandSetRange( &rng, 0, 0.1, 0 );
<BR> rng.disttype = CV_RAND_NORMAL;
<BR><BR> cvRand( &rng, state );
<BR><BR> memcpy( cvkalman->transition_matrix->data.fl, A, sizeof(A));
<BR> memcpy( cvkalman->measurement_matrix->data.fl, H, sizeof(H));
<BR> memcpy( cvkalman->process_noise_cov->data.fl, Q, sizeof(Q));
<BR> memcpy( cvkalman->error_cov_post->data.fl, P, sizeof(P));
<BR> memcpy( cvkalman->measurement_noise_cov->data.fl, R, sizeof(R));
<BR> //cvSetIdentity( cvkalman->process_noise_cov, cvRealScalar(1e-5) );
<BR> //cvSetIdentity( cvkalman->error_cov_post, cvRealScalar(1));
<BR> //cvSetIdentity( cvkalman->measurement_noise_cov, cvRealScalar(1e-1) );
<BR><BR> /* choose initial state */
<BR><BR> state->data.fl[0]=x;
<BR> state->data.fl[1]=xv;
<BR> state->data.fl[2]=y;
<BR> state->data.fl[3]=yv;
<BR> cvkalman->state_post->data.fl[0]=x;
<BR> cvkalman->state_post->data.fl[1]=xv;
<BR> cvkalman->state_post->data.fl[2]=y;
<BR> cvkalman->state_post->data.fl[3]=yv;
<BR><BR> cvRandSetRange( &rng, 0, sqrt(cvkalman->process_noise_cov->data.fl[0]), 0 );
<BR> cvRand( &rng, process_noise );
<BR><BR><BR> }
<BR><BR>
<BR>CvPoint2D32f kalman::get_predict(float x, float y){
<BR>
<BR><BR> /* update state with current position */
<BR> state->data.fl[0]=x;
<BR> state->data.fl[2]=y;
<BR><BR>
<BR> /* predict point position */
<BR> /* x'k=A鈥
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -