尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

CCF智能无人车国赛实战:从硬件选型到算法调优的完整技术复盘

CCF智能无人车国赛实战:从硬件选型到算法调优的完整技术复盘 1. 从零到一我的CCF智能无人车国赛之旅去年夏天我带着自己亲手打造的智能无人车一路从校赛、省赛杀进了2022 CCF智能无人车大赛的全国总决赛。这不仅仅是一场比赛更像是一场技术与梦想的碰撞。最终我们团队捧回了国赛季军的奖杯更获得了宝贵的资格受邀线下参加了CCF NCCA 2022第37届中国计算机应用大会。在那个汇聚了9位院士、近40位长江学者的殿堂里聆听前沿的科技成果报告与全国顶尖的同行交流切磋那种震撼与收获远超一块奖牌本身。今天我想抛开那些官方的比赛总结从一个参赛者、一个技术实践者的角度复盘这段经历把备赛、调试、临场应对的“干货”和“踩过的坑”毫无保留地分享出来。无论你是对智能车感兴趣的新手还是正在备战类似竞赛的同行希望这篇“战后总结”能给你带来一些实实在在的启发。智能无人车大赛听起来很高大上其实核心就是让一个小车模型在特定的赛道上完全自主地完成行驶任务。它融合了嵌入式开发、传感器技术、控制算法、机器视觉或激光雷达等多个领域是一个绝佳的工程实践平台。CCF举办的这个赛事在高校和企业中认可度很高堪称国内该领域的“顶赛”之一。参加这类比赛你收获的绝不仅仅是编程和焊接技能更是面对复杂系统问题时如何拆解、调试、迭代和团队协作的完整能力。2. 赛题核心与我们的整体设计思路2.1 赛题解析到底比的是什么那一年的赛题赛道环境模拟了城市道路场景包含了直道、弯道、十字路口、环岛、减速带以及动态障碍物避让等元素。小车需要通过车载传感器感知环境通过核心控制器做出决策控制电机和转向舵机实现稳定、快速且合规的行驶。核心考核点可以归纳为三个层面感知的准确性与鲁棒性小车必须实时、准确地“看清”赛道。主流方案有两种基于摄像头的视觉方案和基于激光雷达的SLAM同步定位与建图方案。视觉方案成本低、信息丰富但对光线变化敏感激光雷达方案测距精准、不受光照影响但成本高且对特征点少的场景如长直白墙处理较难。赛题往往会在灯光、赛道背景上设置干扰考验感知系统的鲁棒性。决策与控制算法的效率感知到赛道信息后如何计算出最优的行驶路径和控制量这里涉及路径规划如何走和运动控制如何执行。简单的巡线比赛可能用PID控制就够了但在复杂赛道中可能需要更高级的算法如预瞄控制、模型预测控制MPC甚至结合一些轻量化的机器学习方法进行决策。系统的稳定与实时性这是一个软硬件结合的嵌入式实时系统。从传感器数据采集、图像处理、算法运算到电机控制必须在几十毫秒内完成一个闭环。任何环节的延迟或抖动都会导致小车跑偏、冲出赛道。因此硬件选型、软件架构、任务调度都至关重要。我们的队伍经过评估选择了“摄像头视觉为主多传感器融合校验”的技术路线。主要基于以下几点考量首先赛题环境虽然复杂但赛道边界如边线特征相对明显视觉方案足以应对其次团队在图像处理方面有较多的积累最后也是最重要的——成本可控可以将更多预算和精力投入到算法优化和稳定性调校上。2.2 硬件平台搭建稳定是速度的前提硬件是算法的载体一个稳定可靠的硬件平台是成功的一半。我们的硬件配置清单和选型思考如下主控制器我们选择了STM32H743系列高性能MCU。为什么是它相比于常用的STM32F4系列H7系列主频更高我们用到480MHz拥有更丰富的RAM和Flash特别是带硬件FPU和DSP指令集对于运行图像处理中的浮点运算和矩阵操作有巨大加速作用。当时也考虑过使用“MCU协处理器”如K210进行视觉预处理的方案但权衡后认为引入额外的芯片会增加系统复杂度和通信延迟而一颗强大的H7如果能扛住所有任务系统会更简洁可靠。视觉传感器选用了一款全局快门的OV7725摄像头。这里有个关键点一定要用全局快门常见的卷帘快门摄像头在小车高速运动时会产生“果冻效应”导致图像扭曲严重影响赛道识别。全局快门则能很好地避免这个问题。摄像头通过DCMI接口直接与MCU连接利用DMA传输最大限度降低CPU开销。辅助传感器编码器安装在电机上的光电编码器用于测量车轮实际转速实现精确的闭环速度控制。IMU惯性测量单元MPU6050提供三轴加速度和角速度。它的作用不仅仅是提供姿态角更重要的是在图像处理出现短暂失效如强光干扰导致“失明”时能通过惯性数据短时间预测小车的位姿和运动趋势为系统提供一个宝贵的“缓冲时间”避免小车瞬间失控。超声波传感器/TOF用于检测赛道上的动态障碍物实现避障功能。动力与执行机构核心是电机和舵机。我们使用了直流减速电机配合电机驱动模块如TB6612。舵机则选择响应速度快、扭矩足够的数字舵机。电机的供电必须独立且充足我们使用了两节大容量18650锂电池串联供电并经过稳压模块为不同部件提供稳定电压。硬件搭建心得电源是“万恶之源”很多莫名其妙的复位、传感器数据跳动问题最终都追溯到电源干扰。电机启停的瞬间会产生很大的电流冲击和电压跌落。务必为核心控制器和传感器设计独立的LDO稳压电路并在电源入口处加足够大的电容和磁珠进行滤波。布线艺术信号线特别是摄像头数据线、编码器线尽量远离电机驱动线和电源线避免电磁干扰。如果条件允许使用屏蔽线。所有连接处最好用热熔胶或扎带固定防止在高速震动中脱落。接地要共地整个系统要有一个统一的“干净地”所有模块的接地最终都要汇集于此避免形成地环路引入噪声。2.3 软件架构设计模块化与实时性软件上我们采用了基于FreeRTOS实时操作系统的模块化设计。将不同任务拆解到不同优先级的线程中确保关键任务能得到及时响应。任务划分与优先级从高到低控制任务优先级最高。定时如1ms触发读取当前规划出的目标速度和转向角通过PID算法计算PWM占空比驱动电机和舵机。这个循环必须绝对稳定。传感器数据采集任务包括编码器计数读取、IMU数据读取通过I2C或SPI、超声波测距等。频率较高优先级次于控制任务。视觉处理任务这是最耗时的任务。摄像头通过DMA将一帧图像存入缓冲区后触发中断在该任务中进行图像处理。包括图像二值化、边缘检测、赛道中线提取、弯道识别等。其优先级可以设置得比控制任务低但必须保证在最坏情况下处理一帧的时间不能超过控制周期。决策规划任务基于视觉处理输出的赛道信息和车辆当前状态速度、位置进行路径规划和速度规划。例如识别到急弯就提前减速进入长直道就加速。调试与通信任务优先级最低。负责通过串口向上位机发送小车的状态数据、图像处理结果等方便我们在线调试。也可以接收来自上位机的参数调整指令。这种架构的好处是清晰、可维护。当图像处理偶尔卡顿时由于控制任务独立且高优先级小车依然能根据上一帧的有效结果或IMU的惯性数据维持基本控制不至于立刻“趴窝”。3. 核心算法实现与调参“血泪史”3.1 视觉感知如何让小车“看得清、认得准”视觉处理是整个系统的“眼睛”。我们的流程是图像采集 - 预处理 - 感兴趣区域ROI设定 - 二值化 - 扫描找边线 - 中线拟合。预处理与ROI原始图像是灰度图。首先进行高斯滤波消除噪声。然后我们并没有处理整幅图像比如120*160而是划定了几个动态的ROI区域。例如在图像底部划一个宽区域用于检测近处的赛道在图像中部和上部分别划较窄的区域用于预测远处的赛道走向。这样大大减少了需要处理的像素数量提高了速度。二值化——最大的挑战这是最核心也最易出错的环节。固定阈值法在光线变化时完全失效。我们采用了“自适应阈值分割”方法。一种行之有效的策略是对每个ROI区域统计其灰度直方图利用大津法OTSU或结合赛道边线特征如边线通常是黑-白-黑或白-黑-白的跳变动态计算阈值。我们还在系统中维护了一个“曝光补偿”值根据图像的整体亮度动态调整确保在不同光照赛道上都能得到清晰的二值图像。边线提取与中线拟合在二值化后的ROI中从左到右或从右到左进行列扫描寻找像素值从0到255或255到0的跳变点这些点就是潜在的边线点。然后使用最小二乘法将这些点拟合成左右两条边线。最后取左右边线的中心点连接起来就得到了赛道的中线也就是小车应该跟随的路径。视觉调试的“玄学”与科学上位机是你的眼睛一定要开发一个强大的上位机软件可以用Qt、PyQt等。它能实时显示摄像头原始图像、二值化后的图像、拟合出的边线和中线。没有这个调参就是盲人摸象。我们当时能快速定位问题全靠上位机把每一步处理结果可视化。应对“丢线”弯道太急、光线过曝或欠曝都可能导致某一边的边线提取失败。我们的策略是如果一边丢线就根据另一边边线的曲率和历史中线信息预测出丢失的边线位置。例如在右转弯时左边线容易丢就假设赛道宽度恒定根据右边线向左平移一个固定距离作为预测的左边线。十字路口与环岛识别这是难点。我们的方法是识别边线的特殊拓扑结构。例如在扫描中发现边线点数量急剧增多说明宽度突然变大且中线点出现分叉就判断可能进入了十字路口。此时决策算法会切换到“路口通过模式”采用简单的“看左/右前方边线”或“惯性直行一段距离”的策略。3.2 控制算法如何让小车“走得稳、跑得快”有了准确的中线接下来就是控制小车沿着中线走。我们采用了经典的“横向控制纵向控制”分离策略。横向控制舵机控制目标是控制前轮转向让小车对准赛道中线。我们使用了“位置式PID结合预瞄点”的方法。误差计算误差不是当前车头指向与当前中线点的偏差而是车头指向与前方一定距离预瞄距离处的中线点的偏差。这个预瞄点就像司机开车时看远处而不是看车头。预瞄距离不是固定的它会随着小车速度的增加而线性增加速度越快看得越远转向越平缓。PID调参P比例系数负责快速响应D微分系数抑制振荡I积分系数消除静态误差。在智能车上I项通常很小甚至为0因为赛道是持续变化的没有绝对的静态误差。调参时先在直道上调P让小车能快速回正但不振荡再加入D抑制过弯时的“画龙”现象。这个过程非常依赖实车测试和上位机观察误差曲线。纵向控制电机速度控制目标是控制小车速度。我们实现了一个速度规划器。根据赛道的曲率通过中线点的导数估算来动态设定目标速度。直道给最高速弯道曲率越大目标速度越低。电机本身则通过PID闭环控制根据编码器反馈的实际转速与目标转速的差值调整PWM输出。控制调参的血泪教训“慢就是快”初期不要追求速度。先把所有参数调小让小车能在赛道上以很低的速度稳定跑完全程。稳定是1速度是后面的0。没有稳定再快的速度也是零。分模块调试关闭速度控制用手推着小车只调试舵机的横向控制观察它能否准确地跟随中线。然后再固定舵机角度只调试电机的速度闭环看它能否快速、平稳地达到并保持设定速度。最后再把两者结合起来。数据记录与分析我们的上位机可以记录下每一时刻的目标速度、实际速度、舵机误差、舵机输出PWM、赛道曲率等数据。赛后回放这些数据能清晰地看到在哪个弯道出现了速度过高、误差激增等问题从而有针对性地调整速度规划表或PID参数。4. 国赛现场实战与问题应急手册到了国赛现场环境、灯光、赛道摩擦系数都可能与实验室不同。这时候前期扎实的基础和临场应变能力就至关重要了。4.1 赛前检查与适应性调整硬件状态复查检查所有螺丝是否紧固轮胎是否有磨损或沾灰用酒精擦拭电池电量是否满格所有接插件是否牢靠。我们甚至准备了一套备用核心板、电机和舵机。快速标定现场给时间熟悉赛道。我们做的第一件事不是让小车全速跑而是进行“环境适应性标定”。摄像头标定在赛道旁放置一张已知黑白图案的标定板让小车拍摄快速调整摄像头的曝光时间、增益等参数确保在当前光照下黑白阈值清晰。传感器校验将小车放在赛道上静止观察IMU的零漂是否过大推动小车一小段距离看编码器计数是否准确。参数微调根据赛道材质可能是高摩擦力的地毯或光滑的PVC和弯道特点微调速度规划表。如果弯道更急就把对应曲率下的目标速度再降低一些。4.2 比赛中遇到的典型问题与秒级应对即使准备再充分比赛时也会遇到意外。下面是我们遇到或见其他队伍遇到的真实问题及应对策略问题现象可能原因应急排查与解决思路小车启动后原地打转或向一边猛冲1. 电机线接反。2. 编码器A/B相序接反。3. 陀螺仪安装方向不对Z轴正负号错误。4. 控制参数初始化异常。1.立即断电2. 检查电机接线交换测试。3. 用手轻轻转动车轮观察上位机显示的速度值是正是负。4. 检查IMU初始化代码中的坐标系设置。5. 确认所有控制参数在程序开始时被正确赋值。小车在直道跑偏画龙1. 机械结构不对称左右轮摩擦力或转向机构中位不准。2. 摄像头安装不正。3. 横向控制PID的D参数过小或P参数过大。1. 目测检查摄像头是否居中且水平。2. 在直道上让小车静止观察上位机识别的中线是否在图像中央。若不中微调摄像头角度或软件设置一个固定的偏移量补偿。3. 适当增大D参数或减小P参数。过弯时冲出赛道1. 速度过快。2. 预瞄距离太短或太长。3. 弯道识别延迟进入弯道后才减速。1.首要措施降低该弯道的目标速度。2. 根据弯道半径调整预瞄距离急弯用短预瞄缓弯用长预瞄。3. 优化图像算法争取更早地识别出弯道曲率变化趋势例如通过分析前方多个中线点的走向。遇到光线干扰如窗户反光区域突然失控视觉二值化失效大面积噪点或全白/全黑。1.启用融合策略在图像质量置信度低时短暂依赖IMU的角速度数据进行姿态维持和直行预测。2.增加图像质量判断例如统计有效边线点的数量如果数量骤减则判定为异常使用上一帧的有效结果或进入安全模式减速、保持原转向。小车运行一段时间后变慢或重启1. 电源电量不足或稳压芯片过热。2. 程序跑飞看门狗复位。1. 赛前充满电检查稳压芯片是否有散热措施。2. 在关键任务循环和可能阻塞的地方喂狗。通过调试串口输出信息判断复位原因。4.3 心态与团队协作国赛现场高手如云氛围紧张。除了技术心态和分工也决定了最终表现。明确分工我们团队三人一人主要负责硬件和底层驱动“车手”一人主要负责视觉和决策算法“眼睛和大脑”一人主要负责调试上位机和参数整定“教练”。比赛时“车手”负责硬件操作和应急维修“教练”盯着上位机数据实时反馈“大脑”根据现场情况做出参数调整决策。沟通简洁高效。制定策略比赛通常有多次机会如两次正赛取最好成绩。我们的策略是第一次求稳第二次求快。第一次跑目标是确保完赛拿到基础成绩。在这个过程中观察小车在每个弯道、每个特殊元素的表现记录下问题点。第二次跑之前针对性地微调参数尝试冲击更高速度。应对意外如果第一次跑就出现重大失误如冲出赛道不要慌。利用宝贵的间隔时间冷静分析上位机记录的数据和视频回放定位问题根源。是某个传感器突然失灵还是某个弯道的参数确实不合适有时候一个小的参数调整就能带来质的改变。5. 超越比赛从赛场到学术殿堂获得国赛季军为我们赢得了参加CCF NCCA 2022大会的入场券。这让我深刻体会到这类高水平竞赛的意义远不止于名次。在大会现场聆听了多位院士和长江学者关于人工智能、自动驾驶、边缘计算等前沿领域的报告。我印象最深的一点是学术界研究的许多“高大上”的算法如强化学习、端到端驾驶、复杂环境预测其落地验证的初级舞台恰恰就是我们玩的智能车这样的嵌入式平台。我们的比赛实际上是在一个微缩的、可控的环境里实践着自动驾驶最核心的“感知-决策-控制”闭环。与来自其他高校的顶尖队伍交流更是开阔了眼界。有的队伍采用了基于深度学习的端到端控制直接输入图像输出转向和油门指令有的队伍在轻量化的MCU上部署了微型SLAM算法。大家互相分享技术难点和解决方案这种纯粹的技术碰撞让人兴奋不已。这次经历给我的最大收获是工程能力是科研想法落地的基础而科研思维能为工程实践打开天花板。智能车比赛锻炼了我解决复杂系统问题的能力而学术大会则让我看到了这些能力可以应用的更广阔、更前沿的领域。它像一座桥梁连接了课堂知识、工程实践与学术前沿。回过头看那段没日没夜调车、改代码、跑测试的日子所有的焦虑、争论和汗水都化为了领奖台上的喜悦和更重要的——个人能力的实实在在的成长。如果你也对智能车、机器人或自动驾驶感兴趣不妨从这样一场比赛开始亲手打造一个能跑会动的智能体这个过程你会学到比你想象中多得多的东西。
返回列表