Сингулярности и манипулируемость

Позы, в которых робот «застревает»: теряет возможность двигаться в каком-то направлении, как бы быстро ни крутились моторы.

Сингулярность — конфигурация робота, в которой якобиан вырождается ($\det J = 0$), и схват теряет подвижность в одном или нескольких направлениях.

Когда $\det J = 0$, матрица $J$ необратима: уравнение $\dot q = J^{-1}\dot{\mathbf{p}}$ не имеет решения для некоторых направлений скорости. Физически это значит: чтобы двигать схват в «запрещённом» направлении, нужна бесконечная скорость суставов.

Где они у двухзвенника

Определитель якобиана двухзвенника красиво упрощается:

$$ \det J = L_1 L_2 \sin\theta_2 $$

Он обращается в ноль при $\theta_2 = 0$ (рука полностью вытянута) и $\theta_2 = 180^\circ$ (сложена). В этих позах схват на границе зоны и не может двигаться по радиусу.

Мера манипулируемости

Насколько робот «ловок» в данной позе, оценивает манипулируемость Йошикавы $w = \sqrt{\det(J J^T)}$ (для квадратного $J$ это $|\det J|$). Чем больше $w$, тем дальше от сингулярности.

import math

L1, L2 = 1.0, 0.7

def det_jac(t2):
    return L1 * L2 * math.sin(t2)

for deg in (90, 45, 10, 1, 0):
    t2 = math.radians(deg)
    print(f"theta2={deg:3d} град: det J = {det_jac(t2):.5f}  манипулируемость = {abs(det_jac(t2)):.5f}")

Вывод:

theta2= 90 град: det J = 0.70000  манипулируемость = 0.70000
theta2= 45 град: det J = 0.49497  манипулируемость = 0.49497
theta2= 10 град: det J = 0.12155  манипулируемость = 0.12155
theta2=  1 град: det J = 0.01222  манипулируемость = 0.01222
theta2=  0 град: det J = 0.00000  манипулируемость = 0.00000

Как работает под капотом

Вблизи сингулярности ($\theta_2 \to 0$) обратный якобиан содержит деление на крошечный определитель — мелкое движение схвата требует огромных скоростей суставов. Планировщики специально обходят сингулярности или используют демпфированный псевдообратный якобиан, который жертвует точностью ради ограниченных скоростей: $\dot q = J^T (J J^T + \lambda^2 I)^{-1} \dot{\mathbf p}$.

Частые ошибки

  • Вести траекторию через вытянутую руку — у границы зоны робот всегда близок к сингулярности.
  • Слепо обращать якобиан — около $\det J = 0$ скорости суставов улетают в бесконечность.
  • Считать сингулярность «поломкой»: это геометрическое свойство позы, а не неисправность.

Итог

  • Сингулярность — поза, где $\det J = 0$ и теряется подвижность в каком-то направлении.
  • У двухзвенника $\det J = L_1 L_2 \sin\theta_2$ — ноль при вытянутой и сложенной руке.
  • Манипулируемость измеряет удалённость от сингулярности.
  • Вблизи сингулярностей применяют демпфированный псевдообратный якобиан.
Проверьте себя
1. Чему равен определитель якобиана плоского двухзвенника?
AL₁ + L₂
BL₁·L₂·sin θ₂
CL₁·L₂·cos θ₂
Dθ₁·θ₂
2. Что происходит со скоростями суставов при приближении к сингулярности?
AСтремятся к нулю
BМогут неограниченно расти, так как det J → 0
CНе меняются
DСтановятся отрицательными