摄像头车三轮
在之前摄像头组都是用的4轮的车,我之前也是用四轮车练手的,厥后角逐规则出来了,变成要用三轮车了,三轮的前轮就是个摆设,任何移动转弯都要靠后边的两个轮,所以差速就尤为紧张了,之前在学校写了2套三轮的差速,但是不停没时间上赛道,(厥后放假回家买了一套赛道,结果赛道刚来就得新冠了,兜兜转转昨天才铺好赛道,元旦第一次上道,从上午10点不停搞到晚上11点,代码修修改改,删删减减,最后能跑直道和弯道。S弯道按照理论来说也是可以跑得,但是由于一共用了4个pid,以及驱动没有终极确认,所以嘛就没有太精细的调参数,大概调一调,能用就行了,否则的话,换了驱动还要重新调12个参数调起来还是很累的。
下面说一说思绪:速度我是用了两个pid(左轮一个pid右轮一个pid,由于我这个左右轮有点误差),
差速我用了两个pid,先用差速pid得到一个轮的速度,再把这个轮的速度和另一个轮的速度误差pid,就是让这个轮追上那个轮,然后把两个轮的速度分别进行pid,就是相当于一个串级pid。
上一下代码
- void chasu_zhidao(float you_speed,float zuo_speed)//直道差速PID,让两个电机速度相等
- {
- //清零
- speed_you=0;
- speed_zuo=0;
- float xunxian_cha_T=0;
- float cha_puchang_T=0;
- //让电机跑起来,前边是左轮右轮,后边是速度
- PID.INC_pid(&rmor_spd,you_speed);
- PID.INC_pid(&lmor_spd,zuo_speed);
- //得到两个轮的实际转速
- speed_you=rmor_spd.act;
- speed_zuo=lmor_spd.act;
- temp=(float)(centerline[70]);
- xunxian_cha=94-temp;//括号内的数代表中线的y坐标,根据摄像头高度进行调整100 40
- xunxian_cha=kp1*xunxian_cha+ki1*xunxian_cha+kd1*(xunxian_cha-xunxian_cha);//误差的PID运算公式
- lastxunxian_cha=xunxian_cha;//上一次的误差
- if(xunxian_cha>0)
- {
- speed_you+=xunxian_cha;//右轮加速
- }
- if(xunxian_cha<0)
- {
- xunxian_cha_T=-(xunxian_cha);
- speed_zuo+=xunxian_cha_T;//右轮
- }
- //差速PID补偿右轮速度
- cha_puchang=speed_zuo-speed_you;
- cha_puchang=kp2*cha_puchang+ki2*cha_puchang+kd2*(cha_puchang-last_cha_puchang);//误差的PID运算公式
- last_cha_puchang=cha_puchang;//上一次的误差
- if(cha_puchang>0)//左轮比右轮快
- {
- speed_you+=cha_puchang;
- }
- if(cha_puchang<0)//右轮比左轮块
- {
- cha_puchang_T=-(cha_puchang);
- speed_zuo+=cha_puchang_T;
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |