Kinematic Redundancy
- 又称: manipulator redundancy
- 类别: Foundations & spatial maths › Kinematics
- 标签: kinematics, inverse-kinematics, null-space, manipulators, redundancy-resolution
当机器人的关节数多于任务所需时,它对该任务是运动学冗余的,因此同一个末端执行器位姿可以由一个连续的关节构型族来实现。
定义
当操作臂的关节数 n 超过它必须控制的任务维数 m 时,它相对于该任务是运动学冗余(kinematically redundant)的。经典情形是一条七关节机械臂控制六维的末端执行器位姿,留下一个冗余度。不过,冗余是相对于任务定义的:对于只固定工具尖端位置的任务,或允许绕钻头轴线自由旋转的任务,六关节机械臂同样是冗余的。对于一个固定的末端执行器位姿,实现它的关节构型不是单个点,而是一个 (n − m) 维的族,常称为自运动流形。在实践中,这意味着机械臂可以在手保持不动的同时移动肘部。
在速度层面,冗余表现为 m × n 操作臂雅可比矩阵 J 的零空间:位于该零空间中的关节速度不产生末端执行器运动。分解速率控制器利用这一点,采用标准形式 q̇ = J⁺ẋ + (I − J⁺J)q̇₀,其中 J⁺ 是伪逆。第一项跟踪任务,第二项把次要目标 q̇₀ 投影到零空间中。常见的次要目标包括远离关节限位、让肘部避开障碍物、提高可操作度以避开奇异位形,以及降低关节力矩。任务优先级逆运动学在此基础上对多个任务排序,使每个较低优先级的任务只在其上方各任务的零空间中起作用。
冗余还会改变逆运动学的表现。数值 IK 求解器从无穷多个解中返回一个,这个解由其初值和算法隐式决定,因此相继的查询可能在相距很远的构型之间跳变。对于肩部和腕部为球形的常见七关节设计,解析 IK 显式地对多出的自由度进行参数化,通常用一个臂角或摆角表示,它让肘部绕肩到腕的连线旋转。冗余不应与离散 IK 分支的有限集合相混淆,例如肘部朝上或朝下、腕部翻转,这些分支即使非冗余的六关节机械臂也有。
为何重要
冗余使七关节机械臂能够在手沿路径运动的同时绕过障碍物、避开关节限位并远离奇异位形,这也是许多协作机械臂和人形机器人手臂采用七个关节的原因。它也让逆运动学和规划变得更难,因为必须有某种机制从一个连续统中选出一个构型,而糟糕的选择会导致关节限位停机或肘部突然翻转。
主要应用
- 在末端执行器跟踪路径的同时,让肘部避开障碍物并避免自碰撞
- 在长工具路径中避开关节限位和奇异位形
- 双臂操作和闭链操作,其中多余的自由度有助于满足共同的约束
- 关节数远多于任何单一任务所需的人形机器人和移动机械臂的全身控制
- 在协作作业中让手臂姿态保持可预测并远离人员
- 在给定末端执行器运动下降低关节力矩或能耗
实际应用
一名工程师为一条七关节机械臂编程,让它在有人在旁工作时用海绵擦桌子。擦拭路径固定了末端执行器位姿,留下一个自由的自由度。控制器用雅可比伪逆为擦拭运动计算关节速度,并加上一个零空间项,把肘部推离被跟踪的人员位置,并推向每个关节行程的中间。测试中,团队发现在每个路径点调用一个普通的数值 IK 求解器,有时会返回肘部位于相反两侧的解,导致关节大幅跳变。他们改为以上一个解对每次查询进行热启动,并用臂角显式地对肘部位置进行参数化,从而由规划器有意地选择这个冗余自由度,而不是交给求解器决定。
常见误解
- 冗余只是指关节多于六个 — 冗余是相对于任务定义的,因此对于约束少于六个末端执行器坐标的任务,六关节机械臂也是冗余的
- 冗余机械臂有多个 IK 解,与六关节机械臂的情况相同 — 非冗余机械臂有有限个离散解,而冗余机械臂有连续的解族
- 零空间运动从不影响任务 — 它只在一阶意义上保持末端执行器位姿不变,因此除非误差得到修正,大步长或奇异位形附近的运动仍可能扰动任务
谁需要了解
- 操作和运动规划工程师
- 从事任务空间控制和全身控制的控制工程师
- 人形机器人和移动机械臂开发者
- 学习操作臂运动学的机器人专业学生
相关技术
- 雅可比伪逆(Jacobian Pseudoinverse)
- 零空间投影(Null-Space Projection)
- 解析逆运动学(Analytic Inverse Kinematics)
- 可操作度椭球(Manipulability Ellipsoid)
- 阻尼最小二乘(Damped Least Squares)
相关术语
相关项目
- MoveIt 2: Motion planning framework for ROS 2 robot arms, with kinematics and collision checking
- PyRoki: Modular Python toolkit for kinematic optimization across CPU, GPU, and TPU via JAX
- mink: Python inverse kinematics library built on MuJoCo supporting 20+ robot platforms
- DART: C++ physics engine for articulated rigid body dynamics and robotics simulation
- IKPy: Pure-Python inverse kinematics library that builds chains straight from URDF
- frax: JAX library for fast, differentiable robot kinematics, dynamics and inverse kinematics