Путь сборкиСреднийВыходные

Роботизированная рука 4-DOF на PCA9685: сервоприводы и кинематика

Настольная роботизированная рука под управлением PCA9685, настроенная методами обратной кинематики, изученными в симуляторе до подключения первого сервопривода.

Техническая схема: Роботизированная рука 4-DOF на PCA9685: сервоприводы и кинематикаREACHABLE WORKSPACE

Роботизированная рука — первый проект, в котором робот перестаёт перемещаться и начинает что-то делать с миром. Робот, следующий по линии, следует; робот, обходящий препятствия, уклоняется; рука дотягивается, позиционирует и захватывает. Этот переход — от движения к манипулированию — приносит ключевую идею, на которой построен любой манипулятор: кинематику, связывающую задаваемые углы с точкой пространства, в которую нужно попасть.

Это пошаговое руководство рассматривает руку именно так: как понятный урок кинематики. Сначала вы изучаете, как рука с двумя звеньями превращает углы суставов в положение рабочего органа и обратно, собираете компоненты манипулятора на сервоприводах и изучаете их назначение, а затем — до затрат и повреждения шестерён — исследуете рабочий диапазон, два решения положения локтя и недостижимые позы в браузерном симуляторе. Только после этого подключаете настоящую руку, вручную калибруете сервоприводы и запускаете обратную кинематику на оборудовании.

Пройдите дерево проекта сверху вниз. Каждый узел открывается после выполнения его предварительных требований, а прогресс сохраняется на этом устройстве, поэтому руку можно собрать за выходные, не потеряв место.

Перечень компонентов

Компонент Кол-во Примерная стоимость Примечания
Arduino Uno 1 $5–8 Подойдёт любая плата — здесь она только общается по I²C
Драйвер PCA9685 на 16 каналов 1 $3 Для четырёх сервоприводов строго не нужен, но является подходящим инструментом
Сервопривод SG90 4 $8 Для плеча купите MG90S: металлические шестерни и сустав, который чаще всего выходит из строя
Комплект руки с 4 степенями свободы 1 $12–25 Для обучения подойдёт акрил; алюминий значительно меньше изгибается
Источник питания 5–6 V, ≥3 A 1 $8 Четыре одновременно заблокированных сервопривода потребляют ~2.6 A
Конденсатор 1000 µF 1 $1 Между V+, рядом с клеммой
Запасные рычаги сервоприводов 1 комплект $2 Один установите неправильно. Так делают все

Итого: примерно $40–60.

Две покупки стоит обдумать, а не выбирать по умолчанию. Сервопривод MG90S с металлическими шестернями на плече стоит на доллар больше, но это сустав, несущий вес всех остальных суставов: нейлоновые шестерни там стираются не от удара, а при длительной нагрузке. И источник питания, рассчитанный на ток блокировки, поскольку характерный отказ манипулятора состоит в том, что при столкновении с собственной рамой или захвате твёрдого предмета все сервоприводы блокируются одновременно.

Измерьте руку до написания кода

Обратная кинематика — это арифметика по длинам звеньев. Эти четыре числа составляют весь входной набор, и получение их из карточки товара вместо измерения линейкой — самая частая причина того, что рука уверенно тянется не туда.

Символ Измерять от До Типичное значение
L1 Оси сустава плеча Оси сустава локтя 90–105 mm
L2 Оси сустава локтя Фактической точки захвата схвата 80–95 mm

Последняя строка выполняет больше работы, чем кажется. Фактическая точка захвата схвата перемещается при смыкании губок, и выбор размера схвата — отдельная задача, отличная от его позиционирования, со своими ограничениями, арифметикой и режимами отказа. Если рука достаёт до детали, а затем роняет или раздавливает её, ответ не на этой странице: начните с симулятора схвата. | h | Поверхность стола | Ось сустава плеча | 50–70 mm | | d | Ось вращения основания | Горизонтально до оси плеча | 0–15 mm |

Измеряйте между осями суставов, а не по краям кронштейнов. Ось — центр выходного шлица сервопривода, часто на 5–10 mm внутри видимого кронштейна. На звене 95 mm ошибка 10 mm превышает 10% и создаёт руку, которая систематически не достаёт до цели и не исправляется никаким коэффициентом.

Эти две длины сразу дают рабочее пространство:

maximum reach = L1 + L2          e.g. 100 + 90 = 190 mm
minimum reach = |L1 - L2|        e.g. |100 - 90| = 10 mm

Рабочее пространство — кольцевая область, а не диск. В центре есть область, до которой рука физически не достаёт, и если цель рядом с основанием, ответ «недостижимо» корректен, а не является ошибкой.

Сборка по этапам

Порядок сборки содержит один шаг, который почти невозможно отменить, — это этап 2.

