
1. 从一份“过时”的技术报告说起为什么我们还要看2020年的东西最近在整理资料翻到了当年参加第十五届智能车竞赛时写的那份技术报告。说实话现在第二十一届的比赛都结束了网上铺天盖地都是最新的技术报告模板、最新的规则解读和最新的冠军方案。乍一看这份2020年的报告似乎已经“过时”了——用的主控可能从K60换到了RT1064摄像头从OV7725升级到了全局快门连赛道元素都多了几个新花样。那为什么我还要把它翻出来并且觉得它依然有被深入拆解的价值原因很简单技术会迭代但解决问题的底层逻辑和工程思维不会过时。2020年的第十五届恰好是智能车竞赛技术路线发生重要转折的一年。那一年很多队伍在传统方案上遇到了性能瓶颈开始尝试一些现在看来是“标配”、但当时颇具前瞻性的思路。比如软件算法上对图像处理的极致优化以应对更复杂的赛道硬件上对电源管理和电机驱动的精细化调整来压榨最后一点速度。这份报告里记录的不是一个“正确答案”而是一个完整的、充满试错痕迹的“解题过程”。对于现在的新手队伍来说看最新的冠军报告可能只看到“他们用了什么”而看这份几年前的报告你能更清晰地看到“他们为什么这么选”以及“他们是怎么从坑里爬出来的”。这才是技术报告除了“模板”功能之外更核心的传承价值。所以这篇内容不是对那份报告原文的照搬而是以一个过来人的视角结合这几年的技术演进重新解构当年我们队伍在机械、电路、控制、算法几个关键模块上的设计思路、实现细节以及那些在最终报告里可能一笔带过但实际上耗费了无数个通宵的“坑”。我希望它能帮你理解一份优秀技术报告应该有的“骨肉”而不仅仅是学会填充一个“模板”。2. 技术报告的“里子”与“面子”超越模板的写作逻辑几乎所有新手队伍拿到技术报告要求时第一反应都是去找“模板”。这没错格式规范是基础。但如果你只把技术报告当成一个填空题把各个章节的标题当成篮子然后往里扔代码截图、电路图和几句说明那就大错特错了。一份有灵魂的技术报告其内在逻辑应该像一篇严谨的工程论文又像一份详实的项目开发文档。2.1 核心目标呈现可复现的设计决策链评委或者说任何读者想通过技术报告看到什么不是一堆零散的技术堆砌而是一条清晰的设计决策链。这条链的起点是比赛规则约束和你的性能目标比如目标速度终点是赛场上稳定运行的车模。中间的每一个环节——为什么选这款传感器为什么用这种滤波算法PID参数整定的依据是什么——都需要有逻辑支撑。以第十五届的摄像头循迹为例。当时常见的有模拟摄像头如OV7725和数字摄像头如MT9V034。在报告里你不能只写“我们采用了MT9V034全局快门摄像头”。你需要展开这条决策链问题起点赛道存在阳光干扰模拟摄像头的卷帘快门在车体高速移动时会产生图像畸变果冻效应严重影响边线提取。方案对比全局快门可以解决畸变问题但数字摄像头需要处理的数据量更大对单片机算力和内存是挑战。决策与权衡我们主控芯片假设是i.MX RT系列有足够的RAM开辟图像缓冲区且其DCMI接口和DMA能力能高效搬运数据。虽然数字摄像头驱动和图像处理算法更复杂但其抗干扰能力带来的稳定性提升远大于开发复杂度的增加。验证结果通过实测在强光侧照场景下数字摄像头方案边线识别错误率比模拟方案降低了70%以上。这样写你的技术选型就不是一个孤立的结论而是一个经过分析、对比、验证的理性过程。这才是报告的“里子”。2.2 结构骨架如何组织章节才能讲好故事虽然每届的官方模板略有调整但核心章节万变不离其宗。你可以按以下逻辑流来组织让它读起来像一个解决问题的故事第一章引言与总体设计。这里不是简单重复规则而是要提炼出本届比赛对你技术方案的核心挑战例如第十五届增加了环岛、坡道等复杂元素对路径预测和控制器适应性要求更高然后给出你的整车系统框架图。这张图至关重要它应该是软硬件结合的框图清晰地表明信息从传感器到执行器的流动路径以及核心算法模块的位置。第二章机械结构调整与优化。这是稳定性的物理基础。很多队伍重电控轻机械吃了大亏。这部分要讲清楚重心调整如何通过电池、电路板的布局将整车重心降低并控制在前后轴之间合理位置实测对过弯侧倾的影响有多大前轮定位参数主销内倾角、前轮前束是如何调整的目的是为了获得合适的回正力矩和减少直行跑偏。最好有调整前后的对比数据或曲线。轮胎处理轮胎打磨、清洗的方法以及不同胎面对抓地力的影响。这是一个简单的“魔术”但效果显著。传感器安装摄像头/电磁传感器的安装高度、前瞻距离是如何确定的太高前瞻远但近处盲区大太低则反之。你需要给出一个折中的计算或实验过程。第三章硬件电路设计详解。避免只放一张最终的PCB图。要分模块讲解设计要点电源树设计这是电路的“心脏”。单片机、传感器、舵机、电机、编码器各自需要什么电压、多大电流LDO和DCDC如何搭配关键芯片的输入输出端电容怎么选如何通过磁珠、电感进行电源隔离防止电机干扰导致单片机复位画一个清晰的电源树框图并解释每一级设计的理由。电机驱动电路为什么选择MOSFET H桥驱动而非集成芯片MOSFET的选型导通内阻、栅极电荷是如何计算的栅极驱动电路的设计驱动电流、防止上下管直通的死区时间设置是关键中的关键。附上示波器测试的电机PWM波形和电流波形证明驱动是干净、高效的。传感器接口电路摄像头模块的供电、时钟、数据线是否需要匹配电阻电磁运放电路的放大倍数、滤波电路截止频率是如何根据赛道电磁信号强度计算出来的这部分电路对噪声的抑制设计要着重说明。第四章软件算法设计精析。这是技术报告的重头戏也是最容易流于表面、堆砌代码的地方。图像处理管道从原始图像到可用的赛道信息每一步都要有“为什么”。二值化用的是固定阈值、自适应阈值还是动态阈值自适应阈值如何计算在第十五届应对光照不均时我们采用了基于图像灰度统计的动态双阈值方法并解释其数学原理和代码实现。边线搜索是“由近及远”还是“由远及近”如何设计搜索算法来处理丢线、十字、环岛等特殊情况例如在环岛入口我们会启动一个特殊的扇形搜索区来捕捉环岛弧线。中线提取是简单求平均还是拟合曲线拟合用的是最小二乘法还是贝塞尔曲线计算出的中线如何补偿车体的物理偏移摄像头不在车体正中控制策略PID只是工具怎么用才是学问。舵机控制是单纯的偏差PD控制还是加入了前瞻距离的预瞄控制预瞄距离是如何随车速动态调整的我们当时实现了基于速度的前瞻自适应并在报告中给出了调参公式和实验验证曲线。电机控制速度环PID的参数整定过程。如何通过“阶跃响应法”初步确定参数再在赛道上微调如何设计“分段PID”或“模糊控制”使得在直道、弯道、出入环等不同场景下有不同的速度目标值特殊元素处理这是拉开差距的地方。对于坡道、环岛、十字等必须有独立的识别状态机和处理子程序。在报告中你需要用流程图或状态转换图清晰地描绘出识别逻辑例如识别环岛的标志是什么持续多少帧图像确认为真以及处理策略进入环岛时如何切换控制模式是切内线还是走中线。第五章系统调试与优化。这是体现工程能力的地方。你用了什么工具J-Scope、串口绘图、蓝牙调试助手如何将关键变量图像偏差、舵机打角、电机速度实时发送到上位机进行可视化分析通过数据分析你发现了哪些问题如超调、震荡又是如何通过调整参数或算法迭代解决的附上调试界面的截图和优化前后的对比曲线说服力极强。第六章总结与展望。真诚地总结本车的优缺点以及整个备赛过程中的经验教训。对后续迭代提出具体、可行的建议例如“当前图像处理耗时15ms下一版可尝试使用DMA2D硬件加速预计可降至5ms以内”这比空泛的“未来会更努力”要有价值得多。3. 硬件设计的魔鬼细节那些报告里容易忽略的“坑”技术报告里硬件部分往往被压缩但实际调车时一半以上的灵异事件都源于硬件。下面分享几个我们当年踩得结结实实的坑。3.1 电源完整性一切不稳定的根源我们的第一版主板在电机全速启动时单片机有10%的概率会死机或重启。排查软件无果后用示波器抓取了单片机3.3V电源引脚上的波形真相大白在电机启动瞬间电源上出现了一个持续数十毫秒、幅值高达500mV的跌落毛刺。根因分析电机驱动电路与单片机共用了一个DC-DC降压模块。电机启动时瞬间电流可达5-8A即使电源功率足够引线上的寄生电感和PCB走线电阻也会导致共地点的电压被瞬间拉低这个噪声通过地平面传导到了单片机造成其供电不足。解决方案电源隔离为电机驱动大功率部分和核心控制板敏感部分设计独立的电源输入和DC-DC转换器。即使都来自同一块电池也在入口处用磁珠或小电感进行隔离。电容阵列在电机驱动电路的电源入口处并联多个不同容值的电容例如100uF电解电容滤低频10uF和0.1uF陶瓷电容滤中高频形成低阻抗通路快速响应电流突变。电容要尽量靠近电机驱动芯片的电源引脚。PCB布局布线加粗电源/地线电机驱动部分的电源和地线能多粗就多粗减少寄生电阻。星型接地尝试将电机驱动的大电流地、模拟电路地、数字电路地在一点连接单点接地防止噪声串扰。在实际多层板中则通过分割地平面来实现。关键芯片的去耦电容单片机、摄像头传感器、运放等芯片的每个电源引脚都必须紧贴引脚放置一个0.1uF的陶瓷电容这是抑制高频噪声的第一道防线。在技术报告中这部分应该有一小节叫“电源完整性设计与测试”并附上优化前后单片机电源引脚的示波器波形对比图这张图的价值远超千言万语。3.2 传感器信号的“纯净”之战第十五届我们用了电磁组作为辅助传感器。最初电感采集到的信号波动很大特别是在电机PWM频率附近有固定频段的噪声。排查过程首先用示波器观察运放输出端的原始信号发现除了50Hz工频干扰还有一个约16kHz的周期性噪声。对比电机PWM频率发现正是16kHz。噪声是通过空间辐射耦合进模拟走线还是通过电源传导的我们将电感探头远离车体噪声依旧排除了空间辐射为主因。检查运放电路的电源发现其与单片机数字部分共用了一个LDO。用示波器查看该LDO输出果然发现了同频的微小纹波。解决为模拟运放电路单独使用一个干净的LDO供电并在运放的电源入口增加LCπ型滤波电路。同时将电感信号的走线在PCB上用地线包围guard ring并远离任何数字信号线特别是电机PWM输出线。修改后信号信噪比提升了数倍。在技术报告的电路设计章节对于模拟信号采集电路必须强调**“隔离、滤波、屏蔽”** 六字方针并给出具体的电路参数和PCB布局示意图。4. 控制算法的深度调参从“能用”到“好用”算法部分最容易写成代码罗列。这里以速度控制为例讲讲如何把PID调参这个过程写深、写透。4.1 速度环PID阶跃响应与频域思维很多队伍调速度PID就是凭感觉在赛道上试耗时耗力。我们采用了一种更工程化的方法开环测试与模型建立将车架起让后轮空转。给电机一个固定的PWM占空比如50%记录编码器测到的速度从0上升到稳定值的过程。重复几次取平均。将这个响应曲线近似看作一阶惯性环节可以用Matlab或手动计算出一个大致的系统时间常数T和增益K。这为你后续的PID参数提供了一个数量级上的参考。闭环Ziegler-Nichols整定法临界比例度法先将I和D参数设为0。逐渐增大P值直到系统出现等幅振荡速度在目标值上下持续、稳定地波动。记录下此时的临界比例度P_u和振荡周期T_u。根据经典的Z-N公式对于PID控制器P 0.6 * P_u, I 2 / T_u, D T_u / 8。这样就得到了一组相对可靠的初始参数。赛道微调与经验规则将上述参数应用到实车上在直道上进行测试。P比例负责响应速度。P太小速度跟不上P太大会在目标速度附近震荡。微调时听电机声音尖锐的啸叫通常意味着P太大。I积分消除静差。如果长时间无法达到目标速度缓慢增大I。但I过大会引起超调甚至震荡。一个技巧是给积分项设置一个输出限幅防止积分饱和。D微分预测变化抑制震荡。在速度控制中D项非常敏感容易放大编码器测量噪声反而引起高频抖动。我们通常会给D项加上一个低通滤波器或者使用“不完全微分”的PID变体。实践中速度环的D项往往给得很小甚至为0。在技术报告中你应该画出应用Z-N法整定时的速度振荡曲线图并给出最终采用的参数值以及解释为什么最终参数与理论值有偏差例如由于轮胎打滑等非线性因素。4.2 舵机控制从PD到预瞄与弯道动力学补偿单纯的偏差PD控制在低速时还行一旦速度上去滞后性就非常明显表现为入弯反应慢出弯过度摆动。预瞄控制Pure Pursuit / Stanley Method 这是当时我们实现的一个飞跃。原理不复杂不是根据当前车体中心与赛道中线的偏差来打角而是预判车子未来一段时间预瞄时间后会到达的位置然后计算那个位置与赛道中线的偏差。实现我们从图像中提取的不只是一条当前中线而是一段连续的中线点集。根据当前车速V设定一个预瞄距离LL k * Vk为预瞄系数。在提取的中线点集中寻找距离车头前瞻距离最接近L的那个点以该点与车体中心的横向偏差作为控制输入。效果相当于给系统增加了一个前馈入弯更平滑主动出弯摆动减小。在报告中可以用示意图清晰展示预瞄点的概念并给出不同速度下预瞄距离的自适应公式。弯道动力学补偿 在高速过弯时车体会因为离心力发生侧滑此时摄像头看到的赛道中线与实际车轮应走的路径即期望路径之间存在一个偏差。我们通过实验建立了一个基于当前计算出的曲率或偏差变化率和车速的补偿量直接叠加到舵机控制量中。这个补偿量不大但在高速S弯中能显著提升车体的轨迹跟踪精度。5. 图像处理的效率与鲁棒性博弈第十五届时单片机主频普遍在100-200MHz内存几十KB到几百KB图像处理必须在有限的资源内完成。5.1 二值化告别固定阈值固定阈值在光照变化面前不堪一击。我们实现了动态阈值算法大津法OTSU在每场比赛开始前采集几张典型赛道图像直道、弯道用OTSU算法计算出一个全局阈值。这个作为基础阈值T_base。局部自适应在图像处理每一行时不仅考虑当前行的像素还参考其上下几行像素的灰度值计算一个局部平均灰度Local_avg。最终的阈值 T T_base * α Local_avg * β (αβ1)。通过调整α和β可以在全局光照稳定性和局部对比度适应性之间取得平衡。硬件加速利用单片机的DMA将摄像头数据直接搬运到内存中划定的图像缓冲区同时使用CRC硬件模块或位操作技巧快速计算图像灰度直方图为OTSU算法服务节省CPU时间。5.2 边线搜索与赛道识别状态机这是代码中最复杂的状态机部分。我们的图像处理核心是一个基于行的扫描函数但它内部维护着一个复杂的“赛道上下文”状态。正常寻线使用“爬坡法”从上一行边线位置向左右两侧搜索灰度跳变点。丢线处理当连续多行搜索不到有效边线时触发“丢线状态”。此时会根据丢线前的赛道曲率和方向在预测的区域内进行“扇形扩展搜索”。如果还找不到则进入“盲走状态”按照最后已知的控制量维持一小段距离并加大图像搜索范围。特殊元素识别十字当左右边线同时向内丢失且丢失行数超过阈值中间区域为白色则判定为十字。进入十字处理状态保持直行或微调直到重新捕获两边边线。环岛识别到单边边线出现持续、同向的大曲率拐弯同时另一侧边线消失。此时记录拐弯方向进入环岛处理状态。环岛内控制策略切换为沿内侧边线行驶内切并需要一个计数器来判定何时跑完一圈并出环。坡道通过陀螺仪或加速度计数据判断当俯仰角持续超过阈值则进入坡道状态。此时需要调整图像ROI感兴趣区域因为坡道上摄像头视角变化大同时可能暂时禁用某些依赖于水平路面的控制补偿。在技术报告中用流程图来描绘这个状态机是最清晰的方式。同时要给出各个状态切换的判断阈值多少像素、多少帧图像是如何通过大量实验确定的。6. 调试方法论让车告诉你问题在哪调车不是玄学必须有数据支撑。我们搭建了一套基于无线串口如蓝牙、WiFi和上位机软件的调试系统。数据可视化将关键变量如图像每一行的左右边线坐标、计算出的中线偏差、舵机PWM值、电机目标速度与实际速度、陀螺仪数据等打包通过串口发送出去。在上位机我们用过匿名科创地面站、自己写的Qt程序中实时绘制曲线。比如将图像偏差和舵机打角画在同一时间轴上就能清晰看到控制的响应速度和滞后。参数远程调节在上位机界面制作滑动条或输入框绑定车模单片机里的PID参数、阈值参数等。修改后点击发送通过无线串口下发给单片机单片机动态更新参数。这样就能在车跑动的时候实时观察参数变化对控制效果的影响效率提升十倍不止。图像远程显示这是最重量级的功能。我们将二值化后的图像或者关键特征点压缩后通过无线发送在上位机还原显示。这样就能在电脑前直接看到摄像头“眼中”的赛道是什么样子对于调试图像处理算法、分析特殊元素识别失败原因有决定性作用。在技术报告的“调试与优化”章节务必贴上几张你们的上位机调试界面截图并解释如何利用这些曲线和图像发现并解决了某个具体问题例如“通过图像发现环岛入口处误判为弯道原因是边线搜索窗口设置过小调整后解决”。这能极大地体现你们工作的系统性和工程性。回过头看2020年的第十五届智能车竞赛在技术上可能已不是最前沿的但那份技术报告里所蕴含的从问题定义、方案选型、细节实现到测试验证的完整工程闭环思维以及我们在硬件稳定性、控制算法精细度和图像处理鲁棒性上的那些挣扎与突破至今依然鲜活。写一份好的技术报告本质上是在进行一次深度的项目复盘它强迫你梳理清楚每一个技术决策背后的理由。这个过程本身比比赛名次更为重要。希望这篇基于老报告的新解读能帮你少走一些我们曾经走过的弯路更扎实地构建起属于自己的智能车知识体系。最后一个小建议从现在起就养成写开发日志的习惯把每一天的改动、测试现象、分析思路都记下来这将是你最终撰写技术报告时最宝贵的素材。