这篇文章介绍如何让车真正跑起来。即按照规定路径循迹。

为了让小车能够在赛道上行驶,至少会使用左、右两个电感,

通过ADC采集经过运放处理的感应电动势值来计算偏差,

方法是将差比和计算出来的偏差以一定的比例关联到舵机的pwm占空比来控制舵机打角,进而控制小车进行转向


电磁循迹原理

先简单讲一下电磁循迹的原理。

电磁场地是赛道中央铺设电磁线,电磁线的两头接信号发生器。

信号发生器就是产生50HZ的正弦信号,

“电生磁”,电磁线通有正弦变化的电流,会在周围产生正弦的磁场,

“磁生电”,工字电感就是由N圈线圈构成,变化的磁场+运动切割磁感线,会产生感应电流,

经过运放和AD转换得到我们的电磁信号值。

电感距离磁场越近,产生的感应电动势越大,距离越远,产生的感应电动势越小。

电感的布局,影响着 运动切割磁感线产生的电流,对循迹与元素识别起着重大影响

直观地来说,将车静置在赛道中央,同一水平高度上,与电磁线方向垂直放置的电感,获取的值大。

把车放到赛道上,各种姿势各种方向都摆一遍,就能很清楚知道电感方向和铜线方向的关系。

 恩智浦智能车四轮组-- 1.电磁检测方案、运放选型_Doee hc的博客-CSDN博客

 

差比和算法

智能车电感差比和差加权算法研究_卓晴的博客-CSDN博客_差比和算法

差比和是 电磁组循迹比较基础的算法,

电磁组比较简单,经过这么多年的发展,应该还有其他的加权算法,就需要你们探索和借鉴。

简单巡线

1.采集电感值

通过adc采集函数,获取到电感值。

在进入新的场地的时候,需要调节运放,使电感值在一定的范围。

放大倍数太低,不利于元素识别,

放大倍数太高,会在车贴近地面/环岛时,电感值爆满,不能正常循迹

2.归一化与滤波
就是用第一步采集的最大值max(左右对称的电感用同一个),用adc采集的值value。进行 value/max*100,将值变到0~100的区间内。这样做的好处是,1、可以方便自己对数据的感知,在普通元素和特殊元素间;2、在赛道更换后,测新的赛道的最大值,改变max的值即可,有较强的适应性。3、方便数据处理。

3.加权算法
利用算法处理得到的电感值,得到偏差值

4.由偏差值和其他信息,

控制电机转速与舵机打角。

【智能车学习】电磁循迹中的基本控制算法_Carry qinginger的博客-CSDN博客_电磁循迹


元素识别

元素识别就是对磁场叠加的理解,和电感排布的选择,

比如,环岛,有几个特征:

1.中间是四根线的汇合,这一点电感值比直道大。

2.抽象地与普通直道相比,在赛道地一侧加了弯曲地铜线。

3.环岛中就是正常的弯道。

三岔:1.入口处,两根线分开了,每个三岔路都只有一根线,入口处电感值减少。

2.出口处,一根线变为两根线,电感值变大。

十字:

1.水平电感的值基本不受影响

2.垂直电感可以判到与前进方向交叉铜线

3.  根据磁场的叠加,如果把十字看成坐标轴,分成四块看成四个象限,那么四个象限磁场的叠加是不同的,45°电感可以测出这种区别

只是简单说一下,元素这一块有着自己的理解,调车的时候也方便,

具体的元素判断可以参考网上一些好的教程,智能车电磁组——环岛处理_彭小宴的博客-CSDN博客_智能车电磁环岛处理方法

这个需要多上网查阅相关资料。

代码结构

#include "headfile.h"
 
 
void main()
{
	DisableGlobalIRQ();		
  sys_clk = 30000000;     
	board_init();			//初始化寄存器
	初始化函数;
	EnableGlobalIRQ();		
	while(1)
	{
 
杂项
	}
}
void TM4_Isr() interrupt 20
{
	TIM4_CLEAR_FLAG; //清除中断标志
	信息采集;(编码器,陀螺仪,电感值)
    信息加工;(元素/状态判断)
    信息处理;(电机舵机控制等)
}