№ Этап Проверка Успешный результат
1 Драйвер отвечает Просканировать шину I²C Появляется 0x40; у V+ отдельное питание
2 Сервоприводы переведены в исходное положение до установки рычагов Задать каждому сервоприводу 90° до установки рычага Каждый рычаг установлен в намеченной нулевой позе
3 Пределы для каждого сервопривода Перемещаться от центра наружу до появления звука сервопривода Есть минимальные и максимальные отсчёты для каждого сервопривода, а не значения библиотеки
4 Записана карта суставов Провести каждый сустав по всему диапазону Для всех четырёх записаны смещение, знак и механические пределы
5 Проверка на столкновения Медленно провести каждый сустав по полному диапазону Ничего не касается рамы; пределы соответствуют наблюдениям
6 Прямая кинематика Задать известные углы, вычислить и измерить положение рабочего органа Вычисленное и измеренное значения совпадают в пределах нескольких миллиметров
7 Прямой и обратный проход Передать вычисленное положение обратно в IK Выходные углы совпадают с входными
8 Все четыре квадранта Задать цели спереди, сзади, слева и справа Все четыре работают — если две зеркальны, вы использовали atan, а не atan2
9 Достижимость Задать цель далеко за L1 + L2 Корректный ответ «недостижимо» — не NaN и не рывок
10 Плавное движение Задать большое перемещение Интерполяция по шагам, все суставы одновременно, без рывка
11 Повторяемость Десять раз вернуться в одну позу с разных направлений Измерен разброс попадания — это люфт

Восстановиться после ошибки на этапе 2 невозможно. Рычаг сервопривода шлицевой — примерно на 20 зубьев, — поэтому устанавливается только в дискретных положениях с шагом около 18°. Если сначала собрать механизм, а затем калибровать, может оказаться, что рабочий диапазон сустава смещён на 40° и исправить это механически невозможно. Подайте питание на каждый сервопривод, задайте 90°, затем устанавливайте рычаг.

Всегда перемещайте руку плавно

Сервопривод, которому задан новый угол, перемещается в него на полной скорости. Для манипулятора это означает резкое движение, всплеск тока во всех четырёх сервоприводах и механический удар через нейлоновые шестерни, усиленный рычагами самой руки.

// Interpolate every joint together, so the tool takes a sensible path and
// no single servo carries the whole transition.
void moveTo(float base, float shoulder, float elbow, int steps, int stepMs) {
  static float cur[3] = {0, 0, 0};
  const float target[3] = {base, shoulder, elbow};

  for (int s = 1; s <= steps; s++) {
    const float t = (float)s / steps;
    for (int j = 0; j < 3; j++) {
      const float a = cur[j] + (target[j] - cur[j]) * t;
      pwm.setPWM(JOINT[j].channel, 0, countsFor(JOINT[j], a));
    }
    delay(stepMs);
  }
  memcpy(cur, target, sizeof(cur));
}

Интерполяция всех суставов одновременно важна не меньше самого сглаживания. Перемещение суставов по одному отправляет рабочий орган по странной дуге через рабочее пространство — медленнее и с гораздо большей вероятностью столкнуться с чем-либо по пути.

Как выглядит хороший результат

Измерение Акриловый комплект, SG90 Алюминий, MG90S
Повторяемость при одинаковом направлении подхода ±3–5 mm ±1–2 mm
Повторяемость при разных направлениях подхода ±8–15 mm ±3–5 mm
Полезная нагрузка при полном выдвижении 20–30 g 40–60 g
Прогиб без нагрузки при полном выдвижении 3–8 mm 1–3 mm

Разница между двумя строками о повторяемости и есть люфт, и это главный источник ошибки в любительской манипуляционной системе. Люфт в четыре градуса на плече при рабочем диапазоне 190 mm даёт более 13 mm у схвата. Практическое решение заключается не в лучшей математике, а в том, чтобы всегда подходить к цели с одного и того же направления: это полностью устраняет смену знака и превращает ошибку ±13 mm в повторяемое смещение, которое можно откалибровать.

Диагностика неисправностей

Симптом Вероятная причина Исправление
Рука достигает совершенно неверной точки Рычаг установлен под произвольным углом Перед установкой рычагов переведите каждый сервопривод в 90°
Диапазон одного сустава смещён примерно на 18° Рычаг смещён на один зуб шлица Снимите и установите снова — программа это не исправит
Спереди достигает правильно, сзади работает зеркально atan вместо atan2 atan2 охватывает все четыре квадранта
IK возвращает NaN, и рука делает рывок Аргумент acos вне диапазона −1..1 Проверяйте достижимость до тригонометрии
Цели рядом с основанием не работают Внутри области, недоступной из-за минимального радиуса досягаемости Это правильное поведение: рабочее пространство является кольцом
Плата перезагружается при движении руки Ток сервоприводов проходит через Arduino Отдельный источник V+, общая «земля», конденсатор 1000 µF
Рука прогибается при полном выдвижении Плечо работает за пределом комфортного момента MG90S на плече; уравновесьте резиновой лентой
Гудит при удержании позы Сервопривод борется с нагрузкой на пределе Снизьте нагрузку или используйте detach, когда удержание не требуется
Скорость сустава возрастает вблизи полного выдвижения Движение через сингулярность Планируйте траектории с запасом от границы
При подходе с разных направлений попадает по-разному Люфт Всегда подходите с одного направления
Все углы постоянно занижены Генератор PCA9685 работает не на точно 25 MHz Измерьте фактическую частоту и вызовите setOscillatorFrequency

