ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

机器人柔顺控制原理详解:从阻抗到导纳,手把手教你调参与避坑

机器人柔顺控制原理详解:从阻抗到导纳,手把手教你调参与避坑 工业现场里最让人头疼的问题之一就是机器人一碰到力就僵住。不管是装配插孔、打磨去毛刺、还是做FnC检测一旦零件公差稍紧或安装位置有偏差刚性状态下机器人就会硬碰硬轻则报警停机重则撞坏工件甚至伤到人。我最早接触柔顺控制就是为了解决这类现场问题说实话这套东西的原理并不玄真正难的是理解它到底在解决什么问题以及怎么把参数调到能用。这篇文章就围绕机器人柔顺控制原理这个主题聊聊我从被动柔顺到主动柔顺、从阻抗到导纳再到力位混合控制的完整理解也把我调参踩坑的经验一并整理出来给做机器人应用和开发的同行做个参考。1. 为什么机器人一定要讲柔顺1.1 刚性控制的尴尬场景大部分工业机器人在出厂时默认跑的是位置控制也就是每个关节都按指令角度走走不到就加大力矩直到到达目标位置。这种控制策略的优点是重复定位精度高能达到正负0.02毫米甚至更高特别适合焊接、搬运、涂胶这类不需要和周围环境产生力的任务。但遇到接触类任务就完全不同了。拿最常见的轴孔装配来说如果你的机器人要把一根直径20毫米的销子插进直径20.05毫米的孔里理论上位置精度够就能插进去。可实际上零件在料盘里的位置是有误差的视觉定位再有零点几毫米的偏差销子和孔口就会产生接触。这时候位置控制的本能反应是继续往前走直到走到目标点结果就是销子被大力压在孔口边缘姿态稍微偏一点就卡死继续顶就产生几百牛的力最终触发碰撞报警。打磨抛光也是同样的道理。工件表面并不是绝对平整的焊点高度、毛刺大小都不可控如果机器人严格按预设路径走遇到高点会过切遇到低点会漏磨刀具与工件之间的接触力忽大忽小质量完全没法保证。所以我一直觉得柔顺控制的本质不是让机器人变弱而是让它在保持运动能力的同时对环境力有感知、会屈服。换句话说机器人在某些方向上不再死盯位置而是按照力的大小来动态调整自己的运动这就是柔顺控制的核心逻辑。1.2 柔顺的两种实现路线柔顺控制从实现方式上分成两大类被动柔顺和主动柔顺。被动柔顺的意思是靠机械结构本身的柔性去吸收力和位置偏差。常见的手段有弹簧、阻尼器、柔性手腕比如RCC远中心柔顺装置这些东西不需要传感器也不需要算法天然就能在受力时发生形变从而降低接触力。主动柔顺的意思是通过力传感器检测接触力再由控制算法实时调整机器人的目标位置或目标力矩达到柔顺效果。它不依赖物理变形而是靠软件层面的让位来解决问题。这两种路线各有利弊不能简单说谁更先进。被动柔顺响应快、成本低、没有延迟适合大批量、变化少的场景但它的柔性参数固定死了换一种工件就很难适配主动柔顺灵活可调能适应复杂工况但它依赖传感器精度和控制频率而且调参不好会引发振荡甚至失稳。现代工业里真正被广泛采用的几乎都是主动柔顺。从协作机器人的拖动示教到精密装配的恒力控制再到医疗机器人的力反馈操作底层核心都是主动柔顺那套理论。接下来我重点拆解这部分原理。2. 被动柔顺机械结构的容忍度2.1 柔性手腕与弹簧阻尼器的思路被动柔顺的代表是RCC装置这个在汽车、电子行业的装配线上很常见。它的核心思想很巧妙在机器人的法兰和夹爪之间加一组弹簧片和弹性体让末端在受力时能绕某个特定中心点产生微小转动和位移。以前用的腕部结构和平面副组合可以让零件在插入过程中找正自己顺着孔口倒角滑进去。这就像你用手去插电源插头如果孔位稍微偏一点你不会硬怼手腕会自然地顺势微调让它滑入。RCC就是把这个手腕的自然顺应做成机械结构。它的优势是纯物理响应没有采样周期、没有算法延迟插入速度可以极快可靠性很高。RCC的关键参数是柔顺中心的位置也就是末端在受力时绕哪个点产生转动变形。这个中心位置选得好轴插入时就不会在孔内别住选得不好反而会导致零件倾斜卡死。设计时一般要把柔顺中心和轴孔接触区域的重合度做进去这是一个机械加工精度层面的工程问题。弹簧阻尼器组合也是被动柔顺的常见形式比如某些打磨主轴会串联弹性浮动的浮动打磨头让砂轮在接触面上有一个微小的浮动空间。工件表面有凸起时刀头被推回去而不是硬切能明显减少磨穿和刀具崩刃的风险。这类方案在需要快速响应的场合仍然在被广泛使用。2.2 被动柔顺的局限在哪里被动柔顺最大的问题是不可调节性。弹簧常数和阻尼系数出厂后就固定了你没法根据不同的工件硬度、接触速度、精度要求临时改变柔顺特性。换一款产品就要重新设计或者更换机械部件维护成本高。第二个问题是精度损失。被动柔顺引入了机械间隙和弹性形变机器人的绝对定位精度下降理论上能做到的准被牺牲掉了。在一些既要接触力可控、又要求定位精度高的场合纯机械方案就力不从心了。第三个问题是它不具备感知能力。被动柔顺只知道受力就变形但它不知道力是哪个方向、不知道大小是多少、更无法判断这个力是正常的接触力还是异常碰撞。很多齿轮、阀门装配场景中卡死和正常插入的受力特征差异很小被动结构没法做出区分所以只能靠外部限位机构辅助灵活性大打折扣。所以被动柔顺作为一类廉价、可靠、快速的手段在批量生产的重复作业中依然有位置。但一旦需要机器人适应多种工件、多方向接触力、复杂轨迹主动柔顺才是治本方案。这也是为什么我想深入讲主动柔顺尤其是阻抗和导纳这两种控制策略。3. 主动柔顺的核心阻抗控制3.1 把机器人想象成弹簧-质量-阻尼系统主动柔顺的实现方式有很多但最主流、最通用的是阻抗控制。它的核心思想是不再直接控制接触力的大小而是控制机器人末端位置偏差和接触力之间的动态关系。为了说清楚这个关系我习惯用一个类比想象你站在一个弹簧门面前用手去推门。如果门很硬刚度K很大你推它几乎不动力全吃在你手上感觉非常硬。如果门很软刚度K很小你轻轻一推它就开力基本没怎么上传到手臂。如果门带阻尼器阻尼B很大你推门时会明显感觉有阻力感速度越快阻力越大但门不会被弹回来。如果门很重惯量M很大想让它动起来就很难但一旦动起来想停也难。阻抗控制就是在机器人控制软件里虚拟出这扇门。机器人末端的位置x和目标位置x_d之间如果有偏差Δx系统就会产生一个对应的接触力F反过来当实际存在外力和位置偏差时机器人不会一直往目标位置硬顶而是表现出类似弹簧-质量-阻尼的动态响应。用公式表达就是F_ext M_d * (ẍ - ẍ_d) B_d * (ẋ - ẋ_d) K_d * (x - x_d)这里的M_d、B_d、K_d是目标惯量、目标阻尼和目标刚度它们不是机器人本身的物理参数而是你在算法里设置的人为参数。你可以把机器人末端做成一个惯性很大、阻尼适中、刚度很低的虚拟弹簧系统也可以反过来让它像一个刚性冲击器。关键就是这几个参数的取值。3.2 阻抗参数怎么定刚度、阻尼与惯量参数设计是整个阻抗控制的灵魂。我先说最基础的三参数作用刚度K_d决定稳态时的力-位置关系。K_d越大同样的位置偏差对应越大的接触力K_d越小机器人越软。在自由空间跟踪轨迹时K_d要取大保证位置精度在接触空间进行柔顺作业时K_d要取小让末端能顺应环境。阻尼B_d决定运动的能量耗散速度。阻尼不足机器人接触到硬表面时会产生振荡在孔内反复怼阻尼太大响应变慢跟不上运动指令。惯量M_d决定系统对加速度的敏感度。一般保持和机器人实际末端惯量同数量级差距过大会导致控制不稳定。调参时有个非常实用的指标叫阻尼比ζζ B_d / (2 * √(M_d * K_d))当ζ接近1时是临界阻尼状态系统既不振荡又不迟钝这是很多场合的默认目标。我实际调参时一般先把K_d按需求定下来——需要多大力、允许多大偏差两者相除就行——然后根据阻尼比公式反推B_d再在实机上微调。举个例子假设某装配场景要求最大接触力不超过20牛允许的位置偏差是2毫米那K_d就是20 / 0.002 10000 N/m。如果目标惯量M_d取5千克要达到临界阻尼B_d 2 * √(5 * 10000) ≈ 447 N·s/m。这只是一个起点值实际系统有延迟B_d通常还得再加大一点才能压住振荡。3.3 阻抗控制落地的两条技术路线阻抗控制在实现上有两种常见架构区别在于控制内环是什么。第一种是基于力矩控制的阻抗。机器人关节采用力矩控制内环关节驱动器可以直接输出期望力矩。阻抗外环根据末端位置偏差计算需要的虚拟力再通过雅可比矩阵转换到关节力矩指令。这种方案响应快、柔顺性能好但对硬件要求极高需要驱动器具备高带宽的电流环和准确的动力学模型一般出现在高端协作机器人和力控工业机器人上。第二种是基于位置控制的阻抗。机器人底层还是位置环在工作阻抗外环计算出的虚拟力被转换成位置修正量叠加到目标位置上再由位置内环去跟踪。这种方法不改变机器人的底层控制结构只要有外部力传感器和上位机接口就能实现工程上最常被使用。我在做现场应用时大部分是第二种架构。方法是在每个控制周期采样六维力传感器的数据通过阻抗公式算出一个位置偏移把这个偏移加到规划轨迹上。力大就往受力方向让位力小就恢复原轨迹这样机器人既保持运动趋势又不会硬顶。有一点必须提醒基于位置的阻抗本质上依赖位置环的跟踪速度。如果机器人控制器位置环刷新率不够高或者通信周期太长柔顺效果会很生硬甚至出现让位跟不上的问题。我实测过一个老款控制器刷新率只有125Hz做阻抗柔顺时末端明显滞后后来换上了实时通信模式才好转。所以做这个方案前先确认控制器的周期能不能做到至少500Hz以上否则后面调参你会很痛苦。4. 导纳控制与阻抗控制一对容易搞混的兄弟4.1 信息流方向完全不同很多初学者会把阻抗控制和导纳控制当成同一个东西其实它们的区别在于信息流方向和控制目标的选择。阻抗控制的核心是输入位置偏差输出力。机器人被调教成一个阻抗模型你给它一个位置扰动它产生一个力响应。它适合当作力的发生器比如让机器人主动压在工件表面上施加指定压力。导纳控制的核心刚好反过来输入外力输出位置修正量。机器人被调教成一个导纳模型你施加一个外力它产生一个位移响应。它适合当作力传感器驱动的运动发生器比如你拖动机器人手臂做示教手一拉它就跟着走。从传输函数的角度看阻抗和导纳互为倒数关系。但在实际工程里这样区分更有意义内环是位置控制的系统通常配合导纳控制使用内环是力矩控制的系统通常配合阻抗控制使用。我遇到过一个很形象的场景用协作机器人做拖动示教。手臂末端装了六维力传感器人手握住末端施加力系统通过导纳模型把这个力换算成位置偏移位置内环高速跟踪表现出来就是机器人很听话地跟着手走。这里如果用阻抗控制就会很别扭因为人并不想感受到一个阻力而是希望机器人能按自己的意图移动。4.2 实际选型看硬件决定方案做柔顺控制的选型时不需要纠结哪个更高级只需要看你的硬件条件。如果你的机器人支持关节力矩控制模式能直接输出力矩指令优先做阻抗控制柔顺性能最自然碰撞响应也快。如果你的机器人只有底层位置控制模式那就走导纳控制路线用外部位姿补偿实现柔顺功能。如果你使用的是普通工业机器人加外部力传感器通过EtherCAT或Profinet等实时总线通着上位机最稳妥的方案就是上位机做导纳计算把修正后的位置下发给机器人机器人负责高速跟踪。如果你是做六轴力控末端执行器比如力控打磨头那它一般内置了阻抗控制器你不用改机器人本体只需给末端设定期望接触力和柔顺方向就行。这其中的核心原则是不要试图在位置控制型机器人上强行实现位置误差-力矩输出的阻抗功能因为底层无法快速响应力矩指令你会得到一个振荡不止的废系统。反过来也不要在力矩型机器人上做导纳绕一圈又回到位置控制白白浪费了力矩控制的优势。另外无论选哪种传感器质量和滤波都绕不过去。六维力传感器的零点漂移、温度漂移会让柔顺效果大打折扣。我建议在使用前做一次零点校准并在软件里加一个截止频率20到50Hz的低通滤波器。滤波太狠会让手感变得黏滞太轻又会有噪声振荡这个要按实际工况反复试。5. 力位混合控制另一个维度的尝试5.1 把空间拆开分别控制除了阻抗/导纳这类基于动态关系的柔顺控制还有一种思路叫力位混合控制。它和阻抗的本质区别在于阻抗控制同时控制力与位置的关系不区分哪个方向做力控力位混合控制则是把任务空间明确分解成两个独立的子空间在某一方向上要么做位置控制要么做力控制两者不能同时生效。举例来说机器人用砂纸打磨一个平面时垂直于平面的方向需要控制接触力让砂纸既不能压太狠磨穿也不能离开表面平行于平面的方向需要控制位置保证打磨轨迹和速度。力位混合控制的做法就是用选择矩阵把任务空间分成两个正交的子空间法向用力控制切向用位置控制。选择矩阵通常是一个对角阵对角线元素为1表示做力控为0表示做位置控。控制器在每个控制周期内分别计算法向的力控制指令和切向的位置控制指令再合成到关节力矩上。5.2 为什么力位混合用起来很难理论上力位混合控制很优雅把同时控力和控位的问题转换成了分工的问题。但实际工程中使用它的团队远少于使用阻抗/导纳的团队我分析原因有以下几点。第一它对模型的依赖太强。力位混合控制需要精确知道任务空间的方向、约束的方向以及环境的位置。如果一个平面稍微有点倾斜或者工件的形状复杂选择矩阵的构建就会出错导致该控力的方向被当成位置控机器人和环境硬碰。第二切换点的过渡不容易处理。机器人从自由空间运动进入接触空间时控制模式瞬间从全位置控切换到某方向力控如果切换逻辑处理不好会出现力冲击也就是接触瞬间的力的尖峰。这个尖峰会触发安全保护甚至破坏工件。第三在非理想环境下力控方向可能会受到位置控制方向耦合力的干扰导致力和位置都控不好。相比之下阻抗控制没有开/关切换始终处于同一套动态关系中模式过渡天然平滑对复杂接触的适应性更强。所以我的观点是力位混合控制更适合结构高度固定的场合比如机床加工、定位良好的装配线。对于面向多变工况的通用机器人柔顺应用优先还是考虑阻抗/导纳控制工程上的容错率高很多。但理解力位混合的思想仍然有价值因为它帮助你建立任务空间分解的视角这在设计复杂的力控策略时很有用。6. 调参实操与问题排查6.1 一套靠谱的调参顺序柔顺控制的调参是最考验经验的部分。我在现场摸索出一套相对稳定的步骤分享出来供参考。第一步先确定作业方向上的期望最大接触力和允许的位置偏差算出参考刚度K_d。这一步需要你和工艺工程师确认比如打磨铝合金件期望接触力5牛允许变形1毫米那K_d就是5000 N/m。如果工艺没有明确先从较小刚度开始比如1000 N/m再根据效果往上加。第二步设置目标惯量M_d一般取机器人末端实际负载总质量的0.5到2倍之间。负载很重时M_d设太大容易导致响应迟钝设太小会导致加速度需求过高控制不稳。第三步按临界阻尼公式初算B_d然后在实机上测试。如果出现接触振荡就逐步增大B_d直到振荡消失如果响应太慢就逐步减小B_d直到动作能跟上。每次调整幅度建议在10%到20%避免一次改动太大掩盖了趋势。第四步加上接触力的软限位保护。设定一个安全力阈值超过就立即停止或回退防止调参过程中意外损坏工件和机器人。这步一定要在开始调参前做好不是调完之后才补。第五步针对具体任务做方向性调整。比如装配插轴时轴向方向要软径向方向要稍硬这样既能让轴顺着孔口滑入又不至于左右飘。阻抗/导纳参数可以按轴坐标系分解设置成对角矩阵不同方向用不同参数。6.2 常见问题速查我把实际调参过程中常遇到的问题整理成了一张速查表方便现场快速定位。现象可能原因解决办法接触后反复振荡阻尼B_d过小或控制周期过长增大B_d或提高控制器刷新率接触力超调瞬间撞飞工件刚度K_d过大或目标位置突变减小K_d在规划端限制位置变化率机器人离工件越来越远力传感器漂移或力值未归零重新校准力传感器零点检查信号偏移柔顺方向错误力传感器与工具坐标系未标定重新建立工具坐标系和传感器安装矩阵运动时手感发黏低通滤波器截止频率太低适当提高滤波频率或换用更高采样率的传感器接触力和位置都跟踪不准阻抗参数与系统惯量不匹配检查M_d取值避免和实际负载差太大装配时轴卡在孔口径向刚度太大柔顺中心位置不当降低径向K_d或改用RCC机械柔顺辅助打磨表面出现波浪纹切向位置跟踪与法向力控耦合提高切向位置刚度降低法向力控目标值6.3 我踩过的几个坑最后说几个我实际踩过且印象深刻的坑这些细节在教科书里通常不会写但真的很致命。第一个坑是力传感器坐标系没对齐。我做一次轴孔插入实验传感器读数一直不对柔顺方向反着走轴被怼得更紧了查了很久才发现是传感器安装旋转了90度标定矩阵没更新。后来我每次安装工具后都会固定做一次六维力方向的验证动作用已知方向的推拉力确认传感器坐标与机器人坐标一致这步能省掉很多排查时间。第二个坑是滤波过度。为了把力信号弄得特别干净我把低通滤波器截止频率设得很低结果机器人整个变得像在糖浆里运动动作滞后明显接触时根本来不及让位。后来我学会用两个滤波思路一个快滤波用于安全保护判断另一个慢滤波用于稳定控制这样既安全又不牺牲响应。第三个坑是目标位置突变。在装配接近阶段如果目标位置一步跨到接触深度即使在柔顺模式下也会产生巨大的瞬时接触力。解决办法是在轨迹规划端给目标位置加上斜坡或S型滤波让位置变化率受到限制。这是我调参进入瓶颈期时最容易忽视的地方很多参数怎么调都没用的问题最后都出在输入信号上。整个柔顺控制的核心就是理解机器人和环境之间的力与位置关系再用合适的控制器把这种关系塑造出来。不管是做被动柔顺的机械设计还是做主动柔顺的算法调参最终目标都是让机器人在复杂接触环境中既能干活、又不破坏自身和工件。我在实际项目里最深的体会是不要一上来就调参数先想清楚你要让机器人软在哪个方向、硬在哪个方向再动手。方向想清楚了参数只是水到渠成的事。希望这篇关于柔顺控制原理的梳理能帮你在调试台上少走一些弯路。
返回列表