简介这份2023年电赛E题“运动目标控制与自动追踪系统”配套代码包面向参加电子设计竞赛、学习STM32控制与Jetson Nano视觉识别的学生和开发者覆盖从底层外设驱动到OpenCV目标识别的完整实现。压缩包共550个文件、约21.07MB以h/c源码和工程编译中间文件为主另有cpp、py脚本、png示意图及Keil工程配置便于直接导入和对照阅读。STM32部分拆分摇杆、二维云台舵机、蓝牙、蜂鸣器、LED、UART、定时器与PWM等模块OpenCV部分包含铅笔、A4纸和红绿激光识别代码注释详尽标注资源使用与管脚连接函数风格接近HAL库复现门槛较低。已有1675人学习适合按模块拆解控制逻辑、理解STM32与Jetson Nano通信并借助作者文章完成环境配置与赛题复盘。1. 电赛E题考什么三道关卡与真实分水岭电赛E题这类运动目标控制与自动追踪的题目最反直觉的一点是现场扣分最狠的往往不是算法本身而是云台到位之后那两百毫秒的抖动。STM32 负责把角度翻译成脉宽、把串口帧解成指令Jetson Nano 上的 OpenCV 负责把画面翻译成坐标PCB 原理图决定这两块板子能不能在同一套电源下互不干扰。三部分任意一环松了测评台上就是直接掉档。拿分逻辑其实很清楚视觉先保证「稳」再谈「快」控制层先保证不超调再谈响应硬件先保证不复位再谈性能。这份资料适合已经能单独跑通某个模块、准备冲现场指标的人不适合还在点灯阶段的新手。下面按考点分布拆开讲每个模块都给能直接背的答法和能直接改的参数。2. 视觉链路颜色阈值、轮廓质心、坐标映射的三段答题法视觉这块的考点分布很固定图像预处理占一半特征提取占三成坐标映射和时序占两成。很多人一上来就折腾检测网络结果在现场灯光下翻车——不是模型不行是这条链路的每一段都没有可调参数和可验证的中间结果。评委追问时最想听的不是「我用了某某算法」而是「我知道它在什么条件下会失效我留了什么后手」。2.1 颜色阈值与二值化参数怎么定、为什么不能写死HSV 空间做颜色分割是这道题的标准动作但真正拉开差距的是阈值怎么来。实验室白天开灯、晚上关灯、测评现场顶灯偏暖同一个红色目标在三套光照下的 H 值能差十几、S 和 V 差得更多。把 lower/upper 写死成常量等于把系统绑死在一种光照上这是血泪经验里最常见的一条。正确的做法是分两步先用一组宽松阈值保证「目标一定在 mask 里」再用形态学把噪点清掉同时留一个标定入口比赛当天现场采一帧目标区域统计 H/S/V 的分位数自动收缩阈值。这一步不复杂但很多人嫌麻烦跳过最后在现场花半小时手动调参四天三夜的时间就是这么没的。import cv2 import numpy as np def build_mask(frame, hsv_lower, hsv_upper, ksize5): 把一帧 BGR 图像转成目标颜色的二值掩膜 hsv cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) lower np.array(hsv_lower, dtypenp.uint8) upper np.array(hsv_upper, dtypenp.uint8) mask cv2.inRange(hsv, lower, upper) # 只保留落在色相/饱和度/亮度区间内的像素 kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (ksize, ksize)) mask cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) # 开运算先腐蚀后膨胀干掉孤立噪点 mask cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 闭运算先膨胀后腐蚀补上目标内部空洞 return mask这段代码里每个参数都有讲究。hsv_lower和hsv_upper是长度为 3 的列表顺序是 H、S、VOpenCV 里 H 的取值范围是 0 到 179不是 0 到 360这一点写错的人不少。ksize取 5 意味着核是 5×5它应该和图像分辨率挂钩720p 下取 5 到 7 比较合适1080p 可以取到 9分辨率越高核要越大否则去噪不干净。开运算放在闭运算前面是有顺序原因的——先去噪再补洞反过来的话噪点会被膨胀连成一片越补越糟。还有一个常被忽略的点cv2.inRange里的上下界如果 lower 的某一维大于 upper结果会全黑而且不报错。现场调参时如果不小心把 S 的下界调到 200、上界还是 180画面直接空白很多人第一反应是摄像头坏了。提示现场标定时把 mask 可视化出来看不要只看最终坐标。坐标是对的但 mask 一塌糊涂说明只是碰巧选对了轮廓换个角度就崩。2.2 轮廓筛选与质心计算三道筛子加一次坐标映射拿到 mask 之后不能直接取最大轮廓就完事。现场干扰源太多了地面的反光斑、队友衣服上的同色块、屏幕上的画面回显任何一个的面积都可能比目标大。所以轮廓筛选要过三道筛子——面积、长宽比、填充率三个条件同时满足才认。def pick_target(mask, min_area200, max_area60000, ratio_lo0.6, ratio_hi1.6, fill_min0.45): 在掩膜里挑出最像目标的那一个轮廓返回质心像素坐标 contours, _ cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) best None for c in contours: area cv2.contourArea(c) if area min_area or area max_area: # 第一道面积门限滤掉噪点和大色块 continue x, y, w, h cv2.boundingRect(c) if w 0 or h 0: continue ratio w / float(h) if ratio ratio_lo or ratio ratio_hi: # 第二道长宽比滤掉条状反光 continue if area / float(w * h) fill_min: # 第三道填充率滤掉空心框和网格 continue m cv2.moments(c) if m[m00] 0: # 零面积保护避免除零 continue cx int(m[m10] / m[m00]) cy int(m[m01] / m[m00]) if best is None or area best[2]: best (cx, cy, area) # 多个候选时取面积最大的 return bestmin_area和max_area必须按实际分辨率和目标在画面里的大小来定。一个简单的估算方法目标占据画面宽度的十分之一时面积大约是0.01 * W * H720p 下就是九千左右如果目标可能贴近镜头max_area 要往上放一档。fill_min取 0.45 是个经验值圆形目标实际填充率在 0.6 到 0.78 之间方形接近 1.0取 0.45 既能挡住空心框又不会把边缘模糊的圆滤掉。质心坐标是像素坐标要变成云台角度还得做映射。最省事的做法是小孔成像模型角度等于arctan((cx - cx0) / fx)其中cx0是画面光心横坐标fx是相机在水平方向的焦距像素单位。fx 不用查手册拿标定板或者干脆拿尺子量把目标放在已知距离和已知横向偏移处记录像素偏移反解 fx。这套方法精度够用而且现场改参数快。要求更高的场合再上四点仿射或者张正友标定但对这道题来说标定板那套流程的时间成本不太划算。面试官问「你怎么保证坐标准」标准答案是三段mask 可视化 轮廓参数可调 映射用实测反解而不是抄手册。三段缺一段追问一句就露馅。2.3 真题演练目标丢失、抖动、误识别怎么答这一类题的答题套路是固定的三步先定位故障在哪一层再给可验证的定位手段最后给保底策略。不要一上来就说「我用卡尔曼滤波」那是结论不是过程。第一题「目标突然丢失云台乱转怎么排查」先分层——是 mask 空了还是轮廓被筛掉了还是串口没发出去。定位手段是最小可复现把每一帧的 mask 像素总数、候选轮廓数、最终输出坐标打到日志里丢帧时看这三个数哪个先归零。如果是 mask 空了问题在光照或阈值如果 mask 有但候选是 0问题在面积或长宽比门限如果坐标正常但云台动问题在串口或控制层。保底策略是丢失超过 N 帧比如 5 帧按 30 fps 算大约 160 ms就保持上一帧角度并小幅回中而不是继续追。第二题「目标静止时云台来回小幅摆动为什么」先分清是视觉抖还是控制抖。把云台断开、只打印坐标如果坐标本身在 ±3 像素内跳那就是视觉抖动处理方式是坐标做滑动平均或者一阶低通如果坐标稳但云台摆那就是 PID 的微分项在放大噪声或者死区太小。这个回答的价值在于它给了一个可执行的分离实验而不是背概念。第三题「画面里出现两个同色目标怎么选」标准答法是先做几何约束再做时序约束几何上用长宽比和填充率筛时序上用上一帧位置做门限只接受距离上一帧质心在合理像素范围内的候选。如果两个目标始终分不开就退一步用「面积最大的那个」并说明这是题目条件下的合理假设。评委想听的是你知道自己的假设边界在哪。3. STM32 控制层定时器 PWM、串口帧、闭环三处必考控制层的考点集中在三件事PWM 的频率和分辨率算得对不对串口帧在丢字节时会不会崩闭环在现场扰动下会不会发散。这三件事在代码里各自只有几十行但每一行都能被追问出三层。3.1 定时器与 PWM从时钟树推到比较值舵机和云台的标准驱动是 50 Hz PWM脉宽 500 到 2500 微秒对应 0 到 180 度。要得到 1 微秒的分辨率就得让定时器计数频率是 1 MHz。这一步推导必须能口算出来因为评委很喜欢问「你这个 ARR 是怎么来的」。/* 目标50 Hz PWM计数频率 1 MHz即 1 个计数 1 微秒 */ #define TIM_CLK_HZ 84000000U /* 定时器挂载总线时钟按实际时钟树填 */ #define PWM_FREQ_HZ 50U #define PRESCALER (TIM_CLK_HZ / 1000000U - 1U) /* 84-1分频到 1 MHz */ #define ARR_VALUE (1000000U / PWM_FREQ_HZ - 1U) /* 20000-1周期 20 ms */ void servo_pwm_init(TIM_HandleTypeDef *htim) { htim-Init.Prescaler PRESCALER; htim-Init.Period ARR_VALUE; htim-Init.CounterMode TIM_COUNTERMODE_UP; HAL_TIM_PWM_Init(htim); } /* 角度转比较值0.5 ms~2.5 ms 线性对应 0~180 度 */ uint32_t angle_to_ccr(float angle) { if (angle 0.0f) angle 0.0f; /* 限幅防止舵机撞限位 */ if (angle 180.0f) angle 180.0f; float us 500.0f angle * (2000.0f / 180.0f); /* 每度约 11.11 微秒 */ return (uint32_t)us; /* 计数频率 1 MHz微秒数即比较值 */ }PRESCALER减 1 是因为寄存器里写的是分频系数减一ARR同理。这两个减一漏掉任何一个输出频率就偏舵机会发出持续的嗡嗡声严重时会抖到无法定位。angle_to_ccr里的限幅不是可选项——上位机传过来一个 200 度的角度不限幅就会输出超过 2.5 ms 的脉宽舵机直接顶到机械限位堵转电流飙升最容易把稳压芯片拖垮然后 MCU 复位看起来像「代码跑飞」实际是电源问题。还有一个细节不要用软件延时生成 PWM。主循环里一旦有串口解析、PID 计算、OLED 刷新延时就歪了脉宽跟着歪云台就会莫名其妙地慢半拍。3.2 串口帧协议为什么必须加帧头帧尾和校验Jetson 和 STM32 之间的通信是整个系统最容易出问题的地方因为它是唯一一条「两边都可能出问题、而且出了问题都不报错」的链路。裸发几个字节一旦丢一个字节后面全部错位MCU 收到的角度可能是 200 也可能是 20云台就会突然甩一下。标准的帧结构是帧头两个字节0xAA 0x55、长度一字节、载荷若干字节、校验和一字节、帧尾一字节0x0D。双字节帧头是为了防误同步单字节帧头碰上载荷里恰好有 0xAA 就完蛋。解析用状态机不要用 while 等帧头。/* 帧格式: AA 55 LEN PAYLOAD... SUM 0x0D */ typedef enum { WAIT_H1, WAIT_H2, WAIT_LEN, WAIT_DATA, WAIT_SUM, WAIT_TAIL } parse_state_t; static void handle_frame(const uint8_t *buf, uint8_t len); /* 业务处理另行实现 */ void uart_parse_byte(uint8_t b) { static parse_state_t st WAIT_H1; static uint8_t buf[32]; static uint8_t len 0, idx 0, sum 0; switch (st) { case WAIT_H1: if (b 0xAA) st WAIT_H2; /* 只在收到第一个帧头时才前进 */ break; case WAIT_H2: st (b 0x55) ? WAIT_LEN : WAIT_H1; /* 第二个字节不对退回等待 */ break; case WAIT_LEN: len b; if (len 0 || len sizeof(buf)) { /* 长度非法整帧丢弃重新同步 */ st WAIT_H1; break; } idx 0; sum 0; st WAIT_DATA; break; case WAIT_DATA: buf[idx] b; sum b; if (idx len) st WAIT_SUM; break; case WAIT_SUM: st (b sum) ? WAIT_TAIL : WAIT_H1; /* 校验不过直接放弃这一帧 */ break; case WAIT_TAIL: if (b 0x0D) handle_frame(buf, len); /* 帧尾正确才交给业务层 */ st WAIT_H1; break; } }这个状态机的关键设计在「任何一步失败都回到 WAIT_H1」——它保证了丢字节之后最多丢掉一帧下一帧就能重新同步。如果写成「等帧头 → 读固定长度 → 处理」一旦中间丢了一个字节后面所有的字节都被当成载荷可能连续几十帧全错。校验和用累加和就够因为这条链路的错误主要是丢字节而不是位翻转要更强可以换 CRC16但帧长和解析复杂度都会上去四天三夜里不一定划算。handle_frame里要注意解析出来的数据先写进环形缓冲区或者双缓冲主循环再取不要在中断里直接算 PID。中断里做浮点运算是自找麻烦。3.3 闭环位置式还是增量式云台上怎么选云台控制通常两级外环是视觉给的角度误差内环是舵机或电机的执行。舵机自带位置闭环所以 MCU 这边多数情况下只需要一个「角度平滑 限速」的环节不一定要上 PID。但如果云台是步进电机或者带编码器的直流电机PID 就跑不掉了。这道题里增量式 PID 通常比位置式好用原因是它输出的是增量天然带积分分离的效果而且切换目标时不会有积分项残留导致的超调。typedef struct { float kp, ki, kd; float target, actual; float err_prev, err_prev2; float out, out_max; } inc_pid_t; float pid_calc(inc_pid_t *p) { float err p-target - p-actual; float delta p-kp * (err - p-err_prev) p-ki * err p-kd * (err - 2.0f * p-err_prev p-err_prev2); p-out delta; /* 增量累加到输出 */ if (p-out p-out_max) p-out p-out_max; /* 输出限幅同时抑制积分饱和 */ if (p-out -p-out_max) p-out -p-out_max; p-err_prev2 p-err_prev; p-err_prev err; return p-out; }三个参数的作用要看清楚kp乘的是误差的变化量ki乘的是当前误差kd乘的是误差的二阶差分。这意味着调参顺序和位置式不同——先把ki和kd置零只加kp到系统开始等幅振荡再退回来一半然后加ki消除静差最后加一点点kd压超调。out_max要按执行机构的能力填比如舵机角度输出最大值就是 ±90 度填大了等于没限幅。面试官追问「为什么不用位置式」标准答法是位置式每次输出都是绝对量积分项在目标突变时会累积出一个很大的值需要额外做积分分离或者抗饱和增量式输出的是变化量目标突变时冲击小而且天然支持手动/自动切换。这个回答能站住但别把它说成绝对真理——位置式在稳态精度要求高的场合仍然更常用。3.4 真题演练抖动、超调、通信丢包第一题「云台到位后来回摆怎么调」先分清是过冲还是振荡。过冲是一次性冲过去再回来振荡是持续来回。过冲说明kp太大或者没有kd处理是降kp、加kd振荡且幅度不衰减多半是采样周期和控制周期不匹配视觉给坐标是 30 fpsPID 跑 200 Hz中间没有做零阶保持相当于拿旧目标反复算必须让 PID 只在收到新坐标时才更新目标。这个细节一说出来评委就知道你真在现场调过。第二题「串口偶尔丢一帧云台会甩一下怎么改」三层回答协议层加帧头帧尾和校验保证错帧被丢弃而不是被误用应用层对目标角度做限幅和斜率限制单帧最大变化不超过 N 度策略层在连续丢帧超过阈值时进入保持而不是清零。三层里前两层是必须的第三层是加分项。第三题「双轴云台两个轴互相影响怎么办」先解释耦合来源——两个轴机械上不独立俯仰变化会改变横滚的负载力矩。处理方式是解耦补偿把俯仰轴的角度作为横滚轴前馈的一部分或者简单地降低俯仰轴的加速度减少对横滚的扰动。回答里带上「机械耦合靠软件只能补一部分」会显得你清楚边界。4. PCB 与供电从原理图到上电不复位的四个检查点硬件这块的考点很集中电源树画得对不对、地去得干不干净、接口有没有留调试口。这三件事在原理图上只占十几分钟在现场能省下几个小时。很多人觉得 PCB 是「画完就行」结果上电就复位查了两天代码最后发现是舵机启动瞬间把 5V 拉到 3.3V。4.1 电源树与去耦先算电流再画线这道题的电源树通常有四级电池 12V 进来一路直供电机驱动一路降到 6V 或 7.4V 给舵机一路降到 5V 给 Jetson Nano一路降到 3.3V 给 MCU 和传感器。每一级的电流都要算不能拍脑袋。舵机堵转电流是额定电流的三到五倍两个舵机同时启动的瞬间电流可能是稳态的十倍这个浪涌如果和 MCU 共用一路复位几乎是必然的。去耦电容的布置有两个层次每个电源引脚旁边放 100 nF负责高频每路电源入口放 10 微法到 100 微法的电解或钽电容负责低频和浪涌。100 nF 的走线要短最好和引脚在同一层走线长了等效串联电感上去高频就滤不掉了。注意舵机和 MCU 不要共用一条地线回到电源。舵机的脉冲电流会在地线上产生压降MCU 的参考地跟着跳ADC 读数漂、串口误码、复位全都从这里来。正确做法是单点接地或者星型接地功率地和信号地在电源入口处汇合。4.2 电机驱动与隔离续流、死区、电流检测如果用 H 桥驱动直流电机三个点必须检查续流二极管、死区时间、电流检测。电机是感性负载关断瞬间会产生反向电动势没有续流回路就会击穿 MOS 管这个故障是瞬时的、不可恢复的。死区时间是为了防止上下桥臂直通很多集成驱动芯片内部已经处理分立方案就必须自己在代码里加。电流检测的采样电阻要放在低边配合运放放大采样点尽量靠近地。采样走线要远离 PWM 走线否则开关噪声会直接灌进 ADC读出来的电流值全是毛刺。4.3 接口与丝印调试口是后悔药原理图上一定要留的东西SWD 下载口、至少一路空闲 UART、几个测试点3.3V、5V、GND、PWM 输出、电源指示 LED。这些在画图时只是多放几个焊盘在现场就是能不能五分钟定位问题的差别。丝印也要认真对待。排针的每一脚标清楚是什么信号串口的 TX/RX 标清楚方向。跨板连接最容易出的事就是 TX 接 TX两边都在发谁都收不到然后怀疑代码。UART 是交叉连接A 的 TX 接 B 的 RX。还有电平匹配。Jetson Nano 的 UART 是 3.3V 电平STM32 也是 3.3V直连没问题但如果中间加了 5V 的模块就必须做电平转换直接接上去轻则不通信重则烧引脚。4.4 真题演练上电复位和丢步怎么答第一题「系统跑几分钟就复位代码没改过怎么查」排查顺序是电源、地、复位脚、看门狗。先用示波器看 3.3V 轨在复位瞬间有没有跌落如果有就是舵机或者电机启动时的浪涌如果没有看地线上有没有几十毫伏的尖峰再排除复位脚虚焊和看门狗误喂。这个顺序的价值在于它从最可能的原因开始而不是从最容易查的开始。第二题「步进电机丢步位置越跑越偏。」先分清是丢步还是共振。丢步表现为偏差单调累积共振表现为特定速度下抖动剧烈但回到低速又正常。丢步的原因通常是加速曲线太陡、电流不够、驱动电压不足共振要靠细分或者避开共振区。回答时带上「开环步进没有位置反馈丢步是不可恢复的」说明你知道这个方案的边界。第三题「两块板子共地之后通信误码率变高。」这是典型的地环路问题。两块板各自有电源地线一连就形成了环路电机电流从信号地回流串口电平被抬起来。处理方式是单点接地、加共模电感、或者干脆用隔离器件把通信链路隔开。回答里能说出「先量两地之间的电位差」就比背概念强。5. 失分点五类现场最容易翻车的错误与改法这一章列的都是在测评台上真实发生过、而且反复发生的错误。每一条都按「错在哪、为什么错、怎么答对」写看的时候对照自己的项目过一遍能提前排掉一半的雷。5.1 阈值写死在实验室灯光下错在哪hsv_lower和hsv_upper是常量调通当天什么光照就一直用什么光照。为什么错HSV 里的 V 对光照强度极其敏感S 对光源显色性敏感。实验室的白光和测评现场的顶灯色温不同同一块红色目标的 H 值可能偏移五到十V 值偏移三四十写死的阈值在现场直接失效mask 全空或者把背景全选进来。怎么答对阈值做成可标定的参数开机或者按键触发时采一帧目标区域统计 H/S/V 的分位数取中间 80% 作为上下界再各留一点余量。同时保留一组保守的默认值作为兜底。被问到时说清楚「阈值不是调出来的是现场标出来的」这句话本身就是得分点。5.2 串口只发不校验丢一帧就发散错在哪发送端直接printf或者连发几个字节接收端按固定长度读没有帧头没有校验。为什么错串口在电机和 PWM 干扰下丢字节是常态不是异常。没有帧同步机制丢一个字节后面全错位接收端会把角度的高字节当成低字节云台突然甩到极限位置看起来像「程序跑飞」。怎么答对帧头双字节 长度 校验和 帧尾解析用状态机任何一步失败回退到等待帧头。应用层再加一层保护单帧角度变化超过阈值就丢弃连续丢帧超过 N 帧就保持上一帧。三层保护叠起来单次丢包不会造成可见的动作。5.3 PID 只在静止目标上调错在哪把目标放在画面中央不动调 PID 调到不抖就认为调好了。为什么错静止目标下调出来的参数对应的是一组很小的误差信号积分项根本没被激励起来。目标一动误差阶跃积分项迅速累积超调一大截再往回拉来回几次才稳定。现场的测评项目基本都是动态跟踪静止调参等于没调。怎么答对调参时用阶跃响应和正弦跟踪两种激励。阶跃看超调和上升时间正弦看相位滞后和幅值衰减。先把kp调到阶跃有轻微超调再加kd压下去最后用很小的ki消静差。被问到时说得出「我用什么激励、看什么指标」比说「我调了很久」有用得多。5.4 电源共地不当问题伪装成软件 bug错在哪舵机、电机、MCU、Jetson 全部从同一组排针取电地线随便连。为什么错功率器件的大电流在地线上产生压降MCU 的参考地跟着波动。表现是 ADC 读数跳、串口误码、偶发复位、PWM 占空比漂移——每一个都像软件问题查代码查一天也查不出来。怎么答对功率地和信号地分开走在电源入口单点汇合每级电源入口加足够的储能电容舵机和 MCU 不共用稳压器。被问到排查思路时第一句就说「先量地再量电源最后看代码」这个顺序本身就是经验。5.5 只测静态精度不测动态时间错在哪测评指标里有「从识别到云台到位的时间」但平时只测「云台能不能指到那个点」。为什么错静态精度达标只说明稳态没问题动态时间取决于整条链路的延迟相机曝光、图像传输、处理耗时、串口传输、舵机响应。这条链路每一段几十毫秒加起来就是几百毫秒很容易超标。怎么答对在代码里打时间戳分别记录「帧采集完成」「坐标算出」「串口发出」「舵机到位」四个时刻算出差值找出最大的一段再优化。常见的大头是图像处理用了高分辨率降到 640×480 就能省一半时间精度损失可以用 ROI 补回来。6. 测评与追问四天三夜的时间表和一页纸答辩稿时间分配上四天三夜最忌讳的是前两天全花在视觉上调参第三天开始画板子第四天没时间联调。比较稳的排法是第一天上午把电源和驱动板焊出来、点灯、跑通串口下午把相机跑起来能出 mask 和坐标晚上做第一次端到端联调哪怕精度很差先让云台动起来。第二天专门调视觉和控制的参数把静态指标做到超标。第三天做动态测试和抗干扰同时把 PCB 定稿发出去或者热转印。第四天只做三件事封版、写答辩材料、按测评流程完整走三遍。答辩稿按一页纸准备四个板块系统框图一句话讲清数据流关键指标一张表写实测值不写理论值两三个技术难点每个都是「问题、方案、效果」三句话最后一个明确的已知局限主动说出来。评委最反感的是一味吹「全部达标」最喜欢的是你说清楚「在什么条件下达不到、我怎么保底」。被追问时有一个通用接法先复述问题确认理解再给结论最后给验证手段。比如问「你怎么保证坐标准」答「您问的是坐标的绝对精度还是重复精度这两个我分开说」然后给标定方法和实测误差。这个接法能把一个可能答不上来的问题变成一个你能控制节奏的问题。那次现场测评我们的云台在第三轮突然开始周期性抖动四个人围着一块板子查了四十分钟最后发现是电池电压掉到 10.5V 以下稳压芯片进入压差区5V 轨跟着塌。从那以后我每次上电前都强制走一遍「量电池电压、量 3.3V、量 5V、看地线波形」这四步哪怕时间再紧也不跳。硬件的问题不会自己消失它只会在最不该出现的时候出现。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?