- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
现在智能小车里用的卡尔曼滤波算法基本是这个
现在智能小车里用的卡尔曼滤波算法基本是这个:void Kalman_Filter(float angle_m,float gyro_m)? ? ? ? ? ? ? ? ? ? ? ? //gyro_m:gyro_measure{? ? ? ? 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;? ? ? ? P[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;}这个也不错,但我看不懂,因为我不知道怎么调参数,所以我不相信其输出精度。独轮车做的不太好,原来一直在用别人的驱动,后来感觉还是自己做一下比较好,所以还在做驱动。
现在智能小车里用的卡尔曼滤波算法基本是这个:void Kalman_Filter(float angle_m,float gyro_m)? ? ? ? ? ? ? ? ? ? ? ? //gy ...
这个参数不好调节,就目前的参数而言,滞后严重。但是加大参数了,输出的角速度值收敛太慢,影响控制。还是楼主的公式也不是最直观的,建议直接用公式,那5个公式一步步的写,输出很精准,参数的调节也一目了然。就是现在的几个程序。把卡尔曼的算法弄复杂了再发一些我认为不错的文档吧!首先是一阶互补滤波算法:1、一阶互补滤波这种滤波的原理是对AngleGyro进行高通滤波,而对AngleAccel进行低通滤波,最后再将两者加合,输出姿态角估计值。其公式如下:angle = a * (angle + AngleRateGyro * dt) + (1 - a) * AngleAccel;高通滤波的目的是过滤掉长期的变量,而让短期的变量通过,这可以用来去掉陀螺仪的漂移;低通滤波的目的是过滤掉短期的变量,而让长期的变量通过,这可以用来去掉加速度计的噪声。为了确定滤波系数a,得确定一个时间常数tau,tau = a * dt / (1 - a);a = tau / (tau + dt);dt为滤波取样时间。tau代表的是你对陀螺仪的信任度和对加速度计的信任度的界限。当时间小于tau,AngleGyro处于优先地位,AngleAccel的噪声将被过滤。当时间大于tau时,AngleAccel的平均值将被优先考虑,这时的AngleGyro将产生漂移。tau的选择将取决于AngleGyro何时产生漂移,观察数据拟合曲线即可确定。我们选取tau = 1s,带入以下程序中:void ComplementaryFilter(float AngleRateGyro,float AngleAccel){//tau is a time constant//a = tau / (tau + dt);//angle = a * (angle + AngleRateGyro * dt) + (1 - a) * AngleAccelfloat tau =
您可能关注的文档
最近下载
- 人形机器人标准化白皮书.pdf
- 〖GB_T50795-2012〗光伏发电工程施工组织设计规范(现行有效).pdf
- 安全生产文明施工目标及采取的措施.doc
- 马克思主义基本原理概论知识点归纳归纳总结(超详细)和每章重点归纳归纳总结(超详细).docx
- 常年长绒型辽宁绒山羊新品系选育扩繁及产业化示范.doc
- 幸福河湖建设指南.pdf VIP
- 2022年广东广州越秀区应急管理局属下事业单位选调事业编制工作人员考试真题.docx VIP
- 2025年江苏航空职业技术学院单招职业倾向性测试题库(各地真题).docx VIP
- 佳能相机 canon微单 R8 使用指南用户手册产品说明书.pdf
- 美国陶氏杜邦ENGAGE 8150 聚烯烃弹性体 MSDS报告.pdf
文档评论(0)