Turinys:
- 1 žingsnis: „Aquire Parts“
- 2 žingsnis: sukurkite unikalią dalį
- 3 žingsnis: Roboto surinkimas
- 4 žingsnis: Roboto programavimas
- 5 žingsnis: kodas
- 6 žingsnis: ar tai buvo verta?
- 7 žingsnis: Išvada
Video: Kaip sukurti autonominį krepšinio žaidimo robotą, naudojant „IRobot“, sukurti kaip pagrindą: 7 žingsniai (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
Tai mano įrašas „iRobot Create“iššūkiui. Sunkiausia viso šio proceso dalis buvo nuspręsti, ką robotas ketina daryti. Norėjau pademonstruoti puikias „Create“savybes, kartu pridėdamas šiek tiek robo nuojautos. Atrodė, kad visos mano idėjos patenka į nuobodžių, bet naudingų kategorijų, arba kietos ir nepraktiškos. Galų gale nugalėjo šaunus ir nepraktiškas ir gimė krepšinį žaidžiantis robotas. Kiek pagalvojęs supratau, kad tai gali būti praktiška. Tarkime, kad naudojate oranžinį popierių ir visos jūsų šiukšliadėžės turi žalias lentas …
1 žingsnis: „Aquire Parts“
Dėl konkurso laiko apribojimų dauguma mano naudojamų dalių buvo „iš lentynos“. Naudojamos „atsargų“robotų dalys: sukurkite (x1)-iš „iRobot“www.irobot.comXBC V.3.0 (x1)-iš „Botball“www.botball.orgSukurkite „Roomba“kabelį (x1)-iš „Botball“www.botball.orgServo (x2)-iš „Botball“www.botball.org Aštrus atstumo ieškiklis (x1)-iš „Botball“www.botball.org Įvairios LEGO kaladėlės-iš LEGO www.lego.com.com Naudotos „sukurtos“robotų dalys: 3/8 colio storio ekstruzinis PVC lakštas - ši medžiaga yra nuostabi, bet nepamenu, iš kur ją gavau, bet ji yra kaip ši medžiaga https://www.lynxmotion.com/Category.aspx? CategoryID = 62Kitos dalys: Oranžinis „POOF“kamuolys - iš „WalMart“Krepšinio įvartis atrodantis šiukšliadėžė - iš „LowesGreen“„backboard“- papildomas ryškiai žalios spalvos PVC dažymas
2 žingsnis: sukurkite unikalią dalį
Vienintelė dalis, kurią turėjau pagaminti, buvo plokštė, pritvirtinta prie „Create“ir siūlanti „LEGO“tarpus. Atstumas tarp LEGO kaladėlių skylių yra 8 mm, tačiau sutaupydamas laiko padariau dvigubą tarpą. Išspaustas PVC yra lengvas darbas. Jis gali būti supjaustytas naudingu peiliu, tačiau yra standus ir tvirtas. Aš dažnai paimu robotą už šios plokštės ir dar neturėjau problemų.
1 žingsnis: Iškirpkite lakštą iki 3,5 x 9,5 colio, galite jį supjaustyti naudingu peiliu. 2 žingsnis: gręžkite skylutes sukimo varžtams. Sukūrimo varžtai sudaro 2 ir 5/8 "8 ir 5/8" dydžio dėžutę. 3 žingsnis: gręžkite skylutes tarp LEGO kaladėlių. Naudokite 3/16 colio gręžtuvą, o skylės buvo išdėstytos 16 mm atstumu. Patarimas: lapą išdėliojau CAD programoje, išspausdinau visu dydžiu ir priklijavau prie lapo. Tada panaudojau kaip pjovimo ir gręžimas.
3 žingsnis: Roboto surinkimas
Man patinka kurti daiktus kuo paprasčiau, kad jiems šokinėjant nuo stalo nereikėtų tiek daug atstatyti!
1. Prisukite naujai sukurtą plokštelę prie „Create“viršaus. 2. Sukurkite ranką, kad sugriebtumėte kamuolį.
4 žingsnis: Roboto programavimas
Aš nusprendžiau naudoti „XBC“kaip valdiklį daugiausia dėl integruoto spalvų stebėjimo. Kadangi nusprendžiau, kad XBC yra operacijos smegenys, aš užprogramavau savo robotą „Interactive C“arba, kaip aš jį vadinu IC. IC yra nemokama ir ją galima atsisiųsti iš www.botball.org. IC yra labai panašus į C ++, tačiau turi keletą integruotų bibliotekų. Kaip paaiškėja, Davidas Milleris iš Oklahomos universiteto parašė „Create“biblioteką, kurią galima atsisiųsti iš jo puslapio adresu https://i-borg.engr.ou.edu/~dmiller/create/. Turėdamas tuos išteklius ir kūrimo vadovus buvau pasiruošęs programuoti. Bet kitas didelis iššūkis buvo tai, ko aš norėjau, kad tai padarytų? Norėjau roboto, galinčio paimti oranžinius rutuliukus ir sudėti juos į krepšį. Mano tikslas atrodė paprastas ir tikriausiai galėjo būti paprastas, tačiau kuo labiau įsitraukiau į tai, ką galėtų sukurti, tuo labiau norėjau, kad tai padarytų. Mano galutinis sąrašas atrodė taip: 1. Raskite oranžinį rutulį2. Paimkite oranžinį rutulį3. Raskite krepšelį4. Įdėkite kamuolį į krepšį Vengti objektų2. Nieko nenukritęs (kaip ant stalo) 3. Akumuliatoriaus įkrovos aptikimas ir prijungimas prie namų bazės, kai žemas, o visa tai yra visiškai savarankiška, o tai reiškia, kad visa tai yra užprogramuota.
5 žingsnis: kodas
Tai gali būti netvarkinga, bet tai veikia.#Naudokite „createlib.ic" #use "xbccamlib.ic" #define cam 0 // fotoaparato servo prievadas#apibrėžkite ranką 3 // rankos servo prievadas#define et (analoginis (0)) // et port/*Taip pat reikia prijungti kūrimo kabelį. Maitinimo lizdas, 3 kištukinis kištukas į 8 prievadą ir tas, kuris pažymėtas UX, į JP 28 (šalia USB prievado), U nukreiptas į fotoaparatą*/ #define c_down 5 // kameros servo nuleidimas#define a_down 17 // rankos servo nuleidimas žemyn#apibrėžimas laikymas 50 // servo laikymo kamuolys#apibrėžimas sugautas 27 // rankos servo padėtis, kad neįstrigtumėte ant stalo#apibrėžti šaudyti 150 // servo mesti rutulį#apibrėžti takelį_c 25 // kameros servo takelis uždaryti padėtį#apibrėžti takelį_f 45 // kameros servo takelis tolima padėtis#apibrėžti centrą 120 // kameros matymo centras#apibrėžti inrange 30 // takelio_y koordinatė, kai kamuolys yra letenoje#apibrėžti kamuolį 0 // oranžinio rutulio kanalas#define ball_x (track_x (kamuolys, 0)) // x rutulio koordinatė#define ball_y (track_y (kamuolys, 0)) // y rutulio koordinatė#apibrėžti lėtą 100 // lėto greitį variklis#apibrėžti greitą 175 // greito variklio greitis#apibrėžti aiškus 0,2 // s leptis atsitraukti nuo kliūčių#apibrėžti laiką 0,5 //1.0 yra 90 laipsnių posūkis į dešinę#apibrėžti poilsį 0.05 // laikas miegoti stebint „blob“#apibrėžti speedą 175 // vengti apsisukimo greičio atsitraukti nuo atsitrenkusio objekto#apibrėžti tiesiai 32767 // važiuoti tiesia linija#apibrėžti backb 2 // pagrindinės plokštės pagrindinės spalvos kanalas#apibrėžti kvadratą 1 // užpakalinės dalies akcento spalvos kanalas#apibrėžti takelį_d 250 // kameros padėtis stebėjimo tikslui# define track_find 70 // kameros padėtis ilgam sekimui#define reverse 2.25 // sleep time for a 180#define back_f -150 // back fast speed#define back_sl -125 // lėtas atgalinis greitis#define center_x 178 // true x centre of cam#define center_y 146 // true y camint pida; // išvengti processint pidb; // sekti processint pidc; // rezultatas processint have_ball = 0; // nurodo, kokia funkcija mes sąskaitą main () {long ch; enable_servos (); // enable servos init_camera (); // start camera cconnect (); // connect to create with full control start_a (); // start išvengti funkcijos start_b (); // paleiskite kamuoliuko sekimo funkciją, kol (1) {if (r_button () || gc_ldrop || gc_rdrop) {// jei pakeltas arba r peties mygtukas nužudo (pida); nužudyti (pidb); nužudyti (pidc); disable_servos (); atjungti (); break;} create_battery_charge (); display_clear (); printf ("mokestis = %l / n", gc_battery_charge); if (gc_battery_charge <1200l || b_button ()) {kill (pida); nužudyti (pidb); nužudyti (pidc); mesti (); have_ball = 0; sukurti_demo (1); while (b_button ()); while (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge (); display_clear (); printf ("mokestis = %l / n", gc_battery_charge); miegas (1.0);} cconnect (); atgal (); miegas (2,0); start_a (); start_b ();}}} void išvengti () {while (1) {// kartoti amžinai create_sensor_update (); // atnaujinti visas jutiklio reikšmes // create_drive (speeda, straight); if (gc_lbump == 1) {// kairysis smūgis išvengti_dešinys ();} // pasuka į dešinę, kad išvengtumėte kito, jei (gc_rbump == 1) {// dešinysis smūgis išvengti_kairė ();} // pasuka į kairę, kad išvengtumėte kitaip, jei ((gc_lfcliff == 1) {// kairysis priekinis skardis išvengti_dešinys ();} else if (gc_rfcliff == 1) {// dešinysis priekinis skardis išvengti_kairys ();} else if (gc_lcliff == 1) {// kairysis skardis vält_duris ();} else if (gc_rcliff == 1) {// dešinysis skardis išvengti_kairys ();}}} void track_ball () {kill (pidc); while (! have_ball) {// kartokite, kol gausite kamuoliuką track_update (); far (); // paruošia fotoaparatą (); // nustato ranką, kol (et <255) {// kol pasiekiama maksimali vertė, kai kamuolys sugaunamas track_update (); // atnaujinti fotoaparato vaizdą, jei (ball_x <= (centras-5)) {// jei kamuolys paliktas track_update (); create_drive_direct (lėtas, greitas); // pasukti į kairę miegoti (ilsėtis);} else if (ball_x> = (centre+5)) {// jei kamuolys yra teisingas track_update (); create_drive_direct (greitas, lėtas); // pasukti į dešinę miegoti (ilsėtis);} else if (ball_x (centre-5)) {// jei kamuolys yra centre track_update (); create_drive_straight (greitas); // eiti tiesiai miegoti (ilsėtis);}} patraukti (); // patraukti rutulinį pyptelėjimą (); // nutraukti triukšmą (); // nustoti važiuoti have_ball = 1; // pažymėti, kad Turiu rutulį} start_c (); // rasti krepšį miegoti (1.0); // miegoti, kad nieko neveikčiau, kai būsiu nužudytas} void find_basket () {kill (pidb); // nužudyti kamuolio sekimo procesą rasti (); // pastatyti fotoaparatą track_set_minarea (1000); // užpakalinė plokštė yra didelė, todėl ieškokite didelių dėmių tik tuo metu (have_ball) {// kol turiu kamuolį track_update (); while (track_x (backb, 0) = (centre_x+20)) {// kol nėra centre track_update (); if (track_x (backb, 0)> = (centre_x+20)) {// jei užpakalinė plokštė palikta track_update (); create_spin_CCW (100);} // pasukite į kairę, jei (track_x (backb, 0) <= (centre_x-20)) {// jei užpakalinė plokštė yra teisinga track_update (); create_spin_CW (300-center_x);} // pasukus į dešinę lėtėjant centrui artėjant} stop (); while (track_size (backb, 0) <= (6000)) {// kol tikslas yra mažesnis nei 6000 pikselių dydžio track_update (); if (track_x (backb, 0) <= (centre_x-5)) {// jei tikslas paliktas track_update (); create_drive_direct (lėtas, greitas); // pasukti į kairę miegoti (ilsėtis);} else if (track_x (backb, 0)> = (centre_x+5)) {// jei tikslas yra teisingas track_update (); create_drive_direct (greitas, lėtas); // pasukti į dešinę miegoti (ilsėtis);} else if (track_x (backb, 0) (centre_x-5)) {// jei tikslas yra centre track_update (); create_drive_straight (greitas); // eiti tiesiai miegoti (ilsėtis);}} stop (); // create_drive_straight (greitas); // šiek tiek priartėti // miegoti (1.0); //sustabdyti(); miegas (1,0); create_spin_CW (speeda); // sukite dešinįjį miegą (atvirkščiai); // pakankamai ilgai miegokite, kad sustotumėte 180 apsisukimų (); žemyn (); // nuleiskite fotoaparatą, kad galėtumėte stebėti miegą (1.0); track_set_minarea (200); // naudokite mažesnį min. dydį, nes esame nukreipti į jį ir artėsime, kol (track_y (backb, 0)> = (centre_y-140)) {// kol tikslas yra mažesnis už y koordinatė track_update (); if (track_x (backb, 0) <= (centre_x-5)) {// jei tikslas paliktas track_update (); back_right (); // pasukti į kairę miegoti (ilsėtis);} else if (track_x (backb, 0)> = (centre_x+5)) {// jei tikslas yra teisingas track_update (); back_left (); // pasukti į dešinę miegoti (ilsėtis);} else if (track_x (backb, 0) (centre_x-5)) {// jei tikslas yra centre track_update (); atgal (); // eiti tiesiai miegoti (ilsėtis);}} stop (); pyptelėjimas (); mesti (); // šaudyti miegoti (1.0); have_ball = 0; // priminimas Aš mečiau kamuolį ir jo neturiu} start_b (); // atgal į kamuolio sekimo miegą (1.0); // nieko nedarykite, kol šis procesas nemiršta} void cconnect () {create_connect (); create_full (); // visiškam atbrailos jutiklių valdymui create_power_led (0, 255);} // žalios galios ledvoid atjungimas () {stop (); // sustabdyti judėjimą create_disconnect ();} void back_away () {back (); miegas (aiškus); stop ();} void rotate_l () {create_spin_CCW (speeda); miego laikas); stop ();} void rotate_r () {create_spin_CW (speeda); miego laikas); 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 (kumštelis, takelis_c);} void far () {set_servo_position (cam, track_f);} void ledge () {set_servo_position (ranka, sugauta);} void thro () {int a; for (a = 50; a> = 30; a- = 1) {// pasiruoškite set_servo_position (ranka, a);} set_servo_position (ranka, šaudyti);} void grab () {int a; for (a = 0; a <= hold; a+= 1) {// sklandžiai pakelkite ranką set_servo_position (ranka, a);}} void down () {set_servo_position (kumštelis, takelis_d);} void find () {set_servo_position (cam, track_find);} void start_a () {pida = start_process (išvengti ());} void start_b () {pidb = start_process (track_ball ());} void start_c () {pidc = start_process (find_basket ());} void kill (int pid) {CREATE_BUSY; // palaukite, kol bus baigtas dabartinis kūrimo procesas, ir laikykitės prioriteto kill_process (pid); CREATE_FREE; // aš baigiau stop ();} void išvengti_kairė () {nužudyti (pidb); // sustabdyti visa kita nužudyti (pidc); atbraila (); // paimkite leteną, kad ji neužstrigtų ant stalo back_away (); // atgal atsitraukti rotate_l (); // pasukti toli nuo kliūčių paruoštos (); // padėkite leteną atgal, jei (have_ball) {// jei turiu kamuoliuką start_c ();} // pradėk sekti įvartį kitaip if (! have_ball) {// jei neturiu kamuolio start_b ();} // pradėti kamuoliuko sekimą} void išvengti_teisingas () {nužudyti (pidb); nužudyti (pidc); atbrailos (); back_away (); rotate_r (); paruoštas (); 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);}
6 žingsnis: ar tai buvo verta?
Išlaidos buvo tokios: Sukurti + akumuliatorius + doc = 260 USD XBC pradinis komplektas („xbc“, „cam“, „LEGO“kaladėlės, jutikliai) = 579 USD. PVC + dažai + varžtai = apie 20 USD. Bendra kaina = 859 USD. Aš jau turėjau „Botball“XBC pradinį rinkinį, man buvo kūrimo kaina. Manau, kad tai buvo verta, o geriausia yra tai, kad visos mano naudojamos dalys yra daugkartinio naudojimo, jei galėčiau atsiversti šį robotą. Šiame vaizdo įraše parodyta, kaip vengti papildomos rutinos, ant stalviršio. Šiame vaizdo įraše parodyta, kaip robotas į vartus įmuša 5 oranžinius kamuoliukus. Aš tik padėjau pagreitinti procesą, galiausiai jis pats surastų rutulį 5.
7 žingsnis: Išvada
Galutinis rezultatas yra robotas, kuris gali pats paimti ir įmušti oranžinius kamuoliukus į vartus.
Man patiko dirbti prie šio projekto. Kuo daugiau dirbau su šiuo robotu, tuo labiau prisirišau prie jo. Dabar kalbu su juo taip, lyg tai būtų augintinis. Tikiuosi, kad tai padėjo jums kitame projekte. Yra daug žmonių, kuriems turiu padėkoti, bet yra per daug. Kaip Bernardas iš Chartreso taip elegantiškai pareiškė: „Mes esame kaip nykštukai ant milžinų pečių, kad galėtume matyti daugiau nei jie ir dalykai per atstumą, ne dėl mūsų aštrumo ar fizinio skirtumą, bet todėl, kad esame pakelti aukštai ir pakeliami dėl jų milžiniško dydžio “.
Rekomenduojamas:
Pasidaryk pats -- Kaip sukurti robotą vorą, kurį galima valdyti naudojant išmanųjį telefoną naudojant „Arduino Uno“: 6 veiksmai
Pasidaryk pats || Kaip sukurti voratinklio robotą, kurį galima valdyti naudojant išmanųjį telefoną naudojant „Arduino Uno“: Gaminant „Spider“robotą, galima sužinoti tiek daug apie robotiką. Kaip ir robotų kūrimas yra įdomus ir sudėtingas. Šiame vaizdo įraše parodysime, kaip sukurti robotą „Voras“, kurį galime valdyti naudodami savo išmanųjį telefoną (Androi
Kaip sukurti nuotoliniu būdu valdomą 3D atspausdintą savaiminio balansavimo robotą: 9 žingsniai (su paveikslėliais)
Kaip sukurti nuotoliniu būdu valdomą 3D atspausdintą savaiminio balansavimo robotą: tai ankstesnės B-roboto versijos raida. 100% ATVIRAS ŠALTINIS / „Arduino“robotas. KODAS, 3D dalys ir elektronika yra atviri, todėl nedvejodami jį pakeiskite arba sukurkite didžiulę roboto versiją. Jei turite abejonių, idėjų ar jums reikia pagalbos, kreipkitės
„Arduino“robotas, turintis atstumą, kryptį ir sukimosi laipsnį (rytus, vakarus, šiaurę, pietus), valdomas balsu naudojant „Bluetooth“modulį ir autonominį roboto judėjimą: 6 žingsniai
„Arduino“robotas, turintis atstumą, kryptį ir sukimosi laipsnį (rytus, vakarus, šiaurę, pietus), valdomas balsu naudojant „Bluetooth“modulį ir autonominį robotų judėjimą: šioje instrukcijoje paaiškinta, kaip padaryti „Arduino“robotą, kurį galima perkelti reikiama kryptimi (pirmyn, atgal) , Į kairę, į dešinę, į rytus, į vakarus, į šiaurę, į pietus) reikalingas atstumas centimetrais naudojant balso komandą. Robotas taip pat gali būti judinamas savarankiškai
Kaip pataisyti akustinės gitaros pagrindą: 5 žingsniai
Kaip sutvarkyti akustinės gitaros pagrindą: neseniai įsigijau „Alvarez 5014“, pagamintą 1975 m. Rugsėjo 22 d. Apskritai ji buvo geros formos. Tačiau, be to, kad buvo siaubingai nusiteikusi, nugarėlė atsilaisvino. Ši pamoka skirta parodyti, kaip grąžinti gerą garsą šiai klasikai
Nuotoliniu būdu valdomas krepšinio kamuolio robotas - HARLEM GLOBETROTTERS -: 9 žingsniai (su paveikslėliais)
Nuotoliniu būdu valdomas krepšinio kamuolio robotas - HARLEM GLOBETROTTERS -: Čia parodysiu, kaip sukurti nuotoliniu būdu valdomą krepšinio robotą. Teisingai, ne juokai! Aš sukūriau panašų rutulį „HARLEM GLOBETROTTERS“ir dabar galite sukurti savo. Štai jums reikalingų reikmenų sąrašas. „Petsmart“: 7 colių žiurkėnas B