
;程序的目的时求得两个轮子的速度矢量,但是却不知道为何是这样 speed.left =TIM_GetCounter(TIM3)-0x7fff; speed.right=TIM_GetCounter(TIM4)-0x7fff;/ speed.average*=0.7; speed.average+=((float)(speed.left+speed.right))*0.5*0.3 TIM_SetCounter(TIM3, 0x7fff); TIM_SetCounter(TIM4, 0x7fff); |
sorry。我用了Kp让你误以为这是PID控制。如果你了解滤波算法就知道这是一个滤波的一种方法。
正常情况下VA = (Vl + Vr )/2
但是如果你将前一次的平均值取一部分去中和新获取值的波动。这就挺好了。但是这还不是最好的。你可以根据你实际测得的波动看看波动的变化情况,在指定滤波的深度或者更改更好的滤波算法
评分
查看全部评分
然后我们这里记speed.average为VA,左右轮的叫做Vl和Vr。
那么每一次更新后
VA_k = Kp * VA_(k-1) + (1 - Kp) *(Vl_k + Vr_k)/2
这里的Kp是0.7
那么这里的VA到底是干什么用的呐?是用来计算Vx和Vy以及Phi呐还是什么。就需要你提供如何利用VA的那段代码
speed.average的用途使用做一个速度pid环的输入,大神还想请教一下,这个kp是如何确定的,
(左边轮速度+右边轮速度)/2 =平均速度矢量。
前面两句就是在求速度。定时测量,计数就是速度。
然后,PID?出来了。
真正的速度平均值=历史的速度值*0.7+当前的速度值*0.3.这个算1阶IIR滤波器,因数是0.3。
所以,最后一句只是个滤波函数。
评分
查看全部评分
非常感谢,不知道那个是iir滤波
非常感谢,坛友们热心回答,让小弟收获知识的同时,更是感觉暖心
楼主有什么疑问可以在社区或QQ群多交流,这也是社区存在的意义