Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Windows 8
  • DIY: Clearwalker - robot merimangë akrilik i bërë në shtëpi. Pasqyrë e kornizave të gatshme për krijimin e robotëve në Arduino

DIY: Clearwalker - robot merimangë akrilik i bërë në shtëpi. Pasqyrë e kornizave të gatshme për krijimin e robotëve në Arduino

Një nga opsionet për krijimin e robotëve të bazuar në Arduino dhe bordet e tjera kompjuterike është të përdorni kuti të gatshme dhe të zhvilloni mbushjen tuaj. Një numër i mjaftueshëm i kornizave të tilla mund të gjenden në treg, të cilat përfshijnë edhe një bazë mekanike (rrota, binar, mentesha, etj.). Pasi të keni marrë trupin e përfunduar, mund të përqendroheni plotësisht në programimin e robotit. Ne ofrojmë një përmbledhje të vogël të robotëve të tillë me skelet.

Pse nevojiten trupat dhe skeletet e robotëve?

Krijimi i një roboti është një proces me shumë faza, duke përfshirë projektimin, montimin dhe programimin. Njohuritë e robotikës kufizohen në fizikë, mekanikë dhe algoritmizim. Robotistët e rinj aspirantë gravitojnë ndryshe drejt secilës prej fazave të krijimit të robotëve. Disa njerëz e kanë më të lehtë të krijojnë pjesët mekanike të një roboti, por programimi është i vështirë. Dikush, përkundrazi, programon lehtësisht logjikën e sjelljes së robotit, por procesi i krijimit të një modeli mekanik është i vështirë.

Ata që e kanë të vështirë të projektojnë mekanikë dhe janë më të ndezur nga procesi i përzgjedhjes së sensorëve të ndryshëm dhe dizajnimit të logjikës së robotëve, duhet t'u kushtojnë vëmendje bazave të ndryshme mekanike për ndërtimin e robotëve. Ato shiten pa elektronikë, në fakt, ky është trupi ose skeleti i robotit të ardhshëm. Mbetet vetëm për të shtuar një "tru" atyre (për shembull, një tarifë Arduino), nervat dhe muskujt (sensorët dhe aktivizuesit) dhe i sjellin në jetë (program). Ndonjëherë raste të tilla përmbajnë edhe motorë ose sensorë.

Platformat në 4 rrota - baza e makinës Arduino

Një platformë mbi rrota është deri tani baza më e thjeshtë dhe më efektive për ndërtimin e një roboti. Në shitje ka shumë boshllëqe të ndryshme të këtij lloji. Disa prej tyre:

Platforma për krijimin e një roboti në Arduino, bërë nga aliazh alumini. Platforma është e pajisur me 4 rrota, secila prej të cilave është e lidhur me një motor të veçantë. Motorët janë të përfshirë. Platforma mund të përdoret si bazë e një makine ose çdo roboti tjetër drejtues. Madhësia e platformës është rreth 20 me 20 cm. Përfshihen edhe vida, dado dhe tela për lidhjen e motorëve.

Një bazë e tillë për robotin tuaj të ardhshëm mund të blihet për rreth 75 dollarë në dyqanin online DX.com.

Nje me shume platformë me katër rrota për krijimin e një roboti të bazuar në Arduino tërheq vëmendjen me rrotat e saj. Ata kanë një diametër prej 80 mm, një gjerësi prej 60 mm, duken elegante dhe të besueshme. Kjo platformë ka një bazë akrilike 1,5 mm të trashë. Trupi ka stabilitet të mirë dhe është i përshtatshëm për ndërtimin e një roboti që lëviz shpejt. aliexpress e shet këtë robot me skelet për 60 dollarë. Kompleti është i ngjashëm me atë të mëparshëm - rrotat, motorët, telat dhe vidhat janë tashmë në komplet.

Shasi me dy dhe tre rrota për ndërtimin e robotëve në këmbë

Tjetra platformë me tre rrota për krijimin e një roboti të bazuar në Arduino motorët janë të lidhur vetëm me dy rrota dhe kjo ul koston. Në dyqanin online DX.com, një shasi e tillë shitet për 20,5 dollarë. Baza është bërë nga akrilik i pastër. Përfshin 2 motorë, vida, dado, tela, paketë baterie për 4 bateri AA. Dimensionet rreth 20 me 10 cm.

Platforma me tri biçikleta për robotin Arduino. Foto dx.com

Baza me dy rrota për robotin. Foto dx.com

Shasia e gjurmuar për tanke në Arduino

Shasia e gjurmuar më të qëndrueshme se ato me rrota. Plus, në këtë dizajn, mjaftojnë vetëm dy motorë për të vënë në lëvizje sistemin, që do të thotë se çmimi do të jetë më i ulët se ai i platformave me katër rrota. Modeli më i zakonshëm në pista është, natyrisht, një tank, por një bazë e tillë mund të bëhet një platformë për një robot të çdo forme.

Shasi Caterpillar për të krijuar një tank robotbazuar në Arduino. Përfshin 2 motorë, makinë vemje, vida, dado. Dimensionet e kësaj shasie janë 18.7 cm x 11.5 cm x 4.3 cm Në dyqanin online të DX.com kjo shasi e gjurmuar kushton 42 dollarë.

Shasia Caterpillar për robotin. Foto dx.com

Mbyllja e robotit Arduino Spider

Merimanga- një formë mjaft e popullarizuar e robotëve, kështu që në shitje ka edhe kuti të tilla skeletore.Dizajni i merimangës, ndryshe nga robotët në rrota, parashikon lëvizje në çdo drejtim.

Së pari Merimanga dhe në rishikimin tonë kushton rreth 100 dollarë në Aliexpress.

Strehimi për robotin merimangë. Foto: aliexpress.com

Kjo këllëf nuk vjen me elektronikë, servo, duhet të blihen veçmas. Rekomandohet të përdorni servo MG 995 me këtë model merimangë. Është qesharake që një makinë e tillë në faqen e internetit Aliexpress mund të blihet si për 33 dollarë ashtu edhe për 5 dollarë (megjithëse në këtë rast do t'ju duhet të blini 10 copë). Makina është e nevojshme nën çdo puthë.

Përveç kësaj, për të kontrolluar një numër të madh të servove, kërkohet një servo kontrollues me shumë kanale. Kostoja totale e merimangës mund të jetë mjaft e lartë.

Një tjetër skelet me gjashtë këmbë robot merimangë apo edhe robot kacabu tërhoqi vëmendjen time me çmimin e tij prej 42,5 dollarë. Një robot në gjashtë putra metalike duhet të dalë i qëndrueshëm, megjithëse jo shumë i manovrueshëm. Skeleti i këtij kacabu është 24 cm i gjatë, 18 cm i gjerë dhe 12 cm i lartë.Këtë kacabu robot të zi mund ta blini në faqen e internetit Aliexpress.

Strehimi për robotin kacabu. Foto: aliexpress.com

Korniza robotike humanoide

Modelja duket mjaft interesante robot humanoid kushton rreth 105 dollarë. Këtu nuk ka as elektronikë, por ka shumë vend për kreativitet. Krijimi i një roboti humanoid dhe programimi i një ecjeje njerëzore nuk është një detyrë e lehtë dhe interesante. Ju mund të filloni të provoni vetë në krijimin e një roboti humanoid duke blerë një skelet të tillë në faqen e internetit të dyqanit online Aliexpress. Nëse besoni në përshkrimin e prodhuesit, atëherë në bazë të kësaj karska mund të bëni edhe një robot vallëzimi.

Një predhë për një robot humanoid. Foto: aliexpress.com

Një robot i gatshëm, një kuti e gatshme apo krijimi i një roboti Arduino nga e para?

Robotët e kompletuar të gatshëm bazuar në tabelën Arduinoi përshtatshëm për ata që nuk tërhiqen veçanërisht nga qarqet elektrike. Duke blerë një model roboti pune, d.m.th. Lodra e përfunduar në të vërtetë e teknologjisë së lartë, ju mund të zgjoni interesin për vetë-dizajn dhe robotikë. Hapja e platformës Arduino ju lejon të bëni lodra të reja nga të njëjtët përbërës. Çmimi i robotëve të tillë luhatet rreth 100 dollarë, që në përgjithësi është relativisht i vogël.

Trupat e përfunduara, të cilin e shqyrtuam në këtë përmbledhje, sugjerojnë më shumë imagjinatë dhe një larmi më të madhe robotësh. Nuk kufizoheni në tabelat Arduino, mund të përdorni edhe "trurë" të tjerë. Avantazhi i kësaj metode ndaj krijimit të një roboti nga e para është se nuk mund të shpërqendroheni nga kërkimi i materialeve dhe zhvillimi i strukturave. Një robot i tillë duket mjaft serioz dhe duket si një industrial.

Më interesante, por edhe më e vështira, për mendimin tonë, është krijimi plotësisht i pavarur i një roboti. Zhvillimi i një trupi nga materiale të improvizuara, përshtatja e makinave lodrash për këto qëllime dhe pajisje të tjera të vjetëruara mund të bëhen jo më pak emocionuese sesa programimi i sjelljes së një roboti. Dhe rezultati do të jetë krejtësisht unik.

Nëse sapo keni filluar të mësoni robotikën Arduino, ju rekomandojmë kursin tonë.

Të gjitha çmimet janë me datë 22.05.14.

Një robot merimangë me katër këmbë u krijua për të demonstruar funksionimin e servove të kontrolluara nga një kontrollues Arduino (për një rreth robotik).

Roboti ka dy mënyra:

  • autonom - roboti ecën përpara, kur zbulohet një pengesë (përdoret një sensor tejzanor), ai kthehet dhe vazhdon;
  • kontroll i jashtëm me telekomandë IR.

Ne përdorëm servo Turnigy TGY-9025MG me një kuti ingranazhesh metalike.

Kapakët e fishekëve me bojë të lidhur me polikaprolakton u përdorën si këmbë robotësh.

Kutia ishte bërë me material paketimi për kompjuterë. Servo makinat kërkojnë një furnizim të veçantë me energji elektrike. Bateria Li-po Turnigy 2S 1600 mAh përdoret si burim energjie.

Këtu është një pamje e sipërme dhe e poshtme e robotit gjatë montimit.

Për të kontrolluar një servo, Arduino ka një bibliotekë standarde Servo. Në bordet jo-Mega, përdorimi i bibliotekës çaktivizon aftësinë për të përdorur analogWrite() (PWM) në kunjat 9 dhe 10 (nëse servot janë të lidhur me këto kunja apo jo). Në bordet Mega, deri në 12 servo mund të përdoren pa ndikuar në funksionalitetin PWM, por përdorimi i 12 deri në 23 servo do të çaktivizojë PWM në kunjat 11 dhe 12. Servo ka 3 tela: fuqinë, tokëzimin dhe sinjalin. Fuqia - tela e kuqe. Teli i zi (ose kafe) - toka është e lidhur me kutinë GND të Arduino, teli i sinjalit (portokalli / i verdhë / i bardhë) është i lidhur me kutinë dixhitale të kontrolluesit Arduino. Ne do të përdorim kunjat Arduino 5,6,7,8.

Tensioni i furnizuar nga bateria është 7.4 - 8.4 V. për të fuqizuar servot, kërkohet një tension prej 4.8 - 6.0 V, ne do të përdorim një rregullator të tensionit 5V të montuar në çipin L7805. Një mikroqark mbinxehej vazhdimisht, problemi u zgjidh duke instaluar dy mikroqarqe L7805 paralelisht.

Për të zbuluar pengesat, ne do të përdorim sensorin tejzanor HC-SR04, i cili ju lejon të përcaktoni distancën nga një objekt në intervalin nga 2 deri në 500 cm me një saktësi prej 0,3 cm. Nëse distanca nga pengesa është më pak se 10 cm , roboti bën një kthesë dhe ecën më tej përpara.

Telekomanda lg përdoret si telekomandë, marrësi i sinjalit IR është TSOP31238 (1-GND, 2 - + 5V, 3-OUT).

Skema elektrike

Dhe i gjithë roboti është montuar (bordi Arduino mundësohet nga një bateri Kron).

Le të fillojmë të shkruajmë një skicë

Biblioteka Arduino Servo përdoret për të kontrolluar servo. Ne duhet të zbatojmë një sërë lëvizjesh servo për të lëvizur spiderbotin përpara, prapa, të kthehet në drejtim të akrepave të orës dhe të kthehet në drejtim të kundërt. Për më tepër, është e nevojshme të zbatohen funksionet e ndalimit të robotit, dhe për të kursyer energji, ne do të ofrojmë një modalitet gjumi (kur servot janë në modalitetin e shkëputjes) dhe zgjimin (transferimi i servove në modalitetin e bashkëngjitjes) . Prandaj, çdo lëvizje e robotit përbëhet nga disa hapa.

Për shembull, ecja përpara përbëhet nga hapat e mëposhtëm:

  1. këmba e majtë e përparme përpara;
  2. këmba e përparme e djathtë përpara;
  3. këmba e pasme e majtë përpara;
  4. këmba e pasme e djathtë përpara;
  5. katër këmbët së bashku mbrapsht (të cilat do të tërheqin trupin e merimangës).

Të dhënat për këndin e rrotullimit të çdo servo në çdo hap për çdo lëvizje të robotit merimangë ruhen në një grup tredimensional arr_pos.

Int arr_pos=( ( // përpara (90,90,90,90),(45,90,90,90),(45,135,90,90), (45,135,45,90),(45,135,45,135), (135,45,135,45) ), ( // mbrapa (90,90,90,90),(90,90,90,45),(90,90,135,45), (90,45,135,45),( 135,45,135,45),(45,135,45,135) ), ( // rrethi_majtas (90,90,90,90),(0,90,90,90),(0,0,90,90), (0 ,0,0,90),(0,0,0,0),(180,180,180,180) ), ( // rrethi_djathtas (90,90,90,90),(180,90,90,90),(180,180, 90,90), (180,180,180,90), (180,180,180,180), (0,0,0,0) ) ); int post_stop=((90,90,90,90));

Rutina e kursit (varianti int) zbaton lëvizjet servo për secilin hap të lëvizjeve të mëposhtme të Spiderbot: përpara, prapa, kthesë në drejtim të akrepave të orës dhe kthesë në drejtim të kundërt.

Kurs i pavlefshëm(variant int) ( int i=0; për(i=1;i<6;i++) { if(arr_pos[i]!=arr_pos) {myservo11.write(arr_pos[i]);} if(arr_pos[i]!=arr_pos) {myservo12.write(arr_pos[i]);} if(arr_pos[i]!=arr_pos) {myservo13.write(arr_pos[i]);} if(arr_pos[i]!=arr_pos) {myservo14.write(arr_pos[i]);} delay(200); } }

Ekziston një procedurë go_hor_all() për të ndaluar, për të fjetur dhe për të zgjuar spiderbot.

Void go_hor_all() ( myservo11.write(pos_stop); myservo12.write(pos_stop); myservo13.write(pos_stop); myservo14.write(pos_stop); vonesë(500); )

Ne zbatojmë telekomandë të thjeshtë IR. Ne zgjedhim 7 çelësa, futim të dhënat për kodet në skicë në formën e konstanteve. Dhe në ciklin loop() zbatojmë logjikën për zgjedhjen e lëvizjeve të robotit merimangë kur shtypen tastet e telekomandës IR. Marrësi i kodit get_ir_kod() thirret në ndërprerjen CHANGE në hyrjen 2. Përdoret biblioteka Arduino IRremote.

Le të shtojmë një modalitet offline në modalitetin e kontrollit të robotit nga telekomanda IR. Në modalitetin autonom, roboti do të ecë përpara, kur të arrijë një pengesë, roboti do të bëjë një kthesë dhe do të ecë përsëri përpara. Sensori tejzanor HC-SR04 ju lejon të përcaktoni distancën nga një objekt në intervalin nga 2 deri në 500 cm me një saktësi prej 0,3 cm. Sensori lëshon një impuls të shkurtër ultrasonik (në kohën 0), i cili reflektohet nga objekti dhe marrë nga sensori. Distanca llogaritet nga koha në jehonë dhe shpejtësia e zërit në ajër. Nëse distanca nga pengesa është më pak se 10 cm, roboti bën një kthesë dhe lëviz më tej përpara. Kalimi nga modaliteti i kontrollit IR në modalitetin offline bëhet duke shtypur butonat "e verdhë" dhe "blu".

Për të punuar me sensorin HC-SR04, do të përdorim bibliotekën Arduino Ultrasonic. Konstruktori ultrasonik merr dy parametra - numrat e kunjave me të cilat lidhen kunjat Trig dhe Echo:

#përfshini "Ultrasonic.h" // trig -12, echo - 13 Ultrasonik (12, 13);

Rezulton ky kod

( SLEEP 55 // e kuqe #define AWAKE 37 // ok #define EXT 50 // e verdhë #define AUTO 52 // blu... .... ..... void loop() ( vonesë(1000); nëse( ext==0) ( float dist_cm = ultrasonic.Ranging(CM); Serial.print("dist_cm=");Serial.println(dist_cm); if(dist_cm<10.0) ir_kod=CIRCLE_LEFT; else ir_kod=FORWARD; } if(ir_kod!=0) { Serial.print("ir_kod=");Serial.println(ir_kod); switch(ir_kod) { case FORWARD: // вперед course(1); Serial.print("forward\n"); break; case BACK: // назад course(2); Serial.print("back\n"); break; case CIRCLE_LEFT: // вращение влево course(3); Serial.print("circle_left\n"); break; case CIRCLE_RIGHT: // вращение вправо Serial.print("circle_right\n"); course(4); break; case STOP: // остановка ir_kod=0; go_hor_all(); Serial.print("pause\n"); break; case SLEEP: // засыпание ir_kod=0; go_hor_all(); myservo11.detach();myservo12.detach(); myservo13.detach();myservo14.detach(); digitalWrite(13,LOW); Serial.print("sleep\n"); break; case AWAKE: // пробуждение ir_kod=0; myservo11.attach(5);myservo12.attach(6); myservo13.attach(7);myservo14.attach(8); digitalWrite(13,HIGH); go_hor_all(); Serial.print("awake\n"); break; case AUTO: // режим автономный //ir_kod=FORWARD; ext=0; myservo11.attach(5);myservo12.attach(6); myservo13.attach(7);myservo14.attach(8); Serial.print("auto\n"); break; default: break; } } } // получить код переданный с ИК пульта void get_ir_kod() { detachInterrupt(0); // отключить прерывание 0 if (irrecv.decode(&results)) { //Serial.println(results.value); if (results.value >0 && rezultatet.vlera< 0xFFFFFFFF) { ir_dt = results.value; if(ir_dt==EXT && ext==0) {ir_kod = SLEEP;ext=1;} else if(ext==1) { if(ir_dt==FORWARD || ir_dt==BACK || ir_dt==CIRCLE_LEFT || ir_dt==CIRCLE_RIGHT || ir_dt==STOP || ir_dt==SLEEP || ir_dt==AWAKE || ir_dt==AUTO) ir_kod = ir_dt; } else ; } irrecv.resume(); } attachInterrupt(0, get_ir_kod, CHANGE); }

Arkivi me skicën dhe bibliotekat e Ultrasonic dhe IRremote mund të shkarkohen më poshtë

Lista e lidhjeve me artikujt dhe udhëzimet nevojiten për të mbledhur dhe vendosur robotin merimangë me gjashtë këmbë Hexapod RKP-RCS-2013B-KIT

Ky imazh (shih Fig. 1) tregon një shembull të një roboti merimangë me gjashtë këmbë të montuar me pajisje shtesë të instaluara në tabelën e sipërme në formën e një moduli Bluetooth për kontroll të jashtëm pa tel.

RKP-RCS-2013B-KIT Kompleti i montimit të shasisë së robotit merimangë me gjashtë këmbë është një platformë e lëvizshme për një robot merimangë me gjashtë këmbë, me aftësi dhe manovrim të lartë për të lëvizur nga vendi. Shasia është projektuar dhe e destinuar për projekte robotike, duke mësuar për të dizajnuar sisteme të ndryshme mekatronike dhe programim, si dhe për një sërë hobish të projektimit. Platforma e lëvizshme e robotit merimangë me gjashtë këmbë (RKP-RCS-2013B-KIT) furnizohet me një platformë të krijuar për të instaluar sensorë dhe sensorë të ndryshëm, si dhe bordet e kontrollit të robotëve dhe sistemet e energjisë.
Hexapod RKP-RCS-2013B-KIT është një komplet në formën e një konstruktori për vetë-montim të një roboti me gjashtë këmbë në formë merimange. Të gjitha pjesët e kornizës mbështetëse të trupit dhe gjashtë gjymtyrët e robotit merimangë janë prej alumini të qëndrueshëm dhe të lehtë. Detajet strukturore të shasisë së robotit merimangë me gjashtë këmbë (Hexapod) i kanë tashmë të gjithë elementët strukturorë të shpuar dhe të bluar.

Kompleti për vetë-montim të Hexapod përfshin të gjithë përbërësit e nevojshëm për montimin e drejtpërdrejtë të pjesës mekanike të robotit merimangë: tufa, vida, lidhëse, një bllok ndërprerës, si dhe një njësi mbrojtëse të fuqisë diodë për kontrolluesin e servo.

Hexapod - një robot merimangë me gjashtë këmbë mund të kontrollohet duke përdorur një levë me valë nga PS2 ose PS3 nëpërmjet një moduli Bluetooth (nuk përfshihet në paketë, por blihet veçmas) ose duke përdorur një kontrollues të programueshëm Arduino me një lidhës USB. Nëpërmjet një aplikacioni të posaçëm kompjuterik për programimin e servokontrollerit, mund të rregulloni komandat e servove të instaluara në këmbët e robotit me rrëshqitës dhe të ndryshoni shpejtësinë e përgjigjes së secilit prej tyre.

Pllaka e Servo Controller USB me 32 kanale (RKP-SCB-32C) shitet veçmas.

Servo kontrolluesi për robotin merimangë Arduino RKP-SCB-32C ka aftësinë për të lidhur komponentë shtesë për Arduino. ()

Për të lëvizur të gjashtë këmbët, roboti merimangë përdor 18 mikro servo, të cilat gjithashtu blihen veçmas. Për shembull, një makinë drejtuese e klasës nën-mikro 9 Gram TowerPro SG90 Micro Servo (TPSG90S) ose e ngjashme për sa i përket parametrave dhe dimensioneve.

Kompleti RKP-RCS-2013B-KIT për vetë-montim të robotit merimangë përfshin:
- Një grup pjesësh alumini të zeza për të montuar trupin e robotit merimangë.
- Një grup dorezash mekanike ("përtyp" i robotit merimangë). Instaluar opsionalisht. Për funksionimin e kapëseve, është e nevojshme të instaloni 2 makineri drejtuese shtesë.
- Një grup bulonash, vidhash, dadosh, rondele, adaptorë, tunxh dhe rafte.
- Komponentët elektronikë për montim: tela për furnizimin me energji të çelësit, një urë diodike për fuqizimin e servo kontrolluesit dhe tabelave të kontrollit, një ndërprerës për furnizimin me energji në njësinë e kontrollit.

Për montimin dhe konfigurimin përfundimtar të robotit merimangë, kërkohen komponentët e mëposhtëm (të blerë veçmas):
- 18 servo të klasës nën mikro
- Servokontrollues USB për 32 servo disqe RKP-SCB-32C
- Marrës me valë për kontrollin e komandave të marra nga operatori (nëse është e nevojshme)
- PS2 Wireless Gamepad V2.0 për Arduino (nëse nevojitet)
- Bateria Li-Po (2S) 7.4V
-

Ka shumë për të bërë përpara se të arrijmë te kjo foto:

Duke lënë mënjanë tregimet se si më lindi saktësisht ideja për të ndërtuar një heksapod (kishte mijëra video në YouTube), do të shkoj direkt në procesin e zgjedhjes së pjesëve. Ishte janar 2012. E kuptova menjëherë se çfarë doja nga roboti im dhe çfarë jo. Desha:

Çdo këmbë duhet të ketë 3 shkallë lirie - 3dof (3 dimensione lirie). Për shkak se versioni më i thjeshtë i 2dof nuk jep një ndjenjë të tillë të insekteve, dhe 4dof është i panevojshëm, 3dof tashmë ju lejon të lëvizni lirshëm majën e këmbës në hapësirën 3d;
- 6 këmbë; përsëri, kjo nuk është më 4 (atëherë roboti kërcen në mënyrë të vështirë), por gjithashtu jo 8, si te merimangat, dhe tashmë i tepërt;
- i vogël;
- i lirë;
- tabelat dhe lidhjet minimale;

Postimi është i madh.

E para, natyrisht, ishte zgjedhja e një motherboard për thërrimet. Unë arrita të lexoja shumë të mira dhe të këqija deri në atë kohë për Arduino. Por ishte tek ai që ai dukej si opsioni kryesor. Ngjitja e kontrollorëve vetë - nuk kishte kohë, por marrja e bordeve më të avancuara me CPU ARM, për shembull, është e shtrenjtë, dhe të kuptoni se si t'i programoni ato, si të punoni me daljet PWM, etj. Dhe arduina: Unë hapa IDE-në, hodha kodin, shtypa "upload" - dhe përshëndetje, ai tashmë po ju pulson. Bukuria! ;)

Fillimisht fillova të shikoja arduino mega dhe klonet, si numri i daljeve PWM që mund të përdoren për të kontrolluar servot që ata kishin mjaft. Më lejoni t'ju kujtoj se për një heksapod 3dof ju nevojiten 3 * 6 = 18 servo, dhe kanale të veçanta për kontrollin e tyre. Por më pas gjeta një Yazz të vërtetë midis mega arduino, kjo është një tabelë nga Dagu, emri i të cilit është Red Back Spider Controller. Këtu është në ebay.

Ai ofron të gjitha daljet e tij si 3 kunja të gatshme (tokë, fuqi, sinjal) dhe shkëputje të energjisë. Furnizimi me energji i vetë komanduesit është i stabilizuar dhe shkon tek lidhësit e motorit siç është (UPD: jo siç është, por edhe i stabilizuar 5 volt. Dhe me sa duket është shkëputur nga furnizimi me energji i komanduesit, sepse 18 servo që funksionojnë njëkohësisht nuk ndërhyjnë në funksionimin e kontrolluesit). Kjo ju lejon të aplikoni thjesht 7-30 volt fuqi të mjaftueshme në terminalin e energjisë (furnizimi me energji elektrike nga eee pc 901 në 12V dhe 3A - doli të jetë e mjaftueshme për të gumëzhitur me të gjitha 18 servo) dhe të mos mashtroni me furnizim të veçantë me energji elektrike për logjikën dhe dviglos. Gjithashtu do ta bëjë të lehtë vendosjen e gjithë këtij përbindëshi në një paketë me bateri Li-Po 7,4 volt në të ardhmen. Dhe me gjithë këtë, nga pikëpamja e softuerit, kjo është një mega e zakonshme arduino, e pajtueshme me softuerët dhe libs, dhe madje edhe harduerin (përveç mburojave që janë instaluar drejtpërdrejt në mega origjinale - ato nuk do të rrotullohen). Vërtetë, çmimi është edhe më i lartë se edhe mega origjinale, por të gjitha pluset e tjera e tejkalonin këtë.

Më pas janë servot. Ka shumë mikro servo të ndryshme në ebay. Mora më të fuqishmin nga më të voglat dhe më të lirat, me peshë 9 gram, me kuti ingranazhesh plastike. Nëse merrni shumë ku dërgohen në pako, rezulton më lirë. Mora 3 pako me 6 mesa duket dhe doli me pak se 2 dollar cope. Duke parë përpara, do të them se më vjen keq që nuk shpenzova më shumë dhe nuk mora servo me ingranazhe metalike dhe kushineta topash. Këto plastike rezultuan të kenë reagime mjaft të dukshme, dhe një kërcitje karakteristike me përpjekje të tepruar kur marshet rrëshqasin. Për shkak të reagimeve të kundërta, kinematika është mjaft e vështirë për t'u vendosur me saktësi (po, kjo doli të ishte gjëja më e vështirë).

Kjo është në fakt gjithçka që kam porositur, me dorëzim doli në rreth 100 dollarë. Bateritë dhe transmetuesit / marrësit për kontroll dhe kontroll radio - janë lënë për më vonë. Sepse unë kam një makinë të kontrolluar me radio dhe nuk jam i interesuar, por ajo që më interesonte vërtet ishin këmbët! Video e heksapodëve që ecin pa probleme në YouTube - i magjepsur, e shikoja, e rishikoja dhe sa herë më rridhnin lot në faqe dhe më mbytej me zë të lartë: "Dua!". Unë nuk dua të porosis një gjë të tillë të gatshme, por dua ta bëj vetë diçka të tillë!

Në pritje të porosisë, lexova sesi njerëzit e ndritur sjellin në jetë krijimet e tyre. Sigurisht, kinematika e anasjelltë u shfaq menjëherë (përkthim). Nëse themi thjesht dhe menjëherë për "gjymtyrët" rrotulluese, atëherë kinematika e drejtpërdrejtë është kur futen këndet e menteshave, dhe në dalje kemi një model të gjymtyrës në hapësirë ​​dhe koordinatat e pikës ekstreme të gjymtyrës. . Kinematika e anasjelltë - padyshim funksionon anasjelltas - hyrja janë koordinatat e pikës ekstreme të gjymtyrëve, ku duhet të arrijmë, dhe në dalje marrim këndet me të cilat varet duhet të rrotullohen për ta bërë këtë. . Servos thjesht marrin pozicionin këndor në të cilin duhet të kthehen si hyrje (një tel sinjali secili, i koduar PWM / PWM).

Filloi të shkruante. Fillova me atë që lexova: mendoni për zbatimin e IC sipas metodës së përshkruar atje. Por shpejt erdhi ndjenja se për rastin tim është tepër e ndërlikuar. Për më tepër, është edhe e rëndë në zbatim dhe nga ana llogaritëse shumë e ndërlikuar - llogaritja është përsëritëse. Dhe unë kam 6 këmbë, për secilën prej të cilave ju duhet të numëroni IR, dhe vetëm 16 MHz nuk është arkitektura më e shpejtë AVR. Por vetëm 3 shkallë lirie. Dhe është e lehtë të merret me mend se një pikë arbitrare në "zonën e arritjes" mund të arrihet vetëm në një mënyrë. Vendimi tashmë është pjekur në kokën time.

Por më pas erdhi shkurti dhe parcelat - njëra nga Kina, tjetra nga MB. Para së gjithash, natyrisht, sapo luajta me tabelën arduino - ndeza LED-in dhe u futa në altoparlantin e lidhur atje. Më pas ai filloi të zbatonte vetë IC-në, tashmë në harduer. Pse ndërtova një këmbë prototip nga materiale të improvizuara (plastike mjaft e butë, e cila është e lehtë për t'u prerë me gërshërë, vida dhe hundë - të gjitha nga grupe servo). E rregullova këtë këmbë të terminatorit direkt në tabelën arduino. Ju mund të konsideroni se si bëhen nyjet me një buxhet.

E admirova këtë rast dhe ëndërroja që nëse në të ardhmen bashkoja një terminator në bazë të këtij roboti, i cili do t'i shpallte luftë njerëzimit, atëherë John Connor dhe Schwarzenegger do të ktheheshin tek unë këtu në të kaluarën dhe do ta hiqnin këtë prototip. dhe e shkrijmë në Orodruin. Por askush nuk u kthye, asgjë nuk u hoq dhe vazhdova me qetësi.

Doli që nuk ka nevojë të kesh frikë fare nga IR, në rastin tim gjithçka zbriti në gjeometri-trigonometri banale. Për ta bërë më të lehtë referimin tek nyjet, iu drejtova Wikipedia-s dhe lexova për insektet. Ata kanë emra të veçantë për elementët e gjymtyrëve:

Edhe rusishtja ka emrat e saj dhe shumë interesantë për këtë, por "pellgu", "rrotullues", "shin", etj., duke qenë në kod, nuk më linte të bija në gjumë. Prandaj i lashë emrat Coxa, Femur, Tibia për 3 gjymtyrë dhe servot përkatëse. Ju mund të shihni nga prototipi i këmbës më lart se unë nuk kam as një pjesë të veçantë për coxa. Janë vetëm dy servo të mbajtura së bashku me shirita gome. Femuri - zbatohet me një rrip plastik, në të cilin janë ngjitur leva servo në të dy anët. Kështu, servo e fundit e mbetur është fillimi i tibisë, për të zgjatur të cilën një pjesë tjetër e plastikës vidhohet në të.

Hapa redaktorin, pa vonesë krijova skedarin Leg.h dhe në të klasën Leg. Epo, një grumbull turbullirash ndihmëse.) Le të ketë një pikë A (sëpatë, ay, az) në hapësirë ​​që duhet të arrini. Pastaj pamja e sipërme duket si kjo:

Në figurë, unë tregova menjëherë mënyrën për të llogaritur këndin e parë - ky është këndi i rrotullimit të servo që kontrollon Coxa, i cili rrotullon të gjithë gjymtyrën në rrafshin horizontal. Në diagram, variablat e përdorur në kod janë shënuar menjëherë me të kuqe (jo të gjitha). Jo shumë matematikore, por e përshtatshme. Mund të shihet se këndi i interesit për ne është elementar. Së pari, primarCoxaAngle - është thjesht këndi (0;A) me boshtin X (i cili është i barabartë me këndin e pikës A në koordinatat polare). Por diagrami tregon se në të njëjtën kohë vetë këmba nuk është e shtrirë në këtë kënd. Arsyeja është se boshti i rrotullimit të koksës nuk është në "vijën e këmbës" - nuk di ta them saktë. Nuk është në rrafshin në të cilin rrotullohen 2 nyjet e tjera dhe ndodhet maja e këmbës, këtu. Kjo mund të kompensohet lehtësisht duke llogaritur CoxaAngle shtesë (si ta llogarisni atë - as që shqetësohem të ndalem, mirë, në fund të fundit, ata ishin në shkollë, apo jo?).

Në total, ne kemi pjesën e parë të kodit, këto janë pjesët e brendshme të metodës së arritjes (Point & dest):

Float hDist = sqrt(sqr(dest.x - _cStart.x) + sqr(dest.y - _cStart.y)); float shtesëCoxaAngle = hDist == 0.0 ? DONT_MOVE: asin (_cFemurOffset / hDist); float primarCoxaAngle = polarAngle(dest.x - _cStart.x, dest.y - _cStart.y, _thirdQuarterFix); float cKëndi = hDist == 0.0 ? DONT_MOVE: primarCoxaAngle - shtesëCoxaAngle - _cStartAngle;

Këtu dest është pika ku dëshironi të tërhiqni, _cStart është koordinatat e pikës së lidhjes (dhe qendra e rrotullimit) coxa, në hDist ne llogarisim distancën nga _cStart në destin në rrafshin horizontal. DONT_MOVE është vetëm një flamur, që do të thotë se coxa nuk ka nevojë të rrotullohet askund, por të lihet në pozicionin e tij aktual (sepse dest - diku pikërisht në boshtin e rrotullimit të koksës - është i rrallë, por ndodh). Këtu cAngle është tashmë këndi me të cilin servo do të duhet të devijojë nga këndi i tij fillestar (i cili është në mes të diapazonit të tij të funksionimit). Mund të shihet se _cStartAngle përdoret gjithashtu - ky është këndi në hapësirë ​​me të cilin servo rrotullohet si parazgjedhje, gjatë instalimit. Do t'ju tregoj për _thirdQuarterFix më vonë, nëse nuk e harroj.

Në këtë rast, detyra papritmas zbret në gjetjen e pikës së kryqëzimit të 2 rrathëve. Njëra është në pikën nga ku femuri ynë "rritet", e dyta është pika ku duhet të arrijmë (me koordinata tashmë lokale 2d). Rrezet e rrathëve janë përkatësisht gjatësia e femurit dhe tibisë. Nëse rrathët kryqëzohen, atëherë një nyje mund të vendoset në një nga 2 pikat. Ne zgjedhim gjithmonë pjesën e sipërme në mënyrë që "gjunjët" e përbindëshit të jenë të përkulur lart, jo poshtë. Nëse ato nuk kryqëzohen, atëherë ne nuk do të arrijmë pikën e synuar. Pak më shumë kod, kalimi në aeroplan është elementar, vetëm disa gracka merren ende në konsideratë dhe dokumentohen në komente, në mënyrë që të mos e bëj trurin tim më vonë, duke analizuar kodin. Për thjeshtësi, në këtë koordinatë lokale "rrafshi i këmbës", zgjodha origjinën e koordinatave nga ku rritet femuri:

// Kalimi në sistemin lokal të koordinatave të synuara Coxa-Femur // Vini re rastin kur hDist<= _cFemurOffset. This is for the blind zone. // We never can"t reach the point that is nearer to the _cStart then // femur offset (_fStartFarOffset) float localDestX = hDist <= _cFemurOffset ? - _fStartFarOffset: sqrt(sqr(hDist) - sqr(_cFemurOffset)) - _fStartFarOffset; float localDestY = dest.z - _fStartZOffset; // Check reachability float localDistSqr = sqr(localDestX) + sqr(localDestY); if (localDistSqr >sqr (_fLength + _tLength)) ( log ("Nuk mund të arrihet!"); kthej false; )

Tani localDestX dhe localDestY janë koordinatat e pikës së synuar. Mbetet vetëm për të gjetur pikën e kryqëzimit të rrathëve me qendrat në (0,0) dhe (localDestX, localDestY), dhe rrezet _fLength dhe _tLength (përkatësisht gjatësia e femurit dhe gjatësia e tibisë). Një student mund ta përballojë edhe këtë, por këtu kam bërë mjaft gabime, prandaj, për të provuar veten dhe në përgjithësi, në mënyrë që dikush të kontrollojë se çfarë formulash memece janë, kam lënë lidhje me burimet ku ky problem elementar gjeometrik shpjegohet qartë dhe kuptueshëm:

// Gjeni nyjën kur kryqëzohet rrethi (ekuacionet nga http://e-maxx.ru/algo/circles_intersection & http://e-maxx.ru/algo/circle_line_intersection) float A = -2 * localDestX; float B = -2 * localDestY; float C = sqr(lokalDestX) + sqr(lokalDestY) + sqr(_fGjatësia) - sqr(_tGjatësia); noton X0 = -A * C / (sqr(A) + sqr(B)); noton Y0 = -B * C / (sqr(A) + sqr(B)); float D = sqrt(sqr(_fGjatësia) - (sqr(C) / (sqr(A) + sqr(B)))); float mult = sqrt (sqr(D) / (sqr(A) + sqr(B))); float ax, ay, bx, by; sëpatë = X0 + B*mult; bx = X0 - B*mult; ay = Y0 - A*mult; nga = Y0 + A*mult; // Zgjidh zgjidhjen sipër si nyje float e përbashkëtLocalX = (ax > bx) ? sëpatë:bx; float jointLocalY = (ax > bx) ? ay:nga;

Kjo është e gjitha, ka mbetur edhe pak - për të llogaritur këndet aktuale për servot e femurit dhe tibisë duke përdorur koordinatat e marra:

Float primarFemurAngle = polarAngle (jointLocalX, jointLocalY, false); float fAngle = primarFemurAngle - _fStartAngle; float primarTibiaAngle = polarAngle(localDestX - jointLocalX, localDestY - jointLocalY, false); float tAngle = (primaryTibiaAngle - fAngle) - _tStartAngle;

Përsëri, koordinatat elementare - këndore dhe kaq. Shpresoj se emërtimi i variablave duhet të jetë i qartë deri tani, për shembull, _fStartAngle është këndi i fillimit të femurit, këndi në të cilin femuri është caktuar si parazgjedhje. Dhe rreshti i fundit i metodës së arritjes () (ai tha të shkojmë dhe tundi dorën):

Lëviz (cAngle, fAngle, tAngle);

Metoda e lëvizjes tashmë lëshon komanda drejtpërdrejt në servo. Në fakt, më vonë m'u desh të shtoja të gjitha llojet e gjërave për t'u mbrojtur nga këndet e këqija (të cilat servo nuk mund t'i drejtohet, por do të përpiqet), si dhe për këmbët e tjera që pasqyrohen dhe/ose drejtohen në drejtime të tjera. Por tani për tani, ne po punojmë vetëm me një puthje.
Këto pjesë janë tashmë kodi përfundimtar, i cili është larg të qenit i përsosur dhe me siguri mund të përmirësohet ndjeshëm. Por funksionon! Duke mos lënë asnjëherë kursin e shkollës gjeometri-trigonometri, ne kemi zbatuar një kinematikë inverse plotësisht funksionale për këmbët 3dof! Për më tepër, ne e marrim zgjidhjen menjëherë, në një përsëritje. Që kjo të funksiononte, këmba duhej të matej me kujdes dhe klasa të konfigurohej me të dhënat e marra. duke përfshirë ato këndore, të cilat janë më të vështirat për t'u matur në produktin e përfunduar. Ndoshta nëse dizajnoni në AutoCAD dhe bëni rendere të bukura, do të ishte më e lehtë me matjen e këndeve, por nuk kisha as kohë dhe as dëshirë për t'u përfshirë në këtë patos.

Shkurti sapo kishte filluar dhe videoja e këmbëve ishte gati. Për të kontrolluar IC, e detyrova këmbën të përshkruante të gjitha llojet e formave në hapësirë ​​(për këtë, ishte e nevojshme të thërrisja vazhdimisht arritjen, duke anashkaluar pikat në një drejtkëndësh ose rrathë, kodi është i mërzitshëm dhe i mërzitshëm, prandaj nuk e bëj jepja (dhe pasi mbarova eksperimentet me gjurmimin e primitivëve, e preva fare) ):

Atëherë ishte e nevojshme të përfundoni lojën me këtë zanat, nuk mund të hidheni larg në njërën këmbë (megjithëse një robot i tillë do të dilte vërtet interesant). Por më duhet një heksapod. Shkova në tregun më të afërt të pleshtave për të kërkuar pleksiglas. Gjeta 2 copa të shkëlqyera - njëra 3 mm e trashë (vetëm për bustin, mendova), një tjetër 2 mm dhe blu (gjymtyrë të shkëlqyera, për t'iu përshtatur servove). Disa javë të tjera më vonë, kam gdhendur një mbrëmje për të bërë diçka prej saj. Bëri skica në letër. E provova - gjithçka duket se është në rregull, pastaj varet nga sharrë hekuri.

Dhe ja ku është, një përbindësh jashtë shtetit, me gjashtë këmbë. Kur testova njërën këmbë, e ushqeva këtë kuti me një lloj furnizimi me energji të majtë nga një vidë e jashtme. Mjaft. Por ushqyerja e 6 këmbëve prej tij ishte tashmë e frikshme. Prandaj, i vara duart për një kohë, duke menduar se ende duhet të marr një ushqyes të përshtatshëm. Por gjithçka doli të ishte shumë më e thjeshtë, e përmenda tashmë më lart - doli furnizimi me energji elektrike nga eee pc 901. Epo, kjo është e mrekullueshme.

Doli të ishte edhe më e vështirë të korrigjosh punën e 6 këmbëve sesa të shkruash motorin e njërës këmbë. Gjysma e këmbëve ishin të pasqyruara në raport me tjetrën. Për më tepër, të gjitha ato drejtohen në drejtime të ndryshme. Në përgjithësi, unë konfigurova dhe vendosa gjithçka për një kohë shumë të gjatë, dhe kjo nuk më frymëzoi shumë, sepse. nuk kishte mjete të përshtatshme korrigjimi, maksimumi në të cilin mund të mbështetesha ishte prodhimi i regjistrit në Serial. Dhe kjo funksiononte normalisht nga skedari kryesor *.ino, por nga Leg.h i lidhur - objekti i nevojshëm nuk shihej më. Paterica të grumbulluara për trungun (pëllëmbën e fytyrës). Unë do të rifaktoj me kalimin e kohës. Dhe pastaj erdhi pranvera, sezoni i çiklizmit ishte i hapur me forcë të plotë dhe unë e hodha kafshën time me gjashtë këmbë në dollap. Kështu kaloi e gjithë vera dhe pjesa e ngrohtë e vjeshtës.

Por filloi të bjerë shi, u bë ftohtë dhe gjashtëpodi u hoq. Këmbët e tij u korrigjuan, duke përfshirë të njëjtin _thirdQuarterFix u prezantua për funksionin e llogaritjes polarAngle. Problemi ishte se 2 këmbët (e majta e mesme dhe e majta e pasme) lëviznin në atë mënyrë që shumicën e kohës ishin në tremujorin e tretë:

Dhe unë kisha një kënd polar naiv - ai kthente kënde nga -pi në pi, në lidhje me boshtin X. Dhe, nëse ndonjëherë një nga këto 2 këmbët duhej të kthehej në tremujorin II, atëherë vlera e këndit polar u hodh nga -pi në pi , e cila në fakt ndikoi negativisht në llogaritjen e mëtejshme. E fiksuar me paterica - për këto 2 këmbë, këndi polar konsiderohet "ndryshe". Më vjen turp, më vjen turp për kodin, por i gjithë projekti është një provë koncepti, qëllimi i vetëm i të cilit është thjesht të kuptoj nëse mund të ndërtoj një heksapod realisht në lëvizje apo jo. Sepse kodi duhet të funksionojë, dhe tani. Dhe pastaj rifaktorimi - rifaktorimi.

Pasi u përball me tremujorin e 3-të, ai filloi të pedalonte modelet e hapave. Për ta bërë këtë, futa pikën e paracaktuar në klasën Leg, d.m.th. në të cilën ndodhet këmba kur roboti qëndron në këmbë dhe drejt. Kjo pikë mund të akordohet, gjëja kryesore është që të gjitha këmbët janë në të njëjtën koordinatë z (në mënyrë që këmbët të jenë fizikisht në të njëjtin plan, Këmba gjithashtu ka nivelin më të ulët të akordimitRestAngles()). Dhe brenda së njëjtës koordinatë Z, ato mund të zhvendosen pothuajse ashtu siç dëshironi. Pothuajse - sepse diapazoni i lëvizjes nuk është i pafund, dhe për të mos shkuar përtej këtij diapazoni gjatë hapit - parazgjedhja u përpoq të vendoste pozicionin e këmbëve diku më afër qendrës së këtij diapazoni.

Unë nuk e jap më kodin këtu në tekst, është shumë elementar, dhe në fund do të jap lidhje me versionin e plotë të të gjitha llojeve - në të njëjtën kohë do të mësoj se si të përdor github.

Zgjodha një sekuencë të thjeshtë hapash - 3 këmbë në tokë, 3 - në ajër ato janë riorganizuar. Kështu, koordinatat e këmbëve në lidhje me pozicionin e tyre të paracaktuar mund të ndahen në 2 grupe. Për këto dy grupe, unë bëra një hap në një lak (shih funksionin walk() në Buggy.ino). Dhe në fund, çdo këmbë llogariti koordinatat e veta individuale bazuar në koordinatat e paracaktuara.

Dhe ai shkoi! Por tani për tani, thjesht vazhdo. I vendosa shirita në këmbë që të mos rrëshqiste aq shumë në linoleum. Dhe ai nxitoi për ta xhiruar atë në video për t'u treguar miqve të tij.

A-pod, natyrisht, larg. Por nuk kam mbaruar ende.) Pedalova një mbrëmje tjetër - dhe shtova aftësinë për të lëvizur në çdo drejtim (por pa e kthyer trupin.)). Plus, për zbutjen midis lëvizjeve, shtova një funksion (smoothTo ()), i cili lëviz butësisht këmbët (duke ngritur lart, përsëri në 2 grupe, njëri prej të cilëve është gjithmonë poshtë, krijesa qëndron mbi të, ndërsa tjetra ngrihet dhe lëviz. ) në një pozicion të ri. Kjo është e nevojshme në mënyrë që krijesa të mos i tundë fort këmbët, duke ndryshuar drejtimin e lëvizjes (kjo veçori është aq e mangët në shumë personazhe të lojës së viteve të kaluara). Dhe ai shpejt vrapoi në çdo drejtim - anash, diagonalisht:

Mund të shikohen të dy skedarët e llojeve madhështore

Artikujt kryesorë të lidhur