智能车竞赛卡丁快跑组备赛全攻略:从摄像头循迹到人机交互接管
如果你最近在关注全国大学生智能车竞赛应该对卡丁快跑组不陌生。这个组别把自动驾驶和人车交互放在同一辆卡丁车模上考核既要比算法稳也要比人机配合快。说实话第一次听到这个名字的时候我的第一反应是这不就是一辆缩小的卡丁车自己跑圈吗真正带队备赛之后才发现卡丁快跑组的难点从来不在某一个单点技术上而在整个系统的可靠性和“人什么时候介入、怎么介入”这个竞速之外的问题。这篇文章是我从拿到车模到站上赛道的一路记录适合准备入组的队伍、正在被调车折磨的同学以及想透过竞赛了解自动驾驶工程化思路的朋友希望能给你一条少走弯路的参考路径。1. 卡丁快跑组到底比什么从“遥控玩具”到“自动驾驶载体”1.1 比赛环节与评分逻辑卡丁快跑组的比赛形式这几年一直在微调但核心逻辑大体一致车模以卡丁车形态出现赛道上分布着不同类型的路况元素例如直道、S弯、十字路口、环岛、停车区有时候还会加一个需要人工干预的接管点。整车要完成的动作通常包含自动模式下稳定跑完规定圈数、在某些特定区域切换成手动遥控以及在不同模式之间快速切换且不出错。评分维度一般看完成时间、稳定性、接管响应速度和全程是否罚时。这和传统四轮组的区别很明显。传统竞速组中车辆一旦发车全程都在自动控制下选手几乎不能干预。卡丁快跑组则刻意保留了“人”的位置比的是自动算法和人配合起来的整体表现。你可以把比赛想象成开车自动驾驶系统负责大部分路况但遇到系统不擅长或者规则要求必须人来处理的路况驾驶员要能立刻接管。这个逻辑放在竞赛里就很接近真实自动驾驶落地时的“人机共驾”场景。1.2 从技术角度看这个组别在逼你建立完整系统观卡丁快跑组表面上是一辆车在跑但它要求的技能栈覆盖了感知、决策、控制、通信、嵌入式开发和现场工程调试。仅仅说“会调PID”或者“会看摄像头图像”远远不够。你至少需要把这五块串成一条线感知层用摄像头识别赛道边界、障碍物、特殊路标或者用灰度传感器辅助判断。决策层根据感知结果判断当前处于什么路况执行直道加速、弯道减速、路口补线、环岛识别等逻辑。控制层输出转向舵机PWM和电机PWM让车实际执行决策常用PID或串级PID。交互层通过遥控器、按键或上位机完成自动/手动模式切换并把车辆状态反馈给操作者。系统工程层供电、机械结构、线束固定、散热、现场抗干扰这些不写在评分表里但每一样都能让你在赛场上翻车。很多队伍在备赛初期会陷入一种错觉图像处理得越炫、PID参数调得越激进成绩就越好。卡丁快跑组用规则告诉你不是这样的。如果自动模式下车辆在某些路段必翻而人又不能及时接管那算法再“聪明”也白搭。比赛真正考验的是在有限时间内你能否让所有模块稳定协同。1.3 赛前需要先定下的三条设计原则在我带过的队伍里凡是开局就把目标定成“跑得最快”的后期几乎都改成了“跑得最稳”。这不是保守而是卡丁快跑组的赛制天然偏向可靠。在这里分享三条我反复强调的设计原则。第一先保证下限再追求上限。一辆能稳定跑完一圈但速度一般的车一定比一辆偶尔跑出最快圈速却经常冲出赛道的车更容易拿到好成绩。在自动驾驶环节完成本身就是第一优先级。第二人车交互的关键是“自动为主、手动兜底”但手动接管必须足够快。比赛不会专门等你准备好听到指令才按键很多时候是看到车行轨迹不对劲就需要立刻切手动。如果接管逻辑绕了三层判断等切换到手动时车早就冲出赛道了。第三模块之间尽量解耦。感知、控制、通信、状态管理要分开写不要把所有逻辑堆在一个main函数里。现场调车时你经常需要单独看某一路数据或者临时改一个控制参数。如果模块耦合严重改一行代码都可能引发连锁bug极难排查。2. 自动驾驶部分让卡丁车自己看懂路、找对线、稳住速度2.1 传感器选型与安装摄像头不是装上去就能用的卡丁快跑组的车辆通常采用摄像头作为主要感知传感器。选择什么摄像头、安装在什么位置、俯仰角多大直接决定后续图像处理能不能做。常见的是总钻风摄像头或者其他OV系列摄像头经过厂家的兼容方案处理后输出灰度图像。有的队伍会额外加几个灰度传感器放在车头或车底用来辅助检测起跑线、停车线或者十字路口也算一种低成本冗余。摄像头安装是个容易被忽略的细节。摄像头装得太高看到的赛道范围大但远处目标小装得太低近处图像清晰但前瞻距离不够车在弯道里根本来不及反应。一个比较通用的经验是摄像头高度在15到20厘米之间俯仰角在10到20度之间具体要根据赛道尺寸和车速来调。调试时要固定摄像头支架不能松。我带队伍时遇到过整整一个下午调PID怎么调都画龙最后发现是摄像头支架被碰歪了图像中线的角度已经偏了跟控制参数一点关系都没有。另外赛场的环境光线和实验室差别很大。建议在代码里保留曝光和阈值的可调参数现场用一块黑色和一块白色的板子快速标定。不要试图用一套固定参数闯天下那样大概率在比赛现场翻车。2.2 图像处理与道路信息提取从像素到中线摄像头输出的原始图像通常要经过灰度化、二值化、边缘提取、中线计算等步骤。所说的“看线”本质上是把赛道边界在图像中找出来然后计算出车应该沿着哪条线走。常用工具是OpenCV在PC上调试非常方便但MCU端通常跑的是C语言需要把手写的循环和图像算法精简到几毫秒内完成。一套基础的循迹算法流程大概是这样的采集图像 - 从某一行的感兴趣区域开始扫描 - 找到左右边界 - 计算左右边界中点作为该行路径点 - 对所有有效行的路径点做直线拟合或者取平均 - 得到当前偏差。这个偏差就是后续转向控制的输入。这里必须强调补线处理。赛道里如果有十字路口、环岛或者斜入元素时图像上经常会出现“断线”的情况如果不做补线车就会对着断线处冲过去。卡丁快跑组里最常见的冲出赛道事故十有八九都出在十字路口没有正确补线。补线的基本思路是当检测到左右边界突然大面积丢失时根据上一帧的边界趋势在丢失区域补一条合理的线让车先稳定通过路口再在路口之后恢复真实边界。2.3 转向控制从P到PID的进化图像处理得到偏差之后转向控制要把它变成舵机PWM。很多新手上来直接写一个比例控制steer_pwm center_pwm Kp * error;这个写法在低速、简单赛道上能跑但车速稍微一上去就会出现两个问题要么转弯不够冲出赛道要么转向过头车身来回摆也就是常说的“画龙”。原因在于只考虑了当前偏差的比例关系没有考虑偏差变化的趋势和累积量。解决方式是在转向环引入微分项甚至引入速度前馈和串级结构。比较通用的做法是串级PID外环根据图像偏差计算期望横摆角速度内环用陀螺仪或编码器反馈实现角度闭环。对于以循迹为主的卡丁车模很多队伍用PD控制加上一些经验补偿就能跑得不错。Kp让车朝目标线靠近Kd让车在快速变化时能“收住”避免过冲。下面给一组我在实车上调过的基准参数仅供参考不要直接照抄。模型不同、赛道不同参数差异会很大参数示例值说明Kp0.35偏差到转向角的比例系数越大转向越猛Ki0.01积分项用于消除稳态误差数值要小Kd0.08微分项抑制震荡数值过大会导致高频抖动舵机中值75归一化舵机正中的PWM占空比控制周期10ms主循环固定频率保证响应实时性调参顺序也要注意先把Kp从一个小值逐渐增大直到车在直道上能稳住再加Kd消除过弯时的摆动最后才考虑加一点点Ki修整长直道上的细微偏差。千万不要一开始就把Kp给得很大否则车会非常神经质。2.4 速度规划直道加速、弯道减速靠什么触发转向控制解决“往哪儿拐”速度规划解决“跑多快”。卡丁车模的电机响应比四轮车更直接如果全程等速要么直道太慢要么弯道太快。简单高效的做法是分段式速度规划根据前方赛道曲率决定目标速度。曲率可以从图像中提取比如计算最近几行中线的平均斜率斜率越大说明弯道越急目标速度就要越低。更进阶的用法是把速度规划和转向PID联动当偏差绝对值很大时说明车头已经偏离目标线很厉害先减速再修正方向。这里要注意一个常见误区速度环和转向环如果独立设计很容易出现在弯道里一边急转弯一边猛加速的尴尬局面。我建议在代码里加一个“安全速度上限”的函数根据当前转向角度和偏差实时限制电机输出避免执行机构饱和。速度规划还应该考虑前瞻距离。只盯着当前这一帧图像算曲率太短视车到弯道入口才减速往往已经晚了。常规做法是取图像中远离车身的一行计算远距离偏差或者对连续几帧的偏差做趋势判断。简单说就是让车“看得远一点”提前为前方路况做准备这也是低成本自动驾驶里最值得花时间优化的部分。3. 人车交互部分手动自动无缝切换才是真正难啃的骨头3.1 为什么人车交互是这个组别最大的分水岭如果只看自动驾驶能力很多队伍都能在赛道上跑完一圈。但卡丁快跑组最有意思的地方是比赛中加入了“人”。裁判或者系统可能随时给出接管指令也可能是赛车在某个特殊路段需要手动操作。这时候从人手按下遥控到车辆真正响应中间经过多少环节、每个环节有多大延迟就成了决定成绩的关键。人车交互的本质是在自动控制回路中插入人为干预同时不产生安全风险。试想一下车正在以三米每秒的速度冲向一个自动模式处理不了的路口你收到指令切手动如果整个链路有500毫秒延迟车已经冲出两米了。这个数字在比赛中足以罚掉很多时间。所以真正难的不是遥控器能控制车而是遥控器和自动系统之间的协同不能有冲突。很多队伍把自动代码和手动遥控代码分开写跑起来之后发现两个模块在抢舵机和电机的控制权出现“切不回来”或者“切过去了车却突然加速”的诡异现象。这些问题往往不是硬件故障而是状态管理和控制权交接的设计漏洞。3.2 交互方式选型遥控器、按键、上位机怎么选卡丁快跑组的人车交互方式一般包括无线遥控器、车载按键/拨码开关、上位机软件三种。比赛规则不同常用组合也不同。2.4G遥控器适合比赛现场快速接管延迟低、手感直观蓝牙或者串口数传适合把数据传给电脑做分析和调试车载按键适合应急保护比如一键切到急停状态。选型时要重点关注延迟和抗干扰。实验室里很好用的蓝牙模块到了赛场人多、无线设备多的时候很可能会出现偶发丢包。经验做法是优先选择2.4G遥控接收机或者带跳频功能的无线数传模块并在通信协议中加入简单校验避免错误数据触发误动作。我踩过的一个坑是遥控器接收机放在车模底盘角落被锂电池和电机线缆包围结果一上电舵机抖、遥控距离缩短。后来把接收机天线引到车壳外远离电机和电源线问题立刻消失。无线模块看起来不起眼但它能否稳定工作直接决定人车交互环节的成败。3.3 状态机设计用有限状态机管理驾驶模式人车交互最可靠的管理方式就是有限状态机。不要用一堆bool变量去判断当前该是自动还是手动那样代码稍微复杂一点就会理不清逻辑。建议明确定义几个模式IDLE待机电机不输出舵机居中。AUTO自动驾驶模式感知、决策、控制全自动运行。MANUAL手动遥控模式接收遥控器指令控制转向和油门。EMERGENCY急停模式无论之前是什么状态触发后立刻停车并锁定电机。FINISH完成比赛进入停止状态。状态切换条件是重中之重。状态机自己在管理模式但切换动作必须可靠、可复现。例如从AUTO切到MANUAL时要先将当前舵机输出保持一段时间再逐渐过渡到遥控值而不是瞬间跳变这样可以避免车辆在切换瞬间猛地抖一下。从MANUAL切回AUTO前也要先确认图像处理已经恢复并给出有效偏差否则车可能在自动驾驶接管的第一帧就跑偏。实际项目中我用过一个简单的状态机切换函数void mode_switch(drive_mode_t new_mode) { if (new_mode mode) return; switch (new_mode) { case MODE_AUTO: image_ready reset_image_processing(); if (image_ready) mode MODE_AUTO; break; case MODE_MANUAL: set_servo(center_pwm); mode MODE_MANUAL; break; case MODE_EMERGENCY: set_motor(0); set_servo(center_pwm); mode MODE_EMERGENCY; break; default: break; } }这段代码没有多复杂但它保证了模式切换不是临时起意而是有明确的前置条件和副作用管理。状态机在嵌入式环境里永远是好东西它让现场调车时的思路非常清晰。3.4 接管延迟这个隐藏指标我每次带队伍都会让学生专门测“接管延迟”从遥控器按下到车上执行机构真正动作到底隔了多久。这个指标在竞赛规则里可能不会直接标出分数但它直接影响你的实际表现。延迟通常拆成五段无线接收模块解包延迟、串口或IO中断通知延迟、MCU状态机切换延迟、控制周期等待延迟、执行机构响应延迟。前四段可以通过代码优化压缩到20毫秒以内。比如无线接收模块数据到达后使用DMA空闲中断接收而不是在主循环里轮询状态机切换放在中断上下文里只做标记主循环检测到标记后再执行切换动作。执行机构响应也不可忽视。舵机PWM频率如果是50Hz也就是20毫秒一个周期那么即使控制逻辑再快输出也要等下一个周期才能更新。可以考虑将舵机PWM频率提高到100Hz甚至200Hz这样能明显降低转向响应延迟。不过要注意舵机频率调高之后舵机供电电流和发热会变化要确认电源余量足够。4. 备赛与调车的实战细节这些坑我替你先踩了4.1 一套适合卡丁快跑组的代码架构卡丁快跑组的代码量不大但逻辑分支很多。如果全堆在一个文件里后期每改一个参数都可能编译半天而且很容易误改。我的建议是按模块分文件main.c初始化、主循环、状态机执行。sensor.c摄像头采集、图像处理、中线提取。control.c转向PID、速度规划、电机控制。communication.c遥控接收、串口收发、数据解析。state_machine.c模式管理、切换条件判断。debug.c液晶屏显示、串口打印、日志存储。主循环固定一个周期跑一般10毫秒比较合适。所有模式切换、遥控数据处理可以放在中断或快速循环里先打标记主循环只负责按状态执行对应控制逻辑。这样即使外部事件来得快也不会打断当前的控制周期。调试接口一定要早做。在板上接一个OLED显示当前模式、图像偏差、目标速度再通过串口把关键变量打印到上位机。很多时候图像被压缩成二值化之后肉眼看不太出来问题在哪只有实时看数值变化才能定位。4.2 从仿真到实车先验证逻辑再解决机械问题一些队伍喜欢在自动驾驶仿真环境里练习比如CARLA或者其他模拟平台。仿真对算法逻辑的验证是有效的但卡丁快跑组大量问题出在实车机械和硬件上仿真无论如何都不能替代。我建议把仿真当成“逻辑预演”验证状态机和图像处理思路但最终还是要以实车为准。实车调车要养成记录习惯。每轮测试前先记录电池电压、赛道环境、摄像头曝光参数、速度上限、PID参数、轮胎状态、当时的风速和光线。测试后记录现象和结论。这个习惯看起来繁琐但一次参数漂移排查就能让你感谢这份记录表。我遇到过最典型的一种情况是车上午跑得很好下午怎么调都跑不好。查了半天发现是场地灯光从上午的侧光变成了下午的逆光摄像头图像整体变暗中线提取已经失真。如果提前有曝光参数可调并且知道当前用的什么参数现场就能快速修正。4.3 备赛时间线建议六周的节奏怎么安排卡丁快跑组不太适合临阵磨枪。我带队常用的备赛周期是六周大约这样分配阶段时间目标第1周车模组装、硬件点亮电机能转、舵机能打角、串口能收发、无线遥控能控制第2周图像处理基本跑通能稳定输出赛道中线十字路口补线有雏形第3周简单PID跑圈用比例控制或PD控制在低速下跑完完整赛道第4周串级PID与速度规划直道能加速弯道能减速整体圈速稳定提高第5周人车交互专项反复测试自动/手动切换、急停、故障注入优化接管延迟第6周现场模拟与复盘模拟比赛流程记录所有可调参数准备备件和应急预案这个时间线不是死规则但它能保证你不会在最后几天还在改PID。实际备赛中第5周人车交互专项最容易被压缩因为大家总觉得“遥控器能控制不就行了”。等到赛场上一紧张切换逻辑的bug全暴露出来后悔都来不及。4.4 现场比赛的隐藏细节先说电池。锂电池在电量不同阶段放电特性差异很大满电时电机响应快快没电时输出软绵绵。如果你的速度PID参数是根据满电状态调的比赛后半段很可能出现直道速度上不去的情况。建议赛前把电池统一充到同一电压范围同时准备备用电池每轮发车前检查电压。再说线束。小车在赛道上震动非常大插排针、杜邦线很容易松脱。我见过队伍在检录时摄像头突然黑屏结果发现是排线松了。所有连接器最好用热熔胶或者扎带固定并且在备赛阶段就养成“每次上车前按一遍连接器”的习惯。最后是比赛场地光线。大型场馆的灯光往往和实验室完全不同特别是顶灯直射造成的反光和高光区域会让二值化图像出现大片误判。所以到了比赛现场第一件事不是跑速度而是花二十分钟重新标定摄像头曝光和阈值。这一点做不到位后面全白搭。5. 常见问题排查与调车经验现场最容易翻车的几个瞬间5.1 典型症状与排查思路把我在备赛和比赛中遇到过的问题整理成了一张速查表方便对照排查症状可能原因处理办法直道反复画龙Kd过小或过大、前瞻太近、机械间隙大先增大Kd观察无效时检查前轮和转向连杆虚位十字路口冲出去补线逻辑缺失或补线方向错误打印路口标志和补线结果逐帧回放图像确认手动接管没反应状态机被阻塞、串口中断丢失、无线模块掉线检查状态是否停在AUTO无线接收指示灯是否正常环岛内乱转没有识别环岛入口/出口路径规划混乱单独做环岛状态用边界斜率判断入口出口上电舵机抖动电源干扰、PWM频率不合适、舵机中值不对给舵机单独供电或加电容调整PWM频率跑起来越来越慢电池电压下降、电机过热、速度环积分饱和记录电压曲线检查速度环输出是否长时间饱和现场排查问题时有几个通用原则先确定是机械问题还是代码问题再确定是感知问题还是控制问题最后确定是偶发问题还是必现问题。把问题范围一步步缩小比随机改参数有效得多。5.2 一个真实debug过程有一次我们队的车在第三个弯道必出赛道之前几天还跑得好好的。大家第一反应是PID参数被谁改了检查后发现参数没动。又怀疑是赛道摩擦力变了清理场地后问题仍然存在。后来我在图像窗口里逐帧看二值化结果发现第三个弯道处正好有一块从窗户照进来的光斑把二值化后的赛道边界“吃”掉了一部分导致中线计算跳变。解决办法有两个方向一是调整摄像头曝光尽量让亮部和暗部都能保留二是在图像处理里加入“区域阈值”或者边缘跟踪减少环境光干扰。最后我们选择增加一个动态阈值的逻辑根据图像整体亮度实时调整二值化阈值效果立竿见影。这个案例说明调车遇到诡异问题不要只盯着控制参数多看看感知层在特定场景下的表现。5.3 独家调车心得一些常规文档里不会写的经验第一摄像头曝光参数必须做成可调而且最好有两种固定模式一种适用于实验室暖光一种适用于赛场冷光和强光。快速切换比现场一点点调阈值要省时间得多。第二赛前把轮胎用湿布擦干净赛道上的浮灰也要清理。卡丁车模和真实赛车一样轮胎附着力的变化会直接影响弯道极限。很多时候你感觉“车突然变滑了”其实不是代码问题而是轮胎和地面之间那层灰在作怪。第三每个版本改了什么参数、改完之后的现象是什么一定要有人专门记录。队伍里最好安排一个人不碰代码只负责记录和计时。这个人看起来没有参与技术工作但实际上他是全队最重要的“数据库”。没有记录调车就只能是靠手感摸黑。第四不要迷恋大Kp。新手最容易把比例系数调到很大觉得这样车“反应快”结果就是各种抖动和过冲。真正好的转向手感是车在直道上几乎感觉不到修正进入弯道时平滑地切过去而不是每帧都在大角度修正。能用更小的误差和更温和的控制达到目标速度才是高水平调车。第五人车交互的测试一定要加入“故障注入”。比如模拟自动模式在某个点突然丢失图像看手动接管是否能在两秒内救回来。如果这个测试没做过比赛现场一旦出状况八成会慌。提前演练至少能保证人在赛场上知道自己第一步该按哪个键。卡丁快跑组带给我最大的收获不是那张奖状而是让我真正理解了自动驾驶落地时最难的不是算法本身而是算法和人之间那个交接的瞬间。如果你正准备入组我建议先把稳压电源、串口日志和录像这三样基础工具准备好所有可疑问题先记录下来再动手改。赛场上九成九的事故都是平时测试里见过的小毛病只是刚好在小概率时刻集中爆发了。祝你们跑得稳接得准。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →