关节限位(Joint Limits)是对机器人各关节位置、速度、加速度或力矩范围的约束,用于保证运动命令在机械、驱动器和控制器可接受范围内。
它是 IK、规划和实时 servo 的基础安全边界。一个目标位姿在几何上可达,不代表对应关节解一定满足限位。
核心问题
关节限位回答的是:
- 每个关节能转到哪里,不能越过哪里?
- 当前速度或目标速度是否超过执行器能力?
- 轨迹加速度或 jerk 是否过大?
- 接近边界时应该缩放、停止还是重新求解?
在实时控制中,限位不仅是最终输出检查,也会影响 IK 解的选择和 servo 的降速策略。
核心机制
限位来源可能包括:
- URDF 中的 hard position/velocity/effort limit。
- MoveIt 配置中的
joint_limits.yaml,可能比 URDF 更保守。 - 控制器或驱动器内部限制。
- 机械结构、线缆、工具或任务定义带来的额外软限制。
MoveIt Servo 会在实时命令处理中执行 joint position / velocity limit enforcement,接近或越界时可缩放或停止输出。
工程用途
- 防止 IK 解把关节推到机械边界。
- 限制遥操作中单步关节速度和位置跳变。
- 为规划器筛选可执行状态和轨迹。
- 在 baseline 和日志中解释“为什么命令被截断或停止”。
边界与常见坑
- URDF 限位不一定等于真实硬件安全限位;实机校准和结构版本变化后需要复核。
- 位置限位、速度限位、加速度限位和 effort 限位是不同概念,不能只检查一种。
- 后端 IK 满足位置限位,不代表相邻周期速度和加速度也满足。
- 限位裁剪会改变末端运动效果,必须记录和反馈,否则操作者会感觉机器人“不听话”。