智能车——三轮差速

-chu_kuang- 2024-10-21 14:01:01 阅读 55

摄像头车三轮

在之前摄像头组都是用的4轮的车,我之前也是用四轮车练手的,后来比赛规则出来了,变成要用三轮车了,三轮的前轮就是个摆设,任何移动转弯都要靠后边的两个轮,所以差速就尤为重要了,之前在学校写了2套三轮的差速,但是一直没时间上赛道,(后来放假回家买了一套赛道,结果赛道刚来就得新冠了,兜兜转转昨天才铺好赛道,元旦第一次上道,从上午10点一直搞到晚上11点,代码修修改改,删删减减,最后能跑直道和弯道。S弯道按照理论来说也是可以跑得,但是因为一共用了4个pid,以及驱动没有最终确认,所以嘛就没有太精细的调参数,大概调一调,能用就行了,不然的话,换了驱动还要重新调12个参数调起来还是很累的。

下面说一说思路:速度我是用了两个pid(左轮一个pid右轮一个pid,因为我这个左右轮有点误差),

差速我用了两个pid,先用差速pid得到一个轮的速度,再把这个轮的速度和另一个轮的速度误差pid,就是让这个轮追上那个轮,然后把两个轮的速度分别进行pid,就是相当于一个串级pid。

上一下代码

<code>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;

}

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。