Сингулярности и манипулируемость
Позы, в которых робот «застревает»: теряет возможность двигаться в каком-то направлении, как бы быстро ни крутились моторы.
Сингулярность — конфигурация робота, в которой якобиан вырождается ($\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$ — ноль при вытянутой и сложенной руке.
- Манипулируемость измеряет удалённость от сингулярности.
- Вблизи сингулярностей применяют демпфированный псевдообратный якобиан.