智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5800|回复: 11
打印 上一主题 下一主题

[咨询] 卡尔曼滤波

[复制链接]

17

主题

284

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1549

活跃会员奖章优秀会员奖章

威望
781
贡献
396
兑换币
89
注册时间
2012-5-26
在线时间
236 小时
跳转到指定楼层
1#
发表于 2012-5-27 22:18:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
两轮自平衡电动小车卡尔曼滤波器的设计关键是状态向量的选取,两轮自平衡电动
小车的车体倾角与车体倾斜角速度存在着倒数关系,因此可以选取车体的倾角
(Q_angle)做为状态向量的一个元素,车体的角速度(Q_gyro)做为一个元素,另一
个元素选取加速度计来估计陀螺仪的零位偏差(Q_gyro_bias), dt=0.01 为卡尔曼滤波采
样时间,观测噪声协方差矩阵(R_angle)。
设定初始数据://Kalman 滤波,8MHz 的处理时间约 1.8ms;第一步:设定频率
static float angle, angle_dot; //外部需要引用的变量 第二步设定参数 static const
float Q_angle=0.001, Q_gyro=0.003, R_angle=0.5, dt=0.01;//注意:dt 的取值为 kalman 滤波
器采样时间。
static float P[2][2] = { { 1, 0 },{ 0, 1 } };
static float Pdot[4] ={0,0,0,0};
static const char C_0 = 1;
static float q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;
void Kalman_Filter(float angle_m,float gyro_m) //gyro_m:陀螺仪实测值
{ angle+=(gyro_m-q_bias) × dt; 先验估计倾角 陀螺仪
Pdot[0]=Q_angle - P[0][1] - P[1][0];先验估计误差协方差的微分
Pdot[1]=- P[1][1]; Pdot[2]=- P[1][1]; Pdot[3]=Q_gyro;
P[0][0] += Pdot[0] × dt;更新后的协方差矩阵
P[0][1] += Pdot[1] × dt;
P[1][0] += Pdot[2] × dt;
P[1][1] += Pdot[3] × dt;
这块看不懂
angle_err = angle_m - angle;先验倾角误差 加速度计
PCt_0 = C_0 × P[0][0]; PCt_1 = C_0 × P[1][0];
E = R_angle + C_0 × PCt_0;
K_0 = PCt_0 / E;K_1 = PCt_1 / E;
t_0 = PCt_0; t_1 = C_0 × P[0][1];
P[0][0] -= K_0 × t_0;后验估计误差协方差,更新后的协方差矩阵
P[0][1] -= K_0 × t_1[1][0] -= K_1 × t_0;P[1][1] -= K_1 × t_1;
angle += K_0 × angle_err;后验估计倾角误差
q_bias += K_1 × angle_err;后验估计角速度误差
angle_dot = gyro_m-q_bias;输出值后验估计微分(角速度)}

21

主题

273

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2915
威望
1628
贡献
643
兑换币
264
注册时间
2012-1-15
在线时间
322 小时
2#
发表于 2012-5-27 22:28:34 | 只看该作者
Pdot=APA'+Q   A=(0 -1 0 0)展开计算
回复 支持 反对

使用道具 举报

17

主题

284

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1549

活跃会员奖章优秀会员奖章

威望
781
贡献
396
兑换币
89
注册时间
2012-5-26
在线时间
236 小时
3#
 楼主| 发表于 2012-5-27 22:42:50 | 只看该作者
怎么变成微分了,后面还要积分
回复 支持 反对

使用道具 举报

21

主题

273

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2915
威望
1628
贡献
643
兑换币
264
注册时间
2012-1-15
在线时间
322 小时
4#
发表于 2012-5-27 22:48:47 | 只看该作者
啊。。。。。我怎么老是犯傻啊。。。。P=APA'+Q

/*
   * Compute the derivative of the covariance matrix
   * (equation 22-1)
   * Pdot = A*P + P*A' + Q                                怎么过来的我不懂。。他说等于这个就等于这个吧。。
   *
   */
Pdot[0] = Q_angle - P[0][1] - P[1][0]; /* 0,0 */
Pdot[1] = - P[1][1];          /* 0,1 */
Pdot[2] = - P[1][1];           /* 1,0 */
Pdot[3] = Q_gyro;   /* 1,1 */

感觉先微分在积分可能计算起来会简单一些。。。
回复 支持 反对

使用道具 举报

21

主题

273

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2915
威望
1628
贡献
643
兑换币
264
注册时间
2012-1-15
在线时间
322 小时
5#
发表于 2012-5-27 22:50:19 | 只看该作者
你加油。。。我需要去养养精神了。。。。。
回复 支持 反对

使用道具 举报

106

主题

968

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4494

在线王奖章论坛元老奖章活跃会员奖章优秀会员奖章

威望
2681
贡献
921
兑换币
241
注册时间
2012-2-4
在线时间
446 小时
6#
发表于 2012-5-28 10:55:36 | 只看该作者
谢谢楼主
回复 支持 反对

使用道具 举报

22

主题

209

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1582
威望
858
贡献
372
兑换币
342
注册时间
2012-2-28
在线时间
176 小时
毕业学校
重庆大学
7#
发表于 2012-11-13 21:06:04 | 只看该作者
楼主的头像在我看程序的时候比我晃惨啦,你就不能不点头迈……
回复 支持 反对

使用道具 举报

17

主题

202

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1235
威望
626
贡献
417
兑换币
385
注册时间
2012-11-9
在线时间
96 小时
8#
发表于 2013-3-10 10:50:19 | 只看该作者
有点看不懂
回复 支持 反对

使用道具 举报

5

主题

88

帖子

0

精华

高级会员

Rank: 4

积分
769
威望
375
贡献
208
兑换币
130
注册时间
2013-4-8
在线时间
93 小时
9#
发表于 2013-4-12 11:59:54 | 只看该作者
楼主   看的不是很懂啊...
回复 支持 反对

使用道具 举报

14

主题

220

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2670
威望
1332
贡献
692
兑换币
491
注册时间
2012-2-18
在线时间
323 小时
毕业学校
东北林业大学
10#
发表于 2013-4-17 08:51:33 | 只看该作者
请问楼主 dt 的取值为 kalman 滤波器采样时间 怎么设定啊 还有着几个参数怎么调啊 能不能给点指点啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-21 19:28 , Processed in 0.188780 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表