Tartalomjegyzék:

Robotkar: Jensen: 4 lépés
Robotkar: Jensen: 4 lépés

Videó: Robotkar: Jensen: 4 lépés

Videó: Robotkar: Jensen: 4 lépés
Videó: Vanessa Paradis - Joe Le Taxi (Clip Officiel remasterisé) 2024, Október
Anonim
Robotkar: Jensen
Robotkar: Jensen

A Jensen egy robotkar, amely az Arduino platformra épült, az intuitív mozgástervezésre összpontosítva, 1 hitel független projektként, Charles B. Malloch, PhD mentorálásával. Megismételheti a kar kézi mozgatásával programozott mozdulatsort. Az inspirációt az építkezéshez az UMass Amherst M5 gyártótérben épített más robotkaroktól kaptam. Továbbá meg akartam tanulni a CAD szoftver használatát, és egy fejlett Arduino projektet akartam készíteni. Lehetőségnek láttam, hogy mindezt megtehessem.

1. lépés: Eredeti tervezés és hatókör

Eredeti tervezés és hatókör
Eredeti tervezés és hatókör

A CAD szoftver, amelyet a projekthez választottam, az OnShape volt, és az első dolog, amit modelleztem, egy HiTec HS-422 analóg szervó volt. Azért választottam a szervót, mert helyben elérhető volt számomra, és elfogadható áron volt. Jó gyakorlatként szolgált az OnShape elsajátításához is, mielőtt a saját alkatrészek tervezéséhez kezdtem. A projekt korai szakaszában általános elképzelésem volt arról, hogy mire akarom a kart. Azt akartam, hogy legyen tisztességes mozgástartománya és fogója a dolgok felvételéhez. Ezek az általános specifikációk tájékoztatták a tervezést, miközben folytattam CAD -ben történő modellezését. Egy másik tervezési korlátozásom volt ezen a ponton a 3D nyomtatóm nyomtatóágyának mérete. Ezért az alap, amelyet a fenti képen lát, egy viszonylag primitív négyzet.

A projekt ezen szakaszában én is azon agyaltam, hogyan akarom irányítani a karomat. Az egyik robotkar, amelyet inspiráltam a gyártótérben, egy bábkart használt a vezérléshez. Egy másik intuitív útvonal -programozási módszert használt, amelyben a kart a felhasználó különböző helyzetekbe mozgatta. A kar ekkor visszafordulna ezeken a pozíciókon.

Eredeti tervem az volt, hogy befejezem a kar felépítését, majd végrehajtom mindkét ellenőrzési módszert. Szerettem volna egy számítógépes alkalmazást is készíteni annak vezérlésére valamikor ezután. Ahogy valószínűleg elmondja, végül csökkentettem a projekt ezen aspektusának hatókörét. Amikor elkezdtem dolgozni ezen az első két vezérlési módszeren, gyorsan rájöttem, hogy az intuitív útvonal programozás bonyolultabb, mint gondoltam. Ekkor döntöttem úgy, hogy a középpontba helyezem, és a többi ellenőrzési módszert határozatlan időre felfüggesztem.

2. lépés: Vezérlés

Ellenőrzés
Ellenőrzés

Az általam választott irányítási módszer így működik: a karját a kezével különböző pozíciókba mozgatja, és "elmenti" azokat. Minden pozíció információval rendelkezik a kar egyes láncszemei közötti szögről. Miután befejezte a pozíciók mentését, megnyomja a lejátszás gombot, és a kar sorrendben visszatér mindegyik pozícióba.

Ezzel az ellenőrzési módszerrel sok mindent ki kellett találni. Ahhoz, hogy minden szervó visszatérjen egy mentett szögbe, először valahogy "meg kellett mentenem" ezeket a szögeket. Ehhez szükség volt az általam használt Arduino Uno -ra, hogy képes legyen fogadni az egyes szervók aktuális szögét. Barátom, Jeremy Paradie, aki egy robotkarot készített, amely ezt az ellenőrzési módszert alkalmazza, rámutatott arra, hogy minden hobbi szervó belső potenciométerét használjam. Ez az a potenciométer, amellyel a szervó önmagát használja a szög kódolásához. Választottam egy teszt szervót, forrasztottam egy vezetéket a belső potenciométer középső tüskéjére, és lyukat fúrtam a házba, hogy a huzalt kifelé táplálja.

Most megkaphatnám az aktuális szöget, ha leolvasom a potenciométer középső csapjának feszültségét. Két új probléma merült fel azonban. Először is zaj volt feszültségcsúcsok formájában a középső csapból érkező jelre. Ez a probléma később valódi problémává vált. Másodszor, a szög küldésének és fogadásának értéktartománya eltérő volt.

Ha azt mondja a hobbi szervomotoroknak, hogy 0 és 180 fok közötti szögben mozogjanak, akkor a szögnek megfelelő hosszú idejű PWM jelet kell küldeni. Ezzel ellentétben, ha az Arduino analóg bemeneti tűjét használja a potenciométer középső tűjének feszültségének leolvasására, miközben a szervókürtöt 0 és 180 fok között mozgatja, akkor külön értéktartományt ad vissza. Ezért némi matematikára volt szükség ahhoz, hogy a mentett bemeneti értéket a megfelelő PWM kimeneti értékre fordítsa, amely szükséges a szervó ugyanazon szögbe való visszaállításához.

Az első gondolatom az volt, hogy egy egyszerű tartománytérkép segítségével megtalálom a megfelelő kimeneti PWM -et minden mentett szöghöz. Ez működött, de nem volt túl pontos. A projektem esetében a 180 fokos szögtartománynak megfelelő PWM magas időértékek tartománya jóval nagyobb volt, mint az analóg bemeneti értékek tartománya. Ezenkívül mindkét tartomány nem volt folyamatos, és csak egész számokból állt. Ezért amikor egy mentett bemeneti értéket leképeztem egy kimeneti értékre, a pontosság elveszett. Ezen a ponton gondoltam rá, hogy szükségem van egy vezérlőhurokra, hogy a szervóimat ott tartsam, ahol kell.

Írtam egy kódot egy PID vezérlőhurokhoz, amelyben a bemenet a középső pin feszültség, a kimenet pedig a PWM kimenet volt, de gyorsan rájöttem, hogy csak integrált vezérlésre van szükségem. Ebben a forgatókönyvben a kimenet és a bemenet egyaránt szögeket jelentett, így az arányos és a származtatott vezérlés hozzáadása általában túllépést vagy nemkívánatos viselkedést eredményezett. Az integrált vezérlés hangolása után továbbra is két probléma merült fel. Először is, ha a kezdeti hiba az aktuális és a kívánt szög között nagy lenne, a szervó túl gyorsan gyorsulna. Csökkenthetném az integrált vezérlés állandóját, de ez túlságosan lelassította a teljes mozgást. Másodszor, a mozdulat ideges volt. Ennek oka az analóg bemeneti jel zajja volt. A vezérlőhurok folyamatosan leolvasta ezt a jelet, így a feszültségcsúcsok ideges mozgást okoztak. (Ezen a ponton én is átmentem az egyik teszt szervóról a fenti képen látható szerelvényre. Készítettem egy vezérlő hurok objektumot is a szoftver minden szervójához.)

A túl gyors gyorsítás problémáját úgy oldottam meg, hogy exponenciálisan súlyozott mozgóátlag (EWMA) szűrőt helyeztem a kimenetre. A kimenet átlagolásával csökkentették a mozgásban lévő nagy tüskéket (beleértve a zaj okozta remegést). A bemeneti jel zajja azonban továbbra is problémát jelentett, ezért projektem következő szakasza ezt próbálta megoldani.

3. lépés: Zaj

Zaj
Zaj

A fenti képen

Pirosan: eredeti bemeneti jel

Kék színben: bemeneti jel a feldolgozás után

A bemeneti jel zajcsökkentésének első lépése az ok megértése volt. A jelet oszcilloszkóppal vizsgálva kiderült, hogy a feszültségcsúcsok 50 Hz -es sebességgel történnek. Történetesen tudtam, hogy a szervókhoz küldött PWM jel is 50 Hz -es frekvencián volt, úgyhogy sejtettem, hogy a feszültségcsúcsoknak köze van ehhez. Feltételeztem, hogy a szervók mozgása valahogy feszültségcsúcsokat okoz a potenciométerek V+ érintkezőjén, ami viszont megzavarja a középső csap leolvasását.

Itt tettem az első kísérletet a zaj csökkentésére. Ismét kinyitottam minden szervót, és hozzáadtam egy vezetéket a potenciométer V+ csapjából. Több analóg bemenetre volt szükségem az olvasáshoz, mint az Arduino Uno -nak, ezért ezen a ponton át is költöztem egy Arduino Mega -ra. A kódomban a szögbemenetet a középső csap feszültségének analóg leolvasásából a középső csap feszültsége és a V+ csap feszültsége közötti arányra változtattam. Reméltem, hogy ha feszültségcsúcs van a csapokon, akkor az arány megszűnik.

Mindent összeraktam és teszteltem, de a tüskék még mindig előfordultak. Amit ezen a ponton tennem kellett volna, az a talajam vizsgálata. Ehelyett a következő ötletem az volt, hogy a potenciométereket teljesen külön tápegységre helyezzem. Lecsatlakoztattam a V+ vezetékeket az Arduino analóg bemeneteiről, és csatlakoztattam őket egy külön tápegységhez. Korábban már tapintottam a csapokat, így tudtam, hogy milyen feszültségen kell őket táplálni. Mindegyik szervóban lekapcsoltam a vezérlőkártya és a V+ csap közötti kapcsolatot is. Összeszedtem mindent, visszaállítottam a szögbeviteli kódot az előzőhöz, majd teszteltem. A várakozásoknak megfelelően nem volt több feszültségcsúcs a bemeneti csapon. Volt azonban egy új probléma - a potenciométerek külön tápegységre helyezése teljesen összezavarta a szervók belső vezérlőhurkait. Annak ellenére, hogy a V+ csapok ugyanazt a feszültséget kapták, mint korábban, a szervók mozgása szabálytalan és instabil volt.

Nem értettem, miért történik ez, ezért végül a szervókban vizsgáltam a földi kapcsolatomat. Átlagos feszültségcsökkenés körülbelül 0,3 volt volt a talajon, és még magasabbra nőtt, amikor a szervók áramot húztak. Világos volt számomra akkor, hogy ezeket a csapokat már nem lehet "őröltnek" tekinteni, és inkább "referencia" csapként lehet leírni őket. A szervók vezérlőpanelei bizonyára a potenciométer középső csapjának feszültségét mérték a V+ és a referenciacsapok feszültségéhez képest. A potenciométerek külön tápellátása elrontotta ezt a relatív mérést, mert most ahelyett, hogy az összes tüskén feszültségugrás történt volna, ez csak a referenciacsapon történt.

Mentorom, Dr. Malloch segített mindezek hibakeresésében, és azt javasolta, hogy mérjem meg a középső csap feszültségét a többi csaphoz képest. Ezt tettem a harmadik és egyben utolsó kísérletem során, hogy csökkentsem a szögbemenet zaját. Kinyitottam minden szervót, visszacsatoltam a lecsavart vezetéket, és hozzáadtam egy harmadik vezetéket a potenciométer referenciacsapjából. A kódomban a szögbevitelt a következő kifejezéssel egyenértékűvé tettem: (középső tüske - referenciacsap) / (V+csap - referenciatű). Teszteltem, és sikeresen csökkentette a feszültségcsúcsok hatásait. Ezen kívül EWMA szűrőt is tettem erre a bemenetre. Ez a feldolgozott jel és az eredeti jel a fenti képen látható.

4. lépés: A dolgok becsomagolása

A dolgok becsomagolása
A dolgok becsomagolása

Mivel a zajproblémát legjobb tudásom szerint megoldottam, nekiláttam a tervezés végső részeinek rögzítéséhez és elkészítéséhez. A kar túl nagy súlyt fektetett az alap szervójára, ezért készítettem egy új alapot, amely egy nagy csapágy segítségével támogatja a kar súlyát. A fogót is kinyomtattam, és kicsit csiszoltam rajta, hogy működjön.

Nagyon örülök a végeredménynek. Az intuitív mozgástervezés következetesen működik, a mozgás pedig mindent figyelembe véve egyenletes és pontos. Ha valaki más szeretné elkészíteni ezt a projektet, először határozottan bátorítanám, hogy készítsen egy egyszerűbb verziót. Utólag nagyon naiv volt hobbi szervomotorok segítségével ilyesmit készíteni, és ezt bizonyítja a működési nehézségem is. Csodának tartom, hogy a kar úgy működik, ahogy. Továbbra is szeretnék egy olyan robotkarot készíteni, amely képes a számítógéppel kapcsolódni, bonyolultabb programokat futtatni és nagyobb pontossággal mozogni, ezért a következő projektem során ezt fogom tenni. Kiváló minőségű digitális robotikai szervókat fogok használni, és remélhetőleg ezáltal elkerülhetem a projekt során felmerült problémákat.

CAD dokumentum:

cad.onshape.com/documents/818ea878dda7ca2f…

Ajánlott: