Taula de continguts:

Braç robòtic: Jensen: 4 passos
Braç robòtic: Jensen: 4 passos

Vídeo: Braç robòtic: Jensen: 4 passos

Vídeo: Braç robòtic: Jensen: 4 passos
Vídeo: The Evolution of Michael Jackson's Dance - By Ricardo Walker's Crew 2024, Desembre
Anonim
Braç robòtic: Jensen
Braç robòtic: Jensen

Jensen és un braç robòtic construït a la plataforma Arduino amb un enfocament en la planificació del moviment intuïtiu, realitzat com a projecte independent de 1 crèdit sota la tutoria del doctor Charles B. Malloch. Pot replicar una sèrie de moviments programats movent manualment el braç. Vaig tenir la inspiració per construir-lo en veure construir altres braços robòtics a l’espai de creació UMass Amherst M5. A més, volia aprendre a utilitzar el programari CAD i volia fer un projecte Arduino avançat. Vaig veure això com una oportunitat per fer totes aquestes coses.

Pas 1: disseny original i abast

Disseny i abast original
Disseny i abast original

El programari CAD que vaig escollir per a aquest projecte va ser OnShape, i el primer que vaig modelar va ser un servo analògic HiTec HS-422. Vaig triar el servo perquè estava disponible localment i tenia un preu raonable. També va servir de bona pràctica per aprendre OnShape abans de passar a dissenyar les meves pròpies peces. En aquest moment inicial del projecte, tenia una idea general de què volia que fos capaç del braç. Volia que tingués un rang de moviment decent i una pinça per recollir coses. Aquestes especificacions generals van informar el disseny mentre continuava modelant-lo en CAD. Una altra restricció de disseny que tenia en aquest moment era la mida del llit d'impressió de la meva impressora 3D. Per això, la base que veieu a la foto superior és un quadrat relativament primitiu.

Durant aquesta etapa del projecte, també estava fent una pluja d’idees sobre com volia controlar el braç. Un braç robòtic en què m'havia inspirat a l'espai del fabricant utilitzava un braç titella per controlar-lo. Un altre utilitzava un mètode intuïtiu de programació de camins en què l'usuari movia el braç a diverses posicions. El braç tornaria a recórrer aquestes posicions.

El meu pla original era acabar la construcció del braç i després implementar aquests dos mètodes de control. També volia fer una aplicació informàtica per controlar-la en algun moment després. Com probablement es pot dir, vaig acabar reduint l’abast d’aquest aspecte del projecte. Quan vaig començar a treballar en aquests dos primers mètodes de control, vaig trobar ràpidament que la intuïtiva de programació de camins era més complicada del que pensava que seria. Va ser llavors quan vaig decidir convertir-lo en el meu focus i posar els altres mètodes de control en espera indefinida.

Pas 2: control

Control
Control

El mètode de control que he escollit funciona així: moveu el braç amb les mans a diverses posicions i "deseu" aquestes posicions. Cada posició té informació sobre l'angle entre cada enllaç del braç. Quan hàgiu acabat de desar posicions, premeu un botó de reproducció i el braç torna a cadascuna d'aquestes posicions en seqüència.

En aquest mètode de control, hi havia moltes coses per esbrinar. Per tal que cada servo tornés a un angle guardat, d'alguna manera havia de "guardar" aquests angles en primer lloc. Això requeria que l’Arduino Uno que feia servir per poder rebre l’angle actual de cada servo. El meu amic Jeremy Paradie, que va fabricar un braç robòtic que utilitza aquest mètode de control, em va donar la idea d’utilitzar el potenciòmetre intern de cada servo hobby. Aquest és el potenciòmetre que el servo utilitza per codificar el seu angle. Vaig triar un servo de prova, vaig soldar un cable al passador central del potenciòmetre intern i vaig perforar un forat al recinte per alimentar el cable exterior.

Ara podria rebre l’angle actual llegint la tensió al pin central del potenciòmetre. No obstant això, hi va haver dos nous problemes. En primer lloc, hi havia soroll en forma de pics de tensió al senyal que provenia del passador central. Aquest problema es va convertir en un veritable problema més tard. En segon lloc, l’interval de valors per enviar un angle i rebre un angle eren diferents.

Dir als servomotors de l’afició que es moguin fins a un angle entre 0 i 180 graus implica enviar-li un senyal PWM amb un temps elevat corresponent a l’angle. Al contrari, fer servir un pin d'entrada analògic de l'Arduino per llegir la tensió del pin central del potenciòmetre mentre es mou el servo horn entre 0 i 180 graus, torna un rang de valors separat. Per tant, es necessitaven algunes matemàtiques per traduir un valor d’entrada guardat al valor de sortida PWM corresponent necessari per tornar el servo al mateix angle.

El meu primer pensament va ser utilitzar un mapa d’abast senzill per trobar el PWM de sortida corresponent per a cada angle desat. Això funcionava, però no era molt precís. En el cas del meu projecte, l'interval de valors de temps elevats PWM corresponents a un rang d'angle de 180 graus era molt més gran que l'interval de valors d'entrada analògica. A més, ambdós intervals no eren continus i estaven composts només per enters. Per tant, quan he assignat un valor d’entrada desat a un valor de sortida, s’ha perdut la precisió. Va ser en aquest moment que vaig pensar que necessitava un bucle de control per aconseguir els servos allà on havien d’estar.

Vaig escriure codi per a un bucle de control PID en què l’entrada era la tensió del pin central i la sortida era la sortida PWM, però vaig descobrir ràpidament que només necessitava un control integral. En aquest escenari, tant la sortida com l’entrada representaven angles, de manera que afegir control proporcional i derivat tendeix a fer que es superi o tingui un comportament indesitjable. Després d’ajustar el control integral, encara hi havia dos problemes. En primer lloc, si l'error inicial entre l'angle actual i el desitjat fos gran, el servo acceleraria massa ràpidament. Podria reduir la constant del control integral, però això feia que el moviment general fos massa lent. En segon lloc, la moció va ser nerviosa. Això va ser el resultat del soroll del senyal d'entrada analògica. El bucle de control estava llegint contínuament aquest senyal, de manera que els pics de tensió causaven moviments nerviosos. (En aquest moment també vaig passar del meu servo de prova al conjunt que es mostra a la imatge anterior. També vaig crear un objecte de bucle de control per a cada servo del programari).

Vaig solucionar el problema de l’acceleració massa ràpida posant un filtre de mitjana mòbil ponderada exponencialment (EWMA) a la sortida. Mitjançant la mitjana de la producció, es van reduir els grans pics en moviment (inclosa la fluctuació del soroll). Tot i això, el soroll del senyal d’entrada encara era un problema, de manera que la següent etapa del meu projecte estava intentant solucionar-ho.

Pas 3: Soroll

Soroll
Soroll

A la imatge de dalt

En vermell: senyal d’entrada original

En blau: senyal d’entrada després del processament

El primer pas per reduir el soroll del senyal d’entrada va ser entendre la seva causa. Sondejar el senyal d’un oscil·loscopi va revelar que els pics de tensió passaven a un ritme de 50Hz. Vaig saber que el senyal PWM que s’enviava als servos també tenia una velocitat de 50Hz, així que vaig endevinar que els pics de tensió tenien alguna cosa a veure amb això. Vaig fer la hipòtesi que el moviment dels servos provocava d'alguna manera pics de tensió al pin V + dels potenciòmetres, que al seu torn estava desordenant la lectura del pin central.

Aquí és on vaig fer el meu primer intent de reduir el soroll. Vaig tornar a obrir cada servo i vaig afegir un cable procedent del pin V + del potenciòmetre. Per llegir-les necessitava més entrades analògiques que les que tenia l’Arduino Uno, així que també em vaig mudar a un Arduino Mega en aquest moment. Al meu codi, he canviat l’entrada d’angle de lectura analògica del voltatge del pin central a una proporció entre el voltatge del pin central i el voltatge del pin V +. La meva esperança era que si hi havia un pic de tensió als pins, es cancel·laria en la proporció.

Ho vaig tornar a posar tot junt i el vaig provar, però els pics seguien passant. El que hauria d'haver fet en aquest moment va ser explorar el meu terreny. En canvi, la meva següent idea era posar els potenciòmetres en una font d'alimentació independent. Vaig desconnectar els cables V + de les entrades analògiques de l'Arduino i els vaig connectar a una font d'alimentació independent. Abans havia explorat els pins, així que sabia a quina tensió els alimentaria. També vaig retallar la connexió entre la placa de control i el pin V + de cada servo. Vaig tornar a ajuntar-ho tot, vaig revertir el codi d’entrada d’angle a com era abans i després el vaig provar. Com era d’esperar, no hi havia més pics de tensió al pin d’entrada. No obstant això, hi va haver un nou problema: posar els potenciòmetres en una font d'alimentació independent havia desordenat completament els bucles de control intern dels servos. Tot i que els pins V + rebien la mateixa tensió que abans, el moviment dels servos era irregular i inestable.

No entenia per què passava això, així que finalment vaig examinar la connexió de terra als servos. Hi va haver una caiguda mitjana de voltatge d’uns 0,3 volts a terra, i va augmentar encara més quan els servos van treure corrent. Aleshores em quedava clar que aquells passadors ja no es podien considerar "sòl" i que es podrien descriure millor com a pins "de referència". Les plaques de control dels servos han d’haver estat mesurant la tensió del pin central del potenciòmetre en relació amb la tensió del V + i els pins de referència. L'alimentació dels potenciòmetres per separat va desordenar aquesta mesura relativa perquè ara, en lloc de passar un pic de tensió a tots els pins, només passava al pin de referència.

El meu mentor, el doctor Malloch, em va ajudar a depurar tot això i em va suggerir que també mesurés el voltatge del pin mig en relació amb els altres pins. Això és el que vaig fer pel meu tercer i últim intent de reduir el soroll de l’angle d’entrada. Vaig obrir cada servo, vaig tornar a connectar el cable que havia trencat i vaig afegir un tercer cable procedent del pin de referència del potenciòmetre. Al meu codi, he fet que l’entrada d’angle sigui equivalent a la següent expressió: (pin central - pin de referència) / (V + pin - pin de referència). El vaig provar i va reduir amb èxit els efectes dels pics de tensió. A més, també he posat un filtre EWMA en aquesta entrada. Aquest senyal processat i el senyal original es mostren a la part superior.

Pas 4: embolicar les coses

Embolicant les coses
Embolicant les coses

Amb el problema de soroll resolt al màxim de les meves habilitats, em vaig dedicar a arreglar i fer les parts finals del disseny. El braç feia massa pes al servo de la base, així que vaig crear una nova base que suportés el pes del braç mitjançant un gran coixinet. També vaig imprimir la pinça i hi vaig fer una mica de poliment perquè funcionés.

Estic molt satisfet amb el resultat final. La planificació intuïtiva del moviment funciona de manera constant i el moviment és suau i precís, tenint en compte tot. Si algú més volgués fer aquest projecte, primer els animaria a fer-ne una versió més senzilla. En retrospectiva, fer una cosa així fent servir servomotors hobby va ser molt ingenu, i la dificultat que vaig tenir perquè funcionés ho demostra. Considero que és un miracle que el braç funcioni tan bé com ho fa. Encara vull fer un braç robòtic que pugui interactuar amb un ordinador, executar programes més complexos i moure’s amb més precisió, així que per al meu proper projecte ho faré. Utilitzaré servos de robòtica digital d'alta qualitat, i espero que això em permeti evitar molts dels problemes que he trobat en aquest projecte.

Document CAD:

cad.onshape.com/documents/818ea878dda7ca2f…

Recomanat: