Satura rādītājs:
- Piegādes
- 1. darbība. Ierīces iestatīšana
- 2. solis: lecamā domkrata palaišana
- 3. darbība: kods un komandu fails
- 4. solis: citas idejas un citi piemēri
Video: Dzirdes lēciena domkrats, Google Coral TPU paātrinātāja versija: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:54
Tas kustina ekstremitātes, klausās jūsu pasūtījumus, to virza jaunākā mašīnmācīšanās tehnoloģija
“Dzirdes lēciena domkrats” ir vienkāršs elektromehānisks lēciens, ko darbina divi mikro servosistēmas un ļoti vienkāršs pārnesums, kam gaismas diodes ir “acis”. To kontrolē ar vienkāršām balss komandām, norādot, kura no deviņām iepriekš noteiktām pozīcijām tai jāieņem, vai jāieslēdz vai jāizslēdz gaismas diode, vai ja tā veic iepriekš noteiktu "deju" vai nejaušu kustību kopumu.
Sistēmas pamatelements ir Google Coral TPU paātrinātājs, kas ļauj palaist Tensorflow Lite modeļus bezsaistē ar ļoti lielu ātrumu pat uz "vāja" datora kā Raspberry Pi. Tas ļauj piem. ātra objektu identificēšana un klasificēšana, izmantojot RPi kameru, bet arī lokāli palaist uz mašīnmācīšanos balstītas balss atpazīšanas funkcijas.
Cik man zināms, šis ir pirmais publicētais piemērs Coral Accelerator balss noteikšanas vadītajai fiziskajai DIY ierīcei, un pievienoto koda piemēru var izmantot arī citiem, sarežģītākiem projektiem.
Balss vadība ir balstīta uz piemēru “dzirdīgā čūska” “projekta atslēgvārdu meklētājā” (https://github.com/google-coral/project-keyword-spotter), kas nesen (2019. gada septembrī) tika ievietots vietnē GitHub. Manā konfigurācijā sistēmu veido Raspberry Pi 4, kas aprīkota ar Adafruit 16 kanālu servodzinēju, Google Coral TPU paātrinātāju un tīmekļa kameru, kas šeit tiek izmantota kā mikrofons. Jumping Jack bija aprakstīts iepriekš iepriekšējā instrukcijā, kur to vadīja Google Voice komplekts, lai lasītu balss komandas, ir pievienota Servo pārsegam 2.0 versijā, kas aprakstīta turpmāk.
Iepriekšējai Google Voice Kit versijai bija trīs galvenie ierobežojumi: tā bija atkarīga no Google tīmekļa balss atpazīšanas pakalpojumiem un iestatīšana bija samērā sarežģīta, pirms komandas sniegšanas bija jānospiež kāda veida poga, un radās nopietna kavēšanās starp komandas teikšanu un sistēmas reakciju. Google Coral paātrinātāja izmantošana samazina atbildes laiku līdz sekundēm, nav atkarīgs no interneta savienojuma un visu laiku klausās. Ar dažām izmaiņām jūs to varat izmantot, lai kontrolētu daudz sarežģītākas ierīces, piemēram, lecošo domkratu, kā robotus vai automašīnas vai visu, ko varat izveidot un kontrolēt, izmantojot Raspberry Pi.
Pašreizējā versijā atslēgvārdu meklētājs saprot aptuveni 140 īsu atslēgvārdu/atslēgas frāžu kopumu, kas definēts pievienotajā modeļa failā (“voice_commands_v0.7_egetpu.tflite”) un aprakstīts atsevišķā etiķetes failā (“labels_gc2.raw.txt”).. Definēti ar brīvi maināmu failu (“commands_v2_hampelmann.txt”), mūsu skripta īpaši izmantotie atslēgvārdi pēc tam tiek kartēti uz taustiņsitieniem virtuālajā tastatūrā, piem. burtiem, cipariem, uz augšu/uz leju/pa kreisi/pa labi, crtl+c utt.
Tad, piem. izmantojot pygame.key, šie “taustiņsitieni” tiek nolasīti un tiek izmantoti, lai kontrolētu, kādas darbības ierīce, šeit lecamā ligzda, veic. Mūsu gadījumā tas nozīmē vadīt divus servos iepriekš noteiktās pozīcijās vai ieslēgt vai izslēgt gaismas diodes. Tā kā atslēgvārdu meklētājs darbojas atsevišķā pakāpē, tas var pastāvīgi klausīties jūsu pasūtījumus.
Versija 2019. gada 21. septembris
Piegādes
Raspberry Pi 4, izmantojot Pimoroni
Google Coral TPU paātrinātājs, izmantojot Mouser Germany, 72 €
Adafruit 16 servo pārsegs, izmantojot Pimoroni, aptuveni 10 €
www.adafruit.com/product/3416
learn.adafruit.com/adafruit-16-channel-pwm…
Krāvēja galvene (ja nepieciešams)
www.adafruit.com/product/2223
4x AA bateriju komplekts (vai cits 5-6V barošanas avots) Servo pārsegam
Veca tīmekļa kamera kā mikrofons
Ar servo darbināms lēciena džeks, kā aprakstīts iepriekšējā instrukcijā. Izkārtojuma rasējumi ir pievienoti nākamajam solim, taču var būt nepieciešami pielāgojumi.
Nepieciešamās detaļas lecamajam džekam:
- 3 mm Forex plāksne
- 2 mikro servi
- 2 un 3 mm skrūves un uzgriežņi
- 2 baltas gaismas diodes un rezistors
- mazliet kabeļa
1. darbība. Ierīces iestatīšana
Lai izveidotu lecošo domkratu, lūdzu, ievērojiet norādījumus, kas sniegti iepriekšējā instrukcijā. Savam prototipam izmantoju Forex, bet jūs varat izmantot lāzera griezuma akrila vai saplākšņa plāksnes. Jums var būt jāpielāgo izkārtojums atbilstoši jūsu servo izmēriem utt. Pārbaudiet, vai ekstremitātes un pārnesumi var pārvietoties bez berzes.
Iestatiet savu Raspberry Pi. Vietnē Coral Github ir pieejams Raspijas attēls, kurā ir viss nepieciešamais, lai palaistu Coral paātrinātāju Pi, un tajā ir daudz projektu ar visiem iestatījumiem.
Iegūstiet projekta atslēgvārdu meklētāju no Google Coral GitHub lapas. Instalējiet visu nepieciešamo programmatūru, kā norādīts.
Instalējiet piedāvātos failus. Ievietojiet lecošā domkrata skriptu projekta atslēgvārdu meklētāja mapē un atbilstošo komandu failu konfigurācijas apakšmapē.
Pievienojiet Adafruit servo pārsegu pie Pi. Tā kā es izmantoju RPI korpusu ar ventilatoru, lai iespējotu savienojumu, man bija jāizmanto GPIO krāvēji (piemēram, pieejami Pimoroni). Instalējiet visas nepieciešamās bibliotēkas, kā norādīts servodzinēja Adafruit instrukcijās.
Servo pārsegam pievienojiet 5-6V barošanas avotu. Pievienojiet servo un gaismas diodes. Es savā gadījumā izmantoju 0 portu gaismas diodēm un 11. un 15. portu servos.
Lai visu pārbaudītu, es ieteiktu vispirms izmēģināt projekta atslēgvārdu novērotāja "dzirdīgās čūskas" piemēru un Adafruit servo pārsega piemērus.
2. solis: lecamā domkrata palaišana
Ja visas detaļas ir iestatītas un darbojas, mēģiniet to izmantot. Jūs varat palaist skriptu IDE vai no komandrindas.
Izsaucot "0 pozīciju" uz "9 pozīciju", lēciena džeks ieņems vienu no iepriekš definētajām pozīcijām. Es definēju "1" kā abas rokas uz augšu (uu), "3" kā kreiso uz augšu, pa labi uz leju (ud), "9" kā abas rokas uz leju (dd) un "5" kā abas rokas centrētas (cc).
uu uc ud = 1 2 3
cu cc cd = 4 5 6
du dc dd = 7 8 9
"0" ir identisks "5". “3” un “8” atslēgvārdu pamanītājs neatpazīst ļoti labi, un tie, iespējams, būs jāatkārto.
Jums, iespējams, būs jāpielāgo minimālās un maksimālās vērtības katram servo/sānam, lai servos netiktu bloķēts un pēc tam patērētu pārāk daudz jaudas.
"nākamā spēle" sāks "deju", t.i., noteiktu pozīciju secību, savukārt "izlases spēle" sāks lēciena džeku, lai veiktu nejaušu kustību secību. Abos gadījumos tie darbosies mūžīgi, tāpēc jums var nākties pārtraukt kustības, piem. ar komandu "pozīcija nulle".
"apturēt spēli" izraisīs "ctrl + c" un apturēs procesu.
Var izmantot "ieslēgt" un "izslēgt", ieslēdzot un izslēdzot gaismas diodes.
Mainot time.sleep vērtības, jūs varat pielāgot kustību ātrumu.
3. darbība: kods un komandu fails
Šeit parādītais kods ir modifikācija "dzirdes čūskas" kodam, kas ir daļa no projekta atslēgvārdu novērotāju paketes. Es tikko noņēmu visu, kas nebija nepieciešams manam pieteikumam, bez patiesas izpratnes par detaļām. Jebkuri uzlabojumi ir apsveicami.
Pēc tam es pievienoju Adafruit servo pārsegam nepieciešamās detaļas, pamatojoties uz to piemēru failiem.
Vēlos pateikties abu daļu programmētājiem.
Kods atrodams pievienots kā fails. Izmantojiet to uz savu risku, modificējiet to, uzlabojiet to, spēlējiet ar to.
# Autortiesības 2019 Google LLC
# # Licencēts saskaņā ar Apache licenci, versija 2.0 ("licence"); # Jūs nedrīkstat izmantot šo failu, izņemot saskaņā ar licenci. # Jūs varat iegūt licences kopiju vietnē # # https://www.apache.org/licenses/LICENSE-2.0 # # Ja vien piemērojamie tiesību akti nepieprasa vai rakstiski nav piekrituši, programmatūra #, kas tiek izplatīta saskaņā ar licenci, tiek izplatīta PAMATS "KĀ IR" # BEZ GARANTIJĀM VAI JEBKĀDU NOSACĪJUMU, vai nu tiešu, vai netiešu. # Skatiet licenci, lai uzzinātu konkrētās valodas, kas reglamentē atļaujas un # ierobežojumus saskaņā ar licenci. no _future_ importēt absolūtu_importu no _future_ importa nodaļas no _future_ importēt drukas_funkciju importēt argparse importēt os no nejaušas importēšanas randint no pavedienu importēšanas Vītnes importēšanas laiks no edgetpu.basic.basic_engine importēt BasicEngine importēšanas modeļa importēšanas pigame no pygame.locals importēt * importēt rindu no izlases importēšanas randrange no adafruit_servokit importēšana ServoKit importēšanas dēļa importēšana busio importēšana adafruit_pca9685 importēšanas laiks i2c = busio. I2C (board. SCL, board. SDA) hat = adafruit_pca9685. PCA9685 (i2c) hat.frequency = 60 kit = ServoKit (kanāli = 16) # komplekta numurs kanālu #komplek.servo [0].actuation_range = 160 #kit.servo [0].set_pulse_width_range (1000, 2000) #augšup, vidus un lejup kreisās un labās rokas iestatījumi up_l = 35 md_l = 90 dn_l = 160 up_r = 160 md_r = 90 dn_r = 35
lft = 15 # servo porta numurs, kreisais servo (0-8)
rgt = 11 # servo porta numurs, labais servo (0-8) led_channel_0 = hat.channels [0] # LED iestatīts uz 0 porta led_channel_0.duty_cycle = 0 # ieslēgt LED 100% # roku iestatījumu saraksts deviņām pozīcijām = [(md_l, md_r), (up_l, up_r), (up_l, md_r), (up_l, dn_r), (md_l, up_r), (md_l, md_r), (md_l, dn_r), (dn_l, up_r), (dn_l, md_r), (dn_l, dn_r)] # definē 9 JumpingJack pozīcijas, ko norāda veseli skaitļi 0-9 dance1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2, 1, 4, 7, 8, 9, 6, 3, 2, 0) # a "deju" klases kontrolieris (objekts): #Callback function def _init _ (self, q): self._q = q def callback (self, komanda): self._q.put (komanda) klases lietotne: def _init _ (self): self._running = True def on_init (self): pygame.init () self.game_started = True self._running = True return True def on_event (self, event): if event.type == pygame. QUIT: self._running = False def JumpingJack0 (self, keys): # vadīklas Jumping Jack, atslēgvārdi: "position x" key = int (taustiņi) p = position [taustiņš] a = p [0] b = p [1] drukāt ("Pozīcija:", taustiņš, "pa kreisi /pa labi: ", a,"/", b," grāds ") # sys.stdout.write (" Pozīcija: ", atslēga," pa kreisi/pa labi: ", a,"/", b," grāds ") kit.servo [lft].angle = a kit.servo [rgt].angle = b time.sleep (0.1) def JumpingJack1 (self): # kontrole Jumping Jack dance, atslēgvārds: "nākamā spēle" dnce = dance1 sp = (len (dnce)) r diapazonā (sp): # pozīciju deju secība, sp soļi dc = dnce [r], ja (dc nav diapazonā (10)): # print ("ievades kļūda pozīcijā", sp) dc = 4 p = pozīcija [dc] a = p [0] b = p [1] komplekts.servo [lft].stūris = komplekts.servo [rgt].stūris = b laiks.miega (0,25) # nosaka ātrumu kustību def JumpingJack2 (sevis, taustiņi): # vadīklas Jumping Jack LED, atslēgvārdi: "ieslēgt/izslēgt" LED = int (taustiņi), ja LED == 1: led_channel_0.duty_cycle = 0xffff # ieslēgt LED 100% time.sleep (0.1) ja LED == 0: led_channel_0.duty_cycle = 0 # izslēdziet LED time.sleep (0.1), ja LED == 2: # mirgo led_channel_0.duty_cycle = 0xffff # ieslēdziet LED 100% time.sleep (0.5) led_channel_0.duty_cycle = 0 #ieslēgt LED 100% time.sleep (0.5) led_channel_0.duty_cycle = 0xffff #ieslēgt LED 100% time.sleep (0,5) led_channel_0.duty_cycle = 0 #ieslēgt LED 100% time.sleep (0,5) led_channel_0.duty_cycle = 0xffff #ieslēgt LED 100% time.sleep (0,1) def JumpingJack3 (self): # kontrole Jumping Jack dance, atslēgvārds: "random game" # par h diapazonā (10): dr = randrange (9) p = pozīcija [dr] a = p [0] b = p [1] kit.servo [lft].angle = komplekts.servo [rgt].angle = b time.sleep (0.25) # nosaka kustību ātrumu def spotter (self, args): engine = BasicEngine (args.model_file) mic = args.mic if args.mic ir Nav cita int (args.mic) model.classify_audio (mikrofons, dzinējs, labels_file = "config/labels_gc2.raw.txt", commands_file = "config/commands_v2_hampelmann.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):
ja ne self.on_init (): self._running = False q = model.get_queue () self._controler = Kontrole (q) ja nē args.debug_keyboard: t = pavediens (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 () else: try: new_item = q.get (Tiesa, 0,1) izņemot rindu. Empty: new_item = Nav, ja new_item nav Nav: item = new_item if (args.debug_keyboard and keys [pygame. K_ESCAPE]) vai item == "stop": self._running = False # if (args.debug_keyboard and keys [pygame. K_SPACE]) vai item == "go": # self. JumpingJack0 (7) # if (args.debug_keyboard and keys [pygame. K_RIGHT]) vai item == "right": self. JumpingJack0 (6), ja (args.debug_keyboard and keys [pygame. K_LEFT]) vai item == "left": self. JumpingJack0 (4) if (args.debug_keyboard and keys [pygame. K_UP]) or item == " up ": self. JumpingJack0 (1) if (args.debug_keyboard and keys [pygame. K_DOWN]) or item ==" down ": self. JumpingJack0 (9) if (args.debug_keyboard and keys [pygam e. K_0]) vai vienums == "0": self. JumpingJack0 (0) ja (args.debug_keyboard and keys [pygame. K_1]) vai item == "1": self. JumpingJack0 (1) if (args. debug_keyboard and keys [pygame. K_2]) or item == "2": self. JumpingJack0 (2) if (args.debug_keyboard and keys [pygame. K_3]) or item == "3": self. JumpingJack0 (3) ja (args.debug_keyboard and keys [pygame. K_4]) or item == "4": self. JumpingJack0 (4) if (args.debug_keyboard and keys [pygame. K_5]) vai item == "5": self. JumpingJack0 (5), ja (args.debug_keyboard and keys [pygame. K_6]) or item == "6": self. JumpingJack0 (6) if (args.debug_keyboard and keys [pygame. K_7]) vai item == "7 ": self. JumpingJack0 (7) if (args.debug_keyboard and keys [pygame. K_8]) or item ==" 8 ": self. JumpingJack0 (8) if (args.debug_keyboard and keys [pygame. K_9]) or item == "9": self. JumpingJack0 (9), ja (args.debug_keyboard and keys [pygame. K_a]) or item == "d": self. JumpingJack1 () #dancing Jack, on "next_game" if (args. atkļūdošanas tastatūra un taustiņi [pygame. K_j]) vai vienums == "j": self. JumpingJack2 (0) #LED on, ON " switch_on "if (args.debug_keyboard and keys [pygame. K_k]) or item ==" k ": self. JumpingJack2 (1) #LED off, on" off off "if (args.debug_keyboard and keys [pygame. K_l]) vai vienums == "l": self. JumpingJack2 (1) #LED mirgo "mērķis", ja (args.debug_keyboard and keys [pygame. K_r]) vai item == "r": self. JumpingJack3 () #random dance "izlases spēle" time.sleep (0.05) self.on_cleanup () if _name_ == '_main_': parser = argparse. ArgumentParser () parser.add_argument ('-debug_keyboard', help = 'Izmantojiet tastatūru, lai kontrolētu JumpingJack. ', action =' store_true ', default = False) model.add_model_flags (parser) args = parser.parse_args () the_app = App () the_app.on_execute (args)
Ir arī komandu konfigurācijas fails "commands_v2_hampelmann.txt". Modificējiet, kā vēlaties. Tas ir tikai komandu, taustiņu, (spēks,) kombināciju saraksts, pamatojoties uz etiķetes failu.
position_zero, 0, position_one, 1, position_two, 2, position_three, 3, position_four, 4, position_five, 5, position_six, 6, position_seven, 7, position_eight, 8, position_nine, 9, move_up, up, go_up, up, move_down, down, go_down, uz leju, virzīties_atpakaļ, pa kreisi, virzīties_ uz priekšu, pa labi, iet_ atpakaļ, pa kreisi, iet_ uz priekšu, pa labi, 0,8 mērķis, l, izslēgt skaņu, z, jā, y, nē, n, ieslēgt_, j, izslēgt, k, skaļuma_uz augšu, uz augšu, skaļuma samazināšanu uz leju, uz leju, nākamā_spēle, d, izlases_spēle, r, sākuma_spēle, s, beigu_spēle, ctrl+c,
4. solis: citas idejas un citi piemēri
Ir pilnīgi skaidrs, ka šo iestatījumu var izmantot arī robotu vai citu ierīču vadībai. Būtībā viss, ko varētu kontrolēt Raspberry Pi.
Es strādāju pie skripta paplašinājuma, lai darbinātu MeArm, un ceru, ka varēsim to prezentēt 2019. gada oktobrī.
Es arī apsveru iespēju izmantot Jumping Jack kā semaforu un izmantot "project posenet" ekstremitāšu stāvokļa atpazīšanas programmu kā līdzekli, lai nolasītu Jumping Jack pozīcijas un pārvērstu to par skaitli. Tādā veidā tas var pat sazināties ar tekstu, jo 2x 8 pozīcijas var norādīt 64 dažādus ciparus, kas ir vairāk nekā pietiekami alfabētam, cipariem un zīmēm. Tas varētu ļaut, kaut arī nedaudz pārveidot, ierosinātā IETF "IP datu diagrammu pārsūtīšana, izmantojot semafora karoga signalizācijas sistēmu (SFSS)" fizisku realizāciju (https://tools.ietf.org/html/rfc4824).
Bet tas būs vēl viens pamācāms. Un, tā kā pirmie eksperimenti liecināja, ka lecamajam domkratam būs nepieciešamas būtiskas izmaiņas, lai AI sistēma to atzītu par cilvēku, var būt vajadzīgs zināms laiks.
Es vēlos vērst jūsu uzmanību uz šādu pamācību: Objektu atrašanas personīgais asistents-robots-Ft-Raspberry, kur aprakstīts objektu atrašanas robots, izmantojot Raspberry Pi un Google Coral TPU kombināciju.
Ieteicams:
LLLT LED sarkanās gaismas terapija ausu troksnim dzirdes zudumā: 4 soļi
LLLT LED sarkanās gaismas terapija ausu troksnim ausīs Dzirdes zudums: Man ir bijis nikns troksnis ausīs (zvana ausīs) tik ilgi, cik atceros. Tātad, nav bijis " ātrs risinājums " tas, šķiet, palīdz to mazināt. Daži cilvēki domā, ka troksnis ausīs var būt reakcija uz antibiotikām, reakcija uz steroīdiem, jutīgums
Dzirdes invalīdu durvju zvana gaismas uzlaušana: 7 soļi (ar attēliem)
Dzirdes invalīdu durvju zvana gaismas uzlaušana: Problēma: mans tētis ir reģistrēts kā kurls un mana mamma ir ar dzirdes traucējumiem, un tāpēc viņiem bieži ir grūti dzirdēt durvju zvanu. Tā varētu būt problēma arī daudziem citiem. Viņi nopirka mirgojošu gaismas durvju zvanu, lai palīdzētu viņiem
Ar dzirdes aparātu, Google Coral TPU paātrinātājs: 3 soļi
A Hearing MeArm, Google Coral TPU Accelerator Driven: Turpmāk es gribētu aprakstīt balss vadītu MeArm versiju-mazu xyz robota roku ar satvērēju. Es izmantoju MIME nozaru MeArm Pi, bet sistēmai vajadzētu būt piemērotai jebkurai MeArm versijai vai līdzīgai servopiedziņai
Arduino - rotējoša vadība kustībā - valkājams priekšmets (iedvesmojoties no hroniskā paātrinātāja marķiera pārskatīšanas): 7 soļi (ar attēliem)
Arduino - rotējoša kustība kustībā - valkājams priekšmets (iedvesmojoties no hroniskā paātrinātāja marķiera pārskatīšanas): šī pamācība palīdzēs savienot akselerometru un neopikselu LED gredzenu. Es sniegšu kodu, lai nolasītu akselerometru un iegūtu šo efektu ar savu neopikseli animācija. Šim projektam es izmantoju Adafruit 24 bitu Neopixel gredzenu un MP
Tālvadības ar krāsu kontrolējams domkrats: 3 soļi (ar attēliem)
Ar tālvadību vadāms Jack-o-Lantern: Kā parasti, šajā Helovīnā es nolēmu izveidot projektu, kas saistīts ar sezonu. Izmantojot Prusa I3 un Thingiverse, es izdrukāju Helovīna rotājumu, kurā krāsu attālināti kontrolē, izmantojot projektu Blynk. Projekts Blynk ļauj izveidot mobilo