विषयसूची:

IRobot का उपयोग करके एक स्वायत्त बास्केटबॉल खेलने वाला रोबोट कैसे बनाएं आधार के रूप में बनाएं: 7 चरण (चित्रों के साथ)
IRobot का उपयोग करके एक स्वायत्त बास्केटबॉल खेलने वाला रोबोट कैसे बनाएं आधार के रूप में बनाएं: 7 चरण (चित्रों के साथ)

वीडियो: IRobot का उपयोग करके एक स्वायत्त बास्केटबॉल खेलने वाला रोबोट कैसे बनाएं आधार के रूप में बनाएं: 7 चरण (चित्रों के साथ)

वीडियो: IRobot का उपयोग करके एक स्वायत्त बास्केटबॉल खेलने वाला रोबोट कैसे बनाएं आधार के रूप में बनाएं: 7 चरण (चित्रों के साथ)
वीडियो: अंतरिक्ष की विजय में फ्रांस का योगदान और ग्रह के बारे में हमारी दृष्टि पर इसका प्रभाव 2024, नवंबर
Anonim
एक IRobot का उपयोग करके एक स्वायत्त बास्केटबॉल खेलने वाला रोबोट कैसे बनाएं, एक आधार के रूप में बनाएं
एक IRobot का उपयोग करके एक स्वायत्त बास्केटबॉल खेलने वाला रोबोट कैसे बनाएं, एक आधार के रूप में बनाएं

यह आईरोबोट क्रिएट चैलेंज के लिए मेरी प्रविष्टि है। मेरे लिए इस पूरी प्रक्रिया का सबसे कठिन हिस्सा यह तय करना था कि रोबोट क्या करने जा रहा है। मैं कुछ रोबो फ्लेयर को जोड़ते हुए, क्रिएट की शानदार विशेषताओं को प्रदर्शित करना चाहता था। मेरे सभी विचार या तो उबाऊ लेकिन उपयोगी, या शांत और अव्यवहारिक की श्रेणी में आते थे। अंत में कूल और अव्यवहारिक की जीत हुई और बास्केटबॉल खेलने वाले रोबोट का जन्म हुआ। कुछ सोचने के बाद मुझे एहसास हुआ कि यह व्यावहारिक हो सकता है। मान लीजिए कि आप नारंगी कागज का उपयोग करते हैं, और आपके सभी कूड़ेदानों में हरे रंग के बैकबोर्ड हैं …

चरण 1: एक्वायर पार्ट्स

प्रतियोगिता की समय सीमा के कारण, मेरे द्वारा उपयोग किए जाने वाले अधिकांश भाग "शेल्फ से बाहर" थे। उपयोग किए गए "स्टॉक" रोबोट पार्ट्स: क्रिएट (X1) -- iRobot www.irobot.comXBC V.3.0 (x1) से -- बॉटबॉल www.botball.orgCreate-Roomba केबल (x1) से -- बॉटबॉल www.botball.orgServo से (x2) -- बॉटबॉल www.botball.orgSharp रेंजफाइंडर (x1) से -- बॉटबॉल www.botball.org मिश्रित लेगो ब्रिक्स से -- लेगो www.lego.com6-32 मशीन स्क्रू (x4) से -- मैकमास्टर www.mcmaster से.com "निर्मित" रोबोट के पुर्जे प्रयुक्त: 3/8 "मोटी एक्सट्रूडेड पीवीसी शीट - यह सामान बहुत बढ़िया है, लेकिन मुझे याद नहीं है कि मुझे यह कहाँ से मिला है, लेकिन यह इस सामान की तरह है https://www.lynxmotion.com/Category.aspx?CategoryID=62अन्य भाग:ऑरेंज "POOF" बॉल -- WalMart बास्केटबॉल गोल दिखने वाले कूड़ेदान से -- LowesGreen "बैकबोर्ड" से -- अतिरिक्त पीवीसी चमकीले हरे रंग में रंगा हुआ

चरण 2: अद्वितीय भाग बनाएं

अद्वितीय भाग बनाएँ
अद्वितीय भाग बनाएँ

केवल एक हिस्सा जिसे मुझे बनाना था, वह एक प्लेट थी जो क्रिएट से जुड़ी थी और लेगो स्पेसिंग की पेशकश की थी। लेगो ब्रिक होल की दूरी 8 मिमी अलग है, लेकिन मैंने समय बचाने के लिए डबल स्पेसिंग की। एक्सट्रूडेड पीवीसी के साथ काम करने के लिए एक हवा है। इसे उपयोगिता चाकू से काटा जा सकता है, लेकिन यह कठोर और मजबूत होता है। मैं अक्सर इस प्लेट से रोबोट उठाता हूं और मुझे अभी तक कोई समस्या नहीं हुई है।

चरण 1: शीट को 3.5 "x 9.5" पर काटें, आप इसे एक उपयोगिता चाकू से काट सकते हैं। चरण 2: क्रिएट स्क्रू के लिए छेदों को ड्रिल करें। क्रिएट स्क्रू एक बॉक्स बनाते हैं जो 2 और 5/8 "8 और 5/8" का होता है। चरण 3: लेगो ईंट के छेदों को ड्रिल करें। एक 3/16 "ड्रिल बिट का उपयोग करें और मैंने छेदों को 16 मिमी अलग रखा। युक्ति: मैंने एक सीएडी प्रोग्राम में शीट बिछाई, इसे पूर्ण आकार में प्रिंट किया और इसे शीट पर टेप किया। फिर मैंने इसे काटने के लिए एक गाइड के रूप में इस्तेमाल किया और ड्रिलिंग

चरण 3: रोबोट को असेंबल करना

रोबोट को असेंबल करना
रोबोट को असेंबल करना
रोबोट को असेंबल करना
रोबोट को असेंबल करना
रोबोट को असेंबल करना
रोबोट को असेंबल करना

मैं चीजों को यथासंभव सरलता से बनाने का आनंद लेता हूं, इस तरह जब वे टेबल से कूद जाते हैं तो आपको उतना पुनर्निर्माण करने की आवश्यकता नहीं होती है!

1. नए जमाने की प्लेट को क्रिएट के शीर्ष पर स्क्रू करें 2. गेंद को पकड़ने के लिए एक आर्म बनाएं 3. कैमरा पकड़ने के लिए एक आर्म बनाएं 4. रेंजफाइंडर के लिए एक माउंट बनाएं 5. एक्सबीसी माउंट करें और सभी केबल्स कनेक्ट करें

चरण 4: रोबोट की प्रोग्रामिंग

मैंने एक्सबीसी को अपने नियंत्रक के रूप में उपयोग करने का फैसला किया क्योंकि मुख्य रूप से इसकी रंग ट्रैकिंग में बनाया गया था। क्योंकि मैंने एक्सबीसी के साथ ऑपरेशन के दिमाग के रूप में फैसला किया था, मैंने अपने रोबोट को इंटरएक्टिव सी में प्रोग्राम किया था, या जैसा कि मैं इसे आईसी कहता हूं। आईसी उपयोग करने के लिए स्वतंत्र है और इसे www.botball.org पर डाउनलोड किया जा सकता है। IC बहुत हद तक C++ से मिलता-जुलता है, लेकिन इसमें कई बिल्ट इन लाइब्रेरी हैं। जैसा कि यह पता चला है, ओक्लाहोमा विश्वविद्यालय के डेविड मिलर ने क्रिएट के लिए एक पुस्तकालय लिखा है जिसे https://i-borg.engr.ou.edu/~dmiller/create/ पर उनके पेज से डाउनलोड किया जा सकता है। उन संसाधनों और निर्माण के लिए नियमावली के साथ मैं कार्यक्रम के लिए तैयार था। लेकिन अगली बड़ी चुनौती यह थी कि मैं इसे क्या करना चाहता था? मुझे एक ऐसा रोबोट चाहिए था जो नारंगी गेंदों को उठाकर टोकरी में रख सके। मेरा लक्ष्य सरल लग रहा था, और शायद सरल हो सकता था, लेकिन जितना अधिक मैं क्रिएट कर सकता था, उतना ही मैं इसे करना चाहता था। मेरी अंतिम सूची इस तरह दिखी: १। नारंगी गेंद 2 खोजें। नारंगी गेंद उठाओ3. टोकरी 4 का पता लगाएँ। गेंद को टोकरी में रखो, जबकि १. वस्तुओं से बचना 2. कुछ भी नहीं गिरना (एक मेज की तरह) 3. बैटरी के चार्ज का पता लगाना और कम होने पर होम बेस के साथ डॉकिंग करना, और यह सब पूरी तरह से स्वायत्त है, जिसका अर्थ है कि यह सभी प्रीप्रोग्राम्ड है।

चरण 5: कोड

यह गन्दा हो सकता है, लेकिन यह काम करता है। //et port/*क्रिएट केबल को भी प्लग इन करने की जरूरत है। पावर जैक, पोर्ट 8 में 3 प्रोंग्ड प्लग और UX लेबल वाला JP 28 (USB पोर्ट के बगल में) यू के साथ कैमरे की ओर */ #डिफाइन सी_डाउन 5//कैमरा सर्वो डाउन#डिफाइन ए_डाउन 17//आर्म सर्वो डाउन#डिफाइन होल्ड 50//सर्वो होल्ड बॉल#डिफाइन 27//आर्म सर्वो पोजीशन को टेबल पर पकड़े जाने से बचाने के लिए#डिफाइन शूट 150//सर्वो थ्रो बॉल#डिफाइन ट्रैक_सी 25//कैमरा सर्वो ट्रैक क्लोज पोजीशन#डिफाइन ट्रैक_एफ 45//कैमरा सर्वो ट्रैक फार पोजिशन#डिफाइन सेंटर 120//सेंटर ऑफ कैमरा विजन#डिफाइन इनरेंज 30//ट्रैक_य कोऑर्डिनेट जब बॉल पंज में हो#डिफाइन बॉल 0//ऑरेंज बॉल का चैनल#डिफाइन बॉल_एक्स (ट्रैक_एक्स(बॉल, 0))//x बॉल का कोऑर्डिनेट#डिफाइन बॉल_वाई (ट्रैक_वाई(बॉल, 0))//y बॉल का कोऑर्डिनेट#डिफाइन स्लो 100//स्लो स्पीड मोटर#तेजी से परिभाषित करें 175//तेज मोटर की गति#स्पष्ट 0.2//सेकंड परिभाषित करें बाधाओं से दूर जाने के लिए लीप # परिभाषित समय 0.5 // 1.0 90 डिग्री दायां मोड़ है # आराम को परिभाषित करें 0.05//ब्लॉब्स को ट्रैक करते समय सोने का समय # परिभाषित करें 175 // बचने की गति से बचें # परिभाषित करें बैक_एस -200//गति को टकराई हुई वस्तु से दूर#सीधे 32767//ड्राइव को एक सीधी रेखा में परिभाषित करें#बैकब को परिभाषित करें 2//बैकबोर्ड मुख्य रंग का चैनल#वर्ग 1//बैकबोर्ड एक्सेंट रंग के चैनल को परिभाषित करें#ट्रैक_डी 250//ट्रैकिंग लक्ष्य के लिए कैमरा स्थिति को परिभाषित करें# लंबी ट्रैकिंग के लिए ट्रैक_फाइंड 70//कैमरा स्थिति को परिभाषित करें# 180 के लिए रिवर्स 2.25//स्लीप टाइम को परिभाषित करें#बैक_एफ -150//बैक फास्ट स्पीड को परिभाषित करें#बैक_एसएल -125//बैक स्लो स्पीड को परिभाषित करें#डिफाइन सेंटर_x 178//ट्रू एक्स सेंटर ऑफ कैम#डिफाइन सेंटर_वाई 146//ट्रू वाई सेंटर ऑफ कैमिंट पिडा;//प्रोसेसिंट पीआईडीबी से बचें;//ट्रैक प्रोसेसिंट पीआईडीसी;//स्कोर प्रोसेसिंट है_बॉल = 0;//बताता है कि हम कौन से फंक्शन को इनवॉइस कर रहे हैं main(){ लॉन्ग ch; enable_servos (); // सर्वो को सक्षम करें init_camera (); // कैमरा शुरू करें cconnect (); // पूर्ण नियंत्रण के साथ बनाने के लिए कनेक्ट करें start_a (); // प्रारंभ फ़ंक्शन से बचें start_b (); // बॉल_ट्रैकिंग फ़ंक्शन शुरू करें जबकि (1) {if(r_button()||gc_ldrop||gc_rdrop){// if पिक अप या r शोल्डर बटन किल (पिडा); मार (पीआईडीबी); मार (पीआईडीसी); अक्षम_सर्वो (); डिस्कनेक्ट (); ब्रेक;} create_battery_charge (); डिस्प्ले_क्लियर (); प्रिंटफ ("चार्ज =% l / n", gc_battery_charge); अगर (gc_battery_charge<1200l||b_button ()){ किल (पिडा); मार (पीआईडीबी); मार (पीआईडीसी); फेंकना(); हैव_बॉल = 0; create_demo(1); जबकि (बी_बटन ()); जबकि(gc_battery_charge<2800l&&!b_button()){ create_battery_charge(); डिस्प्ले_क्लियर (); प्रिंटफ ("चार्ज =% l / n", gc_battery_charge); नींद (1.0);} सीकनेक्ट (); वापस(); नींद (2.0); शुरू में एक(); start_b ();} }} से बचें () {जबकि (1) {// हमेशा के लिए दोहराएं create_sensor_update (); // सभी सेंसर मान अपडेट करें // create_drive (स्पीडा, स्ट्रेट); अगर(gc_lbump==1){//बाएं टक्कर से बचें_दाएं();}//बाएं मुड़ता है तो किसी और से बचने के लिए अगर(gc_rbump==1){//दायां टक्कर से बचें_बाएं();}//बाएं मुड़ता है तो और से बचने के लिए अगर(gc_lfcliff==1){//बाएं सामने की चट्टान से बचें_दाएं ();} और अगर (gc_rfcliff == 1) {// दाएं सामने की चट्टान से बचें_बाएं ();} और अगर (gc_lcliff == 1) {// बाईं चट्टान से बचें_दाएं ();} और अगर (gc_rcliff == 1) {// सही चट्टान से बचें_बाएं ();}}} शून्य ट्रैक_बॉल () {मार (पीआईडीसी); जबकि (! have_ball) {// बॉल ट्रैक_अपडेट () प्राप्त होने तक दोहराएं; दूर (); // कैमरा तैयार करता है (); // हाथ सेट करता है (एट <255) {// अधिकतम मूल्य तब तक होता है जब गेंद पकड़ी जाती है ट्रैक_अपडेट (); // कैमरा तस्वीर अपडेट करें अगर (बॉल_एक्स <= (केंद्र-5)){// यदि गेंद बची है तो track_update(); create_drive_direct (धीमी गति से, तेज़); // बाईं नींद को चालू करें (बाकी);} और अगर (बॉल_एक्स> = (केंद्र + 5)) {// अगर गेंद सही है ट्रैक_अपडेट (); create_drive_direct (तेज़, धीमा); // सही नींद (बाकी) चालू करें;} और अगर (ball_x (केंद्र -5)) {// यदि गेंद ट्रैक_अपडेट () केंद्रित है; create_drive_straight (तेज़); // सीधे सो जाओ (आराम);}} पकड़ो ();//बॉल बीप पकड़ो (); // शोर रोकें (); // ड्राइविंग बंद करो है_बॉल = 1; // ध्यान दें कि मेरे पास बॉल है } start_c (); // बास्केट स्लीप (1.0); // सो जाओ ताकि मैं कुछ भी नहीं कर रहा हूं जब मैं मारा जाता हूं} void find_basket () {किल (पिडब); // किल बॉल ट्रैकिंग प्रोसेस ढूंढें ();//कैमरा ऊपर ट्रैक_सेट_मिनारिया (1000);//बैकबोर्ड बड़ा है, इसलिए केवल बड़े बूँदें देखें जबकि (हैव_बॉल) {// जबकि मेरे पास बॉल ट्रैक_अपडेट (); जबकि(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)){// अगर बैकबोर्ड सही है track_update(); create_spin_CW(300-center_x);}// केंद्र के करीब आते ही दाएं धीमी गति से मुड़ें} स्टॉप (); जबकि(track_size(backb, 0)<=(6000)){// जबकि लक्ष्य 6000 पिक्सेल से कम आकार का है track_update(); if(track_x(backb, 0)<=(center_x-5)){// अगर लक्ष्य बचा हुआ है track_update(); create_drive_direct (धीमा, तेज़); // बाईं नींद को चालू करें (बाकी);} और अगर (track_x (बैकब, 0)> = (center_x + 5)) {// यदि लक्ष्य सही है ट्रैक_अपडेट (); create_drive_direct (तेज़, धीमा); // सही नींद को चालू करें (बाकी);} और अगर (track_x (बैकब, 0) (center_x-5)) {// यदि लक्ष्य केंद्रित है track_update (); create_drive_straight (तेज़); // सीधे सो जाओ (आराम);}} रोकें (); // create_drive_straight (तेज); // थोड़ा करीब आएं // नींद (1.0); //विराम(); नींद (1.0); create_spin_CW (स्पीडा); // स्पिन राइट स्लीप (रिवर्स); // 180 टर्न स्टॉप () के लिए पर्याप्त नींद लें; डाउन (); // बैकबोर्ड स्लीप (1.0) को ट्रैक करने के लिए कैमरा नीचे रखें; track_set_minarea(200);//एक छोटे न्यूनतम आकार का उपयोग करें, क्योंकि हम इस पर इशारा कर रहे हैं और करीब आने जा रहे हैं जबकि(track_y(backb, 0)>=(center_y-140)){//जबकि लक्ष्य से कम है y समन्वय ट्रैक_अपडेट (); 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);}//ग्रीन पावर एलईडीवॉइड डिस्कनेक्ट (){स्टॉप ();//चलना बंद करें create_disconnect();}void back_away(){ back(); नींद (स्पष्ट); स्टॉप ();} शून्य रोटेट_एल () { create_spin_CCW (स्पीडा); सोने का समय); स्टॉप ();} शून्य रोटेट_आर () { create_spin_CW (स्पीडा); सोने का समय); रोकें ();} शून्य रोकें () { create_drive (0, सीधे);} शून्य वापस () { create_drive (back_s, सीधे);} शून्य तैयार () {set_servo_position (हाथ, a_down);} शून्य जांच () {set_servo_position (कैम, ट्रैक_सी);} शून्य दूर () {set_servo_position (कैम, ट्रैक_एफ);} शून्य कगार () {set_servo_position (हाथ, पकड़ा);} शून्य फेंक () { int a; for(a=50; a>=30; a-=1){// तैयार हो जाओ set_servo_position(arm, a);} set_servo_position(arm,शूट);}शून्य हड़पने(){ 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 (कैम, ट्रैक_फाइंड);} शून्य स्टार्ट_ए () {पिडा = स्टार्ट_प्रोसेस (से बचें ());} शून्य स्टार्ट_बी () {पीआईडीबी = स्टार्ट_प्रोसेस (ट्रैक_बॉल ());} शून्य स्टार्ट_सी () {पीआईडीसी = स्टार्ट_प्रोसेस (find_basket ());} शून्य किल (इंट पीआईडी) {CREATE_BUSY; // वर्तमान निर्माण प्रक्रिया समाप्त होने की प्रतीक्षा करें, और प्राथमिकता लें किल_प्रोसेस (पिड); CREATE_FREE;//मैं कर चुका हूं स्टॉप ();}शून्य से बचें_लेफ्ट () {मार (पिडब);//बाकी सब कुछ मारो (पीआईडीसी); लेज ();//पंजे को उठाएं ताकि यह टेबल पर पकड़ा न जाए back_away ();//बैक अवे रोटेट_एल ();//बाधा से दूर रोटेट करें (); // पंजा को वापस नीचे रखें अगर (है_बॉल) {// अगर मेरे पास गेंद है start_c ();}// लक्ष्य ट्रैकिंग शुरू करें और अगर (! have_ball) {// अगर मेरे पास गेंद नहीं है start_b ();}// गेंद ट्रैकिंग शुरू करें} शून्य से बचें_दाएं () {मार (पीआईडीबी); मार (पीआईडीसी); कगार (); पीछे हट जाओ(); रोटेट_आर (); तैयार(); अगर (हैव_बॉल) { start_c ();} और अगर (! have_ball) { start_b ();}} शून्य back_left () { create_drive_direct (back_f, back_sl);} void back_right () { create_drive_direct (back_sl, back_f);}

चरण 6: क्या यह इसके लायक था?

लागतें थीं: बनाएं + बैटरी + डॉक्टर = $ 260XBC स्टार्टर किट (xbc, कैम, लेगो ईंटें, सेंसर) = $ 579PVC + पेंट + स्क्रू = लगभग $ 20कुल लागत = $ 859 मेरे पास पहले से ही बॉटबॉल से XBC स्टार्टर किट थी, इसलिए लागत मेरे लिए क्रिएट की लागत थी। मुझे लगता है कि यह इसके लायक था, और सबसे अच्छी बात यह है कि मेरे द्वारा उपयोग किए जाने वाले सभी हिस्से पुन: प्रयोज्य हैं, अगर मैं खुद को इस बॉट को बाहर निकालने के लिए ला सकता हूं। यह वीडियो सब रूटीन से बचने को दिखाता है, एक टेबल टॉप पर। इस वीडियो में रोबोट को एक गोल में 5 नारंगी गेंदें बनाते हुए दिखाया गया है। मैंने केवल इस प्रक्रिया को गति देने में सहायता की, यह गेंद 5 को अंततः अपने आप मिल जाती।

चरण 7: निष्कर्ष

अंतिम परिणाम एक रोबोट है जो अपने दम पर एक गोल में नारंगी गेंदों को उठा और स्कोर कर सकता है।

मुझे इस प्रोजेक्ट पर काम करना अच्छा लगा। जितना अधिक मैंने इस रोबोट पर काम किया, उतना ही मैं इससे जुड़ा। अब मैं उससे ऐसे बात करता हूँ जैसे वह कोई पालतू जानवर हो। मुझे उम्मीद है कि इससे आपको अपने अगले प्रोजेक्ट में मदद मिली होगी। ऐसे बहुत से लोग हैं जिन्हें मुझे धन्यवाद देना चाहिए, लेकिन बहुत सारे हैं। चार्टर्स के बर्नार्ड की तरह बहुत ही सुंदर ढंग से कहा गया है: "हम दिग्गजों के कंधों पर बौने की तरह हैं, ताकि हम उनसे अधिक और चीजों को अधिक दूरी पर देख सकें, न कि हमारी ओर से किसी भी तीखेपन के आधार पर, या किसी भी भौतिक भेद, लेकिन क्योंकि हम ऊंचे हैं और उनके विशाल आकार द्वारा उठाए गए हैं।"

सिफारिश की: