Სარჩევი:

Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს: 3 ნაბიჯი
Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს: 3 ნაბიჯი

ვიდეო: Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს: 3 ნაბიჯი

ვიდეო: Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს: 3 ნაბიჯი
ვიდეო: 208: What If You Had a Machine Do It 2024, ივლისი
Anonim
Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს
Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს
Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს
Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს
Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს
Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს
Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს
Hearing MeArm, Google Coral TPU ამაჩქარებელი ამოძრავებს

შემდეგში მინდა აღვწერო MeArm- ის ხმოვანი კონტროლირებადი ვერსია, პატარა xyz რობოტის მკლავი, რომელსაც აქვს სახელური. მე გამოვიყენე MeArm Pi MIME ინდუსტრიებიდან, მაგრამ სისტემა უნდა იყოს გამოყენებული მისი MeArm– ის ნებისმიერი ვერსიისთვის, ან მსგავსი სერვოზე ორიენტირებული მოწყობილობებისთვის.

Google Coral TPU ამაჩქარებლის გამოყენება საშუალებას გაძლევთ გაუშვათ სწრაფი ხაზგარეშე TensorFlow ხმის ამოცნობის სკრიპტები Raspberry Pi– ზე და ამით გააკონტროლოთ ფიზიკური მოწყობილობები სალაპარაკო ბრძანებით, ერთ წამზე ნაკლები შეფერხებით.

აქ აღწერილი მოწყობილობა არის ორი წინა ინსტრუქციაში აღწერილი კონცეფციების კომბინაცია და გაფართოება. ეს არის Google Coral ხმის კონტროლის, Jumping Jack– ის ადრე განხორციელების გაგრძელება, აქ აღწერილი და Google AIY ხმის კონტროლირებადი MeArm– ის უზარმაზარი გაუმჯობესება აქ აღწერილი.

ხმის კონტროლირებადი MeArm Google Voice AIY სისტემის გამოყენებით მოითხოვდა ონლაინ წვდომას, არ იყო ადვილი განსახორციელებელი, საჭირო იყო ღილაკზე დაჭერა ხმოვანი შეკვეთების მოსმენის გასააქტიურებლად და ჰქონდა დიდი ლატენტური დრო. Google Coral TPU ამაჩქარებელი, რომელიც ახლა გამოიყენება, საშუალებას გაძლევთ გაუშვათ TensorFlowLite მოდელები ხაზგარეშე მაღალი სიჩქარით Raspberry Pi– ზე ან Linux– ის სხვა მოწყობილობებზე. Google Coral Github– ის გვერდზე არსებულ მაგალითებს შორის არის მაგალითი სახელწოდებით „სმენის გველი“ხმის ამოცნობის სისტემისთვის, რომელსაც შეუძლია გაიგოს 140 ძირითადი ფრაზა (სექტემბერი 2019), რომლებიც შემდეგ აისახება ვირტუალურ ღილაკზე. ამ "გასაღებების" დაკავშირება პითონში დაპროგრამებული ზოგიერთი ფუნქციის შესრულებით შესაძლებელს ხდის ხმოვანი ბრძანების კონტროლირებადი მოწყობილობის შექმნას. მე ცოტა ხნის წინ აღვწერე პირველი განხორციელება, ხმის კონტროლირებადი ელექტრომექანიკური ხტუნვის ჯეკი. აქ განხორციელება ცოტა უფრო რთულია და საშუალებას გაძლევთ გააკონტროლოთ MeArm– ის ოთხივე სერვისი, რომ MeArm– ი განუწყვეტლივ გადავიდეს ან გადავიდეს წინასწარ განსაზღვრულ რიცხვზე პოზიციები, ან უფრო რთული ამოცანების შესასრულებლად.

აქ მოცემული სკრიპტის მაგალითის გამოყენებით, შედარებით მარტივი უნდა იყოს სხვა ხმით კონტროლირებადი მოწყობილობების აგება, მაგ. რობოტული მანქანები ან დამხმარე ტექნიკური დანაყოფები.

მარაგები

  • MeArm. აქ გამოიყენება: MeArm Pi MIME Industries– დან
  • ჟოლო პი 4
  • Google Coral TPU ამაჩქარებელი
  • ადაფრუტის 16 არხიანი სერვო კაპოტი
  • ზოგიერთი ჯუმბერის კაბელი
  • სურვილისამებრ: კონდენსატორი სერვო კაპოტისთვის, დაახლოებით 400 µF 4 სერვოზე (რეკომენდებულია ადაფრუტის მიერ)
  • 5-6 ვ დენის წყარო სერვო კაპოტისთვის. მე აქ გამოვიყენე ძველი 6V დამტენი, 4x AA ბატარეის პაკეტიც მუშაობს
  • მიკროფონი. მე გამოვიყენე ძველი Microsoft HD3000 ვებკამერა მიკროფონის სახით.

ნაბიჯი 1: სისტემის დაყენება

სისტემის დაყენება
სისტემის დაყენება
სისტემის დაყენება
სისტემის დაყენება

ჩამოტვირთეთ Raspian გამოსახულების წინასწარ კონფიგურაცია Google Coral TPU ამაჩქარებლისთვის Google Coral Github გვერდიდან და დააინსტალირეთ µSD ბარათზე. სურათი ასევე შეიცავს სკრიპტების მაგალითს. დააყენეთ Pi როგორც მითითებულია.

დააინსტალირეთ საკვანძო სიტყვების შემჩნევის მაგალითი Google Coral GitHub საიტიდან, თუ არ არის გამოსახული და ყველა საჭირო პროგრამა. მიამაგრეთ მიკროფონი Pi- ზე. მე გირჩევთ ითამაშოთ "სმენის გველის" მაგალითზე, რათა დარწმუნდეთ, რომ ყველაფერი მუშაობს.

ჩამოტვირთეთ და დააინსტალირეთ Adafruit 16 არხიანი პროგრამული უზრუნველყოფის პროგრამული უზრუნველყოფა, როგორც ეს აღწერილია აქ. დააინსტალირეთ კაპოტი და ითამაშეთ ადაფრუტის მაგალითებით, რათა დარწმუნდეთ, რომ ყველაფერი გამართულად მუშაობს.

ჩამოტვირთეთ ფაილები, რომლებიც თან ერთვის ამ ინსტრუქციას და დააკოპირეთ ისინი "პროექტის საკვანძო სიტყვების შემჩნევის" საქაღალდეში. "Commands_v1_MeArm.txt" ფაილი უნდა იყოს კოპირებული "კონფიგურაციის" ქვესაქაღალდეში.

შეაერთეთ თქვენი MeArm– ის სერვისები სერვო ქუდზე, როგორც ეს მითითებულია. მე გამოვიყენე პორტი 15 ზემოთ/ქვემოთ, პორტი 11 წინ/უკან, პორტი 7 შემობრუნებისთვის და პორტი 3 გრიპერის სერვისებისთვის.

სკრიპტის ფარგლებში თქვენ შეიძლება მოგიწიოთ თითოეული სერვოს მინი/ცენტრი/მაქსიმალური მნიშვნელობების მორგება თქვენს კონფიგურაციაზე, ეს პარამეტრები დაგეხმარებათ სერვისების დაზიანების თავიდან აცილებაში. თქვენ ასევე შეიძლება მოგიწიოთ შეცვალოთ ჩართული "პოზიციების", "transport1" და "transport2" სიები.

გაუშვით სკრიპტი. აქამდე მე მას IDE– დან ვუშვებდი.

იმ შემთხვევაში, თუ გსურთ შეცვალოთ ძირითადი ფრაზები, რომლებიც იწვევენ გარკვეულ ფუნქციას თქვენი მოთხოვნილების შესაბამისად. ხელმისაწვდომი საკვანძო ფრაზების სრული სია შეგიძლიათ იხილოთ "labels_gc2 raw.txt" ფაილში კონფიგურაციის ქვესაქაღალდეში.

სისტემას აქვს შეფერხების დრო დაახლოებით 1 წამი, მაგრამ ბევრად დამოკიდებულია იმაზე, თუ რომელ ქმედებებს ასრულებენ. ზოგიერთ შემთხვევაში ძირითადი ეტაპი უნდა განმეორდეს, აღიარების სიზუსტე ყოველთვის არ არის 100%.

ნაბიჯი 2: მოწყობილობის გამოყენება

თუ ყველაფერი დაყენებულია და შემოწმებულია, შეგიძლიათ აწარმოოთ მოწყობილობა.

არსებული შეზღუდვა ის არის, რომ მოცემული ბრძანება განმეორებით სრულდება მანამ, სანამ ის არ შეჩერდება ("თამაშის შეწყვეტის" გამოყენებით) ან სხვა ბრძანებაა მოცემული. რთული მრავალსაფეხურიანი ამოცანები, მაგ. "transport1" (გამოწვეულია ფრაზით "გაშვების თამაში") ყოველთვის სრულდება ბოლო საფეხურზე.

ამრიგად, "მოუხვიეთ მარჯვნივ", მოწყობილობა გადაადგილდება პატარა ნაბიჯებით მარჯვნივ, სანამ არ გაჩერდება, ან დადგება მაქსიმალური მნიშვნელობა. "თამაშის გაშვება", "მომდევნო თამაში" ან "start_video" დაიწყება რიგი ნაბიჯებისა, რომლებიც განსაზღვრულია სიებით, რომელიც შეიცავს თითოეულ სერვოს პარამეტრს მოცემულ საფეხურზე. "შემთხვევითი თამაში" მოწყობილობას გადასცემს ერთი საფეხურიდან მეორეზე, რომელიც შემთხვევით არის არჩეული პარამეტრების სიიდან.

როგორც თქვენ ხედავთ თანმხლებ ვიდეოში, მე ავაშენე დიაბოლოს ფორმის ობიექტი LEGO– დან, რომლის აღებაც MeArm– ის საშუალებით შესაძლებელია და გადატანა ერთი ადგილიდან მეორეზე წინასწარ განსაზღვრული მოძრაობებით. თქვენ შეგიძლიათ განსაზღვროთ თქვენი საკუთარი ფუნქციები 'transport1' ან 'transport2' სიების შეცვლით.

ნაბიჯი 3: სკრიპტი

აქ ჩამოთვლილი სკრიპტი არის "სმენის გველის" მაგალითის მოდიფიკაცია "Project Keyword Spotter" - დან. მაგალითი შემცირდა მინიმუმამდე, შემდეგ დაემატა სერვისების მართვის ნაწილი, პროგრამული უზრუნველყოფის და ადაფრუტის სერვო კაპოტის მაგალითების საფუძველზე.

სკრიპტი ჯერჯერობით არ არის ოპტიმიზირებული. გამოიყენეთ თქვენი საკუთარი რისკით, მოგერიდებათ ცვლილებები და ოპტიმიზაცია.

პითონის სკრიპტის გარდა არის ბრძანებების ფაილი და გამოყენებული ეტიკეტების ფაილი. განათავსეთ იგი კონფიგურაციის ქვესაქაღალდეში.

როგორც უკვე აღვნიშნეთ, შეიძლება საჭირო გახდეს პარამეტრების რამდენიმე კორექტირება თქვენი სპეციალური MeArm ან სხვა მოწყობილობის სკრიპტის ადაპტირებისთვის.

# საავტორო უფლება 2019 Google LLC#

# ლიცენზირებულია Apache ლიცენზიით, ვერსია 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– ის განსახორციელებლად დოქტორ ჰ. '' 'ინსტრუქცია ჩემი განხორციელება იყენებს Raspbery Pi 4 -ს Google Coral ამაჩქარებლით და Adafruit 16 არხის servo bonnet ერთვის. MeArm– ის სერვისები (MIME ინდუსტრიები) იყო დამაგრებული კაპოტის 3, 7, 11 და 15 პორტებზე. დეტალებისთვის გთხოვთ, გადახედოთ ინსტრუქციას "Hearing MeArm". ბრძანებები: "პოზიცია x", x = 0 -დან 9 -მდე, გადააქვს მოწყობილობა მოცემულ წინასწარ განსაზღვრულ პოზიციაზე. "გადაადგილება/აწევა", "გადატანა/დაწევა", "წასვლა/შემობრუნება წინ", "წასვლა/შემობრუნება უკან", "შემობრუნება/წასვლა მარცხნივ" და "შემობრუნება/წასვლა მარჯვნივ" აღძრავს ნელ, ნაბიჯ ნაბიჯ მოძრაობას მოცემულ მოცემულობაში მიმართულება, "თამაშის შეჩერება" აჩერებს მოძრაობებს. "ღია ჩანართი" და "დახურვის ჩანართი" ხსნის ან ხურავს გრიპერს. "ვიდეოს დაწყება" იწვევს მოწყობილობას, რომ დაიცვას პოზიციების წინასწარ განსაზღვრული რიგი, განსაზღვრული სიის "პოზიციებით". "შემთხვევითი თამაში" იწვევს მოძრაობების შემთხვევით ნიმუშს, "თამაშის შეწყვეტა" მთავრდება. "გაშვების თამაში" იწყებს გადაადგილების კიდევ ერთ სერიას, რომელიც განსაზღვრულია სიით "transport1", "შემდეგი თამაში" საპირისპირო ოპერაციით, რომელიც განსაზღვრულია "transport2" - ით. გამოიყენეთ თქვენი რისკით. '' '_future_ იმპორტის აბსოლუტური_იმპორტი _futeure_ იმპორტის განყოფილება _future_ იმპორტი print_function იმპორტი argparse იმპორტი os შემთხვევითი იმპორტი randint საწყისი threading იმპორტი თემა იმპორტის დრო edgetpu.basic.basic_engine იმპორტი BasicEngine იმპორტის მოდელი იმპორტი pygame საწყისი pygame.locals იმპორტი * იმპორტი რიგი საწყისი შემთხვევითი იმპორტი # არხების რაოდენობა მითითებული dn_l = 45 up_r = 135 # servo წინ/უკან md_r = 90 dn_r = 50 ri_t = 30 # მკლავი მარჯვნივ ან მარცხნივ: მარჯვენა პოზიცია md_t = 90 # მკლავი მარჯვნივ ან მარცხნივ: ცენტრალური პოზიცია le_t = 150 op_g = 65 # სახელური ღია md_g = 90 # gripper ორიენტირებული cl _g = 130 # გრიპერი დახურული ვერტი = 15 # სერვო პორტის ნომერი, servo up/down forw = 11 # servo port ნომერი, წინ/უკან მოძრავი servo turn = 7 # servo port for servo grip = 3 # servo port for grip servo #მკლავის პარამეტრების სია ცხრა პოზიციისთვის = [(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, dn_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), (140, 70, 65, op_g)]

ტრანსპორტი 2 = [(140, 70, 65, op_g), (140, 70, 135, op_g), (95, 70, 135, op_g), (95, 80, 135, op_g), (95, 80, 135, cl_g), (110, 70, 135, cl_g), (110, 70, 65, cl_g), (70, 70, 65, cl_g), (70, 70, 65, op_g), (80, 50, 65, op_g)]

ცეკვა 1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2, 1, 4, 7, 8, 9, 6, 3, 2, 0) # a "ცეკვა"

#გადატანა MeArm ნულამდე პოზიციის სტატუსი = [md_l, md_r, md_t, md_g] kit.servo [vert].angle = status [0] kit.servo [forw].angle = status [1] kit.servo [turn]. angle = status [2] kit.servo [grip].angle = status [3] print (status) class კონტროლერი (ობიექტი): #Callback function def _init _ (self, q): self._q = q def callback (self, ბრძანება): self._q.put (ბრძანება) კლასი აპლიკაცია: def _init _ (self): self._running = True def on_init (self): pygame.init () self.game_started = True self._running = True return True def on_event (საკუთარი, მოვლენა): if event.type == pygame. QUIT: self._running = False def MeArmPos (self, keys): # დისკზე MeArm აყენებს წინასწარ განსაზღვრულ პოზიციებს, საკვანძო სიტყვებს: "position x" key = int (keys) p = პოზიცია [გასაღები] a = p [0] b = p [1] c = p [2] d = p [3] ამობეჭდვა ("პოზიციები:", გასაღები, "vert/forw/turn/grip:", a, "/", b, "/", c, "/", d, "გრადუსი") სტატუსი = [a, b, c, d] # დოკუმენტები მიმდინარე სტატუსი ამობეჭდვა (სტატუსი) # sys.stdout.write ("პოზიცია: ", გასაღები," მარცხნივ/მარჯვნივ: ", a,"/", b," ხარისხი ") kit.servo [vert].angle = kit.servo [forw] = 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)) for r in range (sp): #პოზიციების ცეკვის რიგი, sp ნაბიჯები dc = dnce [r] p = პოზიცია [dc] a = p [0] b = p [1] c = p [2] d = p [3] kit.servo [ვერტ] (1) # ადგენს მოძრაობების დროის სიჩქარეს. ძილი (0.5) # შესვენება პროცედურის ბოლოს def TransMeArm1 (თვით): # აკონტროლებს MeArm transport 1, საკვანძო სიტყვა: "თამაშის გაშვება" tr1 = transport1 sp = (len (tr1)) #გამოთვალეთ ნაბიჯების რაოდენობა r დიაპაზონში (sp): #გადადით ნებისმიერ საფეხურზე p = tr1 [r] a = p [0] b = p [1] c = p [2] d = p [3] ნაკრები. servo [vert].angle = kit.servo [forw].ango = b kit.servo [turn].ango = c kit.servo [ძალაუფლება].ango = d ბეჭდვა (p) დრო. ძილი (1) # კომპლექტი მოძრაობების სიჩქარე time.sleep (0.5) def TransMeArm2 (self): # აკონტროლებს 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].ango = d ამობეჭდვა (p) დრო. ძილი (1) # ადგენს მოძრაობათა სიჩქარის დროს. ძილი (0.5) def RandomMoves (self): # შემთხვევით ხტება წინასწარ განსაზღვრულ პოზიციებს შორის, საკვანძო სიტყვა: "შემთხვევითი თამაში" dr = randrange (9) # შემთხვევით ირჩევს პოზიციას p = პოზიცია [dr] # კითხულობს პოზიციის პარამეტრებს 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 = > up_l): # ტესტი, თუ არ აღემატება min/max პარამეტრებს u1 = up_l # წინააღმდეგ შემთხვევაში მინი/მაქსიმალური მნიშვნელობის ნაკრებშია მითითებული. servo [vert].angle = u1 # servo status [0] = u1 # სტატუსის მნიშვნელობის ამობეჭდვა (" up ", status) time.sleep (1) # კომპლექტი სიჩქარე def MoveDown (თვითმმართველობის): დ 0 = სტატუსი [0] d1 = d0 - 5 # მინუს x გრადუსი თუ (d1 up_r): f1 = up_r kit.servo [forw].angle = f1 # გადატანა servo status [1] = f1 print ("წინ", სტატუსი) time.sleep (1) def MoveBack (self): b0 = სტატუსი [1] b1 = b0 - 5 # მინუს x გრადუსი თუ (b1 le_t): l1 = le_t ნაკრები. servo [turn].ango = l1 # გადატანა სერვო სტატუსი [2] = l1 ბეჭდვა ("მარცხნივ", სტატუსი) time.sleep (0.2) def MoveRight (self): r0 = სტატუსი [2] r1 = r0 - 2 #minus x გრადუსი თუ (r1 <ri_t): r1 = ri_t kit.servo [turn].angle = r1 # გადატანა servo status [2] = r1 ბეჭდვა ("მარჯვნივ", სტატუსი) time.sleep (0.2) def OpenGrip (self): kit.servo [grip].ango = op_g # დააყენეთ ძალაუფლება "გახსნის" პოზიციაზე: "open_tab" time.sleep (0.5) სტატუსი [3] = op_g def close_tab "time.sleep (0.5) status [3] = cl_g def StopMove (self): # არაფერს აკეთებს, მაგრამ აჩერებს მოძრაობების დაბეჭდვას (" stop ", status) time.sleep (0.25) def spotter (self, args): ძრავა = BasicEngine (args.model_file) მიკროფონი = args.mic თუ args.mic სხვა არაფერია int (args.mic) model.classify_audio (მიკროფონი, ძრავა, labels_file = "config/labels_gc2.raw.txt", commands_file = "config/commands_v1_MeArm.txt", dectection_callback = self._controler.callback, sample_rate_hz_hop = num (args.sample) int (args.num_frames_hop)) def on_execute (self, args): თუ არა self.on_init (): self._running = ყალბი q = model.get_queue () self._controler = მაკონტროლებელი (q) თუ არა args.debug_keyboard: t = თემა (target = self.spotter, args = (args,)) t.daemon = True t.start () item = -1 while self._running: pygame.event.pump () if args.debug_keyboard: keys = pygame.key.get_pressed () სხვა: სცადეთ: new_item = q.get (მართალია, 0.1) გარდა რიგისა. ცარიელი: new_item = არცერთი, თუ new_item არ არის არცერთი: item = new_item if (args.debug_keyboard და გასაღებები [pygame. K_ESCAPE]) ან პუნქტი == "გაჩერება": self._running = ყალბი # if (args.debug_keyboard და გასაღებები [pygame. K_SPACE]) ან პუნქტი == "go": # self. MeArmPos (7) # if (args.debug_keyboard და გასაღებები [pygame. K_RIGHT]) ან პუნქტი == "მარჯვნივ": # მოუხვიე მარჯვნივ self. MoveRight () if (args.debug_ke yboard და გასაღებები [pygame. K_LEFT]) ან ელემენტი == "მარცხნივ": # მოუხვიეთ მარცხნივ self. MoveLeft () თუ (args.debug_keyboard და გასაღებები [pygame. K_UP]) ან პუნქტი == "up": self. MoveUp () if (args.debug_keyboard and keys [pygame. K_DOWN]) or item == "down": self. MoveDown () if (args.debug_keyboard and keys [pygame. K_B]) or item == "b": # უკან self. MoveBack () if (args.debug_keyboard and keys [pygame. K_F]) or item == "f": # forward self. MoveForw () if (args.debug_keyboard and keys [pygame. K_O]) or item == "o": # ღია დაჭერა: self. OpenGrip () if (args.debug_keyboard and keys [pygame. K_C]) or item == "c": # close grip: self. CloseGrip () if (args.debug_keyboard and keys [pygame. K_S]) ან პუნქტი == "s": # მოძრაობის შეჩერება: "start_game" self. StopMove () if (args.debug_keyboard and keys [pygame. K_0]) or item == "0": self. MeArmPos (0) if (args.debug_keyboard and keys [pygame. K_1]) or item == "1": self. MeArmPos (1) if (args.debug_keyboard and keys [pygame. K_2]) or item == "2": self. MeArmPos (2) თუ (args.debug_keyboard და გასაღებები [pygame. K_3]) ან ის em == "3": self. MeArmPos (3) if (args.debug_keyboard and keys [pygame. K_4]) or item == "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]) or item == "6": self. MeArmPos (6) if (args.debug_keyboard და გასაღებები [pygame. K_7]) ან პუნქტი == "7": self. MeArmPos (7) თუ (args.debug_keyboard და გასაღებები [pygame. K_8]) ან პუნქტი == "8": self. MeArmPos (8) თუ (args.debug_keyboard და გასაღებები [pygame. K_9]) ან პუნქტი == "9": self. MeArmPos (9) თუ (args.debug_keyboard და გასაღებები [pygame. K_a]) ან პუნქტი == "d": self. DancingMeArm () #ცეკვა MeArm, "მომდევნო_თამაშზე" თუ (args.debug_keyboard და გასაღებები [pygame. K_r]) ან პუნქტი == "r": self. RandomMoves () #შემთხვევითი ცეკვა "შემთხვევითი თამაში" თუ (args.debug_keyboard და გასაღებები [pygame. K_j]) ან პუნქტი == "j": self. TransMeArm1 () # სატრანსპორტო ობიექტი: "lunch_game" if (args.debug_keyboard and keys [pygame. K_k]) or item == "k": self. TransMeArm2 () # სატრანსპორტო ობიექტის საპირისპირო მიმართულება: "next_game" '' 'თუ (args.debug_keyboard და გასაღებები [pygame. K_l]) ან პუნქტი == "ლ": self. JumpingJack2 (1) #LED თვალის დახუჭვა "target" '' 'time.sleep (0.05) self.on_cleanup () if _name_ ==' _main_ ': parser = 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)

გირჩევთ: