常驻嘉宾
追梦
- 积分
- 5460
- 威望
- 2558
- 贡献
- 1504
- 兑换币
- 1706
- 注册时间
- 2013-1-27
- 在线时间
- 699 小时
|
闲着无聊,翻出以前下载下来还没看的资料。突然看到舵机的PID(资料见附件),又产生了疑问,我们舵机的设定值到底是什么?! 文献上的舵机采用增量式PID:
而我到现在的程序一直是这么写的:
arm_mult_f32(&mid_shift,&mid_shift,&mult_mid_shift,1);
//P Control
steer_tmp += mid_shift*126.0/11.0;
steer_tmp += 4.0*left_right_flag*mult_mid_shift*21.0/121.0;
//D Control
if(fabs(pre_mid_shift - mid_shift) > 15.0 )
steer_tmp += 3.0*(mid_shift - pre_mid_shift)*126.0/11.0;//舵机给定偏差
else
steer_tmp += 0.0;//舵机给定偏差
if(fabs(mid_shift) < 5.0 ) //弱化直道打角
steer_tmp /= 1.5;
else
{;}
注:steer_tmp即指文献中的delt U。
我所写的P(=4.0)实际是 I,D(=3.0)实际是文献中的 P。可是我所理解的不就是 P*当前偏差 D*偏差的差
想不明白……想不明白……想不明白……想不明白……在论坛里搜帖子,继续想……继续想……继续想……
后来又看自己的程序: temp_steerPWM = servo_mid + (s32)steer_tmp;突然明白了。原来我苦苦想不通的给定值 就是servo_mid。
想想也是,我们小车苦苦追寻的不就是赛道中线吗?理想一些,如果小车一直跑直道,不就是 delt始终是0,舵机始终居中;对于弯道,不正是因为赛道的中心点变了,小车才去跟随嘛。
不知道各位车友是否赞同我的观点。最后附上美文一篇,一起努力。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|