凌晨一点半实验室里只剩下示波器风扇的声音。我把工字电感贴近坡道顶端的引导线屏幕上的波形幅度瞬间掉了一半。那一瞬间我彻底明白飞檐走壁组的电磁引导线跟以前跑平面赛道的电磁方案完全是两回事。这篇想聊的是全国大学生智能车竞赛飞檐走壁组立体赛道上的电磁引导线设计与实现。很多队伍在看到飞檐走壁组的赛道元素时第一反应都是“这组得用摄像头吧”毕竟又是坡道又是立柱又是驼峰视觉方案听上去更直观。但电磁方案在这种立体赛道上反而有几个天然优势它测的是导线周围的近场磁感应强度不依赖光照不依赖赛道表面纹理甚至不依赖镜头视角。坡道、立柱这些立体元素虽然改变了导线的空间走向却没有改变“导线在哪、磁场就在哪”这个基本约束。只要你把导线布设和传感器排布想明白电磁车一样能飞檐走壁。这篇文章适合正在备赛的学生、带竞赛的指导老师以及任何对电磁循迹原理感兴趣的工程师。我会从导线怎么走、电感怎么放、信号怎么算、立体元素怎么过、坑怎么排这几个角度展开尽量把每一步的思路和实测经验都交代清楚。1. 飞檐走壁组为什么敢用电磁引导线1.1 立体赛道让摄像头心虚却让电磁方案安心先说实话摄像头在飞檐走壁组并不是不能做但立体赛道对视觉系统确实很不友好。坡道会让相机视野中赛道所占的比例发生剧烈变化曝光参数需要跟着坡面角度动态调整立柱绕行时赛道参照物会被本体挡住图像特征直接丢失驼峰顶部车体俯仰角变化画面里可能一半是天空一半是赛道纹理。这些都需要额外的算法去补偿开发周期一下子被拉得很长。电磁方案没有这些问题。电感线圈感应的是导线通交流电后产生的交变磁场属于近场测量。导线敷设在赛道上只要车还在赛道附近磁场信号就在那里。坡道和平面最大的区别只是导线从“水平直线”变成了“空间斜线”磁场的方向发生了旋转但“信号强度随距离衰减”的物理规律没有变。你完全不需要处理光照、阴影、纹理这些视觉得世界里最难缠的东西这本身就是一种巨大的工程优势。1.2 电磁引导线的物理基础电磁引导线的“源”就是一根导线通上20kHz左右的正弦交变电流周围就会产生同频率的交变磁场。工字电感线圈处在这个交变磁场中会感应出同频率的电动势。感应电动势的大小由磁场强度、线圈匝数、线圈有效截面积以及线圈轴线与磁场方向的夹角共同决定。离导线越近磁场越强感应信号越大近似与距离的1次方成反比。这个衰减关系是整个电磁循迹的根基。车上左右对称布置两个水平电感时车正对导线左右信号相同车偏左时左边电感离导线近、信号强右边信号弱。左右信号的差值就反映了车相对导线的横向位置误差。但直接用差值有一个问题信号绝对强度会随着赛道位置、电流波动、立体元素而剧烈变化。比如坡道上水平电感接收到的磁通变少左右信号整体变小如果只用差值同一个横向偏差在坡道上产生的控制量就变小了车的转向会“没劲”表现为坡面上画龙或冲出赛道。所以工程上都用差比和也就是(L-R)/(LR)把绝对强度归一化掉。这个归一化是电磁方案能适应立体赛道的核心原因。1.3 飞檐走壁组里电磁方案的友好面与不友好面飞檐走壁组的赛道元素对电磁方案来说各有各的脾气。我用一张表简要概括赛道元素对电磁方案的挑战可用的应对策略坡道导线变斜水平电感信号垂直分量变化加竖直电感辅助检测主控仍用水平差比和立柱导线绕柱成圆弧走向信号方向突变软件状态机识别入柱前切换恒转向逻辑驼峰车体姿态变化导致电感角度变化差比和虚假偏置降低速度、电感固定在底盘、必要时IMU姿态补偿电磁方案不是没有短板但它的短板大多能通过传感器布局和软件状态机来补。相比之下视觉方案的短板往往要砸更多硬件和算法成本才能填上。这也就是飞檐走壁组里电磁方案依然非常有竞争力的原因。2. 立体赛道电磁引导线的布设方案2.1 导线布设的基本要求很多队伍拿到赛道第一件事就是铺线但铺线这件事远没有想象中那么简单。电磁引导线一般使用多股铜线或漆包线线径0.5mm到1mm都可以关键是整条导线电阻尽量一致、接头尽量少。导线由信号发生器加功放驱动或者使用专门的电磁线驱动板输出交变电流通常在几百毫安到1安培之间。电流越大信噪比越高但不是越大越好过大的电流会让电感在近距离直接饱和ADC采样削顶后差比和反而失真。导线固定在赛道上一般用胶带或压条。每个转弯处都要保证导线的转弯半径不要过小尤其不要出现尖锐的直角。如果导线在一小段距离内突然掉头磁场的空间分布会在小范围里剧烈畸变电感读出来的“虚拟位置”与车的真实位置就会对不上控制算法再完美也救不了这种物理层面的问题。2.2 坡道上的导线走法坡道是飞檐走壁组里最基础的立体元素。第一次铺坡道线时很容易直接在坡道底部让导线折一个角度拐上坡面这种走法是大忌。导线从水平面过渡到斜面必须走一段圆弧让导线方向连续变化。只有这样磁场方向才会连续旋转电感信号才不会有断崖式突变车在坡底的转向才不至于突然失控。坡道面上的导线与水平面的夹角等于坡道倾角。这时候水平电感感应到的是磁场在竖直方向的分量竖直电感感应到的是水平分量。在坡底和坡顶的过渡圆弧区域两个分量的比例一直在变化传感器读出的位置会产生一定虚偏。所以坡道区域并不适合全速通过需要在软件状态机里提前处理。2.3 立柱与驼峰的导线绕法立柱的导线走向一般是赛道引导线沿地面延伸到立柱根部绕立柱一圈或半圈再沿切线方向回到原赛道。车绕柱的时候电感与导线之间的距离关系从“直线-直线”变成“圆弧-切线”信号变化比普通弯道剧烈得多。布线阶段能做的优化是让绕柱的圆弧半径尽量大一些给控制算法留出足够的反应时间。绕柱半径如果太小信号从强到弱的切换会非常突然对状态机的判定时间窗口要求过于苛刻。驼峰类似一个拱形桥导线沿着拱面中线敷设。驼峰的特殊性在于车在过峰顶时车体是倾斜的电感线圈的轴线方向相对导线发生变化即使车就在导线上方左右两路信号也可能不对称。布线阶段能让导线在峰顶附近的曲率尽量平缓一些控制阶段则要保证车在峰顶前就减速不能完全依靠差比和在姿态剧烈变化时硬扛。2.4 布线的工程细节铺线时有一个很容易被忽视的工程问题导线一定要在赛道上压实。尤其是坡道坡顶、立柱进出点、驼峰两侧这些地方车体对导线的碾压和摩擦最剧烈松动的导线会让信号幅度飘忽不定而且这种飘忽不是算法能救的。我见过有队伍调了两天转向参数最后发现是坡顶导线底下有个气泡车每次压过去导线就位移几个毫米。这种问题隐蔽性极强排查起来很费时间。导线接头尽量采用焊接并加热缩管保护避免氧化造成接触电阻缓慢变化。发射端的供电也要关注如果交变电流的幅度随电池电压波动整条赛道的信号强度都会飘。比较好的做法是给发射端做稳压或者加入简单的电流闭环保证导线里的交变电流幅度恒定。另外导线不要贴着大块金属结构走金属中的涡流会消耗磁场能量还会改变磁场空间分布影响传感器的读数曲线。3. 电感排布与信号调理车怎么感知赛场3.1 工字电感与LC谐振选频传感器端最常见的方案是10mH工字电感并联一个电容组成LC谐振回路把谐振频率对准20kHz左右的信号源。10mH电感配6.8nF电容谐振频率大约在19.3kHz接近20kHz实际可以根据信号源的准确频率微调电容值。LC谐振相当于一个窄带带通滤波器能有效抑制50Hz工频干扰、电机PWM噪声、开关电源噪声等等只让20kHz附近的信号有较大增益。谐振回路的Q值决定选频的尖锐程度。Q值太高信号源频率稍微漂一点输出幅度就会明显下降而且谐振建立时间变长信号响应变慢Q值太低抗干扰能力就变差。工程上一般不要追求极端的Q值选适中的电容值后续再用运放滤波把带宽压下来整体效果会更稳。3.2 常见的电感排布方案电感的排布决定了车的“视野”。最经典的是水平双电感左右对称布置差比和算横向偏差。后来很多队伍用八字形排布两个电感向中间倾斜约45度信号对横向偏差更敏感直线附近的线性度也更好适合追求高速稳定过弯的场景。竖直电感轴线朝前或朝后检测磁场的水平分量平面赛道上竖直电感信号很小但到了坡道和立柱附近会明显增大是元素识别的利器。布局参数上电感离地高度一般在5到20mm之间。离地越低信号越强、分辨率越高但碰到地面轻微起伏时信号跳动也更大。左右间距一般是车宽的1/2到2/3。具体选多少要靠实测数据来决定不能拍脑袋。我的习惯是先在直道上把车推到不同横向偏移位置记录左右电感的ADC值画出“偏移-差值”曲线再根据这个曲线确定布局和后续算法参数。3.3 针对立体赛道的进阶排布飞檐走壁组这种立体赛道我的经验是至少要前后两组水平电感加一组竖直电感。前电感负责预瞄转向后电感负责修正前后两组还能通过信号变化的时间差判断坡道的进入角和坡度。竖直电感可以提前感知导线从水平变成倾斜在上坡前就给出状态切换信号而不是等车头都顶到坡面上了才反应。电感安装要考虑减震。车模高速跑动时的高频振动会直接调制电感信号在信号链上表现为小幅波动严重时会被PID放大成转向抖动。常规做法是在电感支架与车体之间加泡棉双面胶或减震柱。但要注意减震材料不能太软否则电感相对车体的位置会缓慢漂移造成更难排查的变温漂移型误差。减震的目标是滤掉高频振动而不是让电感悬浮。3.4 信号调理电路与ADC采集从LC谐振回路出来的交流信号是毫伏级需要放大。通常用一个轨到轨运放做同相放大放大倍数在10到100倍之间具体根据实测信号幅度决定。放大后再做半波或全波整流也就是包络检波加一级RC低通滤波把20kHz的交流分量滤掉取出与磁场强度成正比的直流电平送到单片机ADC采样。一个常被忽略的点是左右通道的一致性。放大左右通道的电阻必须用1%精度或更高运放尽量用同一型号同一批次PCB走线长度也尽量一致。如果左右放大倍数差哪怕百分之几差比和就会有一个固定偏置车在直道上会一直走弧线。我见过队伍把单向增益差了5%结果车总是往一边偏一直在调PID的P值越调越乱。实际上做一次左右通道的校准用同一信号源分别测量两个通道的输出问题立刻水落石出。4. 偏差解算与特殊元素识别从ADC原始值到转向命令4.1 差比和与归一化定义左右电感ADC值为L和R误差量用差比和表示error (L - R) / (L R)当车在导线正上方且信号对称时error接近0车偏左L大R小error为正车偏右则相反。将这个error经过PD控制器输出转向PWM。前面提过用差比和而不是L-R的根本原因是归一化。立体赛道上坡道使水平电感接收到的磁通减少L和R同时变小但L-R可能只有平面的一半。同一个横向偏差在坡道上用L-R算出的转向量就变小了车会显得“没劲”。而差比和的分子分母同比例缩小比值基本不变。只要左右电感在坡道上的衰减比例一致归一化就能把绝对强度变化抵消掉。这也是电磁方案能处理立体赛道的关键数学基础。需要特别保护的是LR接近0的情况。比如过立柱时两侧电感都接收不到信号LR趋近于0差比和会变成一个巨大的异常值。处理方式是设定一个最小分母阈值当LR小于阈值时强制误差清零或直接切到状态机里的绕柱逻辑而不是让一个异常值送进PID控制器造成转向暴走。4.2 横向偏差的非线性校正差比和与真实横向位移不是线性关系。导线正下方信号最强越往两侧偏离信号衰减越厉害但衰减并不是线性的。所以差比和在实际走向上表现为靠近导线很敏感远离导线变迟钝。如果直接把error当线性误差来用车会“近处灵敏、远处迟钝”在弯道入弯时经常转不够出弯时又容易过冲。一个简单的思路是查表校正在实测中记录不同横向偏移对应的差比和值生成一张映射表把error映射到更接近线性的侧偏距离。另一个思路是分段PID在error较小的区域用较小的P在error较大的区域用较大的P。八字形电感的差比和线性区比水平电感大所以很多跑高速的队伍优先选八字形就是为了省掉一部分非线性校正工作。4.3 特殊元素识别状态机而不是全靠PID立体赛道上的坡道、立柱、驼峰都有一个共同特征它们的信号模式是稳定可重复的。这为状态机识别提供了基础。不要把所有希望都押在PID参数上而是用几个特征量设阈值在检测到特殊元素时切换控制策略。坡道识别竖直电感信号大于设定阈值同时水平电感总强度下降判定进入坡道。进入坡道后上坡阶段适当增大油门、降低转向P值下坡阶段限速、转向D适当增大。这些参数可以做成坡道状态下的独立参数组不干扰平面赛道的主参数。立柱识别入柱前近柱一侧电感信号快速上升并饱和随后整体信号跌落。识别到立柱后不再使用差比和做实时转向而是固定一个标定好的转向角度用编码器积分估算绕柱进度到达预设角度后尝试恢复差比和等信号确认有效后再切回闭环。驼峰识别峰顶前车体俯仰角变化IMU俯仰角变化率超过阈值同时电磁信号出现持续一定时间的异常偏置。此时可以强制以最后一次有效的差比和方向为基准走一小段开环避免信号异常引发转向抖动。这些阈值不是靠肉眼猜的要靠第6章说的数据回放来确定。5. 坡道、立柱、驼峰三种立体元素的实战调参记录5.1 坡道上坡加油、下坡收油、峰顶镇静不加任何状态处理的电磁车上坡时水平电感信号整体变弱转向会变“软”车容易在坡面上画龙下坡时信号恢复如果转向P还是原来的值又容易转向过头。我实际的调法是检测到坡道后分两段处理。上坡阶段速度给定增加10%到20%转向P减小到平面值的70%左右下坡阶段速度限幅降低转向P恢复但D值增大一点用来抑制下坡时信号恢复带来的方向振荡。还有一个容易被忽略的点是坡道底部的过渡圆弧。导线方向连续变化时电感读到的虚拟位置会出现一个“小坑”看起来像一个假弯。我第一次调车时车每次到坡底都会向右猛拐一下查了很久程序最后录数据才发现是电感在过渡区读到了虚假偏差。解决办法是在坡道状态里增加信号异常抑制当竖直电感超过阈值且水平信号低于阈值时差比和输出全部过滤掉改用最后一次有效值锁存一小段时间等信号恢复正常再放开。5.2 立柱放弃差比和信任姿态立柱是飞檐走壁组里最考验心态的地方。立柱附近导线绕柱车稍微靠近电感信号可能从“强”迅速变成“弱”左右差异此时代表的不是车相对导线的横向位置而是接近角度。用差比和硬凑车会一直抖动永远贴不住柱子。我采用的方案是“入柱前置检测绕柱开环出柱恢复”。入柱前当近柱侧电感原始值超过饱和阈值并开始回落时判定为入柱记录当时的转向方向。绕柱期间转向PWM使用事先标定好的固定值速度降低用编码器积分估算旋转角度到达预设角度后尝试恢复差比和等信号重新有效后切回闭环。这个方案里标定工作很关键让车以固定的转向和速度绕柱记录完整一圈的编码器值取一个安全比例作为出柱判定点。实测在摩擦力稳定的场地上绕柱可以稳定复现但要注意轮胎磨损后需要重新标定。5.3 驼峰姿态变化才是真正的敌人驼峰上导线本身没有绕圈按理说难度不大。难点在于车体过峰顶时俯仰角变化电感线圈的轴线方向相对导线发生了变化导致左右信号出现一个与位置无关的虚假偏置。我把车静止放在峰顶左右ADC竟然差了20%车明明压在导线上方差比和却显示车偏在一边这就是姿态造成的系统误差。针对这个问题我试过两个办法。第一个是机械层面把电感支架做得足够坚固让电感相对车体姿态固定同时在底盘上加配重降低俯仰角速度。第二个是算法层面用IMU的俯仰角做补偿把差比和中的虚假偏置减掉。实测下来机械办法见效更快调试成本也更低。算法补偿的办法适合已经不想再改机械结构、但手上正好有多余IMU数据通道的队伍。5.4 三种元素的联调顺序不要一开始就全赛道跑。我的调车顺序是先单独摆一段平面导线把手感和PID参数调顺然后只上坡道把坡道识别、加减速逻辑调稳再单独立柱把绕柱状态机跑通最后放驼峰解决姿态偏置问题。全部单独通过后再拼成完整赛道连调。一次只引入一个新变量出了问题能立刻定位这是调试效率最高的方式。6. 调试手段、数据回放与排坑实录6.1 用串口把ADC值搬到上位机车在地上跑数据在单片机里如果只靠肉眼看车跑得歪不歪那就等于盲调。最基础也最重要的调试手段是把左右电感的ADC值、差比和、状态机编号、速度给定、转向PWM这些关键量通过串口或蓝牙实时发到上位机边跑边看曲线。我用过的方案是串口转USB加虚拟示波器或者自己写一个简单的Python脚本画实时曲线。调试状态时人站在赛道旁边看着车跑电脑上同时滚动波形能很直观地分辨出“这个抖动是信号噪声还是控制振荡”。有一次车在直道上高频画龙示波器上一看才发现是左右电感信号中混入了一个同频率的开关噪声跟转向PID一点关系都没有。这种问题如果只看车跑很难定位。6.2 离线回放与阈值标定调状态机阈值最靠谱的方法是录一段完整赛道数据离线逐帧查看特征点。比如坡道入口竖直电感是多少、差比和下降到什么程度、信号异常持续了多少毫秒全部统计出来后再反推识别阈值。用经验值拍脑袋定阈值普遍会出现在一个场地好好的换了赛道纸就失灵的情况。因为不同场地的背景磁场、导线高度、地面材料都会影响信号的绝对值。只有基于自己赛道上录的数据去定阈值才是可迁移的。6.3 参数整定的顺序与技巧先P后I再D这种话听得多了但智能车电磁调试里更关键的是“先手动后自动”。先用一个稳定的低速把转向P调到车不画龙然后加D消除过冲最后再逐步提速每提一档速度就重新审视一遍全部参数。不要在低速参数都没稳定的时候去跑高速那样只会让问题混在一起无从排查。一个常用的技巧是给差比和信号乘以一个不随速度变化的比例系数让高速和低速时的“等效误差”一致。这样速度环和转向环可以解耦调试速度变化时只需要调整这一个比例系数而不是从头再调一遍PID。我实测这个方法能节省大量调参时间尤其是从1.5m/s提到2.5m/s这种跨越式提速时效果非常明显。6.4 踩过的坑清单电感支架松动。跑几分钟信号缓慢漂移排查半天电路结果是螺丝松了。信号链路里最不可靠的往往不是芯片而是机械连接。左右放大倍数不一致。差比和恒定偏置直线跑成弧线。用同一个信号源分别测左右通道的输出做一次增益校准。坡道导线固定不牢。车压过去导线轻微移位信号抖动被误判成软件问题。铺线后要在坡道附近用手按压检查。上位机波特率不够导致数据丢帧。看波形时断断续续把调试周期拉长还容易误判。建议用1Mbps以上的串口或直接上蓝牙5.0。电池电压变化导致发射端电流漂移。满电和低电时信号强度差很多归一化能解决一部分但发射端最好做稳压否则不同电量下状态机阈值要重新标定。7. 备赛节奏与核心经验7.1 三个月时间线的建议如果从现在开始备赛我会把时间分成三段。第一个月是硬件平台搭建和信号链调通目标是车能稳定地跑完整段平面赛道差比和、PID、串口调试这套基础链路全部跑顺。第二个月做立体元素专项坡道、立柱、驼峰分别调通并固化参数。第三个月做完整赛道连调、稳定性测试、速度提升和换场地验证。最后两周一定要留出足够的buffer专门处理机械结构加固、轮胎磨损、电池老化这类物理层面的问题。赛场上最容易翻车的往往不是算法而是长时间跑动后的螺丝松动、信号线磨破、电感支架疲劳断裂。7.2 给新队伍的三条建议第一不要一上来就追求全地形高速。先把低速可靠性做到100%再逐步提速。低速稳定是高速的地基跳步只会让问题叠加得更复杂。第二电磁方案的护城河不是电路也不是PID而是数据。所有决策都要有数据回放支撑。一个差比和波形的异常比十次肉眼观察更能说明问题。第三至少留出两周做换场地测试。不同场地的背景磁场、金属结构、地面摩擦力都会影响电磁信号的表现。基于一个场地调出的参数换个场地就失灵这在智能车竞赛里太常见了。7.3 关于飞檐走壁组的一点个人体会最后说点题外话。飞檐走壁组给我最大的收获不是车跑得多快而是学会了一种把三维问题拆成一维信号的思路。立体赛道看起来复杂但当你想清楚导线在空间里的走向再用合适的传感器去截取这个三维曲线在某个方向上的投影时问题就重新回到了那个再熟悉不过的差比和上。做电磁引导线这件事真正难的不是把信号读出来而是理解每一个信号变化背后的几何原因。你手上的那组ADC值其实就是赛道在跟你说话关键是你能不能听懂。祝各位备赛顺利赛场见。