
电赛备赛圈有一个很现实的现象代码能跑通的队伍不少真正能稳定演示完整个流程的队伍却不多。很多作品平时调得挺好一到录制作品演示视频就出问题要么目标跟丢要么系统卡死要么视频里看不出技术点。本文围绕电赛E题常见的设计主线整理一套从系统设计、核心代码、联调验证到满分视频录制的完整实操方案。内容偏向工程落地包含可直接复用的代码结构和录制脚本新手能照着搭建有基础的队伍也能用来查漏补缺。需要提前说明的是2026年电赛E题的具体题目以官方发布为准本文以电赛E题常见的“视觉识别 运动控制”方向为例展开这套方法论可以迁移到多数题型上。1. 先搞懂电赛E题在考什么1.1 E题的典型考查方向全国大学生电子设计竞赛的本科组题目通常按方向分为电源类、信号源类、仪器仪表类、控制类等。E题在很多年份属于控制类或仪器仪表类方向常见的考查维度包括传感器数据采集与处理比如摄像头、激光测距、陀螺仪、编码器。运动控制比如云台跟踪、小车循迹、机械臂定位。视觉识别比如颜色识别、形状识别、数字识别、目标坐标解算。人机交互比如屏幕显示、按键设置、语音提示。系统稳定性比如长时间运行不宕机、异常输入不崩溃。这类题目的核心不是某个单一模块而是多个模块之间的协同。评委打分时看重的是“完整跑通”和“稳定复现”而不是某一个模块做得有多复杂。很多队伍把精力全部放在算法上最后忽略了系统整体的鲁棒性反而丢分。1.2 “满分”不是靠运气是靠评分拆解网上很多经验帖喜欢强调“拿到满分作品”但真正拿高分的队伍通常不是靠运气而是把评分点拆解到了每一个功能模块。电赛测评通常分为现场演示和作品文档两部分。现场演示环节评委按照题目评分表逐项测试基础功能是否完整比如开机自检、模式切换、目标锁定。性能指标是否达标比如响应时间、跟踪精度、识别准确率。异常情况处理比如目标丢失后能否自动恢复、干扰环境下是否误判。操作是否友好比如是否需要繁琐的二次开发调试才能演示。所谓“满分视频”本质上是把上面这些评分点全部完整、清晰地呈现出来。也就是说视频不是简单录一段运行过程而是按照评分表逐项展示功能、指标和异常处理能力。1.3 为什么作品演示视频决定最终成绩在一些赛区或评审环节中作品演示视频是对现场测评的补充材料。特别是作品无法运输到现场、或者演示时间有限的场景下视频是评委判断作品完成度的最重要依据。一个常见误区是队伍把视频当作“录屏素材”从头到尾录一段完整流程不剪辑、不做说明、不突出关键指标。这种视频在评委眼里是“没有信息组织”的原始素材很难对应评分表逐项打分。满分视频应该是“按评分表编写的短视频说明书”每个功能点都要有独立镜头。每个关键指标都要有可读数据或直观现象。每个异常处理都要有对比展示。后面第 6 章会专门讲视频结构这里先说结论视频质量能直接影响作品的最终档位值得在备赛后期专门分配时间。2. 系统总体设计2.1 需求拆解我们以电赛E题最常见的“视觉目标识别与跟随控制”方向为例。假设题目要求是系统通过摄像头识别指定目标比如特定颜色的色块并控制云台或小车持续跟踪目标。拆解下来系统核心需求如下实时采集摄像头画面帧率建议不低于 25 FPS。在画面中检测目标并计算目标中心坐标。根据目标坐标与画面中心点的偏差输出控制量。控制执行机构云台舵机或小车电机运动使目标保持在画面中心。当目标丢失后系统进入搜索模式并在重新检测到目标后自动恢复跟踪。整个过程需要可视化反馈方便现场演示和视频录制。这套需求覆盖了传感器、算法、控制、交互四个方面是典型的E题综合场景。2.2 总体架构系统的信息流可以概括为摄像头采集 → 视觉算法模块 → 偏差计算 → 控制策略 → 执行机构 ↓ 屏幕显示与状态记录视觉算法模块运行在算力较高的主控上比如树莓派、Jetson Nano、香橙派或者带摄像头接口的 Linux 开发板。执行机构通常使用单片机控制比如 STM32、ESP32、Arduino。主控和单片机之间通过串口通信。这种“视觉端 运动控制端”分离的架构有几点好处视觉算法耗资源放在 Linux 端便于调试、打印日志、录制画面。运动控制要求实时性放在单片机端可以保证控制周期稳定。两端解耦后即使视觉端出现卡顿单片机端也能保持安全状态不会失控。2.3 模块划分整个系统可以拆成以下几个独立模块模块职责实现载体图像采集模块读取摄像头帧预处理图像Python OpenCV目标检测模块检测目标并输出坐标、尺寸OpenCV 颜色/形状检测或轻量级模型偏差计算模块计算目标与画面中心的像素偏差Python 逻辑控制策略模块根据偏差生成舵机/电机控制指令Python 或单片机 C 代码串口通信模块主控与单片机之间的指令交互PySerial / 单片机 UART显示与记录模块实时显示标注画面、保存日志OpenCV / 文本日志模块划分清晰的好处是备赛阶段可以多人并行开发联调时也容易定位问题。2.4 硬件选型思路硬件选型要遵循“围绕评分点选型”的原则而不是追求性能上限。以本方案为例摄像头建议选择 USB 免驱摄像头分辨率 640×480 或 1280×720 即可关键是帧率要稳定。主控选择能流畅运行 OpenCV 的设备树莓派 4B 或同等算力即可。运动执行机构选择普通数字舵机或者直流减速电机加编码器重点是响应及时、控制精度可调。单片机选择熟悉的平台即可STM32、ESP32 都能胜任。不需要购买昂贵的工业相机或高性能 GPU电赛的评分重点在于“完整稳定”而不是“算法炫技”。3. 环境准备与工程结构3.1 软件环境本文示例代码基于以下环境版本可以根据自己的环境调整操作系统Ubuntu 20.04 / 22.04树莓派 OS 亦可 Python3.8 及以上 OpenCV4.x NumPy1.21 及以上 PySerial3.x安装命令sudo apt update sudo apt install python3 python3-pip pip3 install opencv-python numpy pyserial如果使用的是树莓派建议开启摄像头接口后再执行上述命令。可以用vcgencmd get_camera检查摄像头是否被系统识别。3.2 硬件环境准备以下硬件USB 摄像头一个。二自由度云台两个舵机或两轮差速小车底盘。单片机控制板一块用于接收串口指令并驱动舵机/电机。USB 转 TTL 串口模块用于主控与单片机通信。5V/12V 电源注意舵机和主控分开供电避免电压跌落导致重启。注意舵机启动瞬间电流较大不要和主控共用同一路稳压电源否则主控容易掉电重启。3.3 工程目录建议在 Linux 主控端创建如下目录结构e_project/ ├── main.py ├── config.py ├── modules/ │ ├── __init__.py │ ├── camera.py │ ├── detector.py │ ├── controller.py │ └── serial_link.py ├── logs/ └── videos/main.py主程序入口负责初始化各模块并启动主循环。config.py集中管理所有配置参数。modules/camera.py摄像头采集封装。modules/detector.py目标检测与坐标计算。modules/controller.py控制策略与指令生成。modules/serial_link.py串口通信封装。目录结构分离的好处是后期调整算法或更换硬件时只需要修改对应模块。4. 核心模块实现下面给出每个模块的完整代码示例。这里以“检测特定颜色目标并控制二自由度云台跟踪”为具体场景。4.1 配置文件 config.py配置文件集中管理摄像头参数、检测参数、串口参数和控制参数。# 文件路径e_project/config.py # 摄像头配置 CAMERA_INDEX 0 # 摄像头设备编号 FRAME_WIDTH 640 # 画面宽度 FRAME_HEIGHT 480 # 画面高度 FPS 30 # 期望帧率 # 颜色检测范围HSV色彩空间 # 以红色目标为例OpenCV 的 HSV 范围为 H:0-180, S:0-255, V:0-255 COLOR_LOWER (0, 100, 100) COLOR_UPPER (10, 255, 255) # 目标面积过滤 MIN_AREA 800 # 小于该面积的目标视为噪声 MAX_AREA 200000 # 大于该面积的目标视为全屏干扰 # 控制参数 SERIAL_PORT /dev/ttyUSB0 # 根据实际串口修改 SERIAL_BAUD 115200 # 串口波特率需与单片机一致 CONTROL_INTERVAL 0.05 # 控制周期单位秒 # 死区设置像素 DEAD_ZONE_X 20 # 水平方向死区 DEAD_ZONE_Y 15 # 垂直方向死区 # 舵机控制范围 SERVO_X_MIN 500 SERVO_X_MAX 2500 SERVO_Y_MIN 500 SERVO_Y_MAX 2500 SERVO_X_INIT 1500 SERVO_Y_INIT 1500 # 日志与录像 LOG_FILE logs/run.log VIDEO_OUTPUT videos/demo.avi SAVE_VIDEO False这里需要说明的是COLOR_LOWER和COLOR_UPPER的取值要根据实际目标颜色和光照条件调整。建议正式比赛前用取色工具标定而不是沿用网上默认值。4.2 摄像头采集模块 camera.py摄像头模块负责打开摄像头、设置分辨率和帧率并对外提供读取帧的接口。# 文件路径e_project/modules/camera.py import cv2 from config import CAMERA_INDEX, FRAME_WIDTH, FRAME_HEIGHT, FPS class Camera: def __init__(self): self.cap cv2.VideoCapture(CAMERA_INDEX) if not self.cap.isOpened(): raise RuntimeError(无法打开摄像头请检查设备编号和连接) self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, FRAME_WIDTH) self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, FRAME_HEIGHT) self.cap.set(cv2.CAP_PROP_FPS, FPS) def read(self): ret, frame self.cap.read() if not ret: return None return frame def release(self): self.cap.release()摄像头打开失败是电赛现场最常出现的问题之一。代码里主动抛出RuntimeError并给出提示比程序直接崩溃更容易定位原因。4.3 目标检测模块 detector.py目标检测模块将 BGR 图像转换到 HSV 色彩空间通过颜色阈值生成二值掩膜再利用轮廓检测提取目标。# 文件路径e_project/modules/detector.py import cv2 import numpy as np from config import COLOR_LOWER, COLOR_UPPER, MIN_AREA, MAX_AREA class Detector: def __init__(self): self.lower np.array(COLOR_LOWER) self.upper np.array(COLOR_UPPER) def detect(self, frame): 输入BGR 图像 输出目标中心坐标 (x, y)目标面积 area以及标注后的图像 # 高斯模糊减少噪声干扰 blurred cv2.GaussianBlur(frame, (5, 5), 0) # 转换到 HSV 色彩空间 hsv cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV) # 生成二值掩膜 mask cv2.inRange(hsv, self.lower, self.upper) # 形态学操作去除细小噪点 mask cv2.erode(mask, None, iterations2) mask cv2.dilate(mask, None, iterations2) # 查找轮廓 contours, _ cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if not contours: return None, 0, frame # 选择面积最大的轮廓 max_contour max(contours, keycv2.contourArea) area cv2.contourArea(max_contour) # 过滤面积过小或过大的目标 if area MIN_AREA or area MAX_AREA: return None, area, frame # 计算最小外接圆获取中心坐标 ((x, y), radius) cv2.minEnclosingCircle(max_contour) center (int(x), int(y)) # 在画面上标注 cv2.drawContours(frame, [max_contour], -1, (0, 255, 0), 2) cv2.circle(frame, center, int(radius), (0, 255, 255), 2) cv2.circle(frame, center, 2, (0, 0, 255), -1) return center, area, frame这里有两个关键点使用cv2.GaussianBlur可以大幅减少图像噪声带来的误检。使用cv2.erode和cv2.dilate做形态学滤波能够去掉孤立噪点让目标轮廓更干净。4.4 串口通信模块 serial_link.py串口模块负责向单片机发送控制指令。为了方便单片机解析指令格式定义为X1500Y1500\n其中X后跟水平舵机目标脉宽Y后跟垂直舵机目标脉宽单位是微秒以换行符结尾。# 文件路径e_project/modules/serial_link.py import serial from config import SERIAL_PORT, SERIAL_BAUD class SerialLink: def __init__(self): self.ser serial.Serial(SERIAL_PORT, SERIAL_BAUD, timeout0.1) def send_servo(self, x_width, y_width): 发送舵机控制指令 x_width: 水平舵机脉宽单位微秒 y_width: 垂直舵机脉宽单位微秒 x_val int(max(500, min(2500, x_width))) y_val int(max(500, min(2500, y_width))) cmd fX{x_val}Y{y_val}\n self.ser.write(cmd.encode(utf-8)) def close(self): self.ser.close()单片机端收到该指令后解析出 X 和 Y 的值映射到舵机控制 PWM 比较寄存器即可。这里建议双方先约定好波特率、帧格式和数值范围并用串口调试助手验证通路后再联调。4.5 控制策略模块 controller.py控制策略模块将目标中心与画面中心的偏差转换为舵机脉宽增量。# 文件路径e_project/modules/controller.py from config import ( FRAME_WIDTH, FRAME_HEIGHT, DEAD_ZONE_X, DEAD_ZONE_Y, SERVO_X_INIT, SERVO_Y_INIT, SERVO_X_MIN, SERVO_X_MAX, SERVO_Y_MIN, SERVO_Y_MAX, ) class Controller: def __init__(self): self.center_x FRAME_WIDTH // 2 self.center_y FRAME_HEIGHT // 2 self.x_width SERVO_X_INIT self.y_width SERVO_Y_INIT # 比例系数单位像素 → 脉宽微秒 self.kp_x 1.0 self.kp_y 1.0 def update(self, target_x, target_y): 输入目标坐标输出舵机目标脉宽 如果目标在死区内不做调整防止云台抖动 dx target_x - self.center_x dy target_y - self.center_y if abs(dx) DEAD_ZONE_X: self.x_width - dx * self.kp_x if abs(dy) DEAD_ZONE_Y: self.y_width dy * self.kp_y self.x_width max(SERVO_X_MIN, min(SERVO_X_MAX, self.x_width)) self.y_width max(SERVO_Y_MIN, min(SERVO_Y_MAX, self.y_width)) return self.x_width, self.y_width def lost(self): 目标丢失时进行小范围往复搜索 self.x_width 30 if self.x_width SERVO_X_MAX - 200: self.x_width SERVO_X_MIN 200 return self.x_width, self.y_width控制策略看起来简单但有两个容易忽略的细节死区设置非常关键。如果没有死区目标在画面中心附近轻微抖动时云台会持续微调导致画面晃动。舵机输出必须做限幅。否则在目标快速移动时舵机会收到超出自己机械行程的脉宽发出尖锐的堵转声甚至损坏舵机。4.6 主程序 main.py主程序将上述模块串联起来形成一个完整的闭环系统。# 文件路径e_project/main.py import cv2 import time from config import CONTROL_INTERVAL, SAVE_VIDEO, VIDEO_OUTPUT, LOG_FILE from modules.camera import Camera from modules.detector import Detector from modules.controller import Controller from modules.serial_link import SerialLink class EProject: def __init__(self): self.camera Camera() self.detector Detector() self.controller Controller() self.serial_link SerialLink() self.video_writer None if SAVE_VIDEO: fourcc cv2.VideoWriter_fourcc(*XVID) self.video_writer cv2.VideoWriter(VIDEO_OUTPUT, fourcc, 20.0, (640, 480)) self.logger open(LOG_FILE, w) def run(self): print(系统启动开始跟踪) try: while True: start_time time.time() frame self.camera.read() if frame is None: continue center, area, annotated self.detector.detect(frame) if center is not None: x_width, y_width self.controller.update(center[0], center[1]) status TRACK else: x_width, y_width self.controller.lost() status SEARCH self.serial_link.send_servo(x_width, y_width) # 画面显示与记录 cv2.putText(annotated, fStatus: {status}, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2) cv2.putText(annotated, fArea: {area}, (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 2) cv2.imshow(E-Project, annotated) self.logger.write(f{time.time():.3f} {status} {center if center else (-1, -1)} {area}\n) if self.video_writer is not None: self.video_writer.write(annotated) # 按帧率控制 elapsed time.time() - start_time sleep_time CONTROL_INTERVAL - elapsed if sleep_time 0: time.sleep(sleep_time) # 按键退出 key cv2.waitKey(1) 0xFF if key ord(q): break finally: self.shutdown() def shutdown(self): self.camera.release() self.serial_link.close() self.logger.close() if self.video_writer is not None: self.video_writer.release() cv2.destroyAllWindows() print(系统关闭) if __name__ __main__: project EProject() project.run()这个主程序有几个细节值得学习使用time.sleep控制循环周期避免视觉处理和串口发送占用过多 CPU。日志文件记录每一帧的跟踪状态和坐标方便赛后复盘。try...finally保证程序退出时释放摄像头、串口和视频写入器避免“串口被占用”问题。运行命令cd e_project python3 main.py预期现象摄像头画面弹出画面中红色目标被绿色轮廓框选云台自动转动使目标保持在画面中央。按q键退出程序。5. 联调与验证5.1 先分模块联调再整机联调很多队伍在联调阶段直接运行主程序一旦出错根本分不清是摄像头问题、检测问题还是串口问题。正确做法是分模块验证。第一步验证摄像头python3 -c import cv2; cap cv2.VideoCapture(0); print(cap.isOpened())输出True说明摄像头正常输出False则需要检查设备编号和权限。第二步验证检测模块单独运行检测模块观察是否能在画面中框出目标。可以用一张静态图片测试排除运动干扰。第三步验证串口通信先用串口调试助手向单片机发送X1500Y1500\n确认舵机转到中位。再运行主程序观察舵机是否随画面中目标位置变化而转动。第四步整机联调在目标静止、目标缓慢移动、目标快速移动、目标丢失四种场景下分别测试。5.2 性能调优如果画面卡顿或跟踪延迟明显优先检查以下几点降低 OpenCV 窗口显示分辨率。显示窗口分辨率降低不会影响检测逻辑但能减少延迟。调整CONTROL_INTERVAL。如果舵机响应慢控制周期可以适当加大避免指令堆积。检查 CPU 占用。如果占用率接近 100%说明算法效率太低可以降低模糊核尺寸或跳过部分帧做检测。一个常用的优化方案是目标检测使用异步线程主线程只负责控制和显示。但电赛场景下如果画面复杂度不高单线程已经足够不需要过度设计。6. 作品演示视频拍摄与剪辑6.1 视频结构按评分点编排镜头作品演示视频通常有 3 到 5 分钟的长度限制但很多队伍不知道该放什么内容。这里给出一个高完成度的视频结构参考时间段内容目的0:00-0:20作品整体外观展示包括主控、摄像头、执行机构让评委知道作品硬件构成0:20-1:00开机自检与初始化显示初始状态展示系统规范性1:00-2:00目标识别与跟踪演示画面叠加检测框和状态信息对应核心评分点2:00-2:30目标丢失去恢复的异常处理演示展示系统鲁棒性2:30-3:00关键指标数据展示比如响应时间、跟踪精度突出性能优势视频剪辑时每一段都要有字幕说明当前在演示哪个功能点并在画面角落保留原始的操作过程避免评委怀疑视频经过过度剪辑。6.2 录制环境准备录制视频前需要准备一个干净的演示环境背景尽量为纯色避免复杂纹理干扰视觉检测。光照均匀避免强光直射摄像头或目标表面反光。固定摄像头机位保持画面稳定。提前准备好目标物体确保颜色和尺寸符合检测配置。手机或相机横屏拍摄分辨率不低于 1080P。这里特别强调光线问题。颜色检测对光照非常敏感同一块色板在暖光、冷光、自然光下呈现的 HSV 值差异很大。建议录制和比赛当天使用相同的光照条件并在正式录制前重新标定颜色范围。6.3 剪辑要点剪辑时注意以下几点不要删除关键过程的中间片段特别是目标丢失后再恢复的部分这是加分项。用画中画展示算法运行时的实时画面比如 OpenCV 窗口让评委同时看到物理世界和算法世界。速度变化要在字幕中说明比如“此处为 1 倍速原速播放”。背景音乐音量不要压过解说或操作音。视频文件名规范命名例如队伍编号_E题_作品演示.mp4。一个很容易被忽视的点是视频中出现的所有数据都要真实、可复现。不要为了视觉效果补录不同时间段的画面拼凑在一起评委对比光线和环境变化后很容易识破。7. 常见问题与排查思路7.1 常见问题速查表问题现象常见原因解决思路摄像头打开失败设备编号错误、权限不足、接口未启用检查/dev/video0添加用户到video组画面卡顿帧率设置过高、CPU 占用过高降低分辨率、调整控制周期检测不到目标HSV 阈值不对、光照变化、目标太小重新标定颜色范围、降低MIN_AREA云台抖动死区设置过小、增益过大增大死区、降低kp舵机不转串口指令格式不符、波特率不一致用串口助手单独验证指令目标丢失后不恢复搜索策略不足、遮挡后目标偏移过大增加多方向搜索、保存历史轨迹运行一段时间后卡死资源泄漏、串口异常检查摄像头释放、增加超时重连机制视频画面与日志时间对不上录制软件与程序时间基准不一致在画面上叠加当前程序时间戳7.2 高频问题详细分析问题一目标检测“时好时坏”这个问题的根本原因通常不是算法本身而是环境光照不一致。同一个目标在阳光直射下和阴影下的 HSV 值差异非常大单组阈值很难覆盖所有场景。排查步骤在真实光照下拍摄 10 张不同角度的目标图片。用脚本统计这些图片中目标区域的 HSV 最小值与最大值。将统计结果作为最终的COLOR_LOWER和COLOR_UPPER。问题二舵机收到指令但不动作先确认指令格式是否正确。很多队伍在 Python 端发送的是X1500Y1500但单片机端解析的是1500 1500这样的空格分隔格式双方对不上。排查步骤用 USB 转 TTL 模块连接主控和电脑先让 Python 程序发送日志。用串口助手查看实际发送的字节内容。对照单片机解析代码确认帧头帧尾、分隔符、数据类型是否一致。问题三视频录制过程中程序崩溃多数情况是因为 OpenCV 的视频写入器VideoWriter与摄像头帧率不匹配或者磁盘空间不足。录制前先检查磁盘空间并将SAVE_VIDEO设为False跑一遍全流程确认稳定后再开启录像。8. 工程建议与拿分细节8.1 代码工程层面的建议竞赛环境下写代码稳定性比优雅更重要。建议遵循以下几条原则配置参数集中管理不要散落在各个源码文件中。所有外部设备摄像头、串口都要有打开失败的提示和清理逻辑。关键运行信息输出到日志不要只依赖 print。前后两次修改之间备份可运行版本使用 Git 管理代码。不要在比赛现场临时调阈值。所有参数在赛前固定在配置文件里现场只做微小调整。还需要强调一点单片机端要设计“安全状态”。当串口连续一段时间没有收到新指令时舵机或电机应自动回到中位或停止防止程序崩溃后执行机构保持危险动作。8.2 演示与展示层面的建议演示环节是评委打分的直接依据这部分同样需要提前演练演示脚本要写出来每个步骤对应哪些评分点。准备备用电池、备用摄像头、备用目标物防止现场设备故障。演示时先展示基础功能再展示快速目标最后展示异常恢复。如果现场出现意外不要慌张先切断执行机构电源再排查问题。评委更愿意看到的不是“一次成功”的运气而是“出问题后能快速定位并恢复”的工程能力。8.3 文档与视频的匹配很多队伍忽略了文档和视频的一致性。作品文档里写的指标视频里要能直观看到视频里展示的功能文档里要有对应的设计说明。如果两者对不上评委很容易怀疑作品的真实性。建议在文档中增加一节“演示视频说明”逐条列出视频中每个时间段对应的功能和指标。这样做既能帮助评委快速找到评分点也能体现队伍的工程素养。9. 总结与下一步方向这篇文章以电赛E题常见的“视觉识别 运动控制”为主线完整梳理了从系统设计、环境搭建、核心代码、联调验证到满分视频录制的全过程。核心代码可以直接复制运行视频结构也可以直接套用。下一步你可以根据自己选定的具体题目方向继续深入如果是信号处理类题目重点学习 FFT、滤波器设计和数据采集同步。如果是电源类题目重点学习 DC-DC 拓扑、环路补偿和效率测试。如果是控制类题目重点学习 PID 调参、传感器融合和运动规划。备赛时间有限建议优先保证“系统能完整跑通”“演示视频能按评分点展示”“关键异常有应对方案”这三点比任何单点算法优化都重要。最后分享一个实用技巧在正式录制满分视频之前先花半天时间把演示流程完整模拟三遍每次用秒表记录各环节耗时。如果某一环节经常超时说明这个环节需要简化操作或提前准备。真正好的满分视频不是拍出来的而是把每一个演示细节打磨稳定之后录出来的。