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. 关于训练与备赛的一些个人体会
备赛阶段,我建议把时间分成三块:硬件调试、算法开发、实战演练。硬件调试占百分之三十,算法开发占百分之四十,实战演练占百分之三十。很多队伍把大部分时间花在硬件上,结果算法没时间调,实战演练更是草草了事。
实战演练的重要性怎么强调都不为过。我见过算法在实验室里跑得好好的,一到比赛场地就各种问题。原因很简单:实验室的环境太干净了,没有其他队伍的干扰,没有现场灯光的干扰,没有地面材质的变化。只有通过大量的实战演练,才能把这些因素都暴露出来。
另外,我强烈建议记录调试日志。每次跑圈,记录下参数、环境、结果。这样当出现问题的时候,可以回溯对比,快速定位。我自己的日志里记录了上百次跑圈的数据,后来发现很多问题的规律就藏在这些数据里。
最后说一个细节:车模的机械状态会随着跑圈次数增加而变化。螺丝会松、轮胎会磨损、电池电压会下降。这些变化都会影响电磁接收的性能。所以每次跑圈之前,都要检查车模的机械状态,特别是线圈的安装位置有没有偏移。我吃过这个亏,有一次跑了几十圈之后,发现一个线圈的固定螺丝松了,导致方向判断一直偏,查了半天才发现是机械问题。
这个赛项的魅力就在于,它不是一个纯拼硬件的比赛,也不是一个纯拼算法的比赛,而是考验你把硬件、算法、策略、现场适应能力整合在一起的能力。每一次调试,每一次跑圈,都是在和不确定性打交道。能把不确定性控制住,成绩就不会差。