
1. 从抖动和爬行说起摩擦力矩补偿到底解决什么问题六轴协作臂在 0.5°/s 的低速点位里一抖一停末端画出的直线像心电图这种场面我碰过不止一次。把速度环、位置环、增益都翻了一遍最后问题落在关节摩擦力矩上。机器人运动控制里摩擦力矩补偿不是锦上添花的算法而是决定低速平稳性、轨迹跟踪精度和力控手感的基础环节。无论是库卡、ABB、发那科、安川这类工业臂还是遨博、法奥、埃夫特等协作机器人只要关节里有减速器、轴承、密封圈和线缆摩擦就不会消失。它带来的不是简单的“阻力大一点”而是低速爬行、换向凸起、圆弧轨迹削顶、力控发涩甚至让电流环出现周期性尖峰。很多做 ROS2 机器人开发、SLAM 导航、四足机器人运动控制的朋友习惯把注意力放在路径规划、状态估计和整机动力学上关节级摩擦往往被当成“驱动器能自己搞定”的小问题。实际调试时恰恰是这个“小问题”把位置环积分憋到饱和把力控带宽压到几十赫兹以下。摩擦力矩补偿的目标很直接用模型算出当前速度、方向、温度、负载下关节大概需要额外克服多少力矩然后把这个力矩前馈到控制器输出里让位置环和速度环不用靠积分去硬扛。它适合谁参考做机械臂算法、伺服调试、机器人动力学、力控打磨、四足摆动相、甚至 Klipper 和 RepRap 类运动控制平台的工程师都能从这套思路里拿到可复用的方法。我见过一个很典型的案例一台小型协作臂做涂胶轨迹直线段速度 5 mm/s末端总是出现约 0.3 mm 的波纹。客户先换减速器再换伺服最后发现问题在第三轴谐波减速器的静摩擦和 Stribeck 效应上。加入摩擦力矩补偿后波纹降到 0.05 mm 以内电机电流峰谷差也小了一半。这个例子说明摩擦补偿不是玄学它需要辨识、建模、限幅、平滑和现场整定少一步都可能从“补偿”变成“振荡源”。1.1 机器人关节里的摩擦到底从哪里来关节摩擦不是单一来源而是多个机械环节叠加的结果。电机侧有轴承摩擦、转子风阻和编码器轴承阻力减速器侧有柔轮与刚轮啮合、波发生器轴承、行星齿轮啮合、润滑脂粘滞输出侧有交叉滚子轴承、密封圈、线缆拖链和末端负载带来的法向力变化。低速时润滑脂膜没有完全建立金属微凸体接触占主导表现为静摩擦和库仑摩擦速度上来后润滑脂剪切变强粘滞摩擦占比增加在极低速区间还可能出现 Stribeck 负斜率也就是速度越低摩擦越大这正是爬行的根源之一。不同传动形式的摩擦性格差别很大。谐波减速器低温启动时摩擦矩可能是热机后的两到三倍RV 减速器相对稳定但空回和预紧影响明显行星减速器粘滞项更突出丝杠和导轨则受预紧力、润滑状态和防护圈影响。很多人只测一条“力矩-速度”曲线就以为够用实际上同一关节正转和反转的摩擦也不对称负载重心变化后法向力改变摩擦同样会漂。把这些来源拆开看才能理解为什么补偿模型不能只写一个常数。1.2 不补偿时会出现哪些典型现象最直观的是低速爬行。位置指令以恒定微小速度前进关节却走一下停一下编码器速度呈现锯齿波。第二个现象是换向凸起关节从正转切换到反转的瞬间需要先克服反向静摩擦力矩指令出现尖峰末端位置跳一下。第三个现象是圆弧轨迹变方在圆象限切换附近摩擦方向改变导致跟踪误差突然增大。第四个现象是力控发涩操作者拖动机器人时感觉“一格一格”导纳控制参数很难调顺。再往深里看摩擦还会污染系统辨识。你做惯量辨识时摩擦被当成阻尼你做重力补偿时摩擦被当成残余力矩你做碰撞检测时摩擦突变可能被误判为碰撞。有些工程师用提高位置环增益去压摩擦结果高频啸叫先来了机械磨损也加快。还有些人把积分限幅拉得很大换向时积分饱和恢复慢轨迹直接过冲。这些坑我都踩过最后发现最省力的路径还是把摩擦单独建模、单独补偿让反馈环只处理模型误差和外部扰动。1.3 补偿的收益和代价分别是什么收益很明确低速跟踪误差下降换向更干净力控透明度提升电机发热和电流峰值降低减速器寿命也更友好。尤其是在视觉引导机器人做精密装配、音圈电机配合末端执行器做微动、四足机器人摆动相落足时摩擦补偿能明显改善“手感”和重复定位。代价也有模型不准会引入额外力矩参数漂移会导致过补偿零速附近处理不好会带来极限环振荡补偿力矩限幅不当还可能掩盖真实碰撞。所以我的观点是摩擦补偿要当成一个完整的工程链路来做先理解机械、再选模型、再做辨识、再落地补偿、最后整定和排查。不要指望一组参数吃遍所有姿态和温度。下面按这个顺序拆开讲重点放在能直接复现的步骤、参数计算和避坑细节上。2. 摩擦模型怎么选从库仑粘滞到LuGre的取舍模型选择是摩擦补偿的第一道分水岭。选得太简单低速爬行压不住选得太复杂参数辨识困难实时性也吃不消。工业现场常见的做法是“库仑粘滞Stribeck”作为基础模型力控和遥操作再考虑 LuGre 或 GMS。这里没有绝对最优只有匹配场景的取舍。你要先问自己三个问题关节速度范围多大是否要求零速附近的平滑过渡控制器算力能承受多少个状态变量回答完这三个问题模型基本就定了。2.1 静态模型库仑、粘滞、Stribeck最基础的是库仑加粘滞模型τ_f τ_c · sgn(ω) b · ω其中 τ_c 是库仑摩擦力矩b 是粘滞摩擦系数ω 是关节角速度。它的优点是参数少、计算快、物理意义清楚。缺点是 sgn 在零速不连续低速时无法描述静摩擦和 Stribeck 效应。实测中一个谐波关节在 0.01 rad/s 时摩擦可能比 0.1 rad/s 还大这条曲线用纯库仑粘滞拟合会明显偏低。改进方式是加入 Stribeck 项τ_f [τ_c (τ_s - τ_c) · exp(-(ω/ω_s)^2)] · sgn(ω) b · ωτ_s 是静摩擦或最大静摩擦ω_s 是 Stribeck 速度。这个模型能表现“低速摩擦大、速度升高后下降再上升”的趋势适合大多数工业机械臂。参数辨识也不算难固定速度扫描就能拟合。要注意的是指数项在零速附近仍然依赖 sgn所以工程上还会把 sgn 换成 tanh 或 sigmoid 平滑。2.2 动态模型LuGre、GMS、DahlLuGre 模型用一个内部状态 z 表示鬃毛平均变形dz/dt ω - |ω| · z / g(ω)g(ω) τ_c (τ_s - τ_c) · exp(-(ω/ω_s)^2)τ_f σ0 · z σ1 · dz/dt σ2 · ω它能描述预滑移、滞后和零速附近的连续行为对力控、拖动示教、遥操作很友好。缺点是状态 z 需要积分参数 σ0、σ1、σ2 辨识麻烦采样周期和数值稳定性要求高。GMS 模型更精细把摩擦接触分成多个鬃毛单元能描述非局部记忆效应但计算量更大一般用在研究或高端力控不适合资源受限的关节控制器。Dahl 模型可以看成 LuGre 的简化版没有 Stribeck 项适合需要平滑但算力有限的场合。2.3 模型选择对比与实战建议模型参数数量优点缺点适用场景库仑粘滞2简单、实时性好零速不连续、低速不准高速轨迹、粗略补偿库仑粘滞Stribeck4能描述低速下降零速仍需平滑工业臂、协作臂低速Dahl3-4零速连续、计算量小无 Stribeck力控入门、资源受限LuGre6预滑移、滞后、零速连续辨识难、数值敏感力控、遥操作、四足GMS多非局部记忆、精度高计算量大研究、高端力控我的实战建议是普通点位控制和轨迹跟踪先用“Stribeck粘滞tanh 平滑”能解决八成问题需要拖动示教或力控透明再上 LuGre并且把状态积分放在 1 kHz 以上如果控制器只有 100 Hz 左右优先考虑查找表或低阶模型不要硬上 LuGre。模型复杂度要和采样率、算力、传感器精度匹配否则参数还没收敛机器人已经开始啸叫了。3. 摩擦力矩辨识实操速度扫描、数据采集与参数拟合辨识是摩擦补偿里最容易被低估的环节。很多人直接抄一组参数结果换一台机器人就失效。摩擦参数和减速器批次、润滑脂、预紧、温度、负载都相关必须现场辨识。下面这套速度扫描方法我在协作臂、工业臂和四足关节上都用过流程稳定适合复现。3.1 实验平台与安全准备先把机器人清场末端去掉易碎工具急停拿在手里。关节从冷态开始要静置 30 分钟以上让润滑脂温度和环境一致。采样率建议 1 kHz至少也要 500 Hz。需要采集的量包括关节位置 q、关节速度 ω、电机电流 i、母线电压、关节温度、驱动器力矩估计 τ_m。如果没有关节力矩传感器用电流估算τ_m K_t · i · N · ηK_t 是电机转矩常数N 是减速比η 是传动效率。效率会随速度变化所以这个方法只能做相对辨识最好用关节力矩传感器或驱动器高精度力矩估计。安全上要注意速度扫描必须从极小速度开始先正转再反转每个速度点保持 3 到 5 秒加速度段和减速段要剔除只取稳态窗口限幅关节力矩不超过额定值的 20%如果出现异常噪声或温度飙升立即停止。还有一点制动器抱闸的关节要先释放抱闸并确认重力负载不会导致失控。做重力较大的关节时最好加机械支撑或配重。3.2 速度扫描流程与数据采集速度点可以这样排0.001、0.002、0.005、0.01、0.02、0.05、0.1、0.2、0.5 rad/s正反各做一遍。每个点等速运行记录稳态段。为了分离重力和摩擦用正反平均和正反差τ_avg (τ_ τ_-) / 2 ≈ τ_gravityτ_diff (τ_ - τ_-) / 2 ≈ τ_c b·|ω|如果关节在水平方向运动重力项基本不变可以直接用差值拟合库仑和粘滞。如果关节在竖直方向重力随角度变化必须先做重力辨识或者选择重力矩变化小的角度区间。采集时把速度滤波到 50 Hz 左右力矩滤波到 20 到 50 Hz注意滤波器相位延迟正反数据要用同样的滤波。一个实用细节每个速度点先跑 2 秒“预热”再取后面 3 秒稳态。谐波减速器在极低速下需要更长时间建立润滑膜我通常会等 5 秒。温度也要记录冷态和热态数据分开拟合否则一条曲线会拟合出“平均温度”现场效果大打折扣。3.3 参数拟合最小二乘与分段处理把稳态数据整理成速度、力矩对先拟合粘滞项。正反差值除以 2 后得到 τ_diff。用线性部分估计 b用低速截距估计 τ_c。若要拟合 Stribeck先把 τ_diff 减去 b·|ω|再对剩余项拟合τ_stribeck(ω) τ_c (τ_s - τ_c) · exp(-(ω/ω_s)^2)可以用最小二乘也可以用 scipy.optimize.curve_fit。下面是一段 Python 示例直接读 CSV 就能跑import numpy as np import pandas as pd from scipy.optimize import curve_fit # CSV 列omega, torque_pos, torque_neg, temp df pd.read_csv(joint_friction_scan.csv) omega df[omega].values tau_pos df[torque_pos].values tau_neg df[torque_neg].values # 正反平均和差值分离重力与摩擦 tau_grav (tau_pos tau_neg) / 2.0 tau_diff (tau_pos - tau_neg) / 2.0 # 先拟合粘滞系数 b高速段近似线性 mask omega 0.1 b_fit np.polyfit(omega[mask], tau_diff[mask], 1)[0] # 再拟合 Stribeck 参数 def stribeck_model(w, tau_c, tau_s, w_s, b): return (tau_c (tau_s - tau_c) * np.exp(-(w / w_s) ** 2)) b * w p0 [0.2, 0.4, 0.02, b_fit] bounds ([0, 0, 1e-4, 0], [5, 10, 1.0, 5]) popt, pcov curve_fit(stribeck_model, omega, tau_diff, p0p0, boundsbounds, maxfev20000) tau_c, tau_s, w_s, b popt print(ftau_c{tau_c:.4f} Nm, tau_s{tau_s:.4f} Nm, w_s{w_s:.5f} rad/s, b{b:.5f} Nm*s/rad)拟合完要画图看残差。如果残差在低速段很大说明静摩擦没建好如果高速段翘尾可能是粘滞项没拟合准如果正反数据不对称要分别拟合正反向参数。不要迷信 R²现场效果比拟合优度更重要。3.4 辨识中的坑温度、方向、负载、减速器温度是第一大坑。冷态摩擦可以比热态高 30% 到 100%尤其谐波减速器。解决办法是记录温度做温度-摩擦查找表或者冷启动时先低速暖机 10 分钟再标定。方向不对称也很常见正转库仑 0.3 Nm反转可能 0.35 Nm原因是齿轮啮合面和预紧不同。负载变化会改变轴承和导轨法向力摩擦近似随法向力线性变化所以末端负载改变后要重新辨识或做负载补偿。减速器磨损和润滑脂老化会让参数缓慢漂移半年到一年复测一次比较稳妥。采样同步也不能忽视电流和位置如果不同步速度计算会引入相位误差低速时尤其明显。还有人用位置差分求速度编码器分辨率不够时速度噪声极大建议用驱动器内部速度或状态观测器。滤波器截止频率别设太低否则换向瞬间的摩擦特征会被滤掉拟合出来的库仑项偏小。4. 补偿策略落地前馈、反馈与电流环怎么配合辨识出参数只是拿到地图真正走路还要看补偿怎么接。摩擦补偿本质是前馈力矩最理想的接入点是逆动力学输出之后、力矩指令之前。如果驱动器只开放位置或速度接口就要通过电流偏移、速度环前馈或力矩前馈通道实现。不同接入点效果差别很大接错了会引入延迟和振荡。4.1 前馈补偿应该加在哪一层在支持力矩控制的关节上控制律可以写成τ_cmd τ_feedforward τ_friction Kp·e Kd·ė其中 τ_feedforward 包括重力、惯量、科氏力τ_friction 是摩擦补偿。这样反馈环只处理模型误差积分项可以设小。若驱动器工作在速度模式可以把摩擦补偿折算成速度前馈ω_cmd ω_des τ_friction / K_vK_v 是速度环等效增益。若只能位置模式补偿会经过内部速度环和电流环延迟更大效果打折。我的建议是做摩擦补偿前先确认驱动器能不能接受力矩前馈或电流前馈。不能的话至少把速度环带宽做够否则前馈力矩会被当成扰动压掉。4.2 方向切换与零速附近的平滑处理sgn 函数是振荡的元凶。真实关节在零速附近不是瞬间切换而是有一段预滑移。工程上常用 tanh 平滑τ_f τ_c · tanh(k·ω) b·ωk 越大越接近 sgn越小过渡越软。我一般从 k100 开始试。如果 ω0.01 rad/s 时 tanh(1)0.76已经比较接近饱和若零速附近抖动降到 k30 到 50。也可以用τ_f τ_c · ω / (|ω| ω0) b·ωω0 是平滑速度取 0.002 到 0.01 rad/s。这个形式计算更便宜适合嵌入式控制器。方向切换时还可以加一个短时斜坡把补偿力矩在 20 到 50 ms 内过渡避免电流尖峰。注意斜坡不能太长否则换向凸起又回来了。4.3 代码实现从 Python 仿真到 C 控制器先看 Python 仿真用来验证模型和参数import numpy as np def friction_torque(omega, tau_c, tau_s, w_s, b, k100.0): # tanh 平滑的 Stribeck 粘滞模型 s np.tanh(k * omega) stribeck tau_c (tau_s - tau_c) * np.exp(-(omega / w_s) ** 2) return stribeck * s b * omega # 示例参数 params dict(tau_c0.28, tau_s0.45, w_s0.015, b0.06) for w in [-0.2, -0.05, -0.01, 0.0, 0.01, 0.05, 0.2]: print(w, friction_torque(w, **params))C 控制器里可以这样写注意限幅和状态保持#include cmath #include algorithm struct FrictionParams { double tau_c; // 库仑摩擦 Nm double tau_s; // 静摩擦 Nm double w_s; // Stribeck 速度 rad/s double b; // 粘滞系数 Nm*s/rad double k; // tanh 平滑系数 double tau_max; // 补偿限幅 Nm }; double frictionCompensation(double omega, const FrictionParams p) { double s std::tanh(p.k * omega); double stribeck p.tau_c (p.tau_s - p.tau_c) * std::exp(-std::pow(omega / p.w_s, 2.0)); double tau stribeck * s p.b * omega; tau std::max(-p.tau_max, std::min(p.tau_max, tau)); return tau; }这段代码每个周期算一次1 kHz 完全没问题。若用 LuGre需要把状态 z 作为成员变量用欧拉或龙格库塔积分采样周期要稳定。还有一点补偿力矩的符号要和关节正方向定义一致很多现场问题都是因为减速比符号搞反越补越抖。4.4 参数整定与安全限幅不要一上来就 100% 补偿。先把补偿系数设成 0.3观察低速跟踪和电流再逐步加到 0.5、0.8、1.0。每加一次做正反向低速扫描和圆弧轨迹。如果出现高频啸叫检查补偿是否过冲、速度噪声是否太大、滤波器是否不足。限幅建议设为额定关节力矩的 10% 到 20%或者设为辨识库仑项的 1.5 倍。超过这个范围要么模型有问题要么机械有卡滞不要用补偿硬顶。整定顺序也很重要先做重力补偿再做摩擦补偿最后调反馈增益。重力补偿不准摩擦辨识会被污染摩擦补偿没做好积分项就会一直打架。若机器人有力控模式摩擦补偿还要和导纳参数一起调通常先把摩擦补偿调顺再降导纳阻尼手感会明显变透明。5. 常见问题排查与调参速查摩擦补偿上线后问题不会自动消失反而会以更隐蔽的方式出现。下面这些现象我都在现场遇到过排查思路整理成速查表方便你对着看。5.1 补偿后反而抖动或啸叫最常见原因是补偿过强或零速不连续。先把补偿系数降到 0.3看抖动是否减弱如果减弱说明过补偿。再检查速度信号是否噪声大编码器差分速度在低速时可能一跳一跳tanh 输入被噪声调制输出力矩也跟着抖。解决办法是给速度加低通滤波截止频率 20 到 50 Hz或者用状态观测器估计速度。还可以把 tanh 的 k 降低让过渡更软。另一个原因是补偿力矩和反馈环打架。位置环积分还在慢慢积累摩擦前馈又突然加上去两者叠加过冲。可以把积分增益暂时减半或者加积分抗饱和。若驱动器内部还有摩擦补偿记得关掉否则双重补偿。高频啸叫通常和采样延迟、滤波器相位、机械谐振有关先看电流频谱找到主频再决定是降低补偿带宽还是加陷波器。5.2 低速爬行仍然没有消除如果补偿后爬行只减轻不消失先检查静摩擦和 Stribeck 是否建模。纯库仑粘滞在极低速会低估摩擦尤其是 0.005 rad/s 以下。把 τ_s 和 ω_s 加进去重新辨识低速段。其次检查机械卡滞减速器预紧过大、密封圈过紧、线缆拖链干涉都会让摩擦出现位置依赖模型再准也补不了。可以用手动盘车感受如果某些角度明显费劲先解决机械问题。位置环积分也是关键。低速爬行本质是“静摩擦-动摩擦”切换前馈补偿把平均力矩补上后还需要一点积分项来填残差。但积分不能太大否则换向过冲。我的做法是给积分加一个很小的死区只在位置误差超过编码器分辨率两倍时积分同时用摩擦前馈承担主要力矩。若仍不行可以考虑速度环加扰动观测器把残余摩擦当扰动估计掉。5.3 换负载或换姿态后效果变差摩擦和法向力相关末端负载改变会改变关节轴承和减速器受力。轻型协作臂加 2 kg 负载第三轴摩擦可能增加 10% 到 20%。如果补偿参数不变低速可能又出现爬行。解决办法有两个一是做负载自适应用辨识出的负载质量更新摩擦参数二是做在线估计用递归最小二乘或扰动观测器缓慢修正库仑项。姿态变化则主要影响重力补偿重力项不准会污染摩擦辨识换姿态后先检查重力前馈是否跟得上。温度变化同样不可忽略。冷启动时补偿偏小热机后可能过补偿。可以在关节附近加温度传感器建立温度-库仑/粘滞查找表。没有温度传感器时用电机电流和运行时间估算温升做一阶热模型。我的经验是冷态先以 0.7 倍补偿运行温度稳定后再切到 1.0 倍能减少开机前几十分钟的异常。5.4 常见问题速查表现象可能原因排查方法处理建议低速爬行静摩擦未建模、积分不足看速度锯齿、电流脉冲加 Stribeck调积分死区换向凸起sgn 不连续、反向摩擦不对称看换向电流尖峰tanh 平滑正反参数分开高频啸叫过补偿、速度噪声、谐振看电流频谱降系数加滤波陷波力控发涩摩擦前馈延迟、导纳阻尼大拖动示教感受提高前馈带宽降阻尼温度漂移润滑脂粘度变化冷热态对比温度查找表暖机负载变化失效法向力改变加负载复测负载自适应在线估计电流尖峰补偿限幅太大看力矩指令限幅 10%-20% 额定位置过冲积分饱和、前馈过强看误差曲线抗饱和降补偿系数这张表建议打印出来贴在调试工位。很多问题不是算法错而是顺序错先机械、再传感、再模型、再参数、最后反馈。按这个顺序排查能少走很多弯路。6. 工程经验与扩展方向摩擦补偿做到能跑只是第一步真正难的是长期稳定。机器人换季、换润滑脂、换负载、换场地摩擦都会变。下面这些经验是我在实际项目里攒下来的偏向工程落地不追求模型多漂亮。6.1 温度与寿命漂移的在线估计温度对摩擦的影响通常在冷启动阶段最明显。一个实用做法是建立“温度-库仑-粘滞”三维查找表冷态 20°C、常温 30°C、热态 45°C 各测一组运行时线性插值。没有温度传感器时可以用电机绕组温度估计或者用运行时间做一阶惯性升温模型。更高级一点用递归最小二乘在线估计库仑项但要把更新速率放慢时间常数设到几十秒避免和轨迹动态混淆。寿命漂移则更慢。谐波减速器运行几百小时后润滑脂分布改变摩擦可能下降再往后磨损增加摩擦又上升。建议每 500 小时或每半年复测一次速度扫描更新参数。若机器人用于高精度力控复测周期缩短到 200 小时。别嫌麻烦一次复测半小时能避免大批产品轨迹超差。6.2 与重力补偿、惯量补偿的协同完整的关节力矩指令应该是τ M(q)·q̈ C(q, q̇)·q̇ G(q) τ_friction τ_feedback顺序不能乱。重力补偿负责静态保持惯量补偿负责加速段科氏力负责高速耦合摩擦补偿负责速度相关阻力。很多人只补摩擦不补重力结果摩擦参数里混进了重力残差换姿态就失效。用 Pinocchio、RBDL 或 Matlab 机器人工具箱算逆动力学时把摩擦项单独拿出来别和粘滞阻尼混在一起。ROS2 的 ros2_control 里可以在控制器输出后加一个自定义前馈节点但要注意实时性和符号一致性。四足机器人更特殊摆动相关节速度和负载周期变化快LuGre 或 Dahl 更合适支撑相则更像工业臂用 Stribeck 就够。Klipper、RepRap 这类 3D 打印机运动控制也有类似问题不过它们更多用 input shaper 抑制振动摩擦补偿在皮带和导轨预紧上作用有限。把对象分清别硬套。6.3 在 ROS2、仿真平台与真实机器人上的验证仿真验证能省很多时间。Gazebo 和 MuJoCo 都可以加关节摩擦模型MuJoCo 的 frictionloss、damping 参数能模拟库仑和粘滞但和真实谐波减速器差距不小。我的做法是先在仿真里验证补偿逻辑、限幅和平滑再把参数搬到真机做小速度扫描。ROS2 里可以用 joint_trajectory_controller 加前馈或者写一个实时节点订阅 joint_states发布 effort 前馈。注意仿真里的速度信号很干净真机速度噪声大所以平滑和滤波必须在仿真阶段就加进去。真机验证分三步第一步单关节空载低速正反扫描看跟踪误差和电流第二步多关节联动做圆弧和直线看末端精度第三步加负载和力控看手感。每一步都记录温度、电流、误差。若第三步效果差不要急着改摩擦参数先检查重力补偿和导纳参数。视觉引导机器人做装配时摩擦补偿带来的透明度提升往往比换更高分辨率编码器更明显。我个人的习惯是新机器人到手先做一次完整摩擦辨识把参数写进配置文件并留一个在线补偿系数。现场调试时只调这个系数不动底层参数。冬天发货的机器人补偿系数默认 1.1夏天默认 0.95到了现场再微调。这个土办法不高级但很稳。后续如果要做拖动示教、碰撞检测、力控打磨摩擦补偿就是地基地基打好了上面的算法才站得住。