ARTICLE DETAIL

资讯详情

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

智能车竞赛电路组开源目录:从原理图到PID调参的完整硬件工程笔记

智能车竞赛电路组开源目录:从原理图到PID调参的完整硬件工程笔记 1. 为什么一个比赛战队会认真做开源目录1.1 从被要资料到整理开源的真实动机第二十一届智能车竞赛结束那天我坐在实验室里整理了一个晚上文件。队友们陆续走了桌上还散落着几块烧坏的驱动板墙角堆着用了几个月的车模残骸。当时脑子里只有一个念头把这两年积累的东西全部摊开看看哪些值得留下来。几乎每天晚上都会有人在群里问你们电路组的原理图能发一份吗这个电源模块用的是哪颗料你们的PCB能开源吗一开始我还耐心地逐个发离线文件后来发现同样的回答要重复几十遍于是干脆做了个开源仓库把电路组从立项、方案选型、原理图设计、PCB Layout、焊接调试到赛场维护的全套资料都扔了进去。s博erup战队这个开源目录就是这么来的。真正推着我做完这件事的是很多新手拿着淘宝上几十块钱的现成模块拼车一遇到硬件问题就无从下手。智能车竞赛表面上是比算法、比调参实际上电路是底盘底盘不稳上层算法再漂亮也白搭。与其零散回答不如把完整链路公开让后来的人少走弯路。开源目录不是炫技是给下一届、给所有正在被电路折磨的参赛者一份可以反复翻看的工程笔记。1.2 开源目录对后来者的实际价值如果只是丢几个压缩包出来那叫分享不叫开源目录。我做这个目录时反复想的是拿到这份资料的人看完之后到底能不能独立画板、独立调试、独立解决故障所以目录里每一类文件都配套了对应的说明文档。原理图给的是可编辑的工程同时附一张原理图阅读引导的Markdown文档把电源流向、信号流向、关键节点电压讲清楚。PCB给的是Gerber和源工程还放了一块板的3D渲染图和实物标注图方便焊接时对照。固件工程里除了代码还有编译环境版本、烧录步骤、引脚分配表。连比赛时的赛道参数、PID调试记录、车模机械尺寸这些偏软的资料也没落下。这套东西对后来者的价值在于它提供了一个完整的坐标系。你可以先照着画一版跑通了再改自己的方案。很多队伍失败不是不够努力而是连正常状态长什么样都不知道出了问题只能瞎猜。开源目录里有故障台账记录了我们遇到过的十几类典型问题每一条都写了现象、排查过程和最终原因。看到这些至少能让人知道下一步该查哪。1.3 开源不等于上传文件目录组织背后的工程思维刚开始我也打算把所有文件一股脑塞进一个文件夹后来意识到智能车资料散乱导致的悲剧太多了队友拿错版本焊了半天发现引脚定义对不上文件命名是最终版2(1)过两天自己都找不到代码和硬件版本不匹配调一天才发现原理图已经改了。所以我给开源目录定的第一原则是硬件版本必须和固件版本严格对应。每块板子都有版本号V1.0、V1.1、V2.0原理图、PCB、固件、调试文档全部以版本号归类。目录结构大概是这样的00_README_总览项目背景、开源协议、目录导航、快速上手路径01_硬件设计按模块拆分子目录每个模块下再分原理图、PCB、BOM、设计说明02_结构设计车模改造、板子安装孔位、传感器支架图纸03_固件工程主控工程、传感器驱动、电机驱动、控制算法、调试上位机04_调参记录各阶段赛道实测数据、PID参数表、问题及对策05_比赛资料规则理解、备赛计划、现场流程、赛后总结这里面最关键的设计是版本号穿透。原理图上的丝印、PCB上的丝印、固件里的宏定义、文档顶部的版本号全部一致。这样无论是队友还是后人拿到任何一块板子、任何一个文件都能立刻定位它属于哪个阶段。开源目录如果只是堆文件那和网盘存档没有区别真正的开源目录应该是一个自带说明书的工程档案。2. soberup战队电路组一年下来的技术主线2.1 21届规则下的整车架构第二十一届智能车竞赛的组别设置和规则细节很多地方都可以在官网查到这里只聊我们电路组视角下的整车架构。比赛的核心是让车在赛道上稳定地跑而且随着届数增加赛道元素越来越复杂环岛、十字、坡道这些元素对硬件提出了更高要求。我们的车整体上可以拆成这样几个部分车模底盘、驱动电机及编码器、转向舵机、主控板、传感器板、电源管理模块、调试交互模块。电路组的任务不是单纯画一块板子而是要保证整个电气系统从电池到芯片、从传感器到电机的链路都稳定可靠。电源部分是整车的基础我们用了两套独立电源数字部分和功率部分分开。数字部分给MCU、传感器、编码器供电功率部分给电机驱动和舵机供电。这样做的原因很简单电机启动瞬间电流能到好几安培如果和传感器共地共电源电压跌落会被传感器放大成噪声直接影响图像或电磁信号。很多同学做完板子发现摄像头画面有横纹十有八九是电源没处理好。主控我们选择了常见的高性能MCU电路组做的核心工作是设计好最小系统板电源滤波、晶振、复位、下载调试接口、所有外设引脚的引出。这里有个容易被忽视的点引脚引出不要贪多够用就好。引脚引太多会导致布线时过孔密集、地平面被切碎信号质量反而变差。2.2 模块拆解从电源到执行器把电路组一年的工作拆开核心模块就那么几个但每一个都能决定车的生死。第一个是电源模块。电池电压经过防反接、保险丝、共模电感后分两路一路经过一级DC-DC降到主电压再经过LDO给模拟器件供电另一路直接给电机驱动桥供电。DC-DC效率高但纹波大给到MCU之前必须用LDO再滤一遍。有些队伍为了省事直接用LDO从电池电压降压结果是LDO发热严重电流一大就进入过热保护车跑几圈就断电重启。这个坑我们踩过后来乖乖换回DC-DCLDO的两级方案。第二个是电机驱动模块。驱动芯片选择要考虑耐压、峰值电流、导通电阻和散热。我们用的驱动方案是半桥驱动器加分立MOS管。这么做的好处是灵活可以按电机功率选MOS管坏处是PCB布线要求更高尤其是栅极驱动回路线太长会导致开关振荡。第三个是传感器接口。摄像头组的核心是图像采集涉及摄像头排线、电平转换、FIFO/直接内存访问接口电磁组的核心是信号调理感应电压经过放大、滤波、整流之后送进ADC。无论哪种方案模拟前端都要特别注意阻抗匹配和滤波截止频率。第四是测速与转向反馈。编码器安装的机械精度直接影响测速质量联轴器稍微歪一点波形就会出现周期性的毛刺。我们后来在编码器输出端加了施密特触发器整形才彻底解决毛刺误计数的问题。2.3 为什么电路组要自己画板而不是买现成模块这个问题几乎每个新队员都会问。买现成模块确实省事网上有各种各样的电机驱动板、电源模块、摄像头转接板看起来直接拼起来就能跑。但智能车竞赛比的不是能不能跑而是能不能稳定地快。买来的模块是为通用场景设计的不会为你的车优化布局、优化走线、优化散热。更重要的是如果完全不做硬件电路组就失去了存在的意义。竞赛过程中会遇到大量需要改硬件的情况传感器灵敏度不够要改放大电路、电机响应滞后要加大电流保护电容、整车重量分布要改板子形状以适配重心。这些需求靠买模块是满足不了的只能自己动手。自己画板还能帮你建立信号完整性的直觉。比如摄像头PCLK时钟频率不低线上串个小电阻可以抑制振铃电机驱动下管续流路径必须短而粗ADC采样参考电压要单独走线不要和数字电源混在一起。这些经验不是看文档看来的是画错板子、测出波形异常之后一点点积累的。但我不建议大家一上来就从零开始。做硬件的正确路径是先复现成熟设计理解每个电阻电容的作用然后才自己修改。开源目录里的硬件设计就是给大家提供这样一个可以复现、可以修改的起点。3. 开源目录里最值得细看的五类文件3.1 原理图与PCB不只给工程文件还给设计说明原理图这块我们开源了完整的工程文件但真正的重点在配套的设计说明.md。因为原理图是静态的新人看原理图最常犯的毛病是看得懂每一个符号但不知道为什么要这样连。设计说明里我会写明每个模块的设计意图。比如电源部分为什么选择这一颗DC-DC开关频率定多少电感选多大纹波实测是多少电机驱动部分为什么用半桥加MOS管的方案死区时间怎么设置栅极电阻为什么取这个阻值。每一处细节都有据可查而不是别人都这么用我也这么用。PCB文件同样配了说明重点标注了布局分隔线数字区、模拟区、功率区在哪里地平面怎么分割过孔怎么布置。Layout这种东西光看最终文件很难理解当时为什么这么走线只有把设计约束写出来别人才学得到思考过程。这也回应了开头说的可参考、可复现真正的开源不是把结果丢出来而是把决策过程也一并开放。3.2 结构件与安装图电路组很容易陷入只画电路板的误区结果板子画好了装不到车上。板子的外形尺寸、安装孔位置、高度限制、接口朝向都必须和车模结构匹配。我们开源的目录里有结构件的3D图档和安装示意包括主控板支架、摄像头支架、编码器安装座、电池固定板。这些结构件很大程度上决定了整车稳定性。摄像头支架要是固定不牢过弯时图像会抖算法再强也救不回来编码器安装座要是和电机轴不对中测速信号会周期性跳动PID控制器看到错误的转速输出就会忽大忽小。电路组的人如果能在设计板子时就考虑安装后面能省大量调试时间。我特别推荐大家去看我们的安装检查清单。上面列了每一项装配完成后需要检查的点螺丝扭矩是否合适、排线是否会被舵机运动扫到、板子背面有没有和车架短路的风险、重心大概在哪。这些细节看起来琐碎但比赛现场很多车跑着跑着突然复位排查半天发现就是一根杜邦线松了。3.3 固件工程与配置智能车固件这块如果只看代码很难理解控制流程。所以我们不仅开源了工程还写了一份固件架构说明讲清楚几个模块之间的关系初始化、传感器采集、控制计算、电机输出、调试通信。控制频率是多少中断优先级怎么分配哪些变量是在中断里改的哪些是主循环里用的这些信息比代码本身更重要。代码风格上我们尽量做到模块化驱动层和应用层分开。驱动层负责寄存器操作应用层负责逻辑这样换芯片平台时只需要重写驱动层。比赛过程中我们换过一次主控型号因为驱动层隔离得好整个控制代码几乎没动只花了两天就把新平台跑通了。配置方面引脚定义表是单独整理的和硬件版本号对应。每个引脚的功能、复用的功能、默认状态都列得很清楚。新人拿到板子对照引脚表就能知道哪根线接哪里不用抱着万用表一个个量。3.4 调参记录与赛道数据这是我个人觉得最珍贵的一部分。智能车圈子里大家常说得调参是玄学玄在哪里因为很多队伍调参数时不记录凭手感试。今天把比例系数调大车变快了但不知道为什么会变快明天赛道换个元素突然又乱了也不知道为什么乱。我们的调参记录是标准化的表格每次调参包含日期、赛道元素、车模状态、主要修改参数、现象描述、结论。比如调整电磁传感器放大倍数后记录直道速度提升多少、环岛入弯是否更稳、对坡道有没有负面影响。有了这些记录调参就不再是玄学而是一个可以回溯、可以对照的优化过程。赛道数据主要是传感器原始数据和车模状态数据通过调试上位机采集。公开这些数据的价值在于后来者可以用真实数据验证自己的算法不用从头模拟。比如摄像头组的图像数据、电磁组的归一化电压曲线、编码器的测速波形这些都能帮助新人理解传感器输出到底长什么样。3.5 比赛心得与故障台账这个部分不涉及具体技术却能体现一支队伍的技术文化。我们把自己从备赛到比赛整个过程犯过的错、踩过的坑全部整理成了文字。故障台账是里面最有用的。每一条记录包括故障现象、出现环境、排查过程、最终原因、解决办法、预防措施。比如车启动瞬间重启这条排查了电源、复位、固件三个方向最后发现是舵机大电流导致DC-DC输入端电压跌落解决方式是加大输入电容并增加软启动电路。这种记录如果只写在QQ群里过两天就没了写进开源目录就能一直受益。4. 电路实现里最容易被忽略的几个坑4.1 电源拓扑为什么电池电压不是直接进MCU这是每一个自己画板的新手都会犯的错看到MCU工作电压是3.3V就拿一块LDO从电池电压降压结果板子一上电就烫得厉害。原因很简单线性降压的压差全部转化成了热量。电池电压如果是7.4V降到3.3V压差4.1V假设系统电流200mA稳压器上的功耗就是0.82W小封装根本扛不住。更麻烦的是电机堵转或者传感器启动瞬间电流衝到500mA以上LDO会进入限流保护输出电压一路掉下去MCU就直接复位了。正确做法是先DC-DC降压再用LDO二次滤波。DC-DC效率能到90%以上把压差问题留给开关电路去解决LDO只承担滤除纹波的任务输入输出压差留1V左右就够了。开源目录里的电源模块设计说明把每一级电压的实测纹波都标出来了大家可以拿来当参考。噪声这东西看不见摸不着但摄像头画面里一条条横纹、ADC采样值的抖动全都是它惹的祸。4.2 电机驱动中的续流与地弹电机是感性负载MOS管关断瞬间会产生很大的反向电动势。如果不在电机两端放置续流二极管或者使用带续流功能的驱动方案瞬间电压可能冲到几十伏直接击穿MOS管。这不是理论问题我们烧过至少五块驱动板才彻底重视起来。续流解决后还有一个更隐蔽的问题是地弹。电机驱动回路的电流变化非常剧烈如果功率地和信号地直接混在一起地线上的电压波动会传导到MCU的参考地导致ADC采样值跳跃、甚至MCU死机。处理方法是功率地单点连接到电源负极模拟地、数字地、功率地在电池负极处单点汇合。这样各回路电流各走各的路互不干扰。栅极驱动也不能忽略。MOS管的栅极和源极之间有一个米勒电容驱动信号路径太长或驱动能力不够会导致MOS管开关变慢、损耗增大。我们最后在栅极串联了一个小阻值的电阻又在栅源之间并联了一个放电电阻波形才变得干净。电机驱动的PCB走线强烈推荐短而粗尤其是大电流回路。4.3 传感器信号调理从能跑到稳的差距很多队伍传感器部分能跑但跑不稳问题往往出现在信号调理上。以电磁组为例工字电感感应到的电压只有毫伏级别必须先经过放大才能给ADC使用。放大电路的设计直接决定信号的底噪水平和动态范围。我们用过两级放大第一级用仪表放大器做差分放大目的是抑制共模干扰第二级用运算放大器做低通滤波和增益调整。这里面最影响稳定性的是参考电压。有些运放单电源供电需要提供一个虚拟地作为参考如果虚拟地噪声大整个信号就会漂。我们后来用了专门的参考电压芯片温漂和噪声都小很多才解决了上午调好下午就跑偏的问题。摄像头组的问题又不一样。图像信号频率高重点是保证信号完整性。摄像头排线不要太长能直接焊就不要用接插件时钟信号线上可以串一个小电阻匹配阻抗电源引脚旁边必须放去耦电容而且去耦电容要尽量靠近引脚。这些措施单看都不起眼合在一起就是清不清楚的区别。4.4 打板与焊接目录里不会写的工艺细节开源目录给的是设计文件但板子发出去打样之后焊接和调试的功夫是文件表达不了的。我建议新手第一次焊接时先从电源部分开始焊焊完先不装MCU上电量各路电压是否正确。确认电压无误后再焊MCU最小系统最后焊外设电路。这样出了问题能快速定位不会出现全部焊完一上电冒烟不知道是哪块的锅的悲剧。焊接温度很关键。很多芯片是引脚间距很小的贴片封装烙铁温度太高容易烫坏太低又焊不动。铅锡焊锡丝推荐用含铅的熔点低流动性好适合手工焊接。焊接完成后用洗板水把助焊剂清理干净特别是MCU引脚附近否则助焊剂受潮会引起漏电。调试时一定要用稳压电源加限流。先把电流限制在几百毫安再上电观察电流曲线如果电流异常飙升立刻断电排查。不要直接上电池电池内阻小短路时电流可以非常大烧板子往往就是一瞬间的事。5. 从硬件到软件PID输出角速度的试错过程5.1 控制链路上的几个关键量智能车控制的核心问题通俗讲就是根据传感器信息决定给电机和舵机多大的指令。PID是其中使用最广泛的控制算法但到底反馈哪个量很多人没有想清楚。转向控制里输入量是赛道信息图像偏差或电磁场偏差输出量是舵机角度。这个环路的反馈量可以由摄像头或电磁传感器直接给出偏差也可以引入车模的角速度做内环。速度控制里反馈量通常是轮速由编码器测得输出量是电机占空比。热词里提到智能车PID输出角速度这就涉及到控制结构问题。简单的做法是直接用赛道偏差比例换算舵机打角这样做的问题是偏差大时打角过大车会左右摆动偏差小时打角过小转向不灵敏。引入角速度反馈后控制系统就有了阻尼抑制了车模的摆动但角速度怎么来常见有两种方式。5.2 角速度反馈的两类来源第一种是陀螺仪。大部分惯性测量单元上都带有陀螺仪直接输出绕Z轴的角速度。优点是数据直接、不依赖传感器计算缺点是零偏漂移。每次上电的零偏可能不一样需要做静态校准而且陀螺仪数据有噪声要配合滤波使用。第二种是软件微分。用编码器测速得到的左右轮速差来估算角速度公式很简单角速度近似等于(左轮速-右轮速)/轮距。这种方法成本低、没有零点漂移问题但微分会放大噪声轮速稍有毛刺角速度估算就会出现尖峰。两队方案各有取舍。我们在主环控制中引入了陀螺仪角速度作为内环反馈又用编码器差速做了一个软备份验证。实际跑下来陀螺仪方案在高速过弯时明显更稳但陀螺仪安装位置要靠近车模几何中心否则转弯时的离心力会带来额外加速度干扰。具体的陀螺仪标定方法、滤波器参数、PID整定顺序在开源目录的调参记录里有完整的版本演进从第一版到最后比赛版每一步为什么改都有备注。5.3 现场调参的实操顺序调PID是智能车竞赛里最磨人的环节。我给新人的建议是先内环后外环先静态后动态先低速后高速。具体来说转向控制先只调偏差比例系数让车在低速下能沿着赛道走。此时比例系数不能大否则车会抖。车能走稳了再慢慢加角速度内环反馈你会发现车的摆动明显变小过弯姿态更顺滑。接下来再拉速度速度每提高一档都要重新检查转向参数因为高速下需要的打角更提前延时更敏感。速度控制这边先只调比例系数让车在直道上能跑出稳定速度。然后加积分项消除稳态误差最后加微分项抑制超调。注意微分项很容易放大噪声如果编码器波形不好微分项会让电机声音发闷此时不要一味调参数先回去检查硬件。现场调参最重要的是一次只改一个参数。很多人看到车不稳就同时改三个参数改了之后车变好了但根本不知道是哪个参数起的作用下次遇到新赛道又无从下手。我们会拿一个本子记录每次改动哪怕只是改了一个百分比。这套方法论写在开源目录里比给参数表更有价值。5.4 软件架构中断、调度与看门狗硬件稳定后软件架构决定了下限。我把整个固件分成三层底层驱动、中间调度、上层算法。底层驱动包括寄存器初始化、传感器数据读取、PWM输出、编码器计数中间调度负责在固定的时间周期里调用不同模块比如每1毫秒采集一次编码器每5毫秒运行一次方向控制每10毫秒更新一次速度环。这里有个血泪教训中断里不要做耗时操作尤其是浮点PID运算。刚开始为了图省事把整个控制算法全部放在定时器中断里执行导致中断执行时间过长其他中断响应不及时编码器计数丢失整车状态一片混乱。后来把控制计算放到主循环中断里只做传感器标志位置位和数据缓存问题才解决。看门狗一定要开。比赛中车辆可能会死机如果没有看门狗车就会直冲出赛道。我们使用独立看门狗在主循环里定期喂狗一旦程序跑飞看门狗超时复位车至少能停下来。复位之后不要立刻全速跑要先让车检测到赛道再进入正常控制。这些细节都是在赛场上被摔出来的经验。6. 开源之外备赛节奏、队伍协作与比赛现场6.1 半年时间表智能车备赛的周期很长如果没有节奏前期松散后期熬夜效率非常低。我们队伍的节奏大致是这样的第一阶段第一个月学规则、定方案、拆解车模。电路组集中看完历年开源资料确定主控、传感器、驱动方案画出版本一。第二阶段第二三个月画板、打样、焊接、调通最小系统。这个阶段最容易卡住因为问题会集中在硬件和驱动很多人在这里崩溃。第三阶段第四个月整车联调跑赛道元素。把每一个赛道元素单独拿出来调再组合成完整赛道。第四阶段最后一个月提高稳定性做冗余设计。比赛比的其实不是最快是最稳定。这个月要尽量减少偶然性。第一版板子很少能直接用。我们前前后后打样了六七次每次打样都要3到5天。如果时间规划不好很容易出现改完这版没有时间测试的尴尬处境。所以我的建议是第一版电路一定要尽早发出去哪怕有些功能还没想清楚。先用一版跑通流程后面再迭代。6.2 队内分工与文档同步电路组不是一个人在战斗。我们队里有整车组、软件组、机械组每个人负责一部分但硬件和软件的接口必须有人统一管理。管道耦合最紧的就是引脚定义和数据结构软件需要知道哪个引脚接了哪个传感器硬件需要知道软件期望什么电平、什么时序。我们的做法是每周固定开一次接口评审会对照原理图、引脚定义表和固件代码逐个外设确认状态。每个版本更迭时文档必须先行代码和硬件跟进。如果硬件改了引脚软件没有同步更新轻则功能失效重则烧毁芯片。文档同步这件事做到位了能省下大量队友之间互相问的时间。开源目录里有一个变更记录.md专门记录每次硬件和软件的变更内容、变更人、日期、影响范围。看起来好像很繁琐但坚持下来你会发现队伍的信息损耗会变得非常低每个人拿到目录就能快速了解当前状态。6.3 现场突发情况处理比赛现场永远会出现预料之外的情况。我们经历过的就有到场后发现电池电压不够、备用板子因存放不当引脚氧化、现场干扰导致传感器数据异常、临时要改参数但上位机连不上。我的经验是电路组一定要准备一个现场应急箱。里面装着备用板子、各种型号的电阻电容、MOS管、二极管、杜邦线、排针、几块已经烧录好固件的备用芯片、万用表、烙铁、焊锡丝、助焊剂、备用电池。要想到的不是这些可能用得上而是如果明天要出车我今晚必须检查哪几样。备用板子别只带一块至少带两块而且上场前要实际测试过。很多队伍带的备用板子从来没跑过真正要用的时候才发现有问题那就等于没有备用。应急箱里的元器件要按BOM清单整理贴好标签不然现场乱成一团谁也找不到东西。比赛当天还有一件很重要的事把车模充满电的电池留足至少两组并且提前量好电压。有些电池放电平台高跑起来电压下降得快到了最后一圈突然软脚这种情况现场根本来不及充电全靠事前准备。7. 开源许可证与后续共建方向7.1 仓库采用的开源方式开源不是把项目往平台上一扔就结束了。选用哪种开源许可证决定了别人能拿你的东西做什么、能怎么改、能不能商用。我觉得这一点很多学生团队都没有认真考虑过这里多说几句。我们队内部讨论过几种方案宽松的MIT许可协议别人拿到代码可以随便用、随便改甚至可以商用只要保留版权声明GPL协议则要求如果有人基于我们的代码做了修改并分发出去修改后的代码也必须开源知识共享的署名-相同方式共享协议更偏向文档类内容要求分发时保留署名且以相同方式共享。开源目录里既有文档、图片、结构图又有工程文件、源代码因此很难用单一许可全覆盖。我们的处理方式是代码部分采用MIT协议方便后来的队伍自由使用硬件设计文件和文档采用CC BY-NC-SA协议也就是署名-非商业性使用-相同方式共享允许修改和分享但不得商用并且修改后的内容也要以相同方式共享。这个组合比较灵活既保护了设计不被拿去用于商业产品又不妨碍学习交流。选择协议前一定要想清楚你的目的是什么。如果只是希望被广泛使用MIT就够了如果不想让别人的修改闭源就选GPL如果不想被商用可以加非商业条款。但要注意非商业条款在某些平台会被解读为限制商用可能影响后续被集成到其他项目里。这些都是开源治理里值得关注的点。7.2 如何提交贡献开源目录发布后陆续收到过一些反馈和贡献。有人指出我们的BOM表里有一颗元器件停产了有人提交了改进后的传感器排线走线方案还有人翻译了部分文档。这种陌生人帮你改进项目的感觉是开源最大的魅力。给开源项目做贡献不需要一开始就提拉取请求先从提Issue开始更稳妥。提Issue要写清楚现象、环境、复现步骤最好附上截图或日志。如果是提代码修改要遵守仓库里已有的代码风格并补充说明你的改动思路。我们仓库的贡献指南里写了几条约定不要直接改主分支新功能要开独立分支提交信息要写清楚修了什么、为什么修”涉及硬件修改务必同步更新设计说明文档。另外一个值得分享的点是开源项目一定要写README而且要写清楚快速上手和目录结构。开源目录最怕的就是新人进来不知道从哪看起点开几十个文件夹然后退出。我们后来在根目录放了一张新手学习路径图从零基础到能跑通整车标出了每一步需要看的文件和参考资料。这张图帮助很大很多反馈说拿到目录不再迷茫了。7.3 一年后回看哪些内容最应该坚持下去开源目录做完我的感觉与其说是分享不如说是逼自己做一次彻底的工程复盘。很多当时拍脑袋做出来的决定自己在整理文档时才发现逻辑有漏洞有些方案当时觉得理所当然如今再想其实有更好的替代。如果要说哪些内容最应该坚持下去我会选调参记录和故障台账。代码和板子会过时方案会被淘汰但记录下来的问题排查思路和调参方法论是永远不会过时的。下一届队员哪怕换了整套硬件只要读一遍故障台账就能规避掉我们当年踩过的绝大多数坑。还有一个建议开源不是终点而是下一届的起点。我们公开这些内容是希望后来者能站在更高的起点去挑战新的赛道元素、新规则、新传感器方案。智能车竞赛年年有每年都有队伍在重复造轮子也有队伍下载了别人开源的东西却不愿意回馈一点进步。希望每个人拿走开源资料的时候也能想想自己能贡献什么回去哪怕只是一条经验记录。这样整个开源生态才能真正转起来大家都能跑得更快、更稳。
返回列表