ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

从0开始的智能车代码(6)

2020-08-03 10:04:03  阅读:31  来源: 互联网

标签:AD4 AD1 开始 代码 电感 智能 ringCount ringFlag &&


桶形失真是由镜头引起的成像画面呈桶形膨胀状的失真现象。会将一些明显的跳变点误判成普通的弧线。

摄像头的舵机控制与环岛处理可以处理绝大多数的赛道状况,美中不足的是摄像头对于小圆环的处理不太理想,特别是弯道后的小圆环,会因严重的桶形失真影响判断。另外,相比于摄像头判断,电磁判断是一种更为简单且稳妥的方案。

电磁杆上有4个电感,分别是左侧水平电感、左侧斜45°电感、右侧斜45°电感、右侧水平电感。

处理普通路段时,使用简单的差比和算法。斜45°电感的作用是判断环岛的方向。根据法拉第电磁感应定律垂直于环岛电磁线的电感的电压值会明显大于平行于环岛电磁线的电感的电压值。在入环和过环时,通过增大相应方向电感的电压值的比例控制小车走向正确的方向。

void ADProcess(void){
  uint16 AD1,AD2,AD3,AD4;
  
  AD1=adc_mean_filter(ADC_1,ADC1_CH3_B14,10);
  AD2=adc_mean_filter(ADC_1,ADC1_CH4_B15,10);
  AD3=adc_mean_filter(ADC_1,ADC1_CH10_B21,10);
  AD4=adc_mean_filter(ADC_1,ADC1_CH12_B23,10);
  
  lcd_showuint16(0,4,AD1);
  lcd_showuint16(0,5,AD2);
  lcd_showuint16(0,6,AD3);
  lcd_showuint16(0,7,AD4);
  
  if(AD1<40&&AD4<40){//出界停车
    pit_close(PIT_CH0);
    pit_close(PIT_CH1);
    pwm_duty(PWM1_MODULE3_CHA_D0,0);
    pwm_duty(PWM1_MODULE3_CHB_D1,0);
  }
  
  /*====环岛处理在这里开始====*/
  //AD1-4从右至左
  
  static uint8 ringFlag=0;
  static uint8 ringSide=0;
  static uint32 ringCount=0;
  
  lcd_showuint8(0,2,ringFlag);
  
  if(ringFlag==0){
    if((AD1+AD4>6000)&&(AD1-AD4<1500)&&(AD4-AD1<1500)&&(AD1>2000)&&(AD4>2000)){
      ringFlag=1;
    }
  }
  else if(ringFlag==1){//已遇到环岛未开始入环
    if(ringSide==0){//已遇到环岛未判断方向
      ringSide=AD2>AD3?1:2;//1:右环,2:左环
    }
    else if((ringSide==1)&&(AD2<AD3)){
        ringFlag=11;//开始入右环
    }
    else if((ringSide==2)&&(AD2>AD3)){
        ringFlag=12;//开始入左环
    }
  }
  else if(ringFlag==11){
    ringCount++;
    if(ringCount<80){
      offset=-(int16)(80*((float)(4*AD2-AD3))/((float)(4*AD2+AD3)));
      return;
    }
    else if(ringCount>80){
      if((AD1+AD4>6000)&&(AD1-AD4<1500)&&(AD4-AD1<1500)&&(AD1>2000)&&(AD4>2000)){
        ringFlag=21;//开始出左环
        ringCount=0;
      }
    }
  }
  else if(ringFlag==12){
    ringCount++;
    if(ringCount<80){
      offset=-(int16)(80*((float)(AD2-4*AD3))/((float)(AD2+4*AD3)));
      return;
    }
    else if(ringCount>80){
      if((AD1+AD4>6000)&&(AD1-AD4<1500)&&(AD4-AD1<1500)&&(AD1>2000)&&(AD4>2000)){
        ringFlag=22;//开始出右环
        ringCount=0;
      }
    }
  }
  else if(ringFlag==21){
    ringCount++;
    if(ringCount<80){
      offset=-(int16)(80*((float)(AD2-4*AD3))/((float)(AD2+4*AD3)));
      return;
    }
    else if(ringCount>80){
      ringFlag=0;
      ringSide=0;
      ringCount=0;
    }
  }
  else if(ringFlag==22){
    ringCount++;
    if(ringCount<80){
      offset=-(int16)(80*((float)(4*AD2-AD3))/((float)(4*AD2+AD3)));
      return;
    }
    else if(ringCount>80){
      ringFlag=0;
      ringSide=0;
      ringCount=0;
    }
  }
  /*====环岛处理在这里结束====*/
  
  offset=-(int16)(80*((float)(AD1-AD4))/((float)(AD1+AD4)));
}

 

标签:AD4,AD1,开始,代码,电感,智能,ringCount,ringFlag,&&
来源: https://www.cnblogs.com/stephen0829/p/13424672.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有