Хочу поделиться с вами результатами реверс-инжиниринга uArm – простого настольно манипулятора из оргстекла на сервоприводах.
Проект uArm от uFactory собрал средства на кикстартере уже больше двух лет назад. Они с самого начала говорили, что это будет открытый проект, но сразу после окончания компании они не торопились выкладывать исходники. Я хотел просто порезать оргстекло по их чертежам и все, но так как исходников не было и в обозримом будущем не предвиделось, то я принялся повторять конструкцию по фотографиям.
Сейчас моя робо-рука выглядит так:
Работая не спеша за два года я успел сделать четыре версии и получил достаточно много опыта. Описание, историю проекта и все файлы проекта вы сможете найти под катом.
Пробы и ошибки
Начиная работать над чертежами, я хотел не просто повторить uArm, а улучшить его. Мне казалось, что в моих условиях вполне можно обойтись без подшипников. Так же мне не нравилось то, что электроника вращается вместе со всем манипулятором и хотелось упростить конструкцию нижней части шарнира. Плюс я начал рисовать его сразу немного меньше.
С такими входными параметрами я нарисовал первую версию. К сожалению, у меня не сохранилось фотографий той версии манипулятора (который был выполнен в желтом цвете). Ошибки в ней были просто эпичнейшие. Во-первых, ее было почти невозможно собрать. Как правило, механика которую я рисовал до манипулятора, была достаточно простая, и мне не приходилось задумываться о процессе сборки. Но все-таки я его собрал и попробовал запустить, И рука почти не двигалась! Все детли крутились вокруг винтов и, сли я затягивал их так, чтобы было меньше люфтов, она не могла двигаться. Если ослаблял так, чтобы она могла двигаться, появлялись невероятные люфты. В итоге концепт не прожил и трех дней. И приступил к работе над второй версией манипулятора.
Красный был уже вполне пригоден к работе. Он нормально собирался и со смазкой мог двигаться. На нем я смог протестировать софт, но все-таки отсутствие подшипников и большие потери на разных тягах делали его очень слабым.
Затем я забросил работу над проектом на какое-то время, но вскоре принял решении довести его до ума. Я решил использовать более мощные и популярные сервоприводы, увеличить размер и добавить подшипники. Причем я решил, что не буду пытаться сделать сразу все идеально. Я набросал чертежи на скорую руки, не вычерчивая красивых сопряжений и заказал резку из прозрачного оргстекла. На получившемся манипуляторе я смог отладить процесс сборки, выявил места, нуждающиеся в дополнительном укреплении, и научился использовать подшипники.
После того, как я вдоволь наигрался с прозрачным манипулятором, я засел за чертежи финальной белой версии. Итак, сейчас вся механика полностью отлажена, устраивает меня и готов заявить, что больше ничего не хочу менять в этой конструкции:
Меня удручает то, что я не смог привнести ничего принципиально нового в проект uArm. К тому времени, как я начал рисовать финальную версию, они уже выкатили 3D-модели на GrabCad. В итоге я только немного упростил клешню, подготовил файлы в удобном формате и применил очень простые и стандартные комплектующие.
Особенности манипулятора
До появления uArm, настольные манипуляторы подобного класса выглядели достаточно уныло. У них либо не было электроники вообще, либо было какое-нибудь управление с резисторами, либо было свое проприетарное ПО. Во-вторых, они как правило не имели системы параллельных шарниров и сам захват менял свое положение в процессе работы. Если собрать все достоинства моего манипулятора, то получается достаточно длинный список:
- Система тяг, позволяющих разместить мощные я тяжелые двигатели в основании манипулятора, а также удерживающие захват параллельно или перпендикулярно основанию
- Простой набор комплектующих, которые легко купить или вырезать из оргстекла
- Подшипники почти во всех узлах манипулятора
- Простота сборки. Это оказалось действительно сложной задачей. Особенно трудно было продумать процесс сборки основания
- Положение захвата можно менять на 90 градусов
- Открытые исходники и документация. Все подготовлено в доступных форматах. Я дам ссылки для скачивания на 3D-модели, файлы для резки, список материалов, электронику и софт
- Arduino-совместимость. Есть много противников Arduino, но я считаю, что это возможность расширения аудитории. Профессионалы вполне могут написать свой софт на C — это же обычный контроллер от Atmel!
Механика
Для сборки необходимо вырезать детали из оргстекла толщиной 5мм:
… и 3мм:
С меня за резку всех этих деталей взяли около $10.
Основание монтируется на большом подшипнике:
Особенно трудно было продумать основание с точки зрения процесса сборки, но я подглядывал за инженерами из uArm. Качалки сидят на штифте диаметром 6мм. Надо отметить, что тяга локтя у меня держится на П-образном держателе, а у uFactory на Г-образном. Трудно объяснить в чем разница, но я считаю у меня получилось лучше.
Захват собирается отдельно. Он может поворачиваться вокруг своей оси. Сама клешня сидит прямо на валу двигателя:
В конце статьи я дам ссылку на суперподробную инструкцию по сборке в фотографиях. За пару часов можно уверенно все это скрутить, если все необходимое есть под рукой. Также я подготовил 3D-модель в бесплатной программе SketchUp. Её можно скачать, покрутить и посмотреть что и как собрано.
Электроника
Чтобы заставить руку работать достаточно всего навсего подключить пять сервоприводов к Arduino и подать на них питание с хорошего источника. У uArm использованы какие-то двигатели с обратной связью. Я поставил три обычных двигателя MG995 и два маленьких двигателя с металлическим редуктором для управления захватом.
Тут мое повествование тесно сплетается с предыдущими проектами. С некоторых пор я начал преподавать программирование Arduino и для этих целей даже подготовил свою Arduino-совместимую плату. С другой стороны как-то раз мне подвернулась возможность дешево изготовить платы (о чем я тоже писал). В итоге все это закончилось тем, что я использовал для управления манипулятором свою собственную Arduino-совместимую плату и специализированный шилд.
Этот шилд на самом деле очень простой. На нем четыре переменных резистора, две кнопки, пять разъемов для сервопривода и разъем питания. Это очень удобно с точки зрения отладки. Можно загрузить тестовый скетч и записать какой-нибудь макрос для управления или что-нибудь вроде того. Ссылку для скачивания файла платы я тоже дам в конце статьи, но она подготовлена для изготовления с металлизацией отверстий, так что мало пригодна для домашнего производства.
Программирование
Самое интересное, это управление манипулятором с компьютера. У uArm есть удобное приложение для управления манипулятором и протокол для работы с ним. Компьютер отправляет в COM-порт 11 байт. Первый из них всегда 0xFF, второй 0xAA и некоторые из оставшихся — сигналы для сервоприводов. Далее эти данные нормализуются и отдаются на отработку двигателям. У меня сервоприводы подключены к цифровым входам/выходам 9-12, но это легко можно поменять.
Терминальная программа от uArm позволяет изменять пять параметров при управлении мышью. При движении мыши по поверхности изменяется положение манипулятора в плоскости XY. Вращение колесика — изменение высоты. ЛКМ/ПКМ — сжать/разжать клешню. ПКМ + колесико — поворот захвата. На самом деле очень удобно. При желании можно написать любой терминальный софт, который будет общаться с манипулятором по такому же протоколу.
Я не буду здесь приводить скетчи — скачать их можно будет в конце статьи.
Видео работы
И, наконец, само видео работы манипулятора. На нем показано управление мышью, резисторами и по заранее записанной программе.
Ссылки
Файлы для резки оргстекла, 3D-модели, список для покупки, чертежи платы и софт можно скачать в конце моей основной статьи.
Подробная инструкция по сборке в фотографиях (осторожно, траффик).
Комментарии (21)
MaxAlekseev
15.12.2015 11:46+1А что за прибор на заглавной фотке за манипулятором? Часто вижу на фотографиях из лабораторий.
ssg1712
15.12.2015 12:26Это дымоуловитель для пайки. Он с фильтром, поэтому нет воздуховода. Если не очень много паяешь, то вполне полезная вещь. Главное, что дым от лица отгоняет.
MaxAlekseev
15.12.2015 12:32+1Еще вопрос. У вас очень идеальные платы по качеству изготовления, я имею в виду дополнительные шилды для Arduino. Если это самодел, предположу что ламинатор и фоторезист, можно немного описать технологию лужения, т.к. у меня так не выходит.
czuryk
15.12.2015 13:45+1Есть у меня похожая рука, собранная на основе такой штуковины.
Тоже написал для ардуины прошивку и програмку для винды, которая использовала для управления радио джойстик. На саму клешню поставил микрокамеру с видео передатчиком, а сам сидел в другом месте и по камере, джлйстиком выполнял какие то манипуляции рукой, например печатал на клавиатура или перетасиквал предметы…
На как то быстро наигрался и убрал все в шкаф… применение ей так и не нашел :(
potan
15.12.2015 14:14+2Интересно, когда будет сделана такая рука, что могла бы собрать свою копию из готовых деталей?
VioletGiraffe
15.12.2015 15:43+2А как вы добились уменьшения люфтов? Есть какая-то конкретная хитрость?
ssg1712
15.12.2015 18:49На самом деле на видео видно, что люфты довольно сильные. Их можно значительно уменьшить, если подшипники вклеить в детали. Я пробовал на прозрачной версии делать это при помощи суперклея. Получалось довольно хорошо.
Lerk
15.12.2015 18:44+1Какая точность передвижения? Повторяемость движений? При какой нагрузке?
ssg1712
15.12.2015 18:54Точность не очень высокая и ее трудно оценить. Стакан двигать хватит, гравировать надписи нет)
С повторяемостью достаточно хорошо, но подгонять программу под определенную позицию сложно, так как у сервоприводов MG995 довольно большие люфты на валу и текущая позиция зависит от предыдущей.
Приводы честно вращаются при 8кг/см на валу. На полностью вытянутой руке можно уверено держать около 200г. Если будет время, попробую потестировать с каким предельным весом она может работать.Lerk
15.12.2015 19:20+1Ясно) Без повторяемости роборука — игрушка. Попробуйте может сделать калибровочную позицию? Тогда можно и на какую-нить реальную задачу поставить. А если на манипулятор поставить камеру с OpenCV… завидую, что у вас есть время на такое хобби)
ssg1712
15.12.2015 19:51С калибровочной позицией не получится. Потому что он, например, при вращении, приезжает в разные точки в зависимости от того, двигается ли он слева-направо или справа налево.
Со временем на самом деле беда. Поэтому даже не знаю когда дойдет до попыток решения каких-то реальных задач.
vp7
15.12.2015 20:52+1А если поставить датчики угла поворота на всех рычагах и использовать их для тонкой подстройки?
Тогда даже большой люфт двигателя можно будет компенсировать.
Интересно, существуют ли подходящие по размеру (и цене) датчики для установки на вашу робо-руку?ssg1712
15.12.2015 23:24Тут дело в другом. Надо отталкиваться от того, для чего предназначен манипулятор. Мой для задач, в которых требуется дать компьютеру простенькую руку. Например для того, чтобы сделать настольную лампу с голосовым управлением. Или быстро автоматизировать простые действия (включить чайник, насыпать еды кошке и т.д.) Я хотел сделать изготовление манипулятора в домашних условиях предельно простым, дешевым и способным перетаскивать реальные предметы. Если задуматься, то есть очень много задач в которых такие люфты не помеха.
nemilya
16.12.2015 12:20Спасибо Сергей за публикацию!
Очень хороший образовательный проект и опыт. Ведь одно дело — купить и собрать готовое — а другое — пройти весь путь от начала и до работающей модели — чтобы понять все тонкости и моменты.
Тем более свой шилд и ардуино — выглядит классно. Думаю вполне можно DIY набором делать — и на мастеркласс в хакспейс :)
Кстати — V-REP добавили в свои модели uArm — можно в 3д виртуальной реальности ей управлять.
И даже запрограммировали её на автономное движение — взять предмет, поднять, и обратно положить, вот фрагмент:
Кодfunction threadFunction() local maxVelocity=45*math.pi/180 -- rad/s local maxAcceleration=40*math.pi/180 -- rad/s^2 local maxJerk=80*math.pi/180 -- rad/s^3 local maxTorque=10 -- kg*m^2/s^2 initialize(maxVelocity,maxAcceleration,maxJerk,maxTorque) while simGetSimulationState()~=sim_simulation_advancing_abouttostop do enableSuctionCup(false) -- Synchronous operation of the individual joints: moveToPosition({180*math.pi/180,59*math.pi/180,84*math.pi/180,180*math.pi/180},true) moveToPosition({180*math.pi/180,52.5*math.pi/180,84*math.pi/180,180*math.pi/180},true) enableSuctionCup(true) moveToPosition({180*math.pi/180,59*math.pi/180,84*math.pi/180,180*math.pi/180},true) moveToPosition({90*math.pi/180,104*math.pi/180,60*math.pi/180,90*math.pi/180},true) -- Asynchronous operation of the individual joints: moveToPosition({180*math.pi/180,59*math.pi/180,84*math.pi/180,180*math.pi/180},false) moveToPosition({180*math.pi/180,52.5*math.pi/180,84*math.pi/180,180*math.pi/180},true) enableSuctionCup(false) moveToPosition({180*math.pi/180,59*math.pi/180,84*math.pi/180,180*math.pi/180},true) moveToPosition({90*math.pi/180,104*math.pi/180,60*math.pi/180,90*math.pi/180},false) end end
acos
Отличная работа!
А прямо из оргстекла подшипники скольжения не пробовали делать?
ssg1712
Спасибо!
Нет, не пробовал. Если поделитесь ссылкой или в двух словах опишите о чем идет речь буду признателен.
acos
Да просто вместо мелких подшипников точно такие же по размеру кругляши из оргстекла воткнуть. Реализаций не припомню. Поначалу подумал, что вы именно так и сделали, потом только фотки из подробной статьи разглядел).
Давно хочу попробовать такое, но сейчас мы из оргстекла механику совсем перестали делать, проверить не на чем.
Сергей, я как всегда восхищен — проекты у вас очень классные! Спасибо)
3dtim
оргстекло не скользит, втулки скольжения из фторопласта делают