Բովանդակություն:
- Քայլ 1: Aquire մասեր
- Քայլ 2: Ստեղծեք եզակի մաս
- Քայլ 3. Ռոբոտի հավաքում
- Քայլ 4: Ռոբոտի ծրագրավորում
- Քայլ 5: Կոդ
- Քայլ 6: Արժե՞ր դա:
- Քայլ 7: Եզրակացություն
Video: Ինչպես կատարել ինքնավար բասկետբոլ խաղացող ռոբոտ ՝ օգտագործելով IRobot- ը: Ստեղծեք հիմք. 7 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:52
Սա իմ մուտքն է iRobot Ստեղծել մարտահրավերի: Ինձ համար այս ամբողջ գործընթացի ամենադժվարը որոշումն էր, թե ինչ է անելու ռոբոտը: Ես ուզում էի ցուցադրել Ստեղծման հիանալի հատկությունները ՝ միաժամանակ ավելացնելով ինչ -որ ռոբոյի տաղանդ: Իմ բոլոր գաղափարները թվում էին կամ ընկնում էին ձանձրալի, բայց օգտակար, կամ սառը և անիրագործելի կատեգորիայի մեջ: Ի վերջո, սառը և անիրագործելի հաղթանակ տարավ, և ծնվեց բասկետբոլ խաղացող ռոբոտը: Որոշակի մտածելուց հետո հասկացա, որ դա կարող է գործնական լինել: Ենթադրենք, որ դուք օգտագործում եք նարնջագույն թուղթ, և որ ձեր բոլոր աղբամաններն ունեն կանաչ երեսպատման տախտակներ…
Քայլ 1: Aquire մասեր
Մրցույթի ժամկետի պատճառով իմ օգտագործած մասերի մեծ մասը «դարակաշարից դուրս» էին: Օգտագործված «Ֆոնդային» ռոբոտի մասեր. Ստեղծել (x1)-iRobot- ից www.irobot.com XBC V.3.0 (x1)-Botball- ից www.botball.org Ստեղծել-Roomba մալուխ (x1)-Botball- ից www.botball.orgServo (x2)-Botball- ից www.botball.org Սուր հեռաչափ (x1)-Botball- ից www.botball.org Տարբեր LEGO աղյուսներ-LEGO- ից www.lego.com 6-32 հաստոցների պտուտակներ (x4)-McMaster- ից www.mcmaster.com «Ստեղծված» ռոբոտի մասեր, որոնք օգտագործվում են. 3/8 »հաստ արտամղված PVC թերթ - այս իրերը հիանալի են, բայց ես չեմ կարող հիշել, թե որտեղից եմ այն ձեռք բերել, բայց դա հենց այս իրի պես է
Քայլ 2: Ստեղծեք եզակի մաս
Միակ մասը, որ ես ստիպված էի պատրաստել, ափսե էր, որը ամրացված էր Ստեղծել և առաջարկում էր LEGO տարածություն: LEGO աղյուսի անցքերի միջև ընկած տարածությունը 8 մմ է, բայց ես ժամանակ խնայելու համար կրկնակի տարածություն արեցի: Արտամղված PVC- ն հեշտ աշխատանք է: Այն կարող է կտրվել օգտակար դանակով, բայց կոշտ և ամուր է: Ես հաճախ եմ վերցնում ռոբոտին այս ափսեի մոտ և դեռ խնդիր չեմ ունեցել:
Քայլ 1. Կտրեք թերթիկը 3.5 "x 9.5" չափի, այն կարող եք կտրել օգտակար դանակով: Քայլ 2: Հորատեք պտուտակների համար նախատեսված անցքերը: Ստեղծվող պտուտակները պատրաստում են տուփ, որը 2 և 5/8 դյույմ է 8 և 5/8 դյույմ: Քայլ 3: Հորատեք LEGO աղյուսով բացված անցքերը: Օգտագործեք 3/16 դյույմանոց հորատիչ և ես 16 մմ հեռավորությամբ անցքեր բացեցի: Հուշում. Ես թերթիկը դրել եմ CAD ծրագրում, տպել այն ամբողջ չափով և կպցրել թերթին: Այնուհետև սա օգտագործել եմ որպես կտրելու և ուղղելու ուղեցույց: հորատում:
Քայլ 3. Ռոբոտի հավաքում
Ինձ հաճելի է հնարավորինս պարզ բաներ կառուցել: Այդ կերպ, երբ դրանք սեղանից ցած են թռչում, պետք չէ այդքան շատ կառուցել:
1. Պտուտակեք նորաձև ափսեը Ստեղծման վերևում: Կառուցեք թևը գնդակը բռնելու համար
Քայլ 4: Ռոբոտի ծրագրավորում
Ես որոշեցի օգտագործել XBC- ն որպես իմ վերահսկիչ, հիմնականում դրա ներկված գույնի հետևման պատճառով: Քանի որ ես որոշեցի XBC- ի հետ, որպես գործողության ուղեղ, ես ծրագրավորեցի իմ ռոբոտին Ինտերակտիվ C- ում, կամ ինչպես ես այն անվանում եմ IC: IC- ն անվճար է օգտագործման համար և կարելի է ներբեռնել www.botball.org կայքում: IC- ն շատ նման է C ++ - ին, բայց ունի մի քանի ներկառուցված գրադարաններ: Ինչպես պարզվում է, Օքլահոմայի համալսարանից Դեյվիդ Միլլերը ստեղծել է գրադարան Ստեղծագործի համար, որը կարելի է ներբեռնել նրա էջից ՝ https://i-borg.engr.ou.edu/~dmiller/create/: Այդ ռեսուրսների և ձեռնարկի ձեռնարկների հետ ես պատրաստ էի ծրագրավորել: Բայց հաջորդ մեծ մարտահրավերն այն էր, թե ինչ էի ուզում դա անել: Ես ցանկանում էի ռոբոտ, որը կարող էր գնալ նարնջագույն գնդակներ վերցնել և դրանք զամբյուղի մեջ դնել: Իմ նպատակը պարզ էր թվում, և, հավանաբար, կարող էր լինել պարզ, բայց որքան ավելի շատ էի ընկնում այն, ինչ կարող էր անել Ստեղծագործը, այնքան ավելի շատ էի ուզում դա անել: Իմ վերջնական ցուցակն այսպիսին էր ՝ 1. Գտնել նարնջագույն գնդակը 2. Վերցրեք նարնջագույն գնդակը 3. Տեղադրեք զամբյուղ 4. Գնդակը դնել զամբյուղի մեջ Առարկաներից խուսափելը 2. Ոչ մի բանից չընկնելը (սեղանի նման) 3. Մարտկոցի լիցքը հայտնաբերելը և տնային բազայի հետ միանալը ցածր օդի դեպքում, և այս ամենը լիովին ինքնավար է, այսինքն ՝ այդ ամենը նախապես ծրագրավորված է:
Քայլ 5: Կոդ
Հնարավոր է, որ այն խառնաշփոթ է, բայց աշխատում է: // et port/*Ստեղծման մալուխը նույնպես պետք է միացված լինի: Էլեկտրահաղորդիչը, 3 -փեղկավոր վարդակը 8 -րդ պորտին և UX պիտակով JP 28 (USB պորտի կողքին) U- ի տեսախցիկին*/ #սահմանել c_down 5 // տեսախցիկ servo down#սահմանել a_down 17 // arm servo down#define hold 50 // servo hold ball#define catch 27 // arm servo position to keep not catching on table#define shoot 150 // servo նետել գնդակը#սահմանել track_c 25 // ֆոտոխցիկի servo track փակման դիրքը#սահմանել track_f 45 // ֆոտոխցիկի servo track հեռավոր դիրք#սահմանել կենտրոն 120 // տեսախցիկի տեսողության կենտրոն#սահմանել անօրինական 30 // track_y կոորդինացնել, երբ գնդակը գտնվում է ճանկում#սահմանել գնդակը 0 // նարնջագույն գնդակի ալիք#սահմանել գնդակ_ x (track_x (գնդակ, 0)) // x գնդակի կոորդինատ#սահմանել գնդակ_յ (ուղի_յ (գնդակ, 0)) // y գնդակի կոորդինատ#սահմանել դանդաղ 100 // դանդաղ արագություն շարժիչ#սահմանել արագ 175 // արագ շարժիչի արագություն#սահմանել հստակ 0.2 // վ թռիչք դեպի հետ խոչընդոտներից#սահմանել ժամանակը 0.5 //1.0 90 աստիճանի աջ շրջադարձ է#սահմանել հանգիստը 0.05 // ժամանակն է քնել բլբներին հետևելիս#սահմանել արագությունը 175 ետ շեղված օբյեկտից#սահմանել ուղիղ 32767 // քշել ուղիղ գծով#սահմանել հետնապահ 2 // հիմնական գույնի ալիք#սահմանել քառակուսի 1 // հետնագեղձի շեշտադրման գույնի ալիք#սահմանել track_d 250 // նպատակին հետևելու համար տեսախցիկի դիրքը# սահմանել track_find 70 // երկար հետևելու համար տեսախցիկի դիրքը#սահմանել հակադարձ 2.25 // քնի ժամանակը 180 -ի համար#define back_f -150 // back fast speed#define back_sl -125 // back slow speed#define center_x 178 // true x center cam#define center_y 146 // իսկական y camint pida; // խուսափել processint pidb; // track processint pidc; // score processint have_ball = 0; // պատմում է, թե որ գործառույթն ենք անվավեր main () {long ch; enable_servos (); // միացնել servos init_camera (); // սկսել տեսախցիկի միացում (); // միանալ ՝ ստեղծելու համար ամբողջական controll start_a (); // սկսել խուսափել գործառույթից start_b (); // սկսել ball_tracking գործառույթը մինչ (1) {if (r_button () || gc_ldrop || gc_rdrop) {// եթե վերցված է կամ r ուսի կոճակը սպանում է (pida); սպանել (pidb); սպանել (pidc); disable_servos (); անջատել (); ընդմիջում;} create_battery_charge (); display_clear (); printf ("գանձում = %l / n", gc_battery_charge); եթե (gc_battery_charge <1200l || b_button ()) {kill (pida); սպանել (pidb); սպանել (pidc); նետել (); have_ball = 0; create_demo (1); while (b_button ()); while (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge (); display_clear (); printf ("գանձում = %l / n", gc_battery_charge); քուն (1.0);} միացնել (); ետ (); քուն (2.0); start_a (); start_b ();}}} անվավեր խուսափել () {մինչ (1) {// կրկնել ընդմիշտ create_sensor_update (); // թարմացնել սենսորի բոլոր արժեքները // create_drive (speeda, straight); if (gc_lbump == 1) {// ձախ բախում խուսափել_ից ();} // թեքվում է աջ ՝ այլ բան խուսափելու համար gc_lfcliff == 1) {// ձախ առջևի ժայռից խուսափել_շատ ();} այլ դեպքում, եթե (gc_rfcliff == 1) {// աջ առջևի ժայռից խուսափել_լավ ();} այլ դեպքում, եթե (gc_lcliff == 1) {// ձախ ժայռից խուսափել_միջուկ ();} այլապես եթե (gc_rcliff == 1) {// աջ ժայռից խուսափել_թև ();}}}} անվավեր track_ball () {սպանել (pidc); while (! have_ball) {// կրկնել մինչև ստանալ ball track_update (); հեռու (); // դնում է տեսախցիկը պատրաստ (); // սահմանում է թևը մինչ (et <255) {// մինչև առավելագույն արժեքը տեղի ունենա, երբ գնդակը բռնվի track_update (); // թարմացրեք տեսախցիկի պատկերը, եթե (ball_x <= (կենտրոն -5)) {// եթե գնդակը մնացել է track_update (); create_drive_direct (դանդաղ, արագ); // թեքել ձախ քունը (հանգիստ);} այլ դեպքում, եթե (ball_x> = (կենտրոն +5)) {// եթե գնդակը ճիշտ է track_update (); create_drive_direct (արագ, դանդաղ); // աջ քուն (հանգիստ);} այլապես, եթե (ball_x (կենտրոն -5)) {// եթե գնդակը կենտրոնացած է track_update (); create_drive_straight (արագ); // ուղիղ քնել (հանգստանալ);}} գրավել (); // բռնել գնդակի ազդանշանը (); // աղմուկը կանգնեցնել (); // դադարեցնել մեքենան վարելը have_ball = 1; // գրառում կատարել, որ Ես ունեմ գնդակ} start_c (); // գտնել զամբյուղի քունը (1.0); // քնել այնպես, որ ես ոչինչ չանեմ, երբ սպանվեմ} void find_basket () {kill (pidb); // kill գնդակին հետևելու գործընթաց գտնել (); // դնել տեսախցիկը track_set_minarea (1000); // հետևի տախտակը մեծ է, այնպես որ միայն մեծ բլթակներ փնտրեք մինչ (have_ball) {// մինչ ես ունեմ գնդակը track_update (); while (track_x (backb, 0) = (center_x+20)) {// մինչդեռ կենտրոնացված track_update (); if (track_x (backb, 0)> = (center_x+20)) {// եթե հետևի տախտակը մնացել է track_update (); create_spin_CCW (100);} // թեքվեք այլ ուղղությամբ, եթե (track_x (backb, 0) <= (center_x-20)) {// եթե backboard- ը ճիշտ է track_update (); create_spin_CW (300-center_x);} // թեքել աջ ՝ դանդաղեցնելով, քանի որ կենտրոնը մոտենում է} կանգառ (); while (track_size (backb, 0) <= (6000)) {// մինչ թիրախը track_update () չափի 6000 պիքսելից պակաս է; if (track_x (backb, 0) <= (center_x-5)) {// եթե թիրախը մնացել է track_update (); create_drive_direct (դանդաղ, արագ); // թեքել ձախ քունը (հանգիստ);} այլ դեպքում, եթե (track_x (backb, 0)> = (center_x+5)) {// եթե թիրախը ճիշտ է track_update (); create_drive_direct (արագ, դանդաղ); // աջ քուն (հանգիստ);} այլապես եթե (track_x (backb, 0) (center_x-5)) {// եթե թիրախը կենտրոնացած է track_update (); create_drive_straight (արագ); // ուղիղ քնել (հանգիստ);}} կանգառ (); // create_drive_straight (արագ); // մի փոքր մոտենալ // քնել (1.0); // կանգառ (); քուն (1.0); create_spin_CW (speeda); // պտտել ճիշտ քունը (հակադարձ); // բավական երկար քնել 180 պտույտի կանգառի համար (); ներքև (); // վայր դնել տեսախցիկը `հետևի հետևի քունը հետևելու համար (1.0); track_set_minarea (200); // օգտագործել ավելի փոքր min չափ, քանի որ մենք մատնացույց ենք անում այն և մտադիր ենք մոտենալ, մինչդեռ (track_y (backb, 0)> = (center_y-140)) {// մինչ թիրախը փոքր է y համակարգել track_update (); if (track_x (backb, 0) <= (center_x-5)) {// եթե թիրախը մնացել է track_update (); back_right (); // շրջել ձախ քունը (հանգիստ);} այլ դեպքում, եթե (track_x (backb, 0)> = (center_x+5)) {// եթե թիրախը ճիշտ է track_update (); back_left (); // աջ քուն (հանգիստ);} այլ դեպքում (track_x (backb, 0) (center_x-5)) {// եթե թիրախը կենտրոնացած է track_update (); ետ (); // ուղիղ քնել (հանգիստ);}} կանգառ (); ազդանշան (); նետել (); // կրակել քուն (1.0); have_ball = 0; // հիշեցում Ես գցեցի գնդակը և չունեմ այն} start_b (); // վերադառնալ գնդակին հետևելու քուն (1.0); // ոչինչ մի արա, քանի դեռ այս գործընթացը չի մարել} void cconnect () {create_connect (); create_full (); // լուսանցքի սենսորների լիակատար վերահսկողության համար create_power_led (0, 255);} // green power ledvoid անջատում () {stop (); // դադարեցնել create_disconnect ();} void back_away () {back (); քուն (պարզ); stop ();} void rotate_l () {create_spin_CCW (speeda); քուն (ժամանակ); stop ();} void rotate_r () {create_spin_CW (speeda); քուն (ժամանակ); 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 (տեսախցիկ, track_c);} դատարկ հեռու () {set_servo_position (տեսախցիկ, track_f);} անվավեր եզր () {set_servo_position (ձեռքը, բռնել);} դատարկ նետում () {int a; for (a = 50; a> = 30; a- = 1) {// պատրաստ եղիր set_servo_position (arm, a);} set_servo_position (arm, shoot);} void grab () {int a; for (a = 0; a <= hold; a+= 1) {// բարձրացնել թևը սահուն set_servo_position (arm, a);}} void down () {set_servo_position (cam, track_d);} void find () {set_servo_position (cam, track_find);} void start_a () {pida = start_process (խուսափել ());} void start_b () {pidb = start_process (track_ball ());} void start_c () {pidc = start_process (find_basket ());} void kill (int pid) {CREATE_BUSY; // սպասեք ընթացիկ ստեղծման գործընթացի ավարտին և առաջնահերթություն վերցրեք kill_process (pid); CREATE_FREE; // ես ավարտել եմ կանգառը ();} void խուսափել_թևից () {սպանել (pidb); // դադարեցնել մնացած ամեն ինչը սպանել (pidc); եզր (); // վերցնել ճանկը, որպեսզի այն չբռնվի սեղանի վրա հետ_շուտ (); // ետ հետ պտտել_լ (); // պտտվել խոչընդոտից պատրաստ (); //, եթե ճանկը հետ է, եթե (ունենա գնդակ) {// եթե ես ունեմ գնդակը start_c ();} // սկսել նպատակին հետևելը այլ կերպ, եթե (! have_ball) {// եթե ես գնդակը չունեմ start_b ();} // սկսել գնդակի հետևում} void խուսափել_շարժվանից () {սպանել (pidb); սպանել (pidc); եզր (); back_away (); պտտել_ռ (); պատրաստ (); if (have_ball) {start_c ();} այլ դեպքում (! 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: Արժե՞ր դա:
Costsախսերն էին. Ինձ համար էր Creat- ի արժեքը: Կարծում եմ, որ դա արժեր, և ամենալավն այն է, որ իմ օգտագործած բոլոր մասերը կրկին օգտագործելի են, եթե կարողանայի ինձ բաժանել այս բոտը: Այս տեսանյութը ցույց է տալիս խուսափել ենթակարգից, սեղանի վերևում: Այս տեսանյութում երևում է, թե ինչպես է ռոբոտը գոլ խփում 5 նարնջագույն գնդակ: Ես միայն օգնեցի արագացնել գործընթացը, այն ի վերջո կհայտնաբերեր 5 -րդ գնդակը ինքնուրույն:
Քայլ 7: Եզրակացություն
Վերջնական արդյունքը ռոբոտ է, որը կարող է ինքնուրույն վերցնել և խփել նարնջագույն գնդակներ դարպասում:
Ես շատ էի սիրում աշխատել այս նախագծի վրա: Որքան շատ էի աշխատում այս ռոբոտի վրա, այնքան ավելի էի կապված դրանով: Ես հիմա նրա հետ խոսում եմ այնպես, ասես ընտանի կենդանի լինի: Հուսով եմ, որ դա ձեզ օգնեց ձեր հաջորդ նախագծում: Կան շատ մարդիկ, որոնց ես պետք է շնորհակալություն հայտնեմ, բայց չափազանց շատ են: Ինչպես Բեռնարդ Շարտրն է այդքան էլեգանտ ասել. «Մենք նման ենք թզուկների հսկաների ուսերին, որպեսզի տեսնենք ավելին, քան նրանք, և իրերը ավելի մեծ հեռավորության վրա, ոչ թե մեր կողմից տեսողության կամ ֆիզիկական որևէ կտրուկության պատճառով: տարբերություն, բայց որովհետև մեզ բարձր է տանում և մեծացնում նրանց հսկա չափը »:
Խորհուրդ ենք տալիս:
Ինչպես պատրաստել 2 խաղացող DIY Bartop Arcade ՝ սովորական Marquee մետաղադրամների բնիկներով ՝ օգտագործելով Պանդորայի արկղը ՝ 17 քայլ (նկարներով)
Ինչպես պատրաստել 2 խաղացող DIY Bartop Arcade Custom Marquee Coin Slots- ով ՝ օգտագործելով Pandora's Box- ը. Սա քայլ առ քայլ ձեռնարկ է, թե ինչպես կարելի է կառուցել 2 նվագարկիչով վերին արկադային մեքենա, որն ունի հատուկ մետաղադրամների տեղեր, որոնք ներկառուցված են դարակում: Մետաղադրամների տեղամասերը կպատրաստվեն այնպես, որ նրանք ընդունեն միայն եռամսյակ և ավելի մեծ մետաղադրամներ: Այս արկադը սնուցվում է
Ինչպես կատարել ձայնով կառավարվող ռոբոտ. 3 քայլ (նկարներով)
Ինչպես կատարել ձայնով կառավարվող ռոբոտ. Երբևէ ցանկացե՞լ եք բաներ գործարկել ձեր ձայնի վրա: Այնուհետև ճիշտ տեղում կարող եք ցանկացած բան վերահսկել ՝ օգտագործելով arduino- ն, պարզապես պետք է դրանք միացնել և ծրագրում հայտարարել: Ես պարզ ձայն էի հանում վերահսկվող ռոբոտ, բայց կարող եք միացնել
IRobot Ստեղծեք անձնական տան ռոբոտ. 16 քայլ (նկարներով)
IRobot Ստեղծեք անձնական տան ռոբոտ. Ներկայացնում ենք անհատական տնային ռոբոտը, որը կառուցված է iRobot Create հարթակի շուրջ և մինի-itx համակարգչային համակարգ: Երբեք ավելի հեշտ և մատչելի չի եղել ռոբոտներ նախագծելը և կառուցելը `օգտագործելով ծրագրային ապահովման, համակարգչի, խաղալիքների և
Հիմք ստեղծեք ձեզ համար Ipod Dock (2 գաղափար). 7 քայլ
Պատրաստեք ձեզ համար հիմք Ipod Dock (2 գաղափար). Անհրաժեշտ է պլաստմասե մեկ գրիչ պլաստիկ տարայի համար X1 ipod նավահանգստի տաք սոսինձ ատրճանակ (կամ սովորական սոսինձ) ճշգրիտ դանակ նավահանգստի համար մեկ Ipod նավահանգստի միակցիչ BOX ipod նավահանգստի տաք սոսինձ ատրճանակ (կամ սովորական սոսինձ) ճշգրիտ դանակ գրիչ ipod (ոչ duh: P)
Ստեղծեք վեբ միացված ռոբոտ (մոտ 500 դոլարով) (օգտագործելով Arduino և Netbook). 6 քայլ (նկարներով)
Պատրաստեք վեբ միացված ռոբոտ (մոտ 500 դոլարով) (օգտագործելով Arduino և Netbook). Այս հրահանգը ցույց կտա ձեզ, թե ինչպես կառուցել ձեր սեփական վեբ միացված ռոբոտը (օգտագործելով Arduino միկրոկառավարիչ և Asus eee համակարգիչ): Ինչու՞ կցանկանայիք վեբ Միացված ռոբոտ Իհարկե խաղալու համար: Քշեք ձեր ռոբոտին սենյակից կամ հաշվից այն կողմ