十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(六)避障

本文介绍了在十三届智能汽车竞赛中,针对信标灯避障问题的解决方案。团队采用E18-D80NK红外光电管进行障碍检测,通过三个不同朝向的光电管结合车辆与信标灯的距离进行避障决策。在实际应用中,由于信标灯红外光的影响,调整了避障策略,将光电管信号与距离结合,动态调整舵机打角以实现更精准的避障。同时,文章还展示了如何将避障决策与正常寻灯路径相结合,确保小车在寻灯过程中的安全性。
摘要由CSDN通过智能技术生成

系列链接:

  1. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(一)模块初始化
  2. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(二)图像处理
  3. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(三)寻灯策略Part.①
  4. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(四)寻灯策略Part.②
  5. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(五)分段控速
  6. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(六)避障

正文开始:
调车过程中,同学们一定会发现一个问题,就是有时候小车与点亮的信标灯之间隔着一个或多个未点亮的信标灯,小车前往灭灯的途中势必会撞到这些未点亮的信标灯,影响成绩不说,如果车速比较快会撞毁信标灯,甚至撞毁小车,这一问题不得不处理。

我们的方案是在车头处并排安装三个不同朝向的E18-D80NK红外光电管,E18-D80NK红外光电管会发射红外光并检测红外光碰到物体而反射回来的时间,以时间长短来判断物体距离。E18-D80NK待机时返回信号为高电平,在检测到一定距离内存在物体的时候返回低电平,这个检测物体距离可以由E18-D80NK红外光电管管体上的机械旋钮调节。位于正中央的光电管朝向车头正前方,左右两个光电管则向两外侧稍微偏转。以此来达到检测障碍物的目的。

有了这三个返回信号就可以通过条件逻辑判断来实现小车拐弯避障了。然而预想与现实有差距,实际使用的时候,我们发现这款红外光电管的检测效果会受到信标灯发出的红外光影响,距离信标灯越近影响就越大。

  • 为了解决这个问题,我们把小车-亮起信标灯之间的距离(也就是画面中信标灯的纵坐标)也作为判断条件之一,将红外光电管的返回信号跟距离进行挂钩,共同决策小车是否避障。
void zhangai_PWM(char DENGWEI)             /避障打角//
{
  if((PTE6_INT==1)||(y_MID>=32))    ///中无///
    {
      zhongPWM=0;
    }
  else zhongPWM=DENGWEI*100;        ///中有
    
  if((PTE8_INT==1)||(y_MID>=32))   ///左无///
    {
      youPWM=0;
      zuozhangai=0;
    }
  else                              ///左有
    {
      zuozhangai=1;
      if(zhongPWM!=0) 
      {
        youPWM=170-zhongPWM;
        zuozhong=1;
      }
      else  
      {
        youPWM=40;
        zuozhong=0;
      }
    }

  if((PTE7_INT==1)||(y_MID>=32))    ///右无///
    {
      zuoPWM=0;
    }
  else                              ///右有
    {
      if(zhongPWM!=0) zuoPWM=-170-zhongPWM;
      else zuoPWM=-40;
      if(zuozhong==1) zuoPWM=DENGWEI*500;
    }
}
  • 进行避障决策之后,并没有直接让小车打固定角度实现避障。我们一定程度上综合考虑了当前亮起信标灯的位置和障碍位置得出最终小车避障时的舵机打角。具体来讲就是:通过三个光电管信号条件判断之后得到一个固定的舵机打角,将此打角与小车正常寻灯计算出的打角相加,结果就是最终小车避障时的舵机打角。
void duoji_PWM()
{  
  if(x_MID>0)   //看见有灯
    {
      jieshouwu=0;
      SHANSHUO=0;
      PWM_P=y_MID/4-4;
      suduyiY=27.385-Speed_test*6/65;
      suduyiX=6.615-Speed_test*6.5/65;
      if((x_MID<40)&&(panK==0))
      {
        panK=1;
        k=1;
      }
      else if((x_MID>=40)&&(panK==0))
      {
        panK=1;
        k=-1;
      }

      if(y_MID<38) NewPWMValue=(int)((x_MID-40)*2);
      else if(y_MID<57) NewPWMValue=(int)((x_MID-((-0.12)*pow((y_MID-suduyiY),2)*k + 1.814*(y_MID-suduyiY)*k + 40-suduyiX*k))*PWM_P);
      else NewPWMValue=k*99;
      
      if((NewPWMValue>0)&&(PTE12_INT==1)) NewPWMValue=-80;
      if((NewPWMValue<0)&&(PTE11_INT==1)) NewPWMValue=80;

      zhangai_PWM(k);
      nicePWM=NewPWMValue+youPWM+zuoPWM+zhongPWM;      //将红外条件判断的固定打角与小车正常寻灯计算出的打角相加,得出最终打角
    }
  else        //无灯//
    {
        SHANSHUO++;
        if(SHANSHUO>4) 
        {
          zhangai_PWM(k);
          panK=0;
          if(((PTE10_INT==0)||(PTE11_INT==0)||(PTE12_INT==0))&&(jieshouwu==0))      ///看不见但是红外有接收/
          {
            jieshouwu=1;
            if((PTE9_INT==0)||(PTE12_INT==0)) k=-1;
            if((PTE10_INT==0)||(PTE11_INT==0)) k=1;
          }
          if(SHANSHUO<7)  nicePWM=youPWM+zuoPWM+zhongPWM+k*99; //将红外条件判断的固定打角与小车正常寻灯计算出的打角相加,得出最终打角
          else            nicePWM=youPWM+zuoPWM+zhongPWM+(k*(Speed_test<<2));  //绕障碍 速度大打角大
        }
    }
  if(nicePWM>99) nicePWM=99;         //打角限幅
  else if(nicePWM<-99) nicePWM=-99;
}

这次的分享就是“十三届智能汽车竞赛 信标对抗组 思路参考 程序参考”系列的最后一篇了,这里面包含了我们队几个月的备赛时间摸爬滚打完成比赛的经验汗水,希望我的分享能给做智能车的各位同学提供一些思路。毫无疑问,我们的方案不是最好的,欢迎大家评论讨论补充。如果发现问题也请指出,我会虚心学习。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZM丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值