河曲智叟 发表于 2025-3-18 20:21:43

智能车——三轮差速

摄像头车三轮
    在之前摄像头组都是用的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);
    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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 智能车——三轮差速