Съдържание:

Роботизирана ръка: Дженсен: 4 стъпки
Роботизирана ръка: Дженсен: 4 стъпки

Видео: Роботизирана ръка: Дженсен: 4 стъпки

Видео: Роботизирана ръка: Дженсен: 4 стъпки
Видео: Грешките, които да НЕ допускаме в инвестициите | Angelov Dimitar Community в Бургас | Подкаст # 4 2024, Октомври
Anonim
Роботизирана ръка: Jensen
Роботизирана ръка: Jensen

Jensen е роботизирана ръка, построена на платформата Arduino с акцент върху интуитивното планиране на движение, направено като независим проект с 1 кредит под ръководството на д -р Чарлз Б. Малок. Той може да повтори поредица от движения, програмирани чрез ръчно преместване на ръката. Получих вдъхновението да го изградя, като видях други роботизирани оръжия, построени в UMass Amherst M5 makerspace. Освен това исках да науча как да използвам CAD софтуер и исках да направя усъвършенстван проект Arduino. Виждах това като възможност да направя всички тези неща.

Стъпка 1: Оригинален дизайн и обхват

Оригинален дизайн и обхват
Оригинален дизайн и обхват

CAD софтуерът, който избрах да науча за този проект, беше OnShape и първото нещо, което моделирах, беше аналогово серво HiTec HS-422. Избрах сервото, защото ми беше достъпно на местно ниво и беше на разумна цена. Той също така послужи като добра практика за изучаване на OnShape, преди да преминете към проектирането на мои собствени части. В този ранен етап от проекта имах обща представа за какво искам да е способна ръката. Исках да има приличен обхват на движение и грайфер за прибиране на нещата. Тези общи спецификации информираха дизайна, докато продължавах да го моделирам в CAD. Друго ограничение в дизайна, което имах в този момент, беше размерът на печатното легло на моя 3D принтер. Ето защо основата, която виждате на снимката по -горе, е относително примитивен квадрат.

По време на този етап от проекта аз също обмислях как искам да контролирам ръката. Една роботизирана ръка, от която бях вдъхновен в пространството за създаване, използваше куклена ръка за контрол. Друг използва интуитивен метод за програмиране на пътя, при който ръката е преместена от потребителя в различни позиции. Ръката след това ще се върти обратно през тези позиции.

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

Стъпка 2: Контрол

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

Избраният от мен метод на управление работи по следния начин: премествате ръката с ръце в различни позиции и „запазвате“тези позиции. Всяка позиция има информация за ъгъла между всяка връзка на ръката. След като приключите със запазването на позиции, натискате бутон за възпроизвеждане и ръката се връща към всяка от тези позиции последователно.

В този метод на контрол трябваше да се разберат много неща. За да се върне всеки серво към запазен ъгъл, трябваше по някакъв начин да „запазя“тези ъгли на първо място. Това изискваше Arduino Uno, който използвах, за да мога да получа текущия ъгъл на всяко серво. Моят приятел Джеръми Паради, който направи роботизирана ръка, която използва този метод на управление, ме насочи към използването на вътрешния потенциометър на всяко серво за хоби. Това е потенциометърът, който серво използва за кодиране на ъгъла си. Избрах тестово серво, запоявах тел към средния щифт на вътрешния потенциометър и пробих дупка в корпуса, за да подавам проводника навън.

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

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

Първата ми мисъл беше да използвам обикновена карта на обхвата, за да намеря съответния изходен ШИМ за всеки записан ъгъл. Това работеше, но не беше много точно. В случая с моя проект обхватът на високите времеви стойности на ШИМ, съответстващи на ъглов диапазон от 180 градуса, беше много по -голям от диапазона на аналоговите входни стойности. Освен това и двата диапазона не са непрекъснати и се състоят само от цели числа. Следователно, когато съпоставих запазена входна стойност с изходна стойност, прецизността се загуби. Точно в този момент реших, че се нуждая от контролен контур, за да задвижа сервомоторите си там, където трябва.

Написах код за PID контролен контур, в който входът беше средното напрежение на извода, а изходът беше PWM изход, но бързо открих, че имам нужда само от интегрално управление. В този сценарий изходът и входът представляват ъгли, така че добавянето на пропорционален и производен контрол има тенденция да го превишава или да има нежелано поведение. След настройката на интегралното управление все още имаше два проблема. Първо, ако първоначалната грешка между текущия и желания ъгъл е голяма, сервоусилвателят ще се ускори твърде бързо. Мога да намаля константата за интегралното управление, но това направи цялостното движение твърде бавно. Второ, движението беше треперещо. Това е резултат от шума на аналоговия входен сигнал. Контролният контур непрекъснато четеше този сигнал, така че скоковете на напрежението предизвикаха нервни движения. (В този момент също се преместих от моето едно тестово серво към сглобената снимка по -горе. Също така направих обект от контролен контур за всеки серво в софтуера.)

Реших проблема с прекалено бързото ускорение, като поставих на изхода филтър с експоненциално претеглена пълзяща средна (EWMA). Чрез усредняване на изхода, големите скокове в движение бяха намалени (включително трептенето от шума). Въпреки това, шумът на входния сигнал все още беше проблем, така че следващият етап от моя проект се опитваше да разреши това.

Стъпка 3: Шум

Шум
Шум

На снимката по -горе

В червено: оригинален входен сигнал

В синьо: входен сигнал след обработка

Първата стъпка за намаляване на шума на входния сигнал беше разбирането на неговата причина. Проучването на сигнала на осцилоскоп разкри, че скоковете на напрежението се случват със скорост 50Hz. Случайно знаех, че PWM сигналът, който се изпраща към сервомоторите, също е със скорост 50Hz, така че предположих, че скоковете на напрежението имат нещо общо с това. Предполагах, че движението на сервомоторите по някакъв начин причинява скокове на напрежението върху V+ щифта на потенциометрите, което от своя страна смущава отчитането на средния щифт.

Тук направих първия си опит за намаляване на шума. Отворих отново всяко серво и добавих проводник, идващ от V+ щифта на потенциометъра. Нуждаех се от повече аналогови входове, за да ги прочета, отколкото Arduino Uno, така че в този момент също преминах към Arduino Mega. В моя код промених ъгловия вход от аналогово отчитане на напрежението на средния щифт до съотношение между напрежението на средния щифт към напрежението на V+ щифта. Надявах се, че ако има скок на напрежението върху щифтовете, той ще се анулира в съотношението.

Събрах всичко отново и го тествах, но скоковете все още се случваха. Това, което трябваше да направя в този момент, беше да проуча моята позиция. Вместо това следващата ми идея беше изцяло да поставя потенциометрите на отделно захранване. Изключих V+ проводниците от аналоговите входове на Arduino и ги свързах към отделно захранване. Бях проучвал щифтовете преди, така че знаех на какво напрежение да ги захранвам. Също така прекъснах връзката между контролната платка и V+ пина във всяко серво. Събрах всичко отново, върнах кода за въвеждане на ъгъл към предишния и след това го тествах. Както се очакваше, нямаше повече скокове на напрежение на входния щифт. Имаше обаче нов проблем - поставянето на потенциометрите на отделно захранване напълно обърка вътрешните контури за управление на сервомоторите. Въпреки че щифтовете V+ получават същото напрежение като преди, движението на сервоуправленията е нестабилно и нестабилно.

Не разбрах защо това се случва, затова най -накрая проучих моята земна връзка в сервомоторите. Имаше среден спад на напрежението от около 0,3 волта на земята и той се покачи още по -високо, когато сервомоторите изтеглиха ток. Тогава ми беше ясно, че тези щифтове вече не могат да се считат за "заземени" и по -добре могат да бъдат описани като "референтни" щифтове. Контролните платки в сервомоторите трябва да са измервали напрежението на средния щифт на потенциометъра спрямо напрежението върху V+ и референтните щифтове. Захранването на потенциометрите отделно обърка това относително измерване, защото сега вместо скок на напрежение, който се случва на всички щифтове, това се случи само на еталонния щифт.

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

Стъпка 4: Приключване на нещата

Завършване на нещата
Завършване на нещата

Тъй като проблемът с шума беше решен според възможностите ми, се заех да поправя и направя последните части от дизайна. Ръката натоварваше твърде много серво в основата, затова направих нова основа, която поддържа теглото на рамото, използвайки голям лагер. Отпечатах и грайфера и го шлайфах малко, за да работи.

Много съм доволен от крайния резултат. Интуитивното планиране на движение работи последователно и движението е плавно и точно, като се има предвид всичко. Ако някой друг искаше да направи този проект, първо силно бих го насърчил да направи по -опростена версия на него. Като се върна назад, правенето на нещо подобно с помощта на хоби серво мотори беше много наивно и трудностите, които имах да го накарам да работи, доказват това. Смятам за чудо, че ръката работи както трябва. Все още искам да направя роботизирана ръка, която да може да взаимодейства с компютър, да изпълнява по -сложни програми и да се движи с по -голяма точност, така че за следващия ми проект ще го направя. Ще използвам висококачествени серво за цифрова роботика и се надявам, че това ще ми позволи да избегна много от проблемите, които срещнах в този проект.

CAD документ:

cad.onshape.com/documents/818ea878dda7ca2f…

Препоръчано: