Mundarija:

Qanday qilib IRobot yordamida avtonom basketbol robotini yasash mumkin: 7 qadam (rasmlar bilan)
Qanday qilib IRobot yordamida avtonom basketbol robotini yasash mumkin: 7 qadam (rasmlar bilan)

Video: Qanday qilib IRobot yordamida avtonom basketbol robotini yasash mumkin: 7 qadam (rasmlar bilan)

Video: Qanday qilib IRobot yordamida avtonom basketbol robotini yasash mumkin: 7 qadam (rasmlar bilan)
Video: ВОТ ЧТО ВЫ ПОЛУЧИТЕ, ЕСЛИ КУПИТЕ 👉 Dreame Bot D10 Plus 2024, Iyul
Anonim
IRobot yordamida tayanch sifatida avtonom basketbol o'ynaydigan robotni qanday yaratish kerak
IRobot yordamida tayanch sifatida avtonom basketbol o'ynaydigan robotni qanday yaratish kerak

Bu mening iRobot Create sinoviga kirishim. Men uchun bu jarayonning eng qiyin qismi robot nima qilishini hal qilish edi. Men yaratilishning ajoyib xususiyatlarini namoyish qilmoqchi edim, shu bilan birga robo qobiliyatini qo'shdim. Mening barcha g'oyalarim zerikarli, ammo foydali yoki salqin va amaliy bo'lmagan toifaga kirganday tuyuldi. Oxir -oqibat salqin va amaliy bo'lmagan g'alaba qozondi va basketbol o'ynaydigan robot tug'ildi. Biroz o'ylab ko'rgach, bu amaliy bo'lishi mumkinligini tushundim. Aytaylik, siz to'q sariq rangli qog'ozdan foydalangansiz va axlat qutilaringizning hammasi yashil taxtali …

1 -qadam: Aquire qismlari

Tanlov muddati cheklangani uchun men ishlatgan qismlarning aksariyati "javondan" chiqib ketdi. Ishlatiladigan "aktsiyalar" robot qismlari: Yarating (x1)-iRobotdan www.irobot.comXBC V.3.0 (x1)-Botboldan www.botball.orgCreate-Roomba kabeli (x1)-Botboldan www.botball.orgServo (x2)-Botball www.botball.orgSharp masofa o'lchagichi (x1)-Botbol www.botball.org dan LEGO g'ishtlari-LEGO www.lego.com dan 6-32 ta mashina vintlari (x4)-McMaster www.mcmaster-dan.com "Yaratilgan" robot qismlari ishlatilgan: 3/8 "qalinlikdagi ekstrudirovka qilingan PVX varaq - bu ajoyib narsa, lekin uni qayerdan olganimni eslay olmayman, lekin xuddi shu narsaga o'xshaydi https://www.lynxmotion.com/Category.aspx? CategoryID = 62 Boshqa qismlar: to'q sariq rangli "POOF" to'pi - WalMartBasketbol to'pi axlat qutisidan - LowesGreen "orqa taxtasidan" - qo'shimcha PVX bo'yalgan, och yashil rangda

2 -qadam: noyob qismni yarating

O'ziga xos qismni yarating
O'ziga xos qismni yarating

Men yasashim kerak bo'lgan yagona narsa - bu LEGO oralig'ini yaratishga mahkamlangan plastinka. LEGO g'ishtli teshiklari orasidagi masofa 8 mm. Ekstrudirovka qilingan PVX - bu shabada. U xizmat pichog'i bilan kesilishi mumkin, lekin u qattiq va mustahkam. Men tez -tez robotni shu plastinkadan olaman va menda hali muammo yo'q.

1 -qadam: varaqni 3,5 "x 9,5" ga kesib oling, uni xizmat pichog'i bilan kesishingiz mumkin. 2 -qadam: vintlar uchun teshiklarni burang. Yaratuvchi vintlardek 2 va 5/8 dyuymli 8 va 5/8 dyuymli quti yasashadi. 3 -qadam: LEGO g'isht oralig'idagi teshiklarni burang. 3/16 dyuymli matkapni ishlating va men teshiklarni bir -biridan 16 mm masofada joylashtirdim. Maslahat: Men varaqni SAPR dasturiga joylashtirdim, to'liq hajmda chop etdim va varaqqa yopishtirdim. Keyin men uni kesish uchun qo'llanma sifatida ishlatdim. burg'ulash

3 -qadam: Robotni yig'ish

Robotni yig'ish
Robotni yig'ish
Robotni yig'ish
Robotni yig'ish
Robotni yig'ish
Robotni yig'ish

Men narsalarni iloji boricha sodda qilib qurishdan zavqlanaman, shuning uchun ular stoldan sakrab tushganda, siz ko'p narsani tiklashingiz shart emas!

1. Yangi yasalgan plastinkani Yaratishning yuqori qismiga burab qo'ying 2. To'pni ushlab turadigan qo'lni yarating 3. Kamerani ushlab turadigan qo'lni yarating 4. Qatorni qidirish moslamasini yarating 5. XBC -ni o'rnating va barcha kabellarni ulang.

4 -qadam: Robotni dasturlash

Men XBC -ni boshqaruvchi sifatida ishlatishga qaror qildim, chunki u asosan ranglarni kuzatib borgan. Chunki men XBC bilan ishlashning miyasi sifatida qaror qildim, men o'z robotimni Interaktiv C yoki IC deb nomladim. ICdan foydalanish bepul va uni www.botball.org saytidan yuklab olish mumkin. IC C ++ ga juda o'xshaydi, lekin bir nechta kutubxonalarda o'rnatilgan. Ma'lum bo'lishicha, Oklaxoma universitetidan Devid Miller yaratish uchun kutubxona yozgan, uni https://i-borg.engr.ou.edu/~dmiller/create/ sahifasidan yuklab olish mumkin. Ushbu manbalar va yaratish bo'yicha qo'llanmalar bilan men dasturlashga tayyorman. Ammo keyingi katta qiyinchilik men nima qilishni xohlardim? Men ketmoqchi bo'lgan to'q sariq rangli to'plarni savatga to'play oladigan robotni xohlardim. Mening maqsadim sodda bo'lib tuyuldi va, ehtimol, oddiy bo'lishi mumkin edi, lekin men yaratgan narsaga qanchalik ko'p kirsam, shuncha ko'p qilishni xohlardim. Mening oxirgi ro'yxatim shunday ko'rinishda edi: 1. To'q sariq to'pni toping 2. To'q sariq to'pni oling 3. Savatni toping 4. To'pni savatga soling1. Ob'ektlardan qochish 2. Hech narsadan yiqilmaslik (stol kabi) 3. Batareyaning zaryadlanishini aniqlash va past ohangda uy bazasiga ulash va bularning barchasi butunlay avtonom, ya'ni barchasi oldindan dasturlashtirilgan.

5 -qadam: kod

Bu tartibsiz bo'lishi mumkin, lekin u ishlaydi.#"Createlib.ic" dan foydalaning #use "xbccamlib.ic" #define cam 0 // kamera servo porti#3 -sonli qo'lni aniqlang // arm servo porti#Def et (analog (0)) // Et port/*Yaratish kabeli ham ulanishi kerak. Quvvat jeti, 8 -portga 3 ta ulangan vilkasi va UX belgisini JP 28 ga (USB port yonida) U bilan kameraga qarab*/ #ta'rif c_down 5 // kamera servo pastga#ta'rif a_down 17 // qo'l servo pastga#ushlab turishni belgilash 50 // servo ushlab turish to'pi#ushlangan 27 ni belgilash // stolga tushib qolmaslik uchun qo'l servo pozitsiyasi#tortishishni aniqlash 150 // servo to'p tashlash#trek_c 25 ni aniqlash // kamera servo izi yaqin pozitsiya#trekni belgilash 45f. // kamera servo izi uzoq pozitsiya#markazni aniqlash 120 // kamera ko'rish markazi#oraliqni belgilash 30 // to'pni panjada bo'lgan vaqtda kuzatib borish 0 // apelsin to'pi kanali#ball_x belgilang (trek_x (to'p, 0)) // x to'p koordinatasi#shar_y belgilang (trek_y (to'p, 0)) // y to'p koordinatasi#sekin 100 aniqlang // sekinlik tezligi vosita#tez aniqlash 175 // tez motor tezligi#aniq 0,2 // s to'siqlardan orqaga chekinish#vaqtni belgilash 0.5 //1.0 -90 gradusli o'ng burilish#dam olishni belgilash 0.05 // tomchilarni kuzatishda uxlash vaqti#tezlikni aniqlash 175 // burilish tezligi#orqani belgilash -200 // tezlikni urilgan ob'ektdan orqaga qayting#to'g'ri 32767 ni aniqlang // to'g'ri chiziqda haydang#orqa tomonni belgilang 2 // orqa panelning asosiy rangi#1 -kvadratni belgilang // orqa panelning aksent rangining kanali#trekni aniqlang_d 250 // maqsadni kuzatish uchun kamera joylashuvi# track_find 70 // uzoq kuzatuv uchun kamera holatini belgilash#teskari 2.25 // 180 uchun uyqu vaqti#orqani_f -150 // orqaga tezlikni belgilash#back_sl -125 // orqaga sekin tezlikni#center_x 178 ni aniqlang // haqiqiy x markazi of cam#define center_y 146 // true y camint pida; // processint pidb; // track processint pidc; // process processint have_ball = 0; // biz qaysi funktsiyani o'chirib qo'yayotganimizni aytadi main () {long ch; enable_servos (); // servos init_camera -ni yoqish (); // kamerani ishga tushirish cconnect (); // to'liq nazorat bilan yaratish uchun ulanish start_a (); // ishga tushirishdan qochish start_b (); // to'pni kuzatish funktsiyasini (1) {if (r_button () || gc_ldrop || gc_rdrop) {// agar yelka tugmachasini o'ldirsa yoki o'ldirsa (pida); o'ldirish (pidb); o'ldirish (pidc); o'chirish_servos (); ajratish (); tanaffus;} yaratish_battery_charge (); display_clear (); printf ("zaryad = %l / n", gc_battery_charge); if (gc_battery_charge <1200l || b_button ()) {o'ldirish (pida); o'ldirish (pidb); o'ldirish (pidc); otish (); have_ball = 0; yaratish_demo (1); while (b_button ()); while (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge (); display_clear (); printf ("zaryad = %l / n", gc_battery_charge); uyqu (1.0);} cconnect (); orqaga (); uxlash (2.0); start_a (); start_b ();}}} void qochish () {while (1) {// abadiy takrorlash create_sensor_update (); // barcha sensor qiymatlarini yangilash // create_drive (speeda, straight); if (gc_lbump == 1) {// chap burilishdan qochish_right ();} // boshqasidan qochish uchun o'ngga buriladi, agar (gc_rbump == 1) {// o'ng burilishdan saqlanish_soft ();} // boshqasidan qochish uchun chapga buriladi, agar gc_lfcliff == 1) {// chap oldingi jarlikdan qochish_right ();} boshqa if (gc_rfcliff == 1) {// o'ng oldingi jarlikdan qochish_left ();} boshqa bo'lsa (gc_lcliff == 1) {// chap jarlikdan qochish_right (};} boshqa if (gc_rcliff == 1) {// o'ng jarlikdan qochish_left ();}}} void track_ball () {o'ldirish (pidc); while (! have_ball) {// ball track_update () bo'lguncha takrorlang; far (); // kamerani tayyor holatga keltiradi (); // qo'lni ushlab turganda (et <255) {// to'pni ushlab qolganda maksimal qiymat bo'lguncha track_update (); // kamera tasvirini yangilang, agar (ball_x <= (center-5)) {// agar to'p track_update qoldirilgan bo'lsa (); create_drive_direct (sekin, tez); // chap uyquni burish (dam olish);} if if (ball_x> = (markaz+5)) {// agar to'p to'g'ri bo'lsa track_update (); create_drive_direct (tez, sekin); // o'ngga uyqu (dam olish);} if if (ball_x (markaz-5)) {// agar to'p markazlashtirilgan bo'lsa track_update (); create_drive_straight (tez); // to'g'ri uxlash (dam olish);}} tortish (); // to'p ovozini olish (); // shovqinni to'xtatish (); // haydashni to'xtatish have_ball = 1; // Menda to'p bor} start_c (); // savatni top (1.0); // uxla, shuning uchun men o'lganimda hech narsa qilmayman} void find_basket () {o'ldirish (pidb); // to'pni kuzatish jarayoni find (); // kamerani qo'yish track_set_minarea (1000); // orqa panel katta, shuning uchun faqat track_update () to'pi bor ekan, faqat (have_ball) {// katta bo'laklarni qidiring; while (track_x (backb, 0) = (center_x+20)) {// markazlanmagan track_update (); if (track_x (backb, 0)> = (center_x+20)) {// agar orqa panel track_update qoldirilgan bo'lsa (); create_spin_CCW (100);} // chapga buriling, agar (track_x (backb, 0) <= (center_x-20)) {// agar orqa panel to'g'ri track_update () bo'lsa; create_spin_CW (300-center_x);} // markaz yaqinlashganda sekinlashib o'ngga buriling} stop (); while (track_size (backb, 0) <= (6000)) {// maqsad 6000 pikseldan kichik bo'lsa track_update (); if (track_x (backb, 0) <= (center_x-5)) {// agar maqsad track_update qoldirilgan bo'lsa (); create_drive_direct (sekin, tez); // chap uyquni burish (dam olish);} if if (track_x (backb, 0)> = (center_x+5)) {// agar maqsad to'g'ri bo'lsa track_update (); create_drive_direct (tez, sekin); // o'ngga uyqu (dam olish);} if if (track_x (backb, 0) (center_x-5)) {// agar maqsad markazlashtirilgan bo'lsa track_update (); create_drive_straight (tez); // to'g'ri uxlash (dam olish);}} to'xtatish (); // create_drive_straight (tez); // biroz yaqinlashing // uxlash (1.0); //STOP(); uxlash (1.0); create_spin_CW (speeda); // o'ng uyquni aylantirish (teskari); // 180 burilish uchun etarlicha uzoq uxlash (); pastga (); // orqa panel uyqusini kuzatish uchun kamerani pastga qo'ying (1.0); track_set_minarea (200); // biz kichikroq o'lchamdan foydalaning, chunki biz unga ishora qilamiz va yaqinlashamiz (track_y (backb, 0)> = (center_y-140)) {// maqsad kamroq y koordinatasi track_update (); if (track_x (backb, 0) <= (center_x-5)) {// agar maqsad track_update qoldirilgan bo'lsa (); back_right (); // chapga uyqu (dam olish);} if if (track_x (backb, 0)> = (center_x+5)) {// agar maqsad to'g'ri bo'lsa track_update (); back_left (); // o'ngga uyqu (dam olish);} if if (track_x (backb, 0) (center_x-5)) {// agar maqsad markazlashtirilgan bo'lsa track_update (); orqaga (); // to'g'ridan -to'g'ri uxlash (dam olish);}} to'xtatish (); ovozli signal (); tashlash (); // otishni o'rganish (1.0); have_ball = 0; // eslatma men to'pni tashladim va u yo'q} start_b (); // to'pni kuzatish uyqusiga qaytish (1.0); // bu jarayon o'lmaguncha hech narsa qilma} void cconnect () {create_connect (); create_full (); // datchik sensorlarini to'liq nazorat qilish uchun create_power_led (0, 255);} // yashil chiroq ledvoid ajratish () {to'xtatish (); // harakatlanishni to'xtatish create_disconnect ();} void back_away () {back (); uxlash (toza); stop ();} void rotate_l () {create_spin_CCW (speeda); uxlash (vaqt); stop ();} void rotate_r () {create_spin_CW (speeda); uxlash (vaqt); 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);} void far () {set_servo_position (cam, track_f);} void ledge () {set_servo_position (qo'l, ushlangan);} bo'sh tashlash () {int a; uchun (a = 50; a> = 30; a- = 1) {// tayyor bo'lsin set_servo_position (qo'l, a);} set_servo_position (qo'l, o'q);} void grab () {int a; uchun (a = 0; a <= ushlab turish; a+= 1) {// qo'lni silliq ko'taring set_servo_position (qo'l, a);}} void down () {set_servo_position (cam, track_d);} void find () {set_servo_position (cam, track_find);} void start_a () {pida = start_process (oldini olish ());} void start_b () {pidb = start_process (track_ball ());} void start_c () {pidc = start_process (find_basket ());} void kill (int pid) {CREATE_BUSY; // joriy yaratish jarayonining tugashini kuting va kill_process (pid) ustuvorligini oling; CREATE_FREE; // men tugatdim stop ();} void qochish_sola () {o'ldirish (pidb); // boshqa hamma narsani to'xtatish (pidc); ledge (); // panjani ko'taring, shunda u stolga tushib qolmaydi (); {// agar menda to'p bo'lsa start_c ();} // boshqa maqsadni kuzatishni boshla if if (! have_ball) {// menda to'p yo'q bo'lsa start_b ();} // to'pni kuzatishni boshla} void qochish_right () {o'ldirish (pidb); o'ldirish (pidc); to'siq (); orqaga (); aylantirish_r (); tayyor (); if (have_ball) {start_c ();} if 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 -qadam: bunga arziydimi?

Xarajatlar quyidagilardan iborat edi: + batareya + doc = 260 dollarlik XBC boshlang'ich to'plami (xbc, kam, LEGO g'ishtlari, datchiklar) = 579 dollar PVX + bo'yoq + vintlar = taxminan 20 dollar Umumiy xarajatlar = 859 dollar Menimcha, bu yaratilishning narxi edi, menimcha, bunga arziydi va eng yaxshi tomoni shundaki, agar men o'zimni bu botdan ajratishim mumkin bo'lsa, men ishlatgan barcha qismlar qayta ishlatilishi mumkin., stol usti ustida. Bu videoda robot 5 ta to'q sariq to'pni darvozaga kiritgani ko'rsatilgan. Men faqat jarayonni tezlashtirishga yordam berdim, u 5 -to'pni oxir -oqibat o'zi topardi.

7 -qadam: Xulosa

Yakuniy natija - to'q sariq rangli to'plarni o'zi qabul qila oladigan robot.

Menga bu loyihada ishlash yoqdi. Men bu robot ustida qanchalik ko'p ishlagan bo'lsam, unga shunchalik bog'lanib qoldim. Men hozir u bilan uy hayvonidek gaplashaman. Umid qilamanki, bu sizga keyingi loyihada yordam berdi. Rahmat qilishim kerak bo'lgan juda ko'p odamlar bor, lekin ular juda ko'p. Chartres Bernard singari, biz shunday aytdiki: "Biz gigantlarning yelkasidagi mittilarga o'xshaymiz, shuning uchun biz ulardan ko'ra ko'proq narsani va uzoq masofadagi narsalarni ko'ra olamiz. farq, lekin biz baland ko'tarilganimiz va ulkan o'lchamlari bilan ko'tarilganimiz uchun."

Tavsiya: