विषयसूची:

एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित: 3 चरण
एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित: 3 चरण

वीडियो: एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित: 3 चरण

वीडियो: एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित: 3 चरण
वीडियो: Hacking the Google AIY Voice Kit Part 2 - Voice Control 2024, नवंबर
Anonim
एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित
एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित
एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित
एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित
एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित
एक श्रवण MeArm, Google कोरल TPU त्वरक संचालित
एक श्रवण MeArm, Google कोरल TPU त्वरक प्रेरित
एक श्रवण MeArm, Google कोरल TPU त्वरक प्रेरित

निम्नलिखित में मैं MeArm के एक आवाज-नियंत्रित संस्करण का वर्णन करना चाहूंगा, ग्रिपर के साथ एक छोटा xyz रोबोट आर्म। मैंने MIME उद्योगों से MeArm Pi का उपयोग किया, लेकिन सिस्टम MeArm के किसी भी संस्करण, या इसी तरह के सर्वो-संचालित उपकरणों पर लागू होना चाहिए।

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

यहां वर्णित उपकरण पिछले दो अनुदेशों में वर्णित अवधारणाओं का एक संयोजन और विस्तार है। यह Google कोरल वॉयस कंट्रोल के पहले के कार्यान्वयन का विस्तार है, एक जंपिंग जैक, जिसका वर्णन यहां किया गया है और यहां वर्णित Google AIY वॉयस नियंत्रित MeArm का एक बड़ा सुधार है।

Google Voice AIY प्रणाली का उपयोग करने वाले ध्वनि-नियंत्रित MeArm को ऑनलाइन पहुंच की आवश्यकता थी, इसे लागू करना आसान नहीं था, ध्वनि आदेशों को सुनने के लिए सक्रिय करने के लिए एक बटन दबाने की आवश्यकता थी और इसमें एक लंबा विलंबता समय था। Google कोरल टीपीयू एक्सेलेरेटर अब उपयोग किया जाता है जो रास्पबेरी पाई या अन्य लिनक्स उपकरणों पर उच्च वेग के साथ TensorFlowLite मॉडल को ऑफ़लाइन चलाने की अनुमति देता है। Google कोरल जीथब पृष्ठ पर उदाहरणों में से एक आवाज पहचान प्रणाली के लिए "हियरिंग स्नेक" नामक एक उदाहरण है जो 140 प्रमुख वाक्यांशों (सितंबर 2019) को समझ सकता है, जिन्हें तब वर्चुअल कीस्ट्रोक्स में मैप किया जाता है। इन "कीस्ट्रोक्स" को पायथन में प्रोग्राम किए गए कुछ कार्यों के निष्पादन के साथ जोड़कर वॉयस कमांड नियंत्रित डिवाइस बनाना संभव हो जाता है। मैंने हाल ही में पहले कार्यान्वयन का वर्णन किया था, एक आवाज-नियंत्रित इलेक्ट्रोमैकेनिकल जंपिंग जैक। यहां कार्यान्वयन थोड़ा अधिक जटिल है और MeArm के सभी चार सर्वो को नियंत्रित करने की अनुमति देता है या तो MeArm को लगातार स्थानांतरित करने के लिए या इसे कई पूर्वनिर्धारित करने के लिए स्थानांतरित करना है स्थिति, या कुछ और जटिल कार्य करने के लिए।

उदाहरण के तौर पर यहां दी गई स्क्रिप्ट का उपयोग करते हुए, अन्य आवाज-नियंत्रित उपकरणों का निर्माण करना अपेक्षाकृत सरल होना चाहिए, उदा। रोबोट कार या सहायक तकनीकी इकाइयाँ।

आपूर्ति

  • मेआर्म। यहाँ प्रयुक्त: MIME Industries से MeArm Pi
  • रास्पबेरी पाई 4
  • गूगल कोरल टीपीयू एक्सेलेरेटर
  • एडफ्रूट 16 चैनल सर्वो बोनट
  • कुछ जम्पर केबल
  • वैकल्पिक: सर्वो बोनट के लिए संधारित्र, 4 सर्वो के लिए लगभग ४०० µF (Adafruit द्वारा अनुशंसित)
  • सर्वो बोनट के लिए 5-6 वी पावर स्रोत। मैंने यहां एक पुराने 6V चार्जर का उपयोग किया है, एक 4x AA बैटरी पैक भी काम करता है
  • माइक्रोफोन। मैंने माइक्रोफ़ोन के रूप में एक पुराने Microsoft HD3000 वेबकैम का उपयोग किया।

चरण 1: सिस्टम की स्थापना

सिस्टम की स्थापना
सिस्टम की स्थापना
सिस्टम की स्थापना
सिस्टम की स्थापना

Google कोरल गीथब पेज से Google कोरल टीपीयू एक्सेलेरेटर के लिए पूर्व-कॉन्फ़िगर रास्पियन छवि डाउनलोड करें और इसे माइक्रोएसडी कार्ड पर स्थापित करें। छवि में कई उदाहरण स्क्रिप्ट भी हैं। संकेत के अनुसार पाई सेट करें।

Google कोरल गिटहब साइट से उदाहरण कीवर्ड स्पॉटर स्थापित करें, यदि छवि में शामिल नहीं है, और सभी आवश्यक प्रोग्राम। माइक्रोफ़ोन को Pi से अटैच करें. मैं यह सुनिश्चित करने के लिए "हियरिंग स्नेक" उदाहरण के साथ खेलने की सलाह दूंगा कि सब कुछ काम कर रहा है।

यहां बताए अनुसार एडफ्रूट 16 चैनल बोनट सॉफ्टवेयर डाउनलोड और इंस्टॉल करें। सब कुछ ठीक से काम कर रहा है यह सुनिश्चित करने के लिए बोनट स्थापित करें और एडफ्रूट उदाहरणों के साथ खेलें।

इस निर्देश से जुड़ी फाइलों को डाउनलोड करें और उन्हें "प्रोजेक्ट कीवर्ड स्पॉटर" फ़ोल्डर में कॉपी करें। "Commands_v1_MeArm.txt" फ़ाइल को "कॉन्फ़िगरेशन" सबफ़ोल्डर में कॉपी किया जाना चाहिए।

संकेत के अनुसार अपने MeArm के सर्वो को सर्वो बोनट से कनेक्ट करें। मैंने अप/डाउन के लिए पोर्ट 15, आगे/पीछे के लिए पोर्ट 11, टर्न के लिए पोर्ट 7 और ग्रिपर सर्वो के लिए पोर्ट 3 का उपयोग किया।

स्क्रिप्ट के भीतर आपको प्रत्येक सर्वो के लिए न्यूनतम/केंद्र/अधिकतम मानों को अपने कॉन्फ़िगरेशन में समायोजित करना पड़ सकता है, ये सेटिंग्स सर्वो को नुकसान से बचने में मदद करती हैं। आपको शामिल "स्थिति", "परिवहन 1" और "परिवहन 2" सूचियों को भी संशोधित करना पड़ सकता है।

स्क्रिप्ट चलाएँ। अब तक मैं इसे IDE से चला रहा था।

यदि आप उन प्रमुख वाक्यांशों को संशोधित करना चाहते हैं जो आपकी आवश्यकता के अनुसार एक निश्चित कार्य उत्पन्न करते हैं। उपलब्ध KeyPhrases की एक पूरी सूची कॉन्फ़िगरेशन सबफ़ोल्डर में "लेबल_gc2 raw.txt" फ़ाइल में पाई जाती है।

सिस्टम में लगभग 1 सेकंड का विलंबता समय होता है, लेकिन बहुत कुछ इस पर निर्भर करता है कि कौन सी क्रियाएं की जाती हैं। कुछ मामलों में मुख्य चरण को दोहराना पड़ता है, मान्यता की सटीकता हमेशा 100% नहीं होती है।

चरण 2: डिवाइस का उपयोग करना

यदि सब कुछ सेट और चेक किया गया है, तो आप डिवाइस चला सकते हैं।

