< Назад в хаб

Cyberarm // Kinematics

Интерактивный симулятор обратной кинематики (IK)
* Перетаскивайте розовый маркер захвата мышкой
Геометрия манипулятора
80px
70px
Рассчитанные углы суставов
Сустав 1 (θ1)
Сустав 2 (θ2)
Экспорт для Arduino (Servo.write)
servo1.write(90); servo2.write(45);

Как это работает: Математика Обратной Кинематики

В робототехнике существует два типа задач кинематики:

Для решения этой задачи в 2D-пространстве наш симулятор использует тригонометрический метод, основанный на теореме косинусов. Угол второго шарнира $\theta_2$ вычисляется по формуле:

$$\cos(\theta_2) = \frac{x^2 + y^2 - L_1^2 - L_2^2}{2 L_1 L_2}$$

Где $L_1$ и $L_2$ — длины плеча и предплечья, а $x, y$ — координаты цели относительно плечевого сустава. Как только мы находим угол $\theta_2$, угол первого сустава $\theta_1$ вычисляется через разность полярного угла цели и внутреннего угла треугольника:

$$\theta_1 = \arctan2(y, x) - \arctan2(L_2 \sin(\theta_2), L_1 + L_2 \cos(\theta_2))$$

Если точка $(x, y)$ находится дальше, чем сумма длин звеньев ($L_1 + L_2$), то система не имеет решений — цель находится вне зоны досягаемости манипулятора. В этом случае алгоритм автоматически масштабирует вектор цели до максимального радиуса действия руки.

[ 03 // ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ ]

Это происходит из-за попадания в физически «мертвую зону». Если цель находится к центру ближе, чем разность длин звеньев $|L_1 - L_2|$, суставы математически не могут сложиться так, чтобы попасть в эту точку.

Наш алгоритм автоматически ограничивает минимальный радиус, чтобы избежать деления на ноль в тригонометрических уравнениях и предотвратить «схлопывание» звеньев.

Стандартные хобби-сервоприводы работают в диапазоне от 0° до 180°. Код в блоке экспорта выдает углы в стандартной декартовой системе координат.

При сборке физического робота важно правильно установить качалки сервоприводов:

  • Для Сустава 1 установите сервопривод так, чтобы при команде servo1.write(90) плечо $L_1$ стояло строго вертикально.
  • Для Сустава 2 команда servo2.write(90) должна соответствовать прямому углу (90°) между предплечьем и плечом.

Обычный арктангенс $\tan^{-1}(y/x)$ возвращает значения только в диапазоне от $-90^\circ$ до $+90^\circ$ и «не знает», в какой именно четверти декартовой системы координат лежит точка (так как знак минуса теряется при делении).

Функция Math.atan2(y, x) принимает оба аргумента отдельно, корректно обрабатывает деление на ноль при $x = 0$ и возвращает точный угол в полном диапазоне от $-180^\circ$ до $+180^\circ$ (от $-\pi$ до $+\pi$ радианов), что жизненно важно для кругового вращения роборуки.