DLS(Damped Least Squares,阻尼最小二乘法)是在 IK 数值求解中,对基于雅可比矩阵的最小二乘法更新加入阻尼项,从而提升奇异位形附近稳定性的方法。
在普通雅可比伪逆 IK 中,求解器会尝试把末端误差 转成关节增量 。当机器人接近奇异位形或目标位姿不可达时,普通伪逆可能让关节增量变得很大。DLS 通过加入阻尼系数 ,允许保留一点末端误差,换取更平滑、更可控的关节空间输出。
它回答的核心问题是:给定当前关节 、末端误差 和当前雅可比 ,下一步关节应该移动多少 。因此 DLS 是求解策略,不是完整的遥操作控制层,也不是 FK/Jacobian 计算库。
从最小二乘到阻尼
基于雅可比的 IK 通常把小范围内的末端误差近似为线性关系:
普通最小二乘会寻找让 尽量小的 。DLS 在目标函数里额外惩罚过大的关节增量:
这会得到常见更新形式:
这里 是雅可比矩阵, 是末端误差, 是阻尼系数, 是稳定项。阻尼越大,求解越保守,末端误差可能下降得更慢;阻尼越小,结果越接近普通最小二乘或雅可比伪逆解。
迭代式 IK 通常再把关节增量积分到下一步目标:
是步长或速度缩放系数。实际系统还会对 做单步限幅、速度限幅和关节限位检查,避免一个数学上可解的更新变成执行层的突跳。
直观理解
普通伪逆更像“尽量把末端误差立刻消掉”,即使代价是关节大幅运动。DLS 更像“末端误差和关节动作都要控制住”。当目标位姿不可达或接近奇异位形时,这个保守性非常重要,因为它能避免为了追一个几何上很差的目标而输出危险的 。
阻尼系数怎么选
- 固定小阻尼实现简单,但不同姿态下稳定性不均匀。
- 大阻尼更稳,但会让机器人跟随变钝,残差收敛慢。
- 自适应阻尼会根据奇异值、条件数、残差或关节限位距离调整 。
- 实时遥操作里通常还会叠加单步关节限幅、速度限幅和解连续性约束,而不是只依赖 DLS。
应用场景
- IK 求解接近奇异位形时,限制关节增量爆炸
- 目标位姿靠近可达空间边界时,获得更稳定的近似解
- 遥操作、轨迹跟踪和实时控制中,降低关节目标飞跳风险
在工程管线里,DLS 常和 FK/Jacobian 后端组合使用。例如 Pinocchio 或 KDL 负责从机器人模型计算 FK 和雅可比矩阵,DLS 只消费当前误差与雅可比并输出关节增量。如果两条管线分别叫 pinocchio_dls 和 kdl_dls,主要区别通常是 FK/Jacobian 来源不同,而不是 DLS 数值策略本身不同。
和 Servo 层的边界
MoveIt Servo 这类实时 servo 框架可能内部使用逆雅可比或 IK plugin,但它的职责比 DLS 大得多:还会处理奇异点检查、碰撞检查、运动平滑、关节限位、状态报告和场景状态。DLS 只解决“如何从局部误差算一个关节更新”,不负责整套实时安全策略。
局限
DLS 提升的是数值稳定性,不等于解决所有 IK 风险。它不会自动处理碰撞、关节限位、机械干涉、工具偏置错误或动力学可执行性。阻尼太大时,末端可能明显跟不上目标;阻尼太小时,奇异附近仍可能抖动。因此 DLS 通常只是 IK 求解器中的一个稳定化部件。