Оглавление:

Роботизированная рука: Дженсен: 4 шага
Роботизированная рука: Дженсен: 4 шага

Видео: Роботизированная рука: Дженсен: 4 шага

Видео: Роботизированная рука: Дженсен: 4 шага
Видео: Как Путин жестами показывает охране кого убрать от себя Эксклюзив Видео 2024, Октября
Anonim
Роботизированная рука: Дженсен
Роботизированная рука: Дженсен

Jensen - это роботизированная рука, построенная на платформе Arduino с упором на интуитивное планирование движений, выполненная как независимый проект с 1 баллом под руководством Чарльза Б. Маллока, доктора философии. Он может воспроизводить серию движений, запрограммированных ручным перемещением руки. Вдохновение на его создание я получил, увидев другие роботизированные манипуляторы, построенные в производственном пространстве UMass Amherst M5. Кроме того, я хотел узнать, как использовать программное обеспечение САПР, и я хотел создать продвинутый проект Arduino. Я видел в этом возможность сделать все это.

Шаг 1. Оригинальный дизайн и объем

Оригинальный дизайн и объем
Оригинальный дизайн и объем

Программное обеспечение САПР, которое я выбрал для изучения для этого проекта, было OnShape, и первое, что я смоделировал, был аналоговый сервопривод HiTec HS-422. Я выбрал сервопривод, потому что он был доступен мне на месте и по разумной цене. Это также послужило хорошей практикой для изучения OnShape перед тем, как перейти к разработке собственных деталей. На этом раннем этапе проекта у меня было общее представление о том, на что я хочу, чтобы рука была способна. Я хотел, чтобы у него был приличный диапазон движений и хватка для захвата предметов. Эти общие спецификации послужили основой для дизайна, когда я продолжал моделировать его в САПР. Еще одним ограничением дизайна, которое у меня было на тот момент, был размер печатной платформы на моем 3D-принтере. Вот почему основание, которое вы видите на фотографии выше, представляет собой относительно примитивный квадрат.

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

Мой первоначальный план состоял в том, чтобы закончить конструирование руки, а затем реализовать оба этих метода управления. Я также хотел сделать компьютерное приложение для управления им в какой-то момент после этого. Как вы, наверное, догадались, в итоге я сократил объем этого аспекта проекта. Когда я начал работать над этими первыми двумя методами управления, я быстро обнаружил, что метод интуитивного программирования пути оказался более сложным, чем я думал. Именно тогда я решил сосредоточиться на этом и поставить другие методы контроля на неопределенный срок.

Шаг 2: Контроль

Контроль
Контроль

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

В этом методе управления нужно было во многом разобраться. Чтобы каждый сервопривод вернулся к сохраненному углу, мне нужно было каким-то образом «сохранить» эти углы в первую очередь. Для этого требовалось, чтобы Arduino Uno, который я использовал, мог получать текущий угол каждого сервопривода. Мой друг Джереми Паради, который сделал роботизированную руку, которая использует этот метод управления, подсказал мне, как использовать внутренний потенциометр каждого сервопривода для хобби. Это потенциометр, который сервопривод сам использует для кодирования своего угла. Я выбрал тестовый сервопривод, припаял провод к среднему контакту внутреннего потенциометра и просверлил отверстие в корпусе для подачи провода наружу.

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

Указание серводвигателям для хобби переместиться на некоторый угол от 0 до 180 градусов включает в себя отправку им сигнала ШИМ с высоким временем, соответствующим углу. И наоборот, использование аналогового входного контакта Arduino для считывания напряжения на среднем контакте потенциометра при перемещении рупора сервопривода между 0 и 180 градусами возвращает отдельный диапазон значений. Следовательно, потребовалась некоторая математика, чтобы преобразовать сохраненное входное значение в соответствующее выходное значение ШИМ, необходимое для возврата сервопривода к тому же углу.

Моя первая мысль заключалась в том, чтобы использовать простую карту диапазона, чтобы найти соответствующий выходной ШИМ для каждого сохраненного угла. Это сработало, но не очень точно. В случае моего проекта диапазон высоких значений времени ШИМ, соответствующий диапазону углов 180 градусов, был намного больше, чем диапазон значений аналогового входа. Кроме того, оба этих диапазона не были непрерывными и состояли только из целых чисел. Поэтому, когда я сопоставил сохраненное входное значение с выходным значением, точность была потеряна. Именно в этот момент я решил, что мне нужен контур управления, чтобы мои сервоприводы были там, где они должны быть.

Я написал код для контура ПИД-регулирования, в котором на входе было напряжение среднего контакта, а на выходе - выход ШИМ, но быстро обнаружил, что мне нужно только интегральное управление. В этом сценарии и выход, и вход представляют собой углы, поэтому добавление пропорционального и производного управления имело тенденцию к перерегулированию или нежелательному поведению. После настройки интегрального управления остались две проблемы. Во-первых, если начальная ошибка между текущим и желаемым углом была большой, сервопривод будет ускоряться слишком быстро. Я мог уменьшить константу для интегрального управления, но это сделало общее движение слишком медленным. Во-вторых, движение было нервным. Это было результатом шума аналогового входного сигнала. Контур управления непрерывно считывал этот сигнал, поэтому скачки напряжения вызывали неустойчивое движение. (На этом этапе я также перешел от моего тестового сервопривода к сборке, изображенной выше. Я также создал объект контура управления для каждого сервопривода в программном обеспечении.)

Я решил проблему слишком быстрого ускорения, установив на выходе фильтр экспоненциально взвешенного скользящего среднего (EWMA). Посредством усреднения выходного сигнала большие всплески в движении были уменьшены (включая дрожание от шума). Однако шум на входном сигнале все еще оставался проблемой, поэтому на следующем этапе моего проекта я пытался ее решить.

Шаг 3: шум

Шум
Шум

Изображенный выше

Красный: исходный входной сигнал.

Синим цветом: входной сигнал после обработки

Первым шагом в уменьшении шума входящего сигнала было понимание его причины. Проверка сигнала на осциллографе показала, что скачки напряжения происходят с частотой 50 Гц. Я узнал, что сигнал ШИМ, отправляемый на сервоприводы, также имел частоту 50 Гц, поэтому я предположил, что скачки напряжения как-то связаны с этим. Я предположил, что движение сервоприводов каким-то образом вызывает скачки напряжения на выводе V + потенциометров, что, в свою очередь, искажает показания на среднем выводе.

Здесь я сделал свою первую попытку уменьшить шум. Я снова открыл каждый сервопривод и добавил провод, идущий от контакта V + на потенциометре. Мне нужно было больше аналоговых входов для их чтения, чем было у Arduino Uno, поэтому на этом этапе я также перешел на Arduino Mega. В моем коде я изменил ввод угла с аналогового считывания напряжения на среднем выводе на соотношение между напряжением на среднем выводе и напряжением на выводе V +. Я надеялся, что если на выводах произойдет скачок напряжения, это уменьшится в соотношении.

Я собрал все обратно и проверил, но всплески все еще происходили. Что я должен был сделать в этот момент, так это проверить свою почву. Вместо этого моей следующей идеей было полностью подключить потенциометры к отдельному источнику питания. Я отключил провода V + от аналоговых входов на Arduino и подключил их к отдельному источнику питания. Я прощупывал контакты раньше, поэтому знал, на какое напряжение их подавать. Я также перерезал соединение между платой управления и контактом V + в каждом сервоприводе. Я собрал все вместе, вернул код ввода угла к тому, как он был раньше, а затем протестировал его. Как и ожидалось, на входном контакте больше не было скачков напряжения. Однако возникла новая проблема - подключение потенциометров к отдельному источнику питания полностью испортило внутренние контуры управления сервоприводов. Несмотря на то, что контакты V + получали такое же напряжение, как и раньше, движение сервоприводов было неустойчивым и нестабильным.

Я не понимал, почему это происходит, поэтому, наконец, проверил свое заземление в сервоприводах. Среднее падение напряжения на земле составляло около 0,3 вольт, а когда сервоприводы потребляли ток, оно резко возрастало. Тогда мне стало ясно, что эти штыри больше нельзя считать «заземленными», и их лучше описать как «эталонные» штифты. Платы управления в сервоприводах должны были измерять напряжение на среднем выводе потенциометра относительно напряжения на выводах V + и опорных выводах. Питание потенциометров по отдельности нарушило это относительное измерение, потому что теперь вместо всплеска напряжения на всех выводах он произошел только на контрольном выводе.

Мой наставник, доктор Маллок, помог мне отладить все это и посоветовал мне также измерить напряжение на среднем контакте относительно других контактов. Это то, что я сделал для своей третьей и последней попытки уменьшить шум при вводе угла. Я открыл каждый сервопривод, снова подключил провод, который я перерезал, и добавил третий провод, идущий от контрольного штифта на потенциометре. В моем коде я сделал ввод угла эквивалентным следующему выражению: (средний вывод - контрольный вывод) / (V + вывод - контрольный вывод). Я протестировал его, и он успешно уменьшил влияние скачков напряжения. Вдобавок я поставил на этот вход фильтр EWMA. Этот обработанный сигнал и исходный сигнал изображены выше.

Шаг 4: подводим итоги

Подведение итогов
Подведение итогов

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

Я очень доволен конечным результатом. Интуитивно понятное планирование движений работает стабильно, а движение плавное и точное, учитывая все факторы. Если бы кто-то другой захотел сделать этот проект, я бы сначала настоятельно рекомендовал им сделать более простую версию. Оглядываясь назад, создание чего-то подобного с использованием серводвигателей для хобби было очень наивно, и трудности, с которыми я столкнулся, подтверждают это. Считаю чудом, что рука работает так хорошо, как работает. Я все еще хочу создать роботизированную руку, которая может взаимодействовать с компьютером, запускать более сложные программы и двигаться с большей точностью, поэтому в своем следующем проекте я сделаю это. Я буду использовать высококачественные сервоприводы цифровой робототехники, и, надеюсь, это позволит мне избежать многих проблем, с которыми я столкнулся в этом проекте.

Документ САПР:

cad.onshape.com/documents/818ea878dda7ca2f…

Рекомендуемые: