Obsah:

Ako si vyrobiť autonómneho hracieho robota na basketbal pomocou IRobota Vytvoriť ako základ: 7 krokov (s obrázkami)
Ako si vyrobiť autonómneho hracieho robota na basketbal pomocou IRobota Vytvoriť ako základ: 7 krokov (s obrázkami)

Video: Ako si vyrobiť autonómneho hracieho robota na basketbal pomocou IRobota Vytvoriť ako základ: 7 krokov (s obrázkami)

Video: Ako si vyrobiť autonómneho hracieho robota na basketbal pomocou IRobota Vytvoriť ako základ: 7 krokov (s obrázkami)
Video: 120 Amazing Heavy Equipment Machines Working At Another Level 2024, Septembra
Anonim
Ako si vyrobiť autonómneho robota na basketbal pomocou IRobotu a vytvoriť ho ako základ
Ako si vyrobiť autonómneho robota na basketbal pomocou IRobotu a vytvoriť ho ako základ

Toto je môj príspevok k výzve iRobot Create. Najťažšie na celom tomto procese bolo rozhodnúť sa, čo bude robot robiť. Chcel som predviesť skvelé funkcie programu Create a zároveň pridať trochu robo vkusu. Všetky moje nápady buď patrili do kategórie nudných, ale užitočných, alebo chladných a nepraktických. Nakoniec zvíťazilo chladné a nepraktické a basketbalový hrací robot bol na svete. Po chvíli premýšľania som zistil, že to môže byť praktické. Predpokladajme, že používate oranžový papier a všetky vaše odpadkové koše majú zelené zadné dosky…

Krok 1: Diely Aquire

Vzhľadom na časový limit súťaže bola väčšina častí, ktoré som použil, „mimo regálu“. Použité diely „skladu“robota: Vytvorte (x1)-od iRobot www.irobot.comXBC V.3.0 (x1)-od spoločnosti Botball www.botball.orgVytvorte kábel Roomba (x1)-od spoločnosti Botball www.botball.orgServo (x2)-od spoločnosti Botball www.botball.orgSharp rangefinder (x1)-od Botball www.botball.orgRozmanité LEGO kocky-od LEGO www.lego.com6-32 skrutky do stroja (x4)-od McMaster www.mcmaster.com Použité diely robota: „Vytvorené“diely z extrudovaného PVC plechu s hrúbkou 3/8” - tieto veci sú úžasné, ale nepamätám si, odkiaľ ich mám, ale sú ako tieto veci https://www.lynxmotion.com/Category.aspx? CategoryID = 62Ďalšie časti: Oranžová loptička „POOF“- od koša WalMartBasketbalový kôš - zo „zadnej dosky“LowesGreen - extra PVC natretý jasne zelenou farbou

Krok 2: Vytvorte jedinečnú časť

Vytvorte jedinečnú časť
Vytvorte jedinečnú časť

Jediná časť, ktorú som musel vyrobiť, bola doska, ktorá bola priskrutkovaná k Create a ponúkala rozstup LEGO. Rozstup dier od kociek LEGO je vzdialený 8 mm, ale kvôli šetreniu času som urobil dvojité rozstupy. S extrudovaným PVC sa dá ľahko pracovať. Dá sa krájať nožom, ale je pevný a pevný. Robota často beriem pri tomto tanieri a zatiaľ som nemal problém.

Krok 1: Plech nakrájajte na 3,5 x 9,5 palca, môžete ho nakrájať nožom. Krok 2: Vyvŕtajte otvory pre skrutky, ktoré chcete vytvoriť. Vytvorené skrutky vytvoria škatuľu s rozmermi 2 a 5/8 "x 8 a 5/8". Krok 3: Vyvŕtajte diery od kociek LEGO. Použite vŕtačku 3/16 "a diery som od seba oddelil 16 mm. Tip: Hárok som rozložil v programe CAD, vytlačil som ho v plnej veľkosti a prilepil ho na plech. Potom som to použil ako návod na rezanie a vŕtanie.

Krok 3: Zostavenie robota

Zostavenie robota
Zostavenie robota
Zostavenie robota
Zostavenie robota
Zostavenie robota
Zostavenie robota

Baví ma stavať veci najjednoduchšie, pretože keď vyskočia zo stola, nemusíte už toľko prestavovať!

1. Naskrutkujte novo vyrobenú dosku na vrch vytvorenia 2. Postavte rameno, aby ste chytili loptu 3. Postavte rameno, ktoré drží fotoaparát 4. Vytvorte držiak pre diaľkomer 5. Namontujte XBC a zapojte všetky káble

Krok 4: Programovanie robota

Rozhodol som sa použiť XBC ako svoj ovládač hlavne kvôli vstavanému sledovaniu farieb. Pretože som sa rozhodol s XBC ako mozgom operácie, naprogramoval som svojho robota v Interactive C, alebo ako tomu hovorím IC. IC je voľne použiteľné a je možné ho stiahnuť na www.botball.org. IC je veľmi podobný C ++, ale má niekoľko vstavaných knižníc. Ako sa ukazuje, David Miller z University of Oklahoma napísal knižnicu pre Create, ktorú si môžete stiahnuť z jeho stránky na https://i-borg.engr.ou.edu/~dmiller/create/. S týmito zdrojmi a manuálmi na vytvorenie som bol pripravený naprogramovať. Ale ďalšou veľkou výzvou bolo, čo som chcel, aby to urobilo? Chcel som robota, ktorý by mohol ísť vyberať oranžové loptičky a dať ich do koša. Môj cieľ znel jednoducho a pravdepodobne mohol byť aj jednoduchý, ale čím viac som sa zaoberal tým, čo stvorenie dokázalo, tým viac som chcel, aby to robilo. Môj konečný zoznam vyzeral takto: 1. Nájdite oranžovú guľu 2. Zoberte oranžovú guľu 3. Nájdite kôš 4. Vložte loptičku do koša, zatiaľ čo 1. Vyhýbanie sa predmetom 2. Nespadnúť z ničoho (ako zo stola) 3. Detekcia nabitia batérie a dokovanie na domácej základni, keď je nízka úroveň Oh, a to všetko je úplne autonómne, čo znamená, že je všetko predprogramované.

Krok 5: Kód

