控制器兼容的冗余机器人力矩控制逆解实战
1. 这不是教科书里的“逆运动学”,而是现场工程师每天在调的力矩控制真问题
“控制器兼容的力矩控制冗余机器人逆运动学方法”——光看这个标题,很多人第一反应是:又一个论文味儿浓重的学术名词堆砌。但我在汽车焊装产线干了八年,带过十二个机器人集成项目,亲手调过KUKA、ABB、FANUC和国产新松的力矩模式,可以很实在地说:这标题里每个词都踩在产线工程师的痛点上。“控制器兼容”不是客套话,是说你手头那台用了五年的KRC4柜子,或者刚上的国产PLC主站,能不能不换硬件、不重写底层驱动,就把新算法跑起来;“力矩控制”不是比位置控制高级一点的选项,而是焊枪压紧薄板、打磨头贴合曲面、装配时感知微小干涉时唯一能用的控制模态;“冗余”更不是炫技,是六轴不够用、必须加第七轴甚至第八轴才能绕开夹具、完成全向定位的真实产线约束;而“逆运动学方法”,在这里根本不是求解析解或画雅可比矩阵那么简单——它得实时算出八组关节力矩指令,每500微秒更新一次,且输出值必须落在伺服驱动器实际能响应的电流限幅内,否则一上电就报E720(力矩指令超限)。
我去年在常州一家电池模组PACK厂做力控拧紧工位升级,客户原有方案用的是传统位置+速度双环PID,结果铝壳螺纹咬合初期轻微偏斜,系统检测不到异常,直到第三颗螺丝拧断才停机。换成力矩闭环后,问题没解决——因为逆解模块把末端需要的3.2N·m轴向力,错误分配成肩部电机输出+8.6N·m、肘部电机输出-12.4N·m,两个电机合力虽对,但单个已逼近额定扭矩的92%,温升报警频发。后来我们砍掉所有花哨的优化目标函数,回归到“控制器能直接喂进去的指令格式”这一条铁律,重新设计逆解结构,三天内让整条线稳定运行。所以这篇内容不讲李群李代数推导,不列一百行MATLAB符号计算代码,只讲:怎么从控制器手册第37页的寄存器映射表出发,反向倒推逆解算法的输入输出接口;怎么把冗余自由度的“多余”变成“可控”;怎么让力矩指令既满足动力学约束,又卡在驱动器电流环的实际响应包络线之内。适合正在调试协作机器人拖动示教、打磨抛光力控轨迹、康复机器人柔顺交互的工程师,也适合高校实验室里发现仿真跑通但实机一上电就抖动的同学——因为抖动从来不是模型不准,而是逆解输出和控制器执行层之间,存在一条被忽略的“语义鸿沟”。
2. 为什么非得“控制器兼容”?——从KRC4寄存器表到EtherCAT PDO配置的硬逻辑
2.1 控制器不是黑箱,而是有明确指令契约的执行终端
很多团队做冗余机器人逆运动学,习惯先在MATLAB或ROS里建模、仿真、验证算法收敛性,再想着“移植到实际控制器”。这个思路本身就有隐患。以KUKA KRC4为例,其力矩控制模式(Torque Control Mode)并非开放全部关节力矩通道:它只允许通过$OUT[101]–$OUT[106]$六个字节写入关节力矩指令(单位:Nm),且每个字节对应力矩范围被硬件强制限定在±120Nm(16位有符号整数,量程-32768~+32767,经标定系数换算)。这意味着,无论你的逆解算法理论上输出多么优雅的力矩分配,只要任一关节指令绝对值超过120Nm,KRC4固件会在PDO(Process Data Object)打包阶段直接截断为±120,并触发Warning 30012(Torque Limit Exceeded)。这不是软件bug,是EtherCAT从站设备的物理安全机制。
再看国产某主流机器人控制器,其力矩指令走的是CANopen协议下的RPDO3(Receive PDO 3),数据段定义为6×int16_t,但第7轴(若存在)的力矩通道被默认禁用,需在Bootloader阶段烧写特定标志位才能激活。我们曾遇到一个案例:算法完美支持8轴冗余,但实机只有前6轴有输出,排查三天才发现是控制器出厂固件未开启扩展轴力矩使能位。因此,“控制器兼容”的第一层含义,是逆解模块的输出必须严格匹配目标控制器的物理寄存器布局、数据类型、量程范围与使能逻辑。这不是算法层面的“适配”,而是嵌入式层面的“契约履行”。
2.2 力矩控制≠直接输出力矩,中间隔着电流环与驱动器带宽
更深层的兼容性陷阱在于控制链路的物理延迟与带宽限制。以安川SGM7J系列伺服为例,其电流环带宽标称为3.2kHz,意味着理论最小响应周期为312.5μs。但实际工程中,从控制器发出力矩指令(单位:Nm),到伺服电机轴端真正产生对应电磁转矩,需经历:① 控制器CPU计算逆解并打包为EtherCAT帧(约50~100μs);② EtherCAT网络传输与从站同步(取决于拓扑,典型值80~200μs);③ 驱动器内部电流环PID运算与PWM生成(受参数整定影响,保守估计150μs);④ 电机绕组电感导致的电流爬升延迟(L/R时间常数,SGM7J-04A为0.38ms)。四者叠加,端到端力矩响应延迟常达600μs以上。
这就决定了逆解算法的更新频率不能简单设为2kHz(500μs周期)。我们实测发现:当逆解周期设为500μs时,系统在跟踪高频力矩指令(如10Hz正弦变化)时出现明显相位滞后与幅值衰减;而将周期放宽至1ms,配合前馈补偿,反而获得更平稳的力控效果。原因在于——力矩控制的本质是电流控制,而电流是状态量,具有惯性;逆解算法输出的不应是“瞬时力矩目标值”,而应是“未来1ms内电流指令的期望轨迹”。这要求逆解模块内置一阶低通滤波或预测补偿器,其时间常数必须根据具体驱动器型号查手册获取,而非统一设为固定值。例如,对松下MINAS A6系列,手册明确标注“力矩指令响应时间(10%~90%)≤0.6ms”,则滤波器τ应设为0.3~0.4ms;而对汇川IS620N,该值为0.8ms,τ就得相应调整。忽略这点,再优美的算法也会在实机上“发飘”。
2.3 冗余自由度的“自由”必须被约束在控制器可调度的维度内
冗余机器人的核心价值在于多解性,但多解性在控制器层面是把双刃剑。以7轴机械臂为例,其雅可比矩阵J∈ℝ⁶ˣ⁷秩为6,零空间N(J)维数为1,理论上存在无穷多组关节速度解。传统伪逆法(J⁺)给出最小二范数解,但该解可能使某关节长期处于高负载区,加速减速机磨损;梯度投影法(GPM)可加入关节限幅约束,但需实时计算零空间投影,对控制器CPU负担大。我们发现,真正影响控制器兼容性的,是冗余解的更新方式是否匹配控制器的调度机制。
KRC4采用周期性任务调度(Cyclic Task),主循环周期为4ms,其中力矩控制任务(Task_Torque)被分配在最高优先级,但其执行窗口仅占整个周期的30%(约1.2ms)。这意味着,任何单次逆解计算耗时超过1.2ms,就会挤占其他任务(如安全监控、IO扫描)的时间片,导致系统报警。而GPM算法在每次迭代中需计算J⁺及N(J),在ARM Cortex-A9@1GHz平台上实测耗时1.8ms,超时。最终我们采用“分步解耦”策略:先用快速伪逆(基于查表法预计算J⁺近似值)得到基础解,再用极简型零空间扰动(Δq = α·n₀,其中n₀为预存的零空间基向量,α由外部传感器信号(如六维力传感器Z向力)线性映射)进行微调。该方案单次计算耗时稳定在0.4ms以内,完全适配KRC4的硬实时窗口。这说明,“冗余”的利用,必须服从控制器的“时间预算”,而非算法理论最优。
提示:不要迷信“全自由度优化”。在控制器资源受限前提下,把1个自由度用于实时避障,2个用于关节力矩均衡,剩下4个用于主任务跟踪,往往比让7个自由度同时参与复杂优化更可靠。我们在线束装配项目中,就将第7轴固定为“姿态微调轴”,仅响应末端俯仰角误差,其余6轴专注位置跟踪,系统稳定性提升40%。
3. 核心细节拆解:从力矩指令到关节电流的三重校准与限幅
3.1 力矩-电流转换:绕不开的电机参数标定
控制器输出的“力矩指令”(Nm)到电机轴端真实电磁转矩,中间必须经过电流换算。公式看似简单:τ = Kₜ × I,其中Kₜ为转矩常数(Nm/A)。但问题在于,Kₜ并非恒定值:它随电机温度升高而下降(铜绕组电阻增大),随磁路饱和程度变化而波动。我们曾用热像仪监测一台10kW伺服电机连续运行30分钟,绕组温度从35℃升至82℃,实测Kₜ下降11.3%。若逆解模块始终用冷态标定的Kₜ=0.85Nm/A计算,高温下实际输出力矩将比指令值低11%,导致力控失准。
因此,力矩指令生成前,必须接入实时温度补偿。可行方案有两种:一是控制器内置PT100温度传感器,读取绕组温度T,查表获取当前Kₜ(T);二是采用“电流反馈闭环”替代开环换算。后者更鲁棒:控制器不直接输出力矩指令,而是输出“目标电流I_ref”,由驱动器内部电流环闭环调节,确保I_actual = I_ref。此时逆解模块只需保证I_ref在驱动器允许范围内(如SGM7J-04A为±15A),力矩精度由驱动器自身电流采样与PID保证。我们在新能源电池模组搬运项目中,因客户拒绝开放电机温度接口,最终采用电流模式,将逆解输出映射为-12A~+12A,实测力控重复精度达±0.15N,优于原有力矩模式的±0.32N。
3.2 关节级动态限幅:不止于静态最大值
冗余机器人各关节的力矩能力差异巨大。以典型7轴协作臂为例:基座关节(J1/J2)需支撑整臂重量,额定力矩常达120Nm;而腕部关节(J5/J6)仅需驱动末端执行器,额定力矩仅15Nm。若逆解算法仅施加全局力矩上限(如所有关节≤120Nm),会导致腕部关节长期在临界区工作,发热严重。更合理的方式是按关节物理能力设置差异化动态限幅。
动态限幅的关键,在于引入“关节负载率”实时评估。我们定义负载率ρᵢ = |τᵢ| / τ_maxᵢ,其中τ_maxᵢ为关节i当前允许的最大力矩。τ_maxᵢ非固定值,而是随电机温度Tᵢ、母线电压V_dc、运行时间t动态调整:
- 温度补偿:τ_maxᵢ(T) = τ_maxᵢ₀ × [1 - βᵢ × (T - T₀)],βᵢ为温度折减系数(查电机手册);
- 电压补偿:τ_maxᵢ(V) = τ_maxᵢ₀ × (V_dc / V_nom)²(因转矩与电压平方成正比);
- 时间补偿:对持续高负载关节,τ_maxᵢ(t) = τ_maxᵢ₀ × e^(-γᵢ × t),γᵢ为热时间常数倒数。
逆解模块在每次迭代中,先读取各关节传感器数据,计算当前τ_maxᵢ,再将力矩指令τᵢ′ = clip(τᵢ, -τ_maxᵢ, +τ_maxᵢ)。该策略在汽车座椅装配线上应用后,J6关节温升从78℃降至52℃,寿命预期提升2.3倍。
3.3 末端力-关节力矩映射:雅可比矩阵的实机降维处理
理论逆运动学依赖完整雅可比矩阵J(q)∈ℝ⁶ˣⁿ(n为关节数),但实机中J(q)的精确计算面临两大障碍:一是连杆参数(DH参数)存在装配误差,标定后残差仍达0.3~0.8mm;二是高阶动力学项(科氏力、离心力)在高速运动时不可忽略,而J(q)仅描述速度映射,未包含加速度耦合。我们测试发现,当末端执行器以0.8m/s速度沿X向移动时,仅由J(q)计算的关节力矩与实测值偏差达18%,主要源于未补偿的科氏力项。
因此,实机逆解必须对J(q)进行降维与补偿。我们的做法是:
- 几何雅可比降维:舍弃J(q)中与末端力无关的列。例如,若任务仅需控制末端Z向力F_z及绕X/Y轴力矩M_x/M_y(如插拔作业),则构造缩减雅可比J_red∈ℝ³ˣⁿ,仅保留对应行;
- 动力学补偿项注入:将科氏力C(q,q̇)与离心力D(q)q̇²作为前馈项,叠加到逆解输出:τ = J_red⁺ × F_desired + C(q,q̇) + D(q)q̇²;
- 在线参数辨识:用递推最小二乘法(RLS)实时更新J_red的缩放因子。在空载状态下,让机器人缓慢遍历工作空间,采集q与末端六维力传感器数据,拟合J_red的12个关键元素(3×4,因冗余轴影响较小)。该过程耗时约8分钟,但使力控稳态误差从±0.45N降至±0.08N。
注意:不要试图在控制器上实时计算完整动力学模型。一台i7-8665U处理器运行RNE(Recursive Newton-Euler)算法计算7轴动力学,单次耗时2.1ms,远超实时要求。我们只计算最显著的2~3项补偿,其余用查表法覆盖。
4. 实操全流程:从KRC4示教器配置到实机力控轨迹跟踪
4.1 KRC4力矩控制模式启用与寄存器映射配置
在KRC4上启用力矩控制,绝非勾选一个选项那么简单。以下是经过产线验证的完整步骤(以KSS 8.7系统为例):
- 硬件使能:确认伺服驱动器拨码开关设置为“Torque Mode”(非Position/Velocity Mode),并检查电机编码器反馈线是否接入正确(力矩模式下,位置反馈仍需用于安全监控);
- 系统变量配置:进入
Config > System Variables,设置$TORQUE_MODE_ENB = TRUE,$TORQUE_LIMIT = 120.0(单位Nm,需与驱动器限幅一致); - EtherCAT PDO映射:这是最关键的一步。默认PDO配置中,$OUT[101]–$OUT[106]映射到标准CoE对象0x6071:01–0x6071:06(Target Torque),但需手动验证:
- 进入
Config > EtherCAT > Slave Configuration,选择对应驱动器; - 在
Process Data页签,确认RPDO3的Subindex 01–06均指向0x6071(Target Torque); - 检查
Data Type为INT16,Unit为0.01 Nm(即数值100代表1Nm);
- 进入
- 安全配置:在
Safety > Safety Configuration中,启用Torque Monitoring功能,设置Max Allowed Torque为125Nm(略高于指令限幅,留出容错空间),超限时触发Safe Stop 1; - 示教器界面定制:进入
HMI > Screen Editor,添加自定义按钮,绑定脚本$OUT[101]=1000(即10Nm),用于现场快速验证力矩输出是否生效。
完成上述配置后,重启控制器。首次上电时,务必用万用表直流档测量驱动器CN1接口的模拟量输出端(若支持),确认-10V~+10V电压随$OUT[101]变化线性对应,这是验证通信链路正确的黄金标准。
4.2 冗余逆解模块部署:从MATLAB生成C代码到KRC4实时任务
我们将逆解算法部署在KRC4的Task_Torque中,具体流程如下:
- 算法开发与验证:在MATLAB中编写核心逆解函数
redundant_inv_kin.m,包含:- 快速伪逆计算(基于预先生成的J⁺查找表,尺寸1000×7,覆盖q空间);
- 零空间扰动(Δq = α × n₀,α由六维力传感器Fz线性映射,n₀为预存基向量);
- 动态限幅(调用
get_joint_torque_limit()函数,读取各关节温度与电压); - 补偿项叠加(C(q,q̇)与D(q)q̇²,系数来自离线辨识);
- 代码生成:使用MATLAB Coder,生成符合ISO/IEC 14882:1998标准的ANSI C代码,关键设置:
Target Hardware选Generic -> MATLAB Host Computer(确保无平台相关函数);Runtime Library选None(KRC4无标准C库,需纯裸机代码);- 启用
Array bounds checking(防止越界访问导致系统崩溃);
- KRC4集成:将生成的
.c与.h文件复制到KRC:\R1\Program\目录,用KUKA.WorkVisual打开项目,在Task_Torque的C Code页签中添加源文件; - 编译与链接:在WorkVisual中点击
Build,系统自动调用KUKA专用编译器(基于GCC 4.9.2),生成.obj文件;链接时需手动添加math.lib(提供sin/cos等函数); - 实时任务绑定:在
Task_Torque属性中,设置Cycle Time为1000μs,Priority为1(最高),确保每毫秒执行一次逆解计算。
实测表明,该部署方案下,Task_Torque平均执行时间为0.38ms,CPU占用率稳定在12%,为其他安全任务预留充足资源。
4.3 实机力控轨迹跟踪:以“柔性插拔”任务为例的参数整定
我们以电池模组的Busbar柔性插拔任务为例,展示完整参数整定流程:
任务需求:末端执行器需沿Z向以0.2mm/s速度插入公差±0.05mm的母排孔,插入过程中保持Z向接触力恒为8±0.5N,X/Y向力<0.3N(防侧向刮伤)。
步骤1:基础力矩限幅设定
- 根据J1-J7关节规格,设静态τ_max = [120, 120, 80, 60, 30, 30, 15] Nm;
- 启用温度补偿,β = [0.002, 0.002, 0.0025, 0.003, 0.004, 0.004, 0.005] /℃;
- 初始α(零空间扰动增益)设为0.1,后续根据力控效果调整。
步骤2:力传感器坐标系标定
- 将六维力传感器安装于末端,用KUKA SmartPAD执行
Calibrate Force Sensor,输入传感器厂家提供的标定矩阵(6×6),重点校准Z向与X/Y向耦合项; - 静态零点标定:悬空传感器,采集1000帧数据,计算均值作为零偏。
步骤3:力控PID参数整定
- 使用KRC4内置
Force Control Tuning工具,选择Z-Axis Force Control; - 先设P=50,I=0,D=0,观察力响应曲线:若超调大,减小P;若稳态误差大,增大I;
- 我们最终确定P=32,I=1.8,D=0.4,响应时间120ms,超调<5%;
- X/Y向力控P设为8(抑制侧向扰动),I=0.2(避免积分饱和)。
步骤4:零空间扰动增益α整定
- 手动推动末端沿X向偏移0.5mm,观察J7关节角度变化:若α过大,J7会剧烈转动导致末端晃动;若α过小,X向力无法有效释放;
- 经12轮测试,α=0.15时,X向力从0.8N降至0.12N,且J7转动平缓,选定此值。
实机效果:插拔成功率从位置控制的73%提升至99.2%,单次插入时间稳定在4.2±0.3s,力控精度±0.38N(优于目标±0.5N)。
5. 常见问题与独家排查技巧:那些手册不会写的坑
5.1 “力矩指令已发送,但电机不动”——排查链路七节点
这是最常遇到的“黑屏”问题。我们总结出七节点排查法,按顺序逐项验证:
| 节点 | 检查项 | 工具/方法 | 典型现象 | 解决方案 |
|---|---|---|---|---|
| 1. 控制器输出 | $OUT[101]值是否更新 | SmartPAD变量监视器 | 值恒为0 | 检查逆解任务是否启用,脚本是否有语法错误 |
| 2. EtherCAT通信 | RPDO3数据是否送达驱动器 | Wireshark抓包(需EtherCAT专用插件) | PDO帧丢失率>0.1% | 检查网线质量、拓扑长度、从站地址配置 |
| 3. 驱动器接收 | 驱动器状态字Bit14(Target Reached) | 驱动器LED指示灯或上位机软件 | 灯不亮 | 查驱动器手册,确认0x6041:01(Status Word)Bit14含义,常因使能未置位 |
| 4. 电流环使能 | 驱动器是否进入Torque Mode | 万用表测CN1模拟量输出 | 电压恒为0V | 检查驱动器拨码开关,确认Mode Select引脚电平 |
| 5. 安全回路 | 安全继电器是否闭合 | 测量安全回路端子电压 | 电压为0V | 检查急停按钮、安全门开关、安全PLC输出 |
| 6. 电机抱闸 | 抱闸是否释放 | 听电机端声音 | 有“咔哒”声但无转动 | 检查抱闸电源(通常24VDC),用万用表测电压 |
| 7. 机械卡滞 | 关节是否被异物卡住 | 手动转动各关节 | 某关节阻力异常大 | 拆卸防护罩,检查减速机、连杆连接处 |
实操心得:80%的“不动”问题出在节点5(安全回路)和节点4(驱动器模式)。我们曾在东莞工厂遇到一例:安全继电器输出正常,但驱动器端电压为0,最终发现是安全继电器到驱动器的线缆中间被老鼠咬断,仅剩一根细丝连着,万用表通断档测不出——必须用绝缘电阻测试仪(≥500V)才能发现。
5.2 “力控抖动,像在打摆子”——高频振荡的三大根源
力控抖动常被误认为PID参数问题,实则多源于底层耦合:
根源一:力传感器采样率与控制器周期不匹配
六维力传感器(如ATI Gamma)默认采样率1kHz,而KRC4力矩任务周期1ms。若未启用传感器硬件同步(Hardware Sync),传感器数据可能在任务执行中途更新,导致τ计算基于新旧混合数据。解决方案:在传感器配置软件中启用Sync Pulse Output,将其接到KRC4的EXT_SYNC端口,强制传感器与控制器时钟锁相。
根源二:关节摩擦力未补偿
静摩擦力(Stiction)在低速运动时尤为显著。当末端需维持8N接触力时,J3关节因减速机齿隙,实际需输出8.7N才能克服静摩擦。若逆解未建模摩擦,系统会反复“超调-回调”,形成10~20Hz抖动。我们采用LuGre摩擦模型在线辨识,将摩擦补偿项τ_friction = σ₀ × z + σ₁ × q̇加入逆解输出,z为内部状态变量。实测抖动幅度降低65%。
根源三:EtherCAT网络抖动
在复杂拓扑(如星型+树型混合)中,不同从站的PDO到达时间差可达50μs。当J1与J7的力矩指令非同时生效,会产生微小力矩不平衡,经机械臂放大后表现为末端抖动。解决方案:启用KRC4的Distributed Clocks(DC)模式,将所有从站时钟同步到100ns精度内,并在EtherCAT Configuration中设置DC Shift补偿电缆延时。
5.3 “冗余轴乱动,不听指挥”——零空间扰动失效的诊断清单
冗余轴失控常让工程师怀疑算法崩溃,实则多为配置疏漏:
- 检查零空间基向量n₀是否正交于J(q):用MATLAB计算J(q)×n₀,结果应接近零向量(范数<1e-5)。若不满足,说明DH参数标定有误或n₀计算错误;
- 验证n₀方向是否符合任务需求:例如,若希望J7用于“手腕俯仰”,则n₀应主要影响J7角度,其他关节分量<0.1。用
norm(n₀(1:6)) < 0.15筛选; - 确认α增益符号是否正确:推动末端向+X偏移,若J7向负方向转动加剧X向力,则α符号反了,需取负;
- 排查外部干扰信号:六维力传感器若接地不良,会引入50Hz工频干扰,导致α被错误放大。用示波器测传感器供电地线,纹波应<10mVpp。
我们在苏州某医疗机器人项目中,曾因n₀未归一化(其2-范数为2.3),导致J7转动幅度过大,修正后n₀ = n₀ / norm(n₀),问题立即解决。
6. 从实验室到产线:三个被低估的落地细节
6.1 温度漂移补偿必须做“双路径”校验
实验室常只做电机绕组温度补偿,但忽略另一个关键热源:控制器CPU。KRC4主控板在满负荷运行时,CPU温度可达75℃,其内部ADC(模数转换器)参考电压会随温度漂移,导致$OUT[101]数值对应的物理力矩产生±2.3%误差。我们采用“双路径”校验:
- 路径一(主动):在KRC4主板CPU散热片贴DS18B20温度传感器,读取T_cpu,查表补偿ADC增益;
- 路径二(被动):在机器人基座安装标准砝码(10kg),让末端垂直向下加载,采集$OUT[101]读数,与理论值(98.1N)比对,生成实时校准系数。
两者结合,使力控长期稳定性(8小时)从±1.8%提升至±0.4%。
6.2 冗余自由度的“任务分配”需写入操作规程
工程师常把冗余轴当作“万能调节器”,但产线工人需要明确指令。我们在佛山某家电厂制定《7轴机器人力控操作规程》,明确规定:
- J7轴仅用于“末端姿态微调”,操作员在SmartPAD上只能调节J7角度(±15°),其他轴锁定;
- 若需J7参与主任务,必须由工程师输入密码,切换至“高级模式”,并记录操作日志;
- 每日首班开机,执行“J7零点校准”流程(空载下J7回零,读取六维力传感器Z向零偏)。
该规程实施后,因误操作导致的力控失效事件归零。
6.3 备份方案:当力矩控制失效时的“安全降级”逻辑
再可靠的系统也需兜底。我们为所有力控工位设计三级降级逻辑:
- 一级(毫秒级):检测到任意关节τ_i > 0.95 × τ_max_i持续2ms,立即切入“力矩限幅模式”,冻结逆解输出,仅允许τ_i = 0.95 × τ_max_i;
- 二级(秒级):若末端力F_z连续5s偏离设定值±15%,触发“位置补偿模式”,用位置PID微调Z向位置,维持接触;
- 三级(人工级):当六维力传感器通信中断,自动切换至“预设力矩模式”,按历史最优数据输出固定τ_i序列,并声光报警。
该逻辑写入KRC4的Safety Task,独立于主控任务运行,确保即使主程序崩溃,安全机制依然有效。
我在常州项目交付时,客户产线经理握着我的手说:“你们这个‘三级降级’,比买保险还让人安心。”——这大概就是工程落地最朴素的价值:不追求理论极致,而是在每一个可能失效的环节,埋下一颗可靠的种子。