एक वर्तमान सीमा यह है कि किसी दिए गए आदेश को तब तक दोहराया जाता है जब तक कि इसे रोका नहीं जाता ("स्टॉप गेम" का उपयोग करके) या कोई अन्य आदेश दिया जाता है। जटिल बहु-चरणीय कार्य, उदा. "transport1" ("लॉन्च गेम" वाक्यांश द्वारा विकसित) हमेशा अंतिम चरण तक निष्पादित होते हैं।

तो "दाएं मुड़ें" द्वारा डिवाइस छोटे चरणों में दाईं ओर तब तक चला जाएगा जब तक कि रुक न जाए, या पूर्व निर्धारित अधिकतम मूल्य तक पहुंच जाए। "लॉन्च गेम", "अगला गेम" या "स्टार्ट_वीडियो" चालों की एक श्रृंखला शुरू करेगा जो किसी दिए गए चरण में प्रत्येक सर्वो के लिए सेटिंग वाली सूचियों द्वारा परिभाषित की जाती है। "रैंडम गेम" डिवाइस को एक से दूसरे चरण में कूदने के लिए सेटिंग्स की सूची से यादृच्छिक रूप से चुना जाएगा।

जैसा कि आप साथ में वीडियो में देख सकते हैं, मैंने लेगो से एक डायबोलो आकार की वस्तु का निर्माण किया था जिसे MeArm द्वारा उठाया जा सकता है और आंदोलनों के पूर्वनिर्धारित सेट द्वारा एक स्थान से दूसरे स्थान पर ले जाया जा सकता है। आप 'transport1' या 'transport2' सूचियों में संशोधन करके अपने स्वयं के कार्यों को परिभाषित कर सकते हैं।

चरण 3: स्क्रिप्ट

यहां सूचीबद्ध स्क्रिप्ट "प्रोजेक्ट कीवर्ड स्पॉटर" से "हियरिंग स्नेक" उदाहरण का एक संशोधन है। उदाहरण को कम से कम कर दिया गया है, फिर एडफ्रूट सर्वो बोनट के लिए प्रदान किए गए सॉफ़्टवेयर और उदाहरणों के आधार पर सर्वो चलाने के लिए भाग जोड़ा गया था।

स्क्रिप्ट को अब तक अनुकूलित नहीं किया गया है। अपने जोखिम पर उपयोग करें, बेझिझक संशोधित करें और अनुकूलित करें।

पायथन लिपि के अलावा कमांड-फाइल और प्रयुक्त लेबल-फाइल है। इसे कॉन्फिग-सबफोल्डर में रखें।

जैसा कि पहले उल्लेख किया गया है, आपके विशेष MeArm या किसी अन्य डिवाइस के लिए स्क्रिप्ट को अनुकूलित करने के लिए मापदंडों के कई समायोजन की आवश्यकता हो सकती है।

# कॉपीराइट 2019 गूगल एलएलसी#

# अपाचे लाइसेंस के तहत लाइसेंस, संस्करण 2.0 ("लाइसेंस"); # आप लाइसेंस के अनुपालन के अलावा इस फ़ाइल का उपयोग नहीं कर सकते। # आप ## href="https://www.apache.org/licenses/LICENSE-2.0" href="https://www.apache.org/licenses/LICENSE-2.0" पर लाइसेंस की एक प्रति प्राप्त कर सकते हैं। https://www.apache.org/licenses/LICENSE-2.0 # # जब तक लागू कानून द्वारा आवश्यक न हो या लिखित में सहमति न हो, लाइसेंस के तहत वितरित सॉफ़्टवेयर # "जैसा है" के आधार पर वितरित किया जाता है, # वारंटी या शर्तों के बिना किसी भी प्रकार, या तो व्यक्त या निहित। # लाइसेंस के तहत अनुमतियों और # सीमाओं को नियंत्रित करने वाली विशिष्ट भाषा के लिए लाइसेंस देखें। # मूल "हियरिंग_स्नेक" कोड को डॉ एच द्वारा MeArm के कार्यान्वयन के लिए संशोधित किया गया था। ''' निर्देश मेरा कार्यान्वयन एक रास्पबेरी पाई 4 का उपयोग करता है जिसमें एक Google कोरल त्वरक और एक एडफ्रूट 16 चैनल सर्वो बोनट संलग्न है। एक MeArm (MIME उद्योग) के सर्वो बोनट के पोर्ट 3, 7, 11 और 15 से जुड़े थे। विवरण के लिए कृपया "हियरिंग मीआर्म" इंस्ट्रक्शनल पर एक नज़र डालें। कमांड: "स्थिति x", x = 0 से 9, डिवाइस को किसी पूर्वनिर्धारित स्थिति में ले जाता है। "मूव / गो अप", "मूव / गो डाउन", "गो / टर्न फॉरवर्ड", "गो / टर्न बैकवर्ड", "टर्न / गो लेफ्ट" और "टर्न / गो राइट" दिए गए में धीमी, स्टेपवाइज मूवमेंट को उकसाते हैं। दिशा, "स्टॉप गेम" आंदोलनों को रोकता है। "ओपन टैब" और "क्लोज़ टैब" ग्रिपर को खोलता या बंद करता है। "वीडियो शुरू करें" सूची 'स्थितियों' द्वारा परिभाषित पदों के पूर्व निर्धारित क्रम का पालन करने के लिए डिवाइस को उकसाता है। "रैंडम गेम" का परिणाम आंदोलनों के एक यादृच्छिक पैटर्न में होता है, "स्टॉप गेम" इसे समाप्त करता है। "लॉन्च गेम" सूची 'ट्रांसपोर्ट1' द्वारा पूर्वनिर्धारित चालों की एक और श्रृंखला शुरू करता है, "अगला गेम" 'ट्रांसपोर्ट 2' द्वारा पूर्वनिर्धारित रिवर्स ऑपरेशन अपने जोखिम पर उपयोग करें। '''' _future_ से _future_ आयात करें। adafruit_servokit आयात से यादृच्छिक आयात रैंडरेंज आयात सर्वोकिट आयात बोर्ड आयात बसियो आयात adafruit_pca9685 आयात समय i2c = busio. I2C (board. SCL, बोर्ड। एसडीए) टोपी = adafruit_pca9685. PCA9685 (i2c) टोपी। आवृत्ति = 60 किट = सर्वोकिट (चैनल = 16) # चैनलों की संख्या सेट करें dn_l = ४५ up_r = १३५ # सर्वो फॉरवर्ड/बैकवर्ड md_r = ९० dn_r = ५० ri_t = ३० # टर्निंग आर्म राइट या लेफ्ट: राइट पोजीशन md_t = ९० # टर्निंग आर्म राइट या लेफ्ट: सेंटर पोजीशन le_t = १५० op_g = ६५ # ग्रिपर ओपन md_g = ९० # ग्रिपर केंद्रित वर्ग _g = १३० # ग्रिपर क्लोज्ड वर्ट = १५ # सर्वो पोर्ट की संख्या, सर्वो अप/डाउन फ़ोर = ११ # सर्वो पोर्ट की संख्या, फ़ॉरवर्ड/बैकवर्ड मूविंग सर्वो टर्न = ७ # सर्वो ग्रिप को मोड़ने के लिए सर्वो पोर्ट = ३ # ग्रिप के लिए सर्वो पोर्ट सर्वो # नौ पदों की स्थिति के लिए आर्म सेटिंग्स की सूची = [(md_l, md_r, md_t, op_g), (up_l, md_r, ri_t, op_g), (up_l, md_r, md_t, cl_g), (up_l, md_r, le_t, cl_g), (md_l, md_r, md_t, op_g), (md_l, md_r, md_t, md_g), (md_l, md_r, md_t, cl_g), (dn_l, dn_r, ri_t, op_g), (dn_l, md_t, md_r, md_t, md_r,), (dn_l, dn_r, le_t, md_g)] # 10 आधार पदों को परिभाषित करता है, जो पूर्णांक 0-9 # परिवहन प्रक्रियाओं द्वारा इंगित किया जाता है [लंबवत/आगे/बारी/पकड़] परिवहन 1 = [(140, 70, 65, op_g), (110, 50, 65, op_g), (65, 50, 65, op_g), (65, 70, 65, cl_g), (120, 70, 65, cl_g), # ऑब्जेक्ट प्राप्त करें (100, 70, 135, cl_g)), (100, 80, 135, cl_g), (100, 80, 135, md_g), (100, 80, 135, op_g), (140, 70, 135, op_g), (140, 70, 90, op_g)), (१४०, ७०, ६५, op_g)]

Transport2 = [(१४०, ७०, ६५, op_g), (१४०, ७०, १३५, op_g), (९५, ७०, १३५, op_g), (९५, ८०, १३५, op_g), (९५, ८०, १३५, cl_g), (११०, ७०, १३५, cl_g), (११०, ७०, ६५, cl_g), (७०, ७०, ६५, cl_g), (७०, ७०, ६५, op_g), (८०, ५०, ६५, op_g)]

नृत्य1 =(0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2, 1, 4, 7, 8, 9, 6, 3, 2, 0) # एक "नृत्य"

#MeArm को शून्य स्थिति स्थिति में ले जाना =[md_l, md_r, md_t, md_g] kit.servo[vert].angle = status[0] kit.servo[forw].angle = status[1] kit.servo[turn]. कोण = स्थिति [2] किट। सर्वो [पकड़]। कोण = स्थिति [3] प्रिंट (स्थिति) वर्ग नियंत्रक (वस्तु): # कॉलबैक फ़ंक्शन def _init_ (स्वयं, q): स्वयं._q = q कॉलबैक (स्वयं, कमांड): self._q.put(command) क्लास ऐप: def _init_(self): self._running = True def on_init(self): pygame.init() self.game_started = True self._running = True return True def on_event (स्वयं, घटना): अगर event.type == pygame. QUIT: self._running = False def MeArmPos(self, keys): # MeArm को प्रीसेट पोजीशन पर ले जाता है, कीवर्ड: "पोजिशन x" key = int(keys) p = स्थिति [कुंजी] ए = पी [0] बी = पी [1] सी = पी [2] डी = पी [३] प्रिंट ("स्थिति:", कुंजी, "वर्ट/फॉर/टर्न/ग्रिप:", ए, "/", बी, "/", सी, "/", डी, "डिग्री") स्थिति = [ए, बी, सी, डी] # दस्तावेज़ वर्तमान स्थिति प्रिंट (स्थिति) # sys.stdout.write("स्थिति: ", की, " लेफ्ट/राइट: ", ए, "/", बी, "डिग्री") Kit.servo[vert].angle = a kit.servo[forw].angle = b Kit.servo[turn].angle = c kit.servo[grip].angle = d time.sleep(0.5) def DancingMeArm(self): # MeArm डांस को नियंत्रित करता है, कीवर्ड: "start_video" dnce = Dance1 sp=(len(dnce)) r रेंज में (sp) के लिए: #नृत्य क्रम, sp चरण dc = dnce[r] p = स्थिति[dc] a = p[0] b = p[1] c = p[2] d = p[3] kit.servo[vert].angle = a kit.servo[forw].angle = b Kit.servo[turn].angle = c kit.servo[grip].angle = d time.sleep (१) # आंदोलनों के समय का वेग निर्धारित करता है। नींद (०.५) # प्रक्रिया के अंत में ब्रेक TransMeArm1 (स्वयं): # MeArm ट्रांसपोर्ट १ को नियंत्रित करता है, कीवर्ड: "लॉन्च गेम" tr1 = ट्रांसपोर्ट १ एसपी = (लेन (tr1)) # रेंज में r के लिए चरणों की संख्या की गणना करें (sp): #किसी भी चरण p = tr1[r] a = p[0] b = p[1] c = p[2] d = p[3] किट पर जाएं। सर्वो [वर्ट]। कोण = एक किट। सर्वो [forw]। कोण = बी किट। सर्वो [बारी]। कोण = सी किट। सर्वो [पकड़]। कोण = डी प्रिंट (पी) समय। नींद (1) # सेट आंदोलनों का वेग समय। नींद (0.5) def TransMeArm2 (स्वयं): # MeArm नृत्य को नियंत्रित करता है, कीवर्ड: "अगला गेम" tr2 = Transport2 sp=(len(tr2)) r रेंज में (sp) के लिए): #नृत्य क्रम, sp चरण p = tr2[r] a = p[0] b = p[1] c = p[2] d = p[3] kit.servo[vert].angle = a Kit.servo[forw].angle = b kit.servo[turn].angle = c kit.servo[grip].angle = d Print (p) time.sleep(1) # मूवमेंट टाइम का वेलोसिटी सेट करता है। स्लीप (0.5)) def RandomMoves(self): # पूर्वनिर्धारित स्थितियों के बीच यादृच्छिक रूप से कूदता है, कीवर्ड: "रैंडम गेम" डॉ = रैंडरेंज (9) # यादृच्छिक रूप से एक स्थिति का चयन करता है पी = स्थिति [डीआर] # स्थिति पैरामीटर पढ़ता है ए = पी [0] बी = पी [1] c = p[2] d = p[3] kit.servo[vert].angle = a kit.servo[forw].angle = bkit.servo[turn].angle = c kit.servo[grip] कोण = d समय। नींद (1) # मूवअप (स्वयं) की गति के वेग को सेट करता है: # छोटे चरणों में ग्रिपर उठाना u0 = स्थिति [0] # वर्तमान स्थिति पढ़ें u1 = u0 + 5 # प्लस x डिग्री अगर (u1 > up_l): # परीक्षण यदि न्यूनतम/अधिकतम पैरामीटर से अधिक नहीं है u1 = up_l # अन्यथा न्यूनतम/अधिकतम मान kit.servo[vert].angle = u1 # मूव सर्वो स्थिति [0] = u1 # समायोजित स्थिति मान प्रिंट (" up ", status) time.sleep (1) # सेट वेलोसिटी def MoveDown(self): d 0 = स्थिति [0] d1 = d0 - 5 # शून्य x डिग्री अगर (d1 up_r): f1 = up_r kit.servo[forw].angle = f1 # सर्वो स्थिति ले जाएँ[1] = f1 प्रिंट ("आगे", स्थिति) समय.नींद स्थिति [2] = l1 प्रिंट ("बाएं ", स्थिति) समय। नींद (0.2) def MoveRight (स्वयं): r0 = स्थिति [2] r1 = r0 - 2 # शून्य x डिग्री यदि (r1 < ri_t): r1 = ri_t kit.servo[turn].angle = r1 # मूव सर्वो स्टेटस[2] = r1 प्रिंट ("राइट", स्टेटस) टाइम.स्लीप (0.2) डिफ ओपनग्रिप (सेल्फ): Kit.servo[grip].angle = op_g # ग्रिप को "ओपन" पोजीशन पर सेट करें: "open_tab" टाइम.स्लीप (0.5) स्टेटस [3] = op_g def CloseGrip (सेल्फ): Kit.servo[grip].angle = cl_g # ग्रिप को "क्लोज्ड" पोजीशन पर सेट करें: " close_tab" time.sleep(0.5) status[3] = cl_g def StopMove(self): # कुछ भी नहीं करता है, लेकिन आंदोलनों को रोकता है प्रिंट ("स्टॉप", स्टेटस) टाइम। स्लीप (0.25) डीईएफ़ स्पॉटर (सेल्फ, आर्ग्स): इंजन = BasicEngine(args.model_file) mic = args.mic अगर args.mic कोई और नहीं है int(args.mic) model.classify_audio(mic, engine, label_file="config/labels_gc2.raw.txt", command_file="config/commands_v1_MeArm.txt", dectection_callback=self._controler.callback, sample_rate_hz=int(args.sample_rate_hz), num_frames_hop= int(args.num_frames_hop)) def on_execute(self, args): अगर नहीं self.on_init(): self._running = False q = model.get_queue() self._controler = Controler(q) अगर नहीं तो args.debug_keyboard: t = थ्रेड (लक्ष्य = सेल्फ.स्पॉटर, args = (args,)) t.daemon = True t.start () आइटम = -1 जबकि self._running: pygame.event.pump() यदि args.debug_keyboard: keys = pygame.key.get_pressed() अन्य: कोशिश करें: new_item = q.get(True, 0.1) कतार को छोड़कर। या आइटम == "स्टॉप": सेल्फ._रनिंग = गलत # अगर (args.debug_keyboard और कुंजियाँ[pygame. K_SPACE]) या आइटम == "go": # self. MeArmPos(7) # if (args.debug_keyboard and keys) [pygame. K_RIGHT]) या आइटम == "दाएं": # स्वयं दाएं मुड़ें। MoveRight () अगर (args.debug_ke) yboard और कुंजियाँ[pygame. K_LEFT]) या आइटम == "बाएं": # स्वयं बाएं मुड़ें।MoveLeft() अगर (args.debug_keyboard और कुंजियाँ[pygame. K_UP]) या आइटम == "ऊपर": self. MoveUp() अगर (args.debug_keyboard और keys[pygame. K_DOWN]) या आइटम == "डाउन": self. MoveDown() if (args.debug_keyboard and keys[pygame. K_B]) या आइटम == "बी": # पीछे की ओर self. MoveBack() अगर (args.debug_keyboard और keys[pygame. K_F]) या आइटम == "f": # फॉरवर्ड सेल्फ।MoveForw () अगर (args.debug_keyboard और keys[pygame. K_O]) या आइटम == "o": # ओपन ग्रिप: self. OpenGrip () अगर (args.debug_keyboard और keys[pygame. K_C]) या आइटम == "c": # क्लोज ग्रिप: self. CloseGrip () if (args.debug_keyboard and keys) [pygame. K_S]) या आइटम == "s": # स्टॉप मूवमेंट: "start_game" self. StopMove() अगर (args.debug_keyboard and keys[pygame. K_0]) या आइटम == "0": self. MeArmPos (0) अगर (args.debug_keyboard और keys[pygame. K_1]) या आइटम == "1": self. MeArmPos(1) if (args.debug_keyboard and keys[pygame. K_2]) या आइटम == "2": self. MeArmPos(2) if (args.debug_keyboard and keys[pygame. K_3]) या यह em == "3": self. MeArmPos(3) if (args.debug_keyboard and keys[pygame. K_4]) या आइटम == "4": self. MeArmPos(4) if (args.debug_keyboard and keys[pygame. K_5]) या आइटम == "5": self. MeArmPos(5) if (args.debug_keyboard and keys[pygame. K_6]) या आइटम == "6": self. MeArmPos(6) if (args.debug_keyboard and keys[pygame. K_7]) या आइटम == "7": self. MeArmPos(7) if (args.debug_keyboard and keys[pygame. K_8]) या आइटम == "8": self. MeArmPos(8) if (args.debug_keyboard और कुंजियाँ[pygame. K_9]) या आइटम == "9": self. MeArmPos(9) if (args.debug_keyboard and keys[pygame. K_a]) या आइटम == "d": self. DancingMeArm() #डांसिंग MeArm, "नेक्स्ट_गेम" पर अगर (args.debug_keyboard और keys[pygame. K_r]) या आइटम == "r": self. RandomMoves() #random डांस "रैंडम गेम" अगर (args.debug_keyboard and keys[pygame. K_j]) या आइटम == "j": self. TransMeArm1 () # ट्रांसपोर्ट ऑब्जेक्ट: "lunch_game" अगर (args.debug_keyboard और keys[pygame. K_k]) या आइटम == "k": self. TransMeArm2() # ट्रांसपोर्ट ऑब्जेक्ट रिवर्स डायरेक्शन: "next_game" '''' if (args.debug_keyboard and keys[pygame. K_l]) या आइटम == "l": self. JumpingJack2(1) #LED ब्लिंक "टारगेट" '''' time.sleep(0.05) self.on_cleanup() अगर _name_ == '_main_': पार्सर = argparse. ArgumentParser() parser.add_argument('--debug_keyboard', help='MeArm को नियंत्रित करने के लिए कीबोर्ड का उपयोग करें।', action='store_true', default=False) model.add_model_flags(parser) args = parser.parse_args () the_app = ऐप () the_app.on_execute(args)

सिफारिश की: