公司动态

第202篇 导纳控制——力控场景的另一种实现思路

📅 2026/8/19 22:05:33
第202篇 导纳控制——力控场景的另一种实现思路
上一篇聊了阻抗控制核心思想是把机械臂变成一个弹簧-阻尼-质量系统通过调节刚度、阻尼、惯性来实现柔顺交互。有读者留言问阻抗控制和导纳控制到底啥关系是不是同一个东西讲真这个问题面试出现的频率极高。很多人把阻抗控制和导纳控制混为一谈其实它们是一对对偶方案——输入输出刚好反过来。今天就把导纳控制拆开讲清楚顺便把两者的区别彻底理清。一、从阻抗到导纳——输入输出反过来先回顾一下阻抗控制的信号流位置输入 → 阻抗控制器 → 力输出你给一个期望位置阻抗控制器根据当前力和位置的偏差算出修正后的位置。说白了位置是因力是果。导纳控制刚好反过来力输入 → 导纳控制器 → 位置输出你给一个期望力或者测到接触力导纳控制器算出为了达到这个力末端应该移动到哪里。力是因位置是果。用一个类比来理解阻抗控制像弹簧——你推它位移它给你反作用力导纳控制像秤——你放东西上去力它告诉你位移是多少。数学上两者的关系也很清晰。阻抗控制器实现的是逆导纳impedance 1/admittance导纳控制器实现的是导纳。在频域里阻抗F(s) Z(s) * X(s) 导纳X(s) Y(s) * F(s)其中Z(s)是阻抗Y(s)是导纳Z(s) 1/Y(s)。二、导纳控制的数学模型导纳控制的核心方程和阻抗控制长得几乎一样M_d * x_ddot B_d * x_dot K_d * x F_ext区别在于怎么用这个方程。阻抗控制里这个方程算出的是修正加速度积分得到修正速度和位置然后叠加到原始轨迹上。整个闭环在位置控制内环里完成。导纳控制里这个方程的输入是外力F_ext从力传感器读到的输出是末端的位移x。你把这个位移加到期望轨迹上得到新的位置指令发给底层位置控制器。来看一段简化的导纳控制代码class AdmittanceController: def __init__(self, M_d, B_d, K_d, dt): self.M_d M_d # 虚拟质量 self.B_d B_d # 虚拟阻尼 self.K_d K_d # 虚拟刚度 self.dt dt self.x 0.0 self.x_dot 0.0 def update(self, F_ext): # 导纳模型x_ddot (F_ext - B_d*x_dot - K_d*x) / M_d x_ddot (F_ext - self.B_d * self.x_dot - self.K_d * self.x) / self.M_d self.x_dot x_ddot * self.dt self.x self.x_dot * self.dt return self.x # 返回位置修正量这段代码的核心就三步读力、算加速度、积分出位移。简单粗暴但非常有效。三、为什么工业界更偏爱导纳控制讲个真实经历。之前做一个打磨项目用的是六轴机械臂配合末端力传感器。一开始团队用阻抗控制的思路——在关节 torque 层面做文章直接修改关节力矩。结果调了两周振动问题始终解决不了。后来换成导纳控制方案三天就调通了。为啥因为导纳控制有一个巨大的工程优势它不侵入底层控制回路。具体来说阻抗控制需要在力矩层面干预要求控制器开放力矩接口torque mode。很多工业机械臂的底层控制器不开放这个接口或者开放了但延迟很高、噪声很大。导纳控制只需要位置接口position mode。力传感器测到力导纳模型算出位置修正量把修正后的位置发给位置控制器。整个过程中底层的PID该怎么跑还怎么跑。这就好比阻抗控制是直接踩油门操控力矩导纳控制是调整导航目的地操控位置。后者对车辆本身的控制系统完全透明。导纳控制还有一个好处稳定性更容易保证。因为底层位置控制器是成熟的、经过验证的你只需要保证导纳模型本身稳定就行。而阻抗控制把力环和位置环耦合在一起稳定性分析要复杂得多。四、导纳控制的关键参数 tuning导纳控制调参的核心就是三个参数M_d、B_d、K_d。M_d虚拟质量决定系统对力的响应速度。M_d越小同样的力产生的加速度越大末端动得越快。设太小了会振荡设太大了反应迟钝。B_d虚拟阻尼决定系统运动的粘滞感。B_d大末端移动时感觉粘粘的不容易振荡但响应慢。B_d小末端很滑容易抖。K_d虚拟刚度决定系统的回弹趋势。K_d0时力消失后末端不会自动回弹纯阻尼模式K_d0时力消失后末端会回到原始位置。调参的经验法则拖拽示教场景K_d0只保留B_d和M_d。这样松手后末端不会弹回去。打磨/抛光场景K_d设一个较小的值让末端有轻微回弹趋势保持接触。装配场景K_d设大一些保证定位精度。# 不同场景的参数参考 # 拖拽示教 M_d, B_d, K_d 5.0, 50.0, 0.0 # 打磨抛光 M_d, B_d, K_d 2.0, 30.0, 200.0 # 精密装配 M_d, B_d, K_d 1.0, 20.0, 1000.0这些只是起点实际参数需要根据具体机器人和任务微调。五、导纳控制 vs 阻抗控制——面试怎么答面试时如果被问到两者的区别建议从这几个维度回答信号流向阻抗控制是位置→力导纳控制是力→位置。底层需求阻抗控制需要力矩模式导纳控制只需要位置模式。适用硬件阻抗控制适合有力矩接口的机器人如Franka、KUKA iiwa导纳控制适合只有位置接口的工业机器人如UR、EPSON等大多数协作臂。稳定性导纳控制更容易保证稳定性因为底层位置环是独立的阻抗控制的力环和位置环耦合分析更复杂。实时性阻抗控制通常运行在力矩控制频率1kHz导纳控制运行在位置控制频率100-500Hz对力传感器噪声的敏感度更低。一个常见的追问能不能把两者结合答案是能。有些系统外环用导纳控制力→位置修正内环用阻抗控制位置→力矩修正形成级联结构。这种方案在高端协作机器人上比较常见。六、导纳控制的工程坑做项目时踩过几个坑分享出来坑1力传感器噪声。导纳控制对力传感器噪声很敏感因为噪声会被积分成位移漂移。比如力传感器有0.5N的高频噪声经过导纳模型积分后末端位置可能漂移好几个毫米。解决方案加低通滤波器截止频率别太高20-50Hz够用。有些团队还会加一个死区——力小于某个阈值时不响应过滤掉微小扰动。坑2坐标系选择。导纳控制可以在基坐标系、工具坐标系或关节空间做。不同坐标系下参数物理意义不同别混着用。在工具坐标系做导纳控制时每次机械臂运动都要更新旋转矩阵这个变换如果没处理好会出现力方向不对的问题。坑3奇异点附近。机械臂接近奇异位形时笛卡尔空间的导纳模型可能产生巨大的关节速度。解决方案加关节速度限幅或者在关节空间做导纳控制。之前我们团队就遇到过——机械臂在某个姿态下突然发疯排查了半天才发现是奇异点导致的。坑4采样频率。导纳控制是离散时间系统采样频率太低会导致数值不稳定。经验法则采样频率至少是系统带宽的10倍。如果你用200Hz的控制频率导纳模型的带宽别超过20Hz。坑5通信延迟。力传感器采样、数据传输、控制器计算整个链路有延迟。延迟大了系统会振荡。解决方案一是尽量缩短通信链路用EtherCAT而不是TCP二是在导纳模型里加延迟补偿项。小结导纳控制和阻抗控制是一对对偶方案。阻抗控制是位置→力导纳控制是力→位置。工程上导纳控制更常用因为它不侵入底层控制回路只需要位置接口就能实现力控。三个参数M_d、B_d、K_d决定了导纳控制的手感。调参时根据场景选择合理的初始值再结合实际微调。下一篇我们聊力位混合控制——工业接触任务中最常用的控制方案也是导纳控制和位置控制的合体。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第201篇 阻抗控制——让机械臂温柔地与环境交互下一篇预告第203篇 力位混合控制——工业接触任务的控制方案有任何问题欢迎评论区留言我会尽量回复。