Môže to byť chaotický, ale funguje to.#Použite "createlib.ic" #use "xbccamlib.ic" #define cam 0 // port servopohonu kamery#definujte rameno 3 // port servopohonu#definujte et (analógový (0)) // et port/*Je potrebné zapojiť aj kábel na vytvorenie. Napájací konektor, 3 -kolíkovú zástrčku do portu 8 a zásuvku označenú UX do JP 28 (vedľa portu USB), pričom U je smerom k fotoaparátu*/ #define c_down 5 // vypnutie serva kamery#definovanie a_down 17 // vypnutie servopohonu#definovanie pozdržania 50 // podržanie servo gule#definovanie chyteného 27 // polohy servopohonu, aby sa nezachytil o stôl#definovanie strieľania 150 // servo hod loptou#definovať track_c 25 // poloha serva kamery blízko polohy#definovať track_f 45 // poloha kamery pri servo vzdialenejšej polohe#definovať stred 120 // stred videnia kamery#definovať zoradenie 30 // súradnica track_y keď je lopta v pazúri#definovať loptu 0 // kanál oranžovej gule#definujte ball_x (track_x (guľa, 0)) // x súradnice gule#definujte ball_y (track_y (guľa, 0)) // y súradnice gule#definujte pomalú 100 // rýchlosť pomalého motor#definovať rýchlo 175 // rýchlosť rýchleho motora#definovať vymazať 0,2 // s sklopte cúvanie od prekážok#definujte čas 0,5 //1,0 je otočenie o 90 stupňov doprava#definujte odpočinok 0,05 // čas na spánok pri sledovaní blobov#definujte rýchlosť 175 // rýchlosť vyhýbania sa zákrute#definujte back_s -200 // rýchlosť na cúvajte od narazeného objektu#definujte rovno 32767 // jazdite po priamke#definujte chrbát 2 // kanál základnej farby základnej dosky#definujte štvorec 1 // kanál akcentovej farby zadnej dosky#definujte track_d 250 // poloha kamery pre sledovanie cieľa# definujte track_find 70 // poloha kamery pre dlhé sledovanie#definujte spätný chod 2,25 // čas spánku pre 180#definujte back_f -150 // spätnú vysokú rýchlosť#definujte back_sl -125 // spätnú pomalú rýchlosť#definujte center_x 178 // true x center z kamery#definovať center_y 146 // pravda y centrum camint pida; // vyhnúť sa processint pidb; // sledovať processint pidc; // skóre processint have_ball = 0; // hovorí, ktorej funkcii sa vyhýbame main () {long ch; enable_servos (); // povolenie serva init_camera (); // spustenie kamery cconnect (); // pripojenie k vytvoreniu s plným ovládaním start_a (); // spustenie funkcie vyhnutia sa štart_b (); // spustenie funkcie sledovania loptičiek počas (1) {if (r_button () || gc_ldrop || gc_rdrop) {// ak je zdvihnutý alebo r ramenný gombík (pida); zabiť (pidb); zabiť (pidc); disable_servos (); odpojiť (); break;} create_battery_charge (); display_clear (); printf ("poplatok = %l / n", gc_battery_charge); if (gc_battery_charge <1200l || b_button ()) {kill (pida); zabiť (pidb); zabiť (pidc); hod (); have_ball = 0; create_demo (1); while (b_button ()); while (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge (); display_clear (); printf ("poplatok = %l / n", gc_battery_charge); spánok (1,0);} cconnect (); späť(); spánok (2,0); start_a (); start_b ();}}} neplatné vyhnúť sa () {while (1) {// opakovať navždy create_sensor_update (); // aktualizovať všetky hodnoty senzorov // create_drive (speeda, straight); if (gc_lbump == 1) {// ľavý náraz, ktorým sa vyhnete_vpravo ();} //, odbočí doprava, aby sa vyhol inému, ak (gc_rbump == 1) {// pravý náraz, aby sa vyhnul gc_lfcliff == 1) {// ľavý predný útes avoid_right ();} else if (gc_rfcliff == 1) {// pravý predný útes avoid_left ();} else if (gc_lcliff == 1) {// ľavý útes vyhýbajúci sa vpravo ();} else if (gc_rcliff == 1) {// pravý útes avoid_left ();}}}} neplatný track_ball () {kill (pidc); while (! have_ball) {// opakujte, kým nezískate loptu track_update (); far (); // nastaví kameru pripravenú (); // nastaví rameno, kým (et <255) {// pokiaľ sa pri chybe lopty nedosiahne maximálna hodnota track_update (); // aktualizuje obrázok kamery, ak (ball_x <= (stred-5)) {// ak je loptička ponechaná track_update (); create_drive_direct (pomalý, rýchly); // odbočte do ľavého spánku (odpočinok);} else if (ball_x> = (stred+5)) {// ak je loptička vpravo track_update (); create_drive_direct (rýchly, pomalý); // odbočte vpravo, spánok (odpočinok);} else if (ball_x (center-5)) {// ak je lopta v strede track_update (); create_drive_straight (fast); // choďte rovno spať (odpočinok);}} grab (); // pípnutie lopty ((); // vypnite zvuk (); // zastavte jazdu have_ball = 1; // poznamenajte, že Mám loptu} start_c (); // nájdenie spánku v koši (1.0); // spánok, aby som nič nerobil, keď ma zabijú} void find_basket () {kill (pidb); // proces sledovania lopty find (); // dajte kameru track_set_minarea (1000); // zadná doska je veľká, takže hľadajte iba veľké guličky, kým (have_ball) {// kým mám loptu track_update (); while (track_x (backb, 0) = (center_x+20)) {// pričom nie je vycentrovaný track_update (); if (track_x (backb, 0)> = (center_x+20)) {// ak je zadná doska ponechaná track_update (); create_spin_CCW (100);} // odbočte doľava, ak (track_x (backb, 0) <= (center_x-20)) {// ak je zadná doska správna track_update (); create_spin_CW (300-center_x);} // odbočte doprava, keď sa stred blíži,} stop (); while (track_size (backb, 0) <= (6000)) {// while the target is less than 6000 pixels in size track_update (); if (track_x (backb, 0) <= (center_x-5)) {// ak je cieľ ponechaný track_update (); create_drive_direct (pomalý, rýchly); // odbočte do ľavého spánku (odpočinok);} else if (track_x (backb, 0)> = (center_x+5)) {// ak je cieľ správny track_update (); create_drive_direct (rýchly, pomalý); // zapnite pravý spánok (odpočinok);} else if (track_x (backb, 0) (center_x-5)) {// ak je cieľ vycentrovaný track_update (); create_drive_straight (fast); // choďte rovno spať (odpočívajte);}} stop (); // create_drive_straight (fast); // trocha sa zblížte //sleep(1.0); // stop (); spánok (1,0); create_spin_CW (speeda); // spin pravý spánok (spiatočka); // dostatočne dlhý spánok na zastavenie o 180 otáčok (); down (); // položenie kamery na sledovanie spánku na základnej doske (1.0); track_set_minarea (200); // použite menšiu minimálnu veľkosť, pretože sme na ňu nasmerovaní a priblížime sa zatiaľ (track_y (backb, 0)> = (center_y-140)) {// zatiaľ čo cieľ je menší ako y súradnica track_update (); if (track_x (backb, 0) <= (center_x-5)) {// ak je cieľ ponechaný track_update (); back_right (); // odbočiť do ľavého spánku (odpočinok);} else if (track_x (backb, 0)> = (center_x+5)) {// ak je cieľ správny track_update (); back_left (); // odbočiť vpravo spánok (odpočinok);} else if (track_x (backb, 0) (center_x-5)) {// ak je cieľ vycentrovaný track_update (); späť (); // choďte rovno spať (odpočívajte);}} stop (); pípnutie (); throw (); // shoot sleep (1.0); have_ball = 0; // pripomenutie Hodil som loptu a nemám ju} start_b (); // späť do režimu sledovania lopty (1.0); // nerobte nič, kým tento proces nezomrie} neplatné cconnect () {create_connect (); create_full (); // pre úplné ovládanie snímačov ríms create_power_led (0, 255);} // zelená kontrolka napájania sa vyhnite odpojeniu () {stop (); // zastavenie pohybu create_disconnect ();} neplatné back_away () {späť (); spánok (jasný); stop ();} neplatné rotate_l () {create_spin_CCW (speeda); čas na spanie); stop ();} void rotate_r () {create_spin_CW (speeda); čas na spanie); stop ();} void stop () {create_drive (0, straight);} void back () {create_drive (back_s, straight);} void ready () {set_servo_position (arm, a_down);} void check () {set_servo_position (cam, track_c);} neplatné far () {set_servo_position (cam, track_f);} prázdna rímsa () {set_servo_position (rameno, zachytené);} neplatné vrhnutie () {int a; for (a = 50; a> = 30; a- = 1) {// pripravte sa set_servo_position (rameno, a);} set_servo_position (paže, streľba);} void grab () {int a; for (a = 0; a <= hold; a+= 1) {// zdvihnite rameno hladko set_servo_position (arm, a);}} void down () {set_servo_position (cam, track_d);} void find () {set_servo_position (cam, track_find);} neplatný štart_a () {pida = štartovací_proces (vyhnúť sa ());} neplatný štart_b () {pidb = štart_proces (track_ball ());} neplatný štart_c () {pidc = štart_proces (find_basket ());} void kill (int pid) {CREATE_BUSY; // počkajte na dokončenie aktuálneho procesu vytvárania a vezmite prioritu kill_process (pid); CREATE_FREE; // som hotový stop ();} void avoid_left () {kill (pidb); // zastav všetko ostatné kill (pidc); rímsa (); // zdvihnite pazúr, aby sa nezachytil o stôl back_away (); // cúvajte späť rotate_l (); // otočte preč od prekážky pripravený (); // vráťte pazúr späť, ak (have_ball) {// ak mám loptičku start_c ();} // spustenie sledovania cieľa inak, ak (! have_ball) {// ak nemám loptu start_b ();} // spustenie sledovania lopty} neplatné avoid_right () {kill (pidb); zabiť (pidc); rímsa (); vycúvať(); rotate_r (); pripravený (); if (have_ball) {start_c ();} else if (! have_ball) {start_b ();}} void back_left () {create_drive_direct (back_f, back_sl);} void back_right () {create_drive_direct (back_sl, back_f);}

Krok 6: Oplatilo sa to?

Náklady boli: Vytvoriť + batéria + dokument = 260 $ štartovacia sada XBC (xbc, kamera, kocky LEGO, senzory) = 579 dolárov PVC + farba + skrutky = asi 20 dolárov Celkové náklady = 859 dolárov Už som mal štartovaciu sadu XBC od spoločnosti Botball, takže náklady pre mňa boli náklady na vytvorenie. Myslím si, že to stálo za to, a najlepšie na tom je, že všetky diely, ktoré som použil, sú opakovane použiteľné, ak by som sa dokázal rozlúčiť s týmto robotom. Toto video ukazuje rutinu vyhnúť sa, na stole. Toto video ukazuje robot, ktorý strelil 5 oranžových loptičiek do bránky. Pomáhal som len urýchliť postup, inak by guľa 5 našla sama.

Krok 7: Záver

Konečným výsledkom je robot, ktorý dokáže sám zdvihnúť a dať oranžové loptičky v bránke.

Rád som pracoval na tomto projekte. Čím viac som na tomto robote pracoval, tým viac som k nemu bol pripútaný. Teraz s ním hovorím, ako keby to bolo domáce zviera. Dúfam, že vám to pomohlo pri ďalšom projekte. Je veľa ľudí, ktorým musím poďakovať, ale je ich príliš veľa. Ako elegantne povedal Bernard z Chartres: „Sme ako trpaslíci na pleciach obrov, aby sme videli viac ako oni a veci na väčšiu vzdialenosť, a to nie kvôli ostrosti zraku z našej strany alebo kvôli akejkoľvek fyzickej rozdiel, ale pretože sme nesení vysoko a pozdvihnutí ich obrovskou veľkosťou. “

Odporúča: