智能车心得分享(四)-- 电磁循迹

这一次,我们开始正式进入了,车辆的控制

大致可以分成一下部分: 循迹,需要电磁传感器,或者摄像头。这两个应该是智能车最有可能使用的传感器了,其他的就算是另辟蹊径了。然后我主要使用的是电磁。

这是我最终的电磁排列方案,在华南赛中使用的,但是在校赛的是另一套,华南赛的代码会开源部分,校赛代码完全开源(虽然写的不好看,但是入门还是蛮简单的)。所以可能会和这个图有冲突。

但是现在讲的是思想,没有太大问题,只有元素判断上有些影响。在这篇文中讲解只用上了Hor_L和Hor_R的两个电感(即两个横电感,下简称“L、R”)

使用电磁的步骤 :

  1. 通过电位器调节电感值 通过adc采集的函数uint16 adc_mean_filter(ADCN_enum adc, ADCCH_enum ch, uint8 count);我们确定了用哪个通道,和采集次数,采样率一般是固定的,也可以自己改,我的电感采集是12位,也就是0~4096,但是在实际赛道上采样的值不会超过3600,一定要注意不要将原始的值调到满幅值。这里推荐的方法是:第一步,将车放到环岛四条线交叉(或者环岛两条(因为今年是铺了两圈)),调节电磁(与四条线垂直的地方)在此时稍微调小电位器,电磁值会有减小,调大值几乎不变(即几乎为最大值),左右横电感都是这样,粗调结束(记录此时的最大值);第二步,将电感放在直赛道上,将电感和电磁线垂直放置,此时最大值为之前最大值的90%以下,要是不到的话就调小,然后把车放在赛道上,保证在赛道最中间(此时电磁线是在两横电感连线中线上),将一侧作为基准,调节另一侧使值相差在(最大值-0)的千分之一内(这样是最好的,但是和你的精度有关,我最大是3600左右,两边值的原始差在5左右)。这样横电感的调节结束;向外的v形电感,在环岛处的较易获得的值是其他元素最大时都无法达到的值即可(就是你在环岛那从预环岛开始稍微转车,或者接近环岛时车即使有些偏移也可以得到的值,但是其他元素这么转都很难得到的值)。内v形电感和水平电感处理类似。具体原因的话,我在元素判断中解释。
  2. 归一化 就是用第一步采集的最大值(左右对称的电感用同一个),用adc采集的值ADC_value。进行 ADC_value/max*100,将值变道0~100的区间内。这样做的好处是,1、可以方便自己对数据的感知,在普通元素和特殊元素间;2、在赛道更换后,测新的赛道的最大值,改变max的值即可,有较强的适应性。3、方便数据处理。

以下是我的小车模型,当然很不精确,可以参考下两轮模型的资料来优化

/*
@par velocity 为期望速度 turn期望转向速度
*/
void Kinematic_Analysis(float velocity,float turn)
{
          
   
    float  x=-exp_turn_KP;
    float temp_velocity;
    temp_velocity=x*GFP_abs(err*100)+velocity;//减速处理
    Target_A=(temp_velocity-turn);//(左侧期望速度)
    Target_B=(temp_velocity+turn);//(右期望速度)
}

这样就可以完成循迹了

参考:

经验分享 程序员 微信小程序 职场和发展