ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

智能车单车定向组电磁门引导与决策算法实战解析

智能车单车定向组电磁门引导与决策算法实战解析 1. 单车定向组到底在比什么第一次看到“单车定向组”这个赛项名称的时候我脑子里冒出来的画面是共享单车加导航寻宝。真正拿到规则文档、跑完一届比赛之后才明白这个组别是智能车竞赛里少有的把“感知”和“决策”放在同等权重的赛项。它不像传统竞速组那样只追求单圈最快也不像某些创意组那样偏重展示效果而是要求车模在一条带有若干电磁门的目标赛道上自主判断门的位置、选择穿越顺序、完成定向任务。说白了单车定向组考的是三件事车能不能稳定跑起来、能不能准确找到门、能不能在找到门之后做出正确的路径决策。这三件事里任何一件掉链子成绩都会很难看。我见过太多队伍在直线段跑得飞快一进电磁门区域就开始画龙要么冲过头要么在门前反复犹豫最后超时。这个赛项适合什么样的队伍我的观察是它特别适合那些已经有一定车模调试基础、但不想在纯竞速组里卷极限速度的队伍。因为定向组的核心难点不在机械调校的极限而在于传感器融合和决策逻辑的设计。换句话说你可以在一个相对宽松的速度窗口里用更好的算法和更稳的策略拿到不错的成绩。从第二十届到第二十一届规则上有一个明显的变化趋势电磁门的引导方式从早期的单一信号源逐步演化为多源融合判断。这个变化直接拉高了软件层面的门槛但也让比赛更有意思。你不能再靠一个简单的阈值判断就蒙混过关必须认真考虑信号的稳定性、方向性和抗干扰能力。2. 电磁门引导方式的核心原理拆解2.1 电磁门信号的基本特征电磁门本质上是一个在特定频率上辐射电磁信号的装置。车模上安装的接收线圈或者接收模块通过检测信号强度来判断自己与门之间的相对位置。这个原理听起来简单但实际信号的特征远比想象中复杂。信号强度随距离衰减这是最基本的物理规律。但在实际赛道上你会遇到几个麻烦第一信号在门附近并不是均匀衰减的门的结构、周围金属物体、甚至地面的材质都会影响场强分布第二多个门同时工作时信号会叠加车模接收到的是一锅粥第三车模自身的电机、舵机、主控板都会产生电磁噪声这些噪声会直接干扰接收模块。我在调试的时候做过一个简单的实验把车模放在距离门不同位置的地方记录接收模块的输出值。结果发现在距离门大约三十厘米到一米这个区间里信号强度的变化并不是线性的而是有一个明显的“平台区”。在这个平台区里信号强度几乎不变这就意味着单纯靠强度判断距离在这个区间里会非常不准。2.2 无线定向与信号方向判断“无线定向”这个词在规则里出现的时候很多人的第一反应是是不是要测相位差是不是要用天线阵列其实在智能车竞赛的语境下无线定向更多是指通过信号的空间分布特征来判断门相对于车模的方向。常见的做法有两种。一种是使用多个接收线圈分别朝向不同的方向通过比较各个线圈接收到的信号强度差异推算信号源的方向。另一种是使用单个接收模块但让车模在运动过程中采集多个位置的信号强度通过算法反推信号源的大致方位。第一种方法响应快但对线圈的安装精度要求很高。我试过用三个线圈呈一百二十度分布结果发现线圈之间的互感效应会严重影响测量结果后来不得不加屏蔽和校准。第二种方法硬件简单但需要车模保持一定的运动状态才能有效判断方向在静止或者低速时效果很差。注意无论用哪种方法接收模块的增益设置都非常关键。增益太高近门时信号饱和无法分辨方向增益太低远门时信号淹没在噪声里。我的经验是把增益调到在距离门两米时输出刚好达到满量程的百分之六十左右这样既有足够的动态范围又不会在近门时过早饱和。2.3 电磁门引导方式的演进逻辑从规则的变化来看电磁门引导方式的设计意图很明显逼着队伍做多传感器融合。早期的规则里门就是一个简单的信号源车模只要朝着信号最强的方向走就行。但后来加入了多个门、加入了门的顺序要求、加入了干扰源单纯靠信号强度就完全不够用了。这个演进逻辑其实和实际工程中的导航问题是一致的。在真实场景里你很少能只靠一种传感器就完成定位和导航。电磁信号提供的是相对距离和粗略方向但它的精度和稳定性都不够。你需要结合车模的里程计、陀螺仪、甚至视觉信息才能做出可靠的决策。我在第二十一届的赛道上就看到过这样的情况两个门距离很近信号严重重叠。如果只看信号强度车模会直接冲向两个门中间的位置结果哪个门都没穿过去。但如果你有陀螺仪记录车模的转向角度结合里程计推算位置就能判断出应该先靠近哪一个门。3. 车模硬件选型与传感器布局3.1 主控与接收模块的搭配主控板的选择上我的建议是优先考虑运算能力和接口丰富度。定向组的算法复杂度比纯竞速组高不少你需要跑滤波、做融合、甚至跑一些简单的状态机。如果主控的算力不够要么算法被迫简化要么控制周期拉长两种情况都会直接影响成绩。接收模块方面市面上常见的方案有分立元件搭建的线圈接收和集成模块接收。分立元件的好处是你可以自己调谐振频率和增益灵活度高但调试工作量大。集成模块省事但往往增益和滤波特性是固定的遇到复杂的信号环境可能不够用。我个人的选择是主控用一款主频在两百兆以上的单片机接收模块用集成芯片加自己设计的外围电路。这样既保证了开发效率又保留了调整空间。接收模块的输出经过一个可调增益的放大器再进入主控的ADC。放大器的增益通过数字电位器控制可以在比赛过程中根据信号情况动态调整。3.2 线圈安装位置与方向性优化线圈的安装位置直接影响方向判断的灵敏度。我试过几种布局车头正前方一个、车头两侧各一个、车顶一个。实测下来车头两侧各一个的方案在方向判断上最稳定因为两个线圈的基线长度足够信号强度差异明显。但这里有一个坑线圈之间的互感。如果两个线圈距离太近一个线圈的电流会在另一个线圈里感应出电压导致测量结果失真。我的解决办法是让两个线圈的轴线尽量垂直并且在物理上保持至少五厘米的间距。如果空间实在不够可以在线圈之间加一片薄铜皮做屏蔽但铜皮要接地否则反而会引入新的干扰。线圈的朝向也很讲究。如果线圈的轴线平行于地面它对水平方向的信号源更敏感如果轴线垂直于地面它对正上方的信号源更敏感。在定向组里门的高度通常和车模差不多所以线圈轴线平行于地面是比较合理的选择。3.3 电源与信号链的噪声控制电磁接收最怕的就是噪声。车模上的电机、舵机、甚至主控板本身的数字电路都会产生宽频噪声。这些噪声一旦耦合到接收链路里轻则降低信噪比重则让接收模块完全失效。我在电源上做了三层处理第一层是电池到主控的电源线加磁环抑制高频共模噪声第二层是接收模块单独用一颗低压差线性稳压器供电和电机电源完全分开第三层是在接收模块的电源引脚旁边放一颗小容量的陶瓷电容和一颗大容量的电解电容分别滤高频和低频噪声。信号链上的处理同样重要。接收模块到主控的连线尽量短并且用屏蔽线。如果必须走长线中间要加缓冲放大器。ADC的参考电压也要干净最好用单独的基准源不要直接用电电源分压。提示很多队伍在调试的时候发现接收信号跳动很大第一反应是算法问题其实十有八九是电源或者信号链的噪声问题。先把硬件噪声压下去再调算法事半功倍。4. 定向决策算法的设计与实现4.1 信号滤波与特征提取原始的信号强度数据是不能直接用的必须经过滤波。最简单的做法是滑动平均但滑动平均会引入相位滞后在车模快速运动时会导致判断延迟。我的做法是先用一个截止频率较低的低通滤波器做粗滤再用一个滑动平均做平滑两者结合既抑制了高频噪声又不会引入太大的滞后。特征提取方面我主要关注三个量信号强度的绝对值、信号强度的变化率、以及多个线圈之间的强度差。绝对值用来判断远近变化率用来判断是在靠近还是远离强度差用来判断方向。这三个量组合起来就能对车模相对于门的状态做一个初步估计。这里有一个经验性的阈值设定方法在赛道上实际跑几圈记录下每次成功穿门时的信号特征值然后取这些值的统计分布把阈值设在分布的中间偏保守的位置。不要拍脑袋定阈值一定要用实测数据来定。4.2 状态机与路径决策逻辑定向组的决策逻辑用状态机来实现是最自然的。我把车模的状态分为几个搜索态、接近态、穿越态、确认态。搜索态下车模低速前进同时扫描各个方向的信号强度寻找可能的门。一旦某个方向的信号强度超过阈值并且持续一段时间就进入接近态。接近态下车模调整朝向对准信号源同时加速。当信号强度达到一个更高的阈值并且变化率由正转负或者接近零时进入穿越态。穿越态下车模保持直行快速通过门。通过之后信号强度会急剧下降这时候进入确认态检查是否真的穿过了门还是只是路过。这个状态机的难点在于状态之间的切换条件。切换太早车模还没对准就冲出去容易错过门切换太晚车模在门前犹豫浪费时间。我的调参方法是先在低速下把切换条件调稳然后逐步提高速度每次提速后重新微调切换条件。不要指望一套参数通吃所有速度。4.3 多门顺序判断与冲突消解当赛道上有多个门的时候问题就变成了先穿哪个门规则通常会给出门的顺序要求但车模并不知道自己当前的位置和门的编号。这时候就需要用一些策略来消解冲突。我用的方法比较简单给每个门分配一个优先级优先级的依据是信号强度和方向。信号强且方向明确的门优先。如果两个门的信号强度差不多就比较方向选择转向角度更小的那个。如果还是分不出来就随机选一个但在穿越之后记录这个门的方向特征避免重复选择同一个门。这个方法不是最优的但在实际比赛中足够用。更复杂的做法可以用概率模型或者贝叶斯估计但那些方法的计算量大调试周期长对于大多数队伍来说性价比不高。5. 实操调试流程与关键参数整定5.1 从静态测试到动态跑圈调试的第一步永远是静态测试。把车模放在赛道上手动移动车模到不同的位置记录接收模块的输出。这一步的目的是建立信号强度和距离的对应关系同时检查接收链路有没有明显的噪声或者死区。静态测试通过之后进入低速动态测试。让车模以很低的速度跑比如每秒零点三米观察状态机的切换是否合理。这个阶段不要追求速度重点是看逻辑对不对。我通常会在这个阶段跑上几十圈把各种异常情况都触发一遍比如信号丢失、误触发、状态卡死等等。低速跑稳之后逐步提速。每次提速百分之二十左右跑几圈观察。如果出现新的问题就退回到上一个速度把问题解决之后再提速。这个过程很枯燥但这是最稳妥的路径。我见过太多队伍直接上高速结果车模在赛道上乱窜连问题出在哪里都找不到。5.2 接收增益与阈值的联动调整接收增益和判断阈值是耦合的。增益调高信号整体变大阈值也要相应调高增益调低阈值也要调低。很多队伍在调增益的时候忘了调阈值结果要么灵敏度不够要么误触发频繁。我的做法是先固定增益调阈值找到一组能稳定工作的参数。然后改变增益观察阈值需要怎么变。记录几组数据之后就能找到一个增益和阈值的对应关系。比赛现场如果信号环境有变化可以根据这个关系快速调整。这里有一个细节增益的调整范围不要太大。如果增益需要调很多才能适应环境说明接收链路的设计本身有问题应该从硬件上找原因而不是靠软件补偿。5.3 现场适应与快速校准比赛现场的环境和调试场地往往不一样。灯光、地面材质、周围的其他车模都会影响电磁信号的传播。所以现场适应是必须的。我的现场校准流程是这样的首先在赛道上选几个有代表性的位置比如门的正前方、两个门之间、赛道边缘测量信号强度。然后根据测量结果调整增益和阈值。最后跑几圈低速测试确认状态机工作正常。这个过程通常需要十五到二十分钟。如果时间紧张可以只做最关键的调整把增益调到信号最强的位置不饱和、最弱的位置能检测到。阈值就沿用调试场地的值稍微放宽一点。注意现场校准的时候一定要把其他队伍的车模也考虑进去。如果旁边有队伍在跑他们的电机噪声可能会干扰你的接收。我的做法是在测量的时候让队友在旁边跑一圈看看信号有没有明显变化。如果有就要把阈值调得更保守一些。6. 常见问题与排查技巧实录6.1 信号跳动大、判断不稳定这是最常见的问题。表现是接收模块的输出值在短时间内大幅波动导致状态机频繁误切换。排查思路先看电源。用示波器看接收模块的电源引脚如果有明显的纹波或者尖峰就是电源噪声。解决办法是加滤波电容或者换用线性稳压器。再看信号线。如果信号线没有屏蔽或者走线太长容易耦合噪声。解决办法是换屏蔽线或者加缓冲。最后看算法。如果硬件没问题那就是滤波不够。增加滤波的阶数或者降低截止频率但要注意滞后。6.2 近门时信号饱和、方向判断失效信号饱和是因为接收模块的增益太高或者放大器的输出摆幅不够。表现是车模靠近门的时候接收输出达到最大值不再变化无法判断方向。解决办法降低增益或者使用自动增益控制。自动增益控制的实现方式是在接收链路里加一个可变增益放大器根据输出信号的幅度反馈调整增益。这个方案硬件复杂一些但效果很好。如果不想改硬件可以在软件里做分段处理当信号强度超过某个值时切换到低增益通道或者用变化率代替绝对值来判断方向。6.3 多门信号重叠、无法区分两个门距离很近的时候信号会重叠车模接收到的信号是两个门的叠加。表现是车模在两个门之间来回摆动无法决定穿哪个。解决办法利用方向信息。即使信号强度无法区分方向信息往往还是有差异的。如果两个门在不同的方向车模可以通过比较不同线圈的强度差来判断哪个门更近。如果两个门在同一个方向那就需要利用历史信息记录车模的运动轨迹推算哪个门更可能是目标。6.4 状态机卡死或者循环切换状态机卡死通常是因为切换条件设计得不合理。比如从接近态切换到穿越态的条件是信号强度超过阈值但从穿越态切换到确认态的条件是信号强度低于阈值。如果车模在阈值附近徘徊就会在两个状态之间反复切换。解决办法引入滞回。也就是说进入某个状态的条件和退出某个状态的条件不一样。比如进入穿越态的阈值是A退出穿越态的阈值是A的百分之八十。这样就有一定的容错空间不会在阈值附近抖动。6.5 常见问题速查表问题现象可能原因排查方法解决措施信号跳动大电源噪声、信号线耦合示波器看电源和信号加滤波、换屏蔽线近门饱和增益过高测量近门输出降增益或加AGC多门重叠信号叠加比较不同线圈强度利用方向信息区分状态机卡死切换条件不合理记录状态切换日志引入滞回误触发频繁阈值过低统计误触发时的信号值提高阈值响应滞后滤波过重测量滤波延迟降低滤波阶数7. 从直线竞速到电磁门穿越的思维转变很多从竞速组转过来的队伍最大的不适应在于思维模式。竞速组的逻辑是找到最快路径然后拼命加速。定向组的逻辑是先保证判断正确再考虑速度。这个顺序不能反。我在调试初期就犯过这个错误。当时觉得车模跑得挺稳就把速度提上去了结果一到电磁门区域就各种问题。后来把速度降下来重新调判断逻辑发现很多之前以为是速度引起的问题其实是判断逻辑本身就不够鲁棒。另一个思维转变是关于“最优”的理解。竞速组里最优路径通常是几何上最短的路径。定向组里最优路径是判断最可靠的路径。有时候绕一点路反而更稳因为绕路的过程中信号特征更明显判断更容易。我见过一些队伍为了抄近道结果在信号模糊的区域浪费了更多时间。还有一个容易被忽视的点定向组的比赛往往不是一圈定胜负而是多圈累计。这意味着稳定性比单圈速度更重要。一圈跑得再快如果下一圈在某个门那里卡住了总成绩就废了。所以我的策略是把每一圈都跑成一样的不追求某一段的爆发追求全程的稳定。8. 关于训练与备赛的一些个人体会备赛阶段我建议把时间分成三块硬件调试、算法开发、实战演练。硬件调试占百分之三十算法开发占百分之四十实战演练占百分之三十。很多队伍把大部分时间花在硬件上结果算法没时间调实战演练更是草草了事。实战演练的重要性怎么强调都不为过。我见过算法在实验室里跑得好好的一到比赛场地就各种问题。原因很简单实验室的环境太干净了没有其他队伍的干扰没有现场灯光的干扰没有地面材质的变化。只有通过大量的实战演练才能把这些因素都暴露出来。另外我强烈建议记录调试日志。每次跑圈记录下参数、环境、结果。这样当出现问题的时候可以回溯对比快速定位。我自己的日志里记录了上百次跑圈的数据后来发现很多问题的规律就藏在这些数据里。最后说一个细节车模的机械状态会随着跑圈次数增加而变化。螺丝会松、轮胎会磨损、电池电压会下降。这些变化都会影响电磁接收的性能。所以每次跑圈之前都要检查车模的机械状态特别是线圈的安装位置有没有偏移。我吃过这个亏有一次跑了几十圈之后发现一个线圈的固定螺丝松了导致方向判断一直偏查了半天才发现是机械问题。这个赛项的魅力就在于它不是一个纯拼硬件的比赛也不是一个纯拼算法的比赛而是考验你把硬件、算法、策略、现场适应能力整合在一起的能力。每一次调试每一次跑圈都是在和不确定性打交道。能把不确定性控制住成绩就不会差。
返回列表