智能车入门——元素识别与循迹
这篇文章介绍如何让车真正跑起来。即按照规定路径循迹。
为了让小车能够在赛道上行驶,至少会使用左、右两个电感,
通过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; //清除中断标志信息采集;(编码器,陀螺仪,电感值)信息加工;(元素/状态判断)信息处理;(电机舵机控制等)
}
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689539413a264452.html
评论列表(0条)