Куда двигаться дальше

Добавьте перемещение по прямой. Интерполяция в пространстве суставов, как в коде выше, заставляет рабочий орган следовать по кривой. Интерполяция в декартовом пространстве — вычисление IK для каждого шага вдоль прямой — заставляет его двигаться прямо, как требуется любой реальной системе захвата и переноса. Изменение небольшое, и именно здесь сингулярности перестают быть теоретическими: прямая траектория вблизи полного выдвижения требует огромных скоростей суставов.

Добавьте камеру и замкните контур. Всё здесь работает без обратной связи: рука перемещается туда, куда ей указали, и ничего не проверяет. Камера, считывающая маркер ArUco на объекте, позволяет руке компенсировать ошибку от люфта и прогиба, и так недорогой манипулятор становится точным.

Переходите на более совершенное оборудование после достижения предела. Алюминиевые звенья устраняют большую часть изгиба, сервоприводы MG90S — большую часть люфта, а рука с 6 степенями свободы добавляет запястье, позволяющее выбирать угол подхода рабочего органа. Ничто из этого не меняет математику: решатель для двух звеньев, написанный здесь, используется и в более совершенной руке, и именно поэтому дешёвая рама была полезна на первом этапе.

Дорожная карта проекта

Путь сборки

Следуйте по дереву технологий от деталей к работающему роботу. Каждый узел открывается, когда выполнены его предварительные условия, а ваш прогресс сохраняется на этом устройстве.

0 / 13 выполнено

100%
Учебный путь

Кинематика роботизированной руки

План обучения

Открыть путь
Симулятор

Решайте задачи кинематики в симуляторе

Интерактивно

Открыть симулятор
Сборка

Подключите руку

40 мин

Сборка

Откалибруйте исходное положение и пределы сервоприводов

30 мин

Сборка

Запустите обратную кинематику на оборудовании

45 мин

Цель

Роботизированная рука с 4 степенями свободы готова

Робот готов

Компоненты

Руководства на этом пути

Попрактикуйтесь до сборки схемы

Настройте его в интерактивном симуляторе

Путь сборки проходит через лабораторию в браузере. Добейтесь правильного поведения здесь, а затем перенесите настройки на реального робота.

Часто задаваемые вопросы

Как сделать роботизированную руку на Arduino?

Установите четыре сервопривода в раму с 4 степенями свободы — основание, плечо, локоть и схват, — и управляйте ими через PCA9685 по I²C, чтобы у Arduino не закончились выводы PWM. Откалибруйте диапазон угла и импульса каждого сервопривода, затем передавайте целевые точки решателю обратной кинематики двух звеньев, возвращающему углы плеча и локтя. Это пошаговое руководство проходит всю цепочку и предлагает настроить геометрию в симуляторе до подключения компонентов.

Сколько сервоприводов нужно роботизированной руке с 4 степенями свободы?

Четыре — по одному на степень свободы: вращающееся основание, плечо, локоть и схват. Каждому сервоприводу нужен собственный канал PWM, и именно поэтому многосуставная рука использует драйвер PCA9685 вместо нескольких аппаратных выводов PWM Arduino.

Нужен ли PCA9685 для роботизированной руки?

Это подходящий инструмент, хотя он не строго обязателен. Четыре сервопривода могут работать от Arduino при отдельном питании, но PCA9685 освобождает таймеры микроконтроллера, управляет всеми суставами по двум выводам I²C и направляет ток сервоприводов через отдельное питание V+, сохраняя большие токи в стороне от логики и не допуская просадки питания платы.

Нужно ли покупать компоненты до начала проекта?

Нет. Кинематика и решение задач в симуляторе браузера позволяют до покупки компонентов понять и исследовать рабочий диапазон руки, два решения и недостижимые позы. Только заключительные этапы — подключение, калибровка и запуск IK — требуют физических Arduino, PCA9685, сервоприводов, рамы руки и источника питания.

Как обратная кинематика используется в роботизированной руке?

Прямая кинематика сообщает положение рабочего органа по углам суставов, а обратная выполняет полезное обратное действие: по целевой точке возвращает углы суставов, необходимые для её достижения. В этой руке плечо и локоть образуют плоский решатель для двух звеньев, основание направляет эту плоскость, а схват выполняет захват. Симулятор показывает работу решателя, включая случаи, когда цель недостижима.