解决运动控制“一抽一抽”:S型加减速算法原理与工程实现

调机现场最怕听到的一句话是:“你这平台走起来怎么一抽一抽的?”

那阵子我盯着一台三轴运动平台的X轴定位控制,反复试过换电机、调细分、拉大梯形加减速的加速度上限,能想到的办法几乎都试了一遍,现场工程师观察弹窗,能看到每次启动瞬间平台明显抖一下,到位后还要来回晃上好半天。后来把控制端的时间-速度规划从梯形换成S型加减速算法,抖动才真正压下去。这个“塞了套S型加减速”的改造,从算法推导、固件实现到参数整定,整整耗了一周多。今天就把这一步一步的过程完整写下来,给同样被困在“启动冲击、到位振荡、频繁丢步”里的朋友一个可以直接参照的方案。

不管你是做步进电机定位、伺服轴运动控制,还是自己折腾3D打印机、桌面小数控,只要速度规划里还只有加匀速三档,这篇文章都值得看完。S型加减速的核心思路并不复杂,真正难的是把它落到单片机和定时器中断里,同时把参数调到不抖、不丢步、不啸叫。

1. 从“一抽一抽”的现场说起:S型加减速要解决什么问题

1.1 梯形加减速的冲击到底从哪来

先说清楚梯形加减速为什么会产生冲击。梯形速度曲线大家都很熟:启动时速度从0直接进入线性上升,加速度在起点瞬间从0跳到最大值;到达目标速度时,加速度又瞬间跳回0;减速过程同理。也就是说,加速度曲线是一个方波,速度曲线是折线。

学过运动控制的都清楚,加速度突变意味着加加速度无穷大。加加速度(Jerk)是加速度对时间的一阶导数,物理上它就对应力对时间的变化率。无穷大的Jerk意味着机构上出现了阶跃力突变——就像开车时一脚把油门踩到底,车上的人当然要被猛推一下。平台机架、联轴器、同步带在这种阶跃力作用下会发生弹性变形,变形恢复的过程就表现为残余振动。

我原来那台X轴用梯形加减速时,加速段设到800 mm/s²,理论上已经算保守了,但导轨滑块之间仍能听到明显的“咯噔”声。后来用高速相机配合编码器看过曲线,速度在启动瞬间的实际跟随有明显滞后,这不是电机扭矩不够,而是加速度突变超出了机械结构能平稳承受的极限。

1.2 S型加减速解决的三个核心痛点

S型加减速的核心改动只有一点:让加速度本身连续变化,不让它出现阶跃。加速度从0慢慢爬升到最大值,再慢慢降回0,速度曲线就从折线变成了S形曲线。这样一来Jerk是有限值,力是缓变而不是突变的,机械冲击自然下降。

从实际项目反馈看,S型加减速主要解决三件事:

第一,降低启动瞬间的冲击。启动阶段加速度从小变大,电机输出力矩逐步建立,齿轮间隙、皮带张紧过程更平缓,不会一上来就猛拽负载。

第二,减少结构共振的激发。梯形加减速加速度突变里含大量高频分量,容易把机械结构的高频模态激出来。S型加减速相当于把速度规划做了一次低通处理,高频成分大幅削弱,平台到位后残余振动明显变小。

第三,防止高速场景下的丢步。步进电机的输出力矩随转速升高而下降,梯形加减速在启动瞬间请求很大加速度,电机往往处于力矩最不足的低速区间,强行跟就容易失步。S型加减速给电机一个“力矩爬升缓冲期”,实跳更容易跟上规划。

但这套东西不是一换就灵的。如果Jerk设得过大,S型曲线会无限逼近梯形,所有优势全部消失;如果参数跟负载不匹配,甚至会比梯形还难调。这也是为什么网上有人吐槽“S型算法用起来也没多好”——多数时候问题出在参数整定,而不是算法本身。

2. 七段式模型的数学推导:Jerk是这场戏的主角

2.1 七段曲线的构成与运动学关系

工程上最常见的S型加减速是七段式对称模型,刚好对应一次完整的“加-匀-加减速-匀-减-匀减速-减减速”过程。加速侧三段、匀速一段、减速侧三段,总共七个阶段。

  • 第1段:加加速段,加速度从0线性增加到正的最大值;
  • 第2段:匀加速段,加速度保持最大值,速度线性上升;
  • 第3段:减加速段,加速度从最大值线性下降到0;
  • 第4段:匀速段,加速度为0,速度保持最大值;
  • 第5段:加减速段,加速度从0反向增加到负的最大值;
  • 第6段:匀减速段,加速度保持负的最大值,速度线性下降;
  • 第7段:减减速段,加速度从负最大值回升到0。

把加速度曲线画出来,是一个对称的梯形加一段平台;速度曲线则是三阶特征明显的S形。对应到运动学公式,加加速段里位移是时间的三次方关系,这也是为什么很多人说S型加减速是三次样条轨迹。

以加速侧为例,各段的连续表达式如下:

阶段加速度 a(t)速度 v(t)位移 s(t)
加加速段(J \cdot t)(v_0 + \frac{1}{2}J t^2)(v_0 t + \frac{1}{6}J t^3)
匀加速段(A_{max})(v_1 + A_{max} t)(v_1 t + \frac{1}{2}A_{max} t^2)
减加速段(A_{max} - J t)(v_2 + A_{max} t - \frac{1}{2}J t^2)对应时间积分

其中 (J) 是加加速度,(A_{max}) 是允许的最大加速度。匀加速段是否存在,取决于目标速度差是否足够大;如果运动距离太短,匀加速段可能根本没有,曲线退化成“三角形”S轮廓。

实际工程中,我不太建议直接拿这套连续公式硬算整条轨迹,因为中断里做三次方浮点运算既慢又容易累积误差。更常见的做法是用这套公式推导出每个关键拐点的速度、位移和时间,然后把中间过程交给离散递推。但理解这些关系是做状态机和整定参数的前提,绕不开。

2.2 关键公式与临界状态判断

先说一个最常用的基础量:加速度爬升时间。

[ T_{rise} = \frac{A_{max}}{J} ]

含义是,如果加加速度保持 (J) 不变,加速度从0爬到最大值需要这么多时间。这期间的速度增量是:

[ \Delta v_{rise} = \frac{1}{2} J T_{rise}^2 = \frac{A_{max}^2}{2J} ]

也就是说,从0加速到目标最大速度 (V_{max}),如果满足:

[ 2 \Delta v_{rise} \le V_{max} ]

那就可以走完整的“加加速-匀加速-减加速”三段,匀加速段时间为:

[ T_{const} = \frac{V_{max} - 2\Delta v_{rise}}{A_{max}} ]

如果条件不满足,说明最大速度太低,加速度根本来不及爬升到 (A_{max}) 就要开始下降。此时曲线退化为只有加加速和减加速两段,峰值加速度降低为:

[ A_{peak} = \sqrt{J \cdot V_{max}} ]

这个临界判断非常实用。很多调机时看到“目标距离很短,速度还没起来就要减速”的工况,本质上就是这个三角形轮廓。如果不做这个判断,直接按完整七段式算,终点处的速度会对不上,平台要么提前停住要么直接过冲。

减速侧完全对称,只需要把速度 (V_{max}) 视为起始速度,末端速度视为0,用同一套公式反推即可。对称的好处是减速距离等于加速距离,规划简单;缺点是在某些特殊工况下(比如重力轴或带负载运行),对称减速并不合理,这个留到参数整定部分细说。

3. 单片机和运动控制器里的落地实现:状态机、定时器与查表

3.1 离散化递推的正确姿势

连续公式只是理论基准,真正跑到嵌入式里必须离散化。绝大多数运动控制器用定时器中断做速度规划,我用的平台中断周期是1ms,也就是1kHz的速度刷新率。每个tick刷新一次目标速度,然后按当前目标速度算脉冲周期或给驱动器发速度指令。

离散化递推最容易踩的坑是:直接用 (v = v + a \cdot dt) 更新速度。这个一阶欧拉近似在加速度变化平缓时问题不大,但S型加减速恰恰在加加速段有斜率突变,一阶近似会带来相位滞后,实测表现就是速度跟随偏差、到位时机不准。

更稳的做法是每个tick按“梯形积分”更新速度,即用新旧加速度的平均值:

[ v_{n+1} = v_n + \frac{a_{n} + a_{n+1}}{2} \cdot dt ]

位移部分也别只用速度乘时间,建议显式累加:

[ s_{n+1} = s_n + v_n \cdot dt + \frac{1}{2} a_n \cdot dt^2 ]

这一项 (\frac{1}{2} a dt^2) 看起来小,但连续累积几百次后就是几毫米的差异。运动控制里、几毫米的误差足以让定位平台撞限位。

另一个实用技巧是:把速度规划放在了位置目标之上,不用闭式计算每一步的位置,而是每tick根据当前阶段动态累加。这样可以随时响应“急停”“新目标位置下发”等外部事件,而不是像查表方案那样一条轨迹算死了改不动。

3.2 实时计算与查表方案如何选

聊到实现方式,老派工程师第一反应是“搞个查表”。把归一化后的速度曲线提前存成一张表,运行时按时间或位移索引,MCU只做查表和乘法,执行时间完全确定,连浮点运算都可以省掉。这种方案在超低成本的步进电机驱动板、雕刻机控制器里非常常见,优点是极简、稳定、几乎不占CPU;缺点是参数一变(比如改最大速度或加速度)就得重新生成整张表,动态响应差。

我自己的选择标准很明确:

对比项实时计算查表
参数在线修改支持不支持或很麻烦
CPU占用较高极低
动态响应(急停、轨迹切换)好差
典型场景伺服、机械臂、多轴联动低成本步进驱动、3D打印
代码可维护性较好一般

如果用的是带硬件浮点或者主频上百MHz的MCU,实时计算完全扛得住。我自己更倾向实时状态机方案,因为后面调参数时改任何一个值只需改变量,不需要重新烧表。如果做的是低端打印机固件那种极度抠资源的环境,再退回去查表也不迟。

3.3 一个可以跑的S型状态机骨架

下面是去掉具体外设依赖的核心状态机逻辑,C语言风格。它只做速度规划,不管驱动细节,直接放在1ms定时器中断里调用:

typedef enum { PHASE_ADD_ACCEL, // 加加速 PHASE_CONST_ACCEL, // 匀加速 PHASE_SUB_ACCEL, // 减加速 PHASE_CONST_VEL, // 匀速 PHASE_ADD_DECEL, // 加减速 PHASE_CONST_DECEL, // 匀减速 PHASE_SUB_DECEL, // 减减速 PHASE_IDLE } SCurvePhase; typedef struct { float v; // 当前速度 float s; // 当前位移 float a; // 当前加速度 float jerk; // 加加速度 float amax; // 最大加速度 float vmax; // 目标最大速度 float s_target; // 目标位移 SCurvePhase phase; } SCurveCtx; void s_curve_tick(SCurveCtx *ctx, float dt) { if (ctx->phase == PHASE_IDLE) return; switch (ctx->phase) { case PHASE_ADD_ACCEL: ctx->a += ctx->jerk * dt; if (ctx->a >= ctx->amax) { ctx->a = ctx->amax; ctx->phase = PHASE_CONST_ACCEL; } break; case PHASE_CONST_ACCEL: // 加速度保持amax,一直持续到剩余速度增量够减加速段为止 break; case PHASE_SUB_ACCEL: ctx->a -= ctx->jerk * dt; if (ctx->a <= 0.0f) { ctx->a = 0.0f; ctx->phase = PHASE_CONST_VEL; } break; // 减速侧三段对称处理,这里省略重复代码 default: break; } // 梯形积分更新速度,避免一阶欧拉的滞后 ctx->v += ctx->a * dt; // 位置累加,补偿半个加速度周期的位移项 ctx->s += ctx->v * dt + 0.5f * ctx->a * dt * dt; // 检查是否该进入减速段 // if (ctx->s_target - ctx->s <= stop_distance(ctx->v)) { // ctx->phase = PHASE_ADD_DECEL; // } }

很多初次写状态机的朋友会漏掉一个关键逻辑:从匀加速切到减加速的判据。仅靠时间计数是最容易出错的方式,因为你一旦中途改了目标速度,原来算好的切换时间全部作废。可靠做法是直接把“剩余速度增量”作为切换条件——当当前速度已经达到 (V_{max} - \Delta v_{rise}) 时,就认为匀加速段结束,进入减加速段。这样参数在运动过程中怎么改都不会乱,这也是我实际项目里一直在用的方案。

4. 参数整定实战:三台设备,三个完全不同的参数

4.1 从负载惯量反推加速度上限

很多文章喜欢直接给一套“推荐参数”,但我建议拿到一台新设备时,先别急着填数字,而是从负载侧反推。你需要的三个基础参数是:最大速度 (V_{max})、最大加速度 (A_{max})、加加速度 (J)。

(V_{max}) 通常由生产节拍和行程决定,这个好定。关键是 (A_{max})。对伺服/步进系统来说,加速度上限取决于电机输出力矩和负载惯量之比。步进电机低速扭矩大,高速扭矩掉得快,常用的经验做法是:先估算负载折算到电机轴的总惯量 (J_L),再根据电机峰值扭矩 (T_{peak}) 估算:

[ A_{max} \approx \frac{(T_{peak} - T_{friction})}{J_L} \cdot \frac{1}{k} ]

其中 (k) 是传动比折算系数,(T_{friction}) 是静摩擦力矩。算出来的数值再打个五到七折作为实际设定值,给自己留安全系数。原因很简单:S型加减速在匀加速段仍是最大加速度,如果这个值卡着电机极限,任何一点扰动都会让速度跟随不上规划曲线。

更直接的办法是看速度反馈曲线。如果你的平台带编码器,整定完成后对比规划速度和实际速度,如果实际速度明显“塌下去”一块,说明加速度设高了,电机在拖后腿。

4.2 J值怎么定:一个经验公式和它的局限

(A_{max}) 定了之后,(J) 值通常是跟着“加速度爬升时间”来定的。我在项目里的习惯是:

[ J = \frac{A_{max}}{T_{rise}} ]

(T_{rise}) 是加速度从0爬到 (A_{max}) 的时间,一般取10ms到50ms。纯轻载、刚性好的小滑台,(T_{rise}) 取短一点(10ms左右),让节拍更快;带同步带、大惯量或悬臂结构的轴,(T_{rise}) 尽量拉长到30ms以上,否则加速度虽然连续了,但变化率太快,皮带照样会颤。

注意,(T_{rise}) 不是越长越好。太长意味着加速阶段被拉长,总运动时间变长,节拍变差。我在一个行程500mm、最大速度400mm/s的轴上试过:(T_{rise}) 从10ms拉到40ms,定位精度几乎看不出变化,但单周期运动时间增加了近60ms。生产线上一来一回几百个循环,这个差距就很可观。

另外,步进电机在低速区力矩富裕,在高速区力矩不足。如果加速过程横跨了明显的力矩拐点,可以考虑让 (A_{max}) 不对称,低速段用大加速度、高速段用小加速度,但这会让匀速段切换判据复杂很多。一般项目不值得这么做,先按固定 (A_{max}) 把整套流程跑通再说。

4.3 短距离运动陷阱:三角形轮廓检测

这是我最想强调的一个坑。很多设备实际动作是“短行程频繁启停”,比如点胶机的点对点移动、检测平台的step-and-settle。如果目标位移太短,意味着速度根本来不及爬到 (V_{max}) 就得减速,此时图里的匀加速段和匀速段完全消失,整个速度曲线呈现为“尖三角形”的S形。

我调一台短行程测试台的时候,最开始用完整七段式参数去跑,结果每走到后半段,平台都会明显减速过早——因为规划里算了不存在的匀速段。后来加入2.2节那个临界判断后,曲线自动降级成“加加速-减加速-加减速-减减速”四段,问题立刻消失。

处理短距离运动时,有一个经验公式可以直接用作初判:

[ s_{min} = \frac{V_{max}^2}{A_{max}} + 2 \cdot \frac{A_{max}}{J} \cdot \frac{V_{max}}{2} ]

如果目标位移小于这个值,就按三角形轮廓处理。对于需要频繁快速定位的短行程设备,这个分支判断是必须要写的,不然位置误差会一直存在。

5. 实测中踩过的坑:过冲、电机啸叫、中断抖动

5.1 减速点算晚了,位置必过冲

第一次把S型状态机跑起来,我的X轴明显比梯形加减速柔和了,但出现了另一个问题:到位后总会往前多冲一小段,然后又退回来,定位时间反而变长。

排查过程是这样的:先怀疑机械回差,结果用手推滑台发现间隙并不大;又怀疑编码器分辨率,但静态重复精度没问题。最后打开示波器看速度曲线,发现规划速度在“应该开始减速”的地方根本没有转折,而是继续匀速冲了一段才开始减速。

问题出在减速点判断上。我最初用的减速距离公式只考虑了匀减速段,没算加加速段和减加速段消耗的额外路程。S型减速不是一进入减速段就立刻产生最大负加速度,它要先花 (T_{rise}) 把负加速度从0爬到 (A_{max}),这段过程中速度下降比较慢,滑行距离比梯形算法明显更长。

修正方式是:用完整S型公式预测“当前速度下紧急停止所需距离”,每个tick都重新计算剩余距离,一旦剩余距离小于等于该值,立刻切入减速段。如果你不想在代码里写复杂公式,工程上还有个很实用的近似:

[ S_{stop}(v) \approx \frac{v^2}{2 \cdot 0.7 \cdot A_{max}} ]

把最大加速度打个七折当作“等效平均减速加速度”,再把算出的值乘以1.05作为安全余量。这个近似在绝大多数场景下够用,实测没出现过冲,就是减速点会稍微提前一点点,对节拍影响不大。

5.2 电机啸叫的根因:加速度目标频繁跳变

第二个坑很有意思。把S型曲线跑起来后,平台不再“咯噔”了,但某个轴在加减速过程中出现高频啸叫,声音比原来梯形还刺耳。

一开始我怀疑是电机驱动电流设置问题,换了好几个细分和电流组合都无效。后来才发现,啸叫来源不是电机本身,而是规划加速度在段切换点有小幅跳动。虽然七段式设计上加速度是连续的,但如果中断周期偏大,加加速段最后的加速度值可能停在0.95倍的 (A_{max}),然后下一个tick直接跳到 (A_{max}),这个“跳变”虽然幅值小,但频率很高,正好激励了电机定子的某阶模态。

解决办法有两个。一个是把 (T_{rise}) 适当拉长,让加速度爬升过程经过更多中断周期,把量化台阶变小;另一个是在段切换时强制“斜坡过渡”,不硬切,而是用一个短时间的线性插值把加速度变化率再次限制住。后者等价于给加速度曲线又做了一层低通,啸叫立刻消失。

5.3 定时器中断里的浮点恶魔

第三个坑属于“看不见摸不着但迟早会咬你”。我的第一个S型版本用了大量float计算,在1ms中断里跑没有问题,但后来把控制频率提高到2kHz(0.5ms周期)后,中断偶尔出现溢出——脉冲输出波形有毛刺,电机偶尔发出不规律的“哒哒”声。

排查后定位到问题:定时器中断里不能只算速度规划,还有位置比较、IO操作、通信协议解析。浮点乘除法在小MCU上没有硬件加速,CPU时间被挪用后,中断响应出现抖动。运动控制中断最怕的就是响应时间不确定,位置反馈一旦丢一拍,整个闭环都会乱。

后续我做了三件事:一是把速度规划的浮点运算全部改成定点数(用位移和速度乘以量化因子后以长整数表示);二是把通信和日志处理尽量挪出中断;三是给控制中断设了最高优先级,确保脉冲计算永远不被插队。这三板斧下去,毛刺彻底消失,平台重新丝滑。

还有一个容易忽略的细节:中断里不要用printf或任何带阻塞的调试输出。实测只要在中断里放一个串口打印,中断周期就从1ms抖到3ms以上,S型曲线的连续性立刻被破坏,位置精度肉眼可见地下降。要做调试,就用DMA缓冲或者观察点,把数据留到主循环里输出。

写在最后:一点个人体会

这套S型加减速算法从推导、实现到调稳,前后花了一周多。回头总结,真正决定成败的不是算法本身,而是离散化细节和参数整定。连续域公式再漂亮,落到1ms中断里也会因为一阶近似、切换判据、减速点计算而变味。

我现在做运动控制项目的习惯是:先把梯形加减速跑通,确认机械和电机基本盘没问题,再换S型优化冲击和振动。这样如果后面出问题,至少能排除“算法实现”之外的因素。参数整定方面,记住 (J = A_{max} / T_{rise}) 这个起点,再根据实际负载惯量和振动反馈微调,比自己瞎试快得多。

如果你也正在跟加减速较劲,希望这篇写得比较啰嗦的记录能帮你少踩几个坑。下一步我打算把这段逻辑抽成独立模块,配合软件限位和动态目标位置下发一起整理,等有机会再单独写一篇。

相关新闻

SVPWM算法Simulink仿真实战:从原理到波形验证

SVPWM算法Simulink仿真实战:从原理到波形验证

1. 为什么要做SVPWM仿真&#xff1a;从电机控制的痛点说起我在做永磁同步电机&#xff08;PMSM&#xff09;驱动的项目时&#xff0c;第一次接触SVPWM算法&#xff0c;当时项目控制器用的还是最传统的SPWM&#xff08;正弦脉宽调制&#xff09;。初期调试的时候&#xff0c;直流…

2026/10/20 23:33:12 阅读更多 →
二维码报修系统源码解析:从扫码到工单闭环的部署与避坑指南

二维码报修系统源码解析:从扫码到工单闭环的部署与避坑指南

简介&#xff1a;这份二维码报修系统源码基于ASP开发&#xff0c;面向IT运维人员、设备管理员及有报修流程数字化需求的开发者&#xff0c;用于解决传统设备报修中编号难记、信息填写繁琐、进度难追踪等问题。系统为每台设备生成唯一加密二维码&#xff0c;用户扫码即可进入报修…

2026/10/20 23:33:12 阅读更多 →
藏头诗微信小程序源码解析:从玩法设计到文本生成落地

藏头诗微信小程序源码解析:从玩法设计到文本生成落地

简介&#xff1a;藏头诗微信小程序源码包是一份完全基于前端实现的微信小程序项目&#xff0c;省去后端服务器依赖&#xff0c;适合小程序开发初学者、个人开发者及需要快速搭建轻量应用的创业者。整套源码共 19 个文件&#xff0c;由 js 逻辑脚本、json 页面配置、wxss 全局与…

2026/10/20 23:33:12 阅读更多 →

最新新闻

ADC采样精度与取平均实战:从原理到配置的避坑指南

ADC采样精度与取平均实战:从原理到配置的避坑指南

ADC 这个模块&#xff0c;说起来简单&#xff0c;做起来坑多。很多人第一次接触模数转换&#xff0c;觉得不就是把模拟电压读进来变成数字嘛&#xff0c;配置一下寄存器、开个通道、读个值就完事了。但真正到了项目里&#xff0c;你会发现读回来的数跳得厉害、精度对不上、采样…

2026/10/21 0:09:19 阅读更多 →
低压变频器EMC整改:时频特性驱动的接地与滤波工程实践

低压变频器EMC整改:时频特性驱动的接地与滤波工程实践

1. 为什么低压变频器总在调试现场“闹脾气”——从一台停机的输送带说起某自动化集成项目现场&#xff0c;三台7.5kW低压变频器驱动的辊道输送带&#xff0c;在空载运行时一切正常&#xff1b;一旦接入PLC的4–20mA模拟量给定信号并启动负载&#xff0c;系统就频繁报“通讯超时…

2026/10/21 0:09:19 阅读更多 →
STM32C5与CubeMX2实战评测:新芯片定位与工具链重构体验

STM32C5与CubeMX2实战评测:新芯片定位与工具链重构体验

1. 从一块新板子说起&#xff1a;为什么我会关注 STM32C5 和 CubeMX2前段时间拿到一块搭载 STM32C5 系列芯片的测试板&#xff0c;第一反应其实不是兴奋&#xff0c;而是有点犹豫——要不要花时间折腾它。原因很简单&#xff0c;STM32 的生态已经非常成熟&#xff0c;F1、F4、H…

2026/10/21 0:09:19 阅读更多 →
基于STM32的智能体重秤设计:从传感器到蓝牙通信的完整实现

基于STM32的智能体重秤设计:从传感器到蓝牙通信的完整实现

1. 从一个厨房角落里的需求说起前阵子帮朋友改造他家的旧体重秤&#xff0c;拆开一看&#xff0c;里面就是一块廉价的8位单片机加一个称重传感器&#xff0c;显示用的是段码屏&#xff0c;功能单一到只能站上去看个体重数字。朋友抱怨说&#xff0c;家里老人眼神不好&#xff0…

2026/10/21 0:09:19 阅读更多 →
汽车电子宽温磁环电感可靠性验证实战指南

汽车电子宽温磁环电感可靠性验证实战指南

1. 为什么宽温磁环电感的可靠性验证&#xff0c;是汽车电子EMC测试前最易被忽视的“地雷”你手头正赶着一个车载ADAS控制器的EMC摸底测试&#xff0c;样机在常温下辐射发射&#xff08;RE&#xff09;和传导发射&#xff08;CE&#xff09;数据都压得不错&#xff0c;离Class 5…

2026/10/21 0:09:19 阅读更多 →
BiLSTM-CRF命名实体识别:可解释、轻量、高确定性的NER基线实现

BiLSTM-CRF命名实体识别:可解释、轻量、高确定性的NER基线实现

简介&#xff1a;本资源是一套面向NLP初学者与医疗领域AI开发者的命名实体识别&#xff08;NER&#xff09;实战项目&#xff0c;聚焦BiLSTM-CRF模型在临床文本中的实体抽取任务&#xff0c;解决病症、药物、操作等关键信息自动识别难题。资源共24个文件&#xff0c;涵盖5个核心…

2026/10/21 0:08:18 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →