正运动学从关节状态计算末端位姿;逆运动学从目标位姿寻找关节状态。逆解可能有多个、没有,也可能形成连续的一族。得到一个逆解之后,还要检查关节限位、自碰撞、环境碰撞与邻近轨迹的连续性。

两连杆的可计算例子

平面机械臂的连杆长为 a = 1.0 m、b = 0.8 m,两个转角为 q1、q2:

x = a cos(q1) + b cos(q1 + q2)
y = a sin(q1) + b sin(q1 + q2)

cos(q2) = (x² + y² - a² - b²) / (2ab)
q1 = atan2(y, x) - atan2(b sin(q2), a + b cos(q2))

q2 的正负对应两种肘部构型。目标距离必须落在 [|a-b|, a+b] 内,才可能有位置逆解。这个条件尚未考虑机械结构的关节限位。

求数值逆解时,一般从当前关节角开始,利用位姿误差迭代更新。随机初始化虽然可能找到解,却可能让连续目标的解在两个肘部构型之间跳跃。应限制单次步长,并把当前位置、限位和期望姿态纳入求解。

雅可比描述当前瞬间

v = J(q) · q_dot 将关节速度映射为末端速度。它是当前构型附近的一阶近似,不是有限位移的精确变换。本例的位置雅可比为:

J = [ -a sin(q1)-b sin(q1+q2)   -b sin(q1+q2) ]
    [  a cos(q1)+b cos(q1+q2)    b cos(q1+q2) ]

det(J) = ab sin(q2)

当两根连杆伸直或折叠共线时,雅可比降秩,某个方向的瞬时末端速度无法产生。靠近这些位形,直接求逆容易要求非常大的关节速度。阻尼最小二乘用 Jᵀ(JJᵀ + λ²I)⁻¹ 代替直接求逆,换取较小的速度代价与一定跟踪误差;它不保证满足限位或避免碰撞。更完整的处理需要带约束的优化。奇异性按任务空间和可达到的最大秩定义,见 Modern Robotics 的雅可比与奇异性说明。

静力学还有 tau = Jᵀ · F。这里关节力矩与末端力的表达坐标必须和雅可比一致;该关系可由瞬时功率守恒理解。

运行并检查

下载两连杆实验 arm_lab.py,用 Python 3 运行:

python arm_lab.py

脚本不依赖第三方库。它对 (1.1, 0.6) 求逆解,再用正解还原,逐列用中心差分检查解析雅可比,并拒绝 (2.0, 0) 这个不可达目标。2026-10-24 在 Python 3.12.14 中执行,位置误差约 1.1e-16 m,雅可比最大差约 7.9e-11。原始检查结果只证明这些数值检查通过,没有验证真实机械臂。

练习与面试自查

把 elbow 改成 -1,确认另一个逆解仍到达同一点;再画出两个构型,比较可能碰到的障碍。让 q2 逐渐趋近零,观察 det(J),解释为何“末端只移动一小点”也可能要求很大的关节运动。

面试时应能区分工作空间与配置空间、表示奇异性与机器人运动学奇异性,以及“逆解存在”和“存在可执行轨迹”。继续阅读轨迹生成与时间约束,把单个位姿连接成连续运动。