Sisukord:
- Tarvikud
- Samm: seadme seadistamine
- 2. samm: hüppepistiku käivitamine
- Samm: kood ja käskude fail
- Samm: täiendavad ideed ja muud näited
Video: Kuulmishüppepistik, Google Coral TPU kiirendi versioon: 4 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
See liigutab oma jäsemeid, kuulab teie käske, seda juhib uusim masinõppetehnoloogia
„Kuulmishüppetakk” on lihtne elektromehaaniline hüppetõstuk, mida juhivad kaks mikroservot ja väga lihtne käik, mille LED -id on „silmad”. Seda juhitakse lihtsate häälkäsklustega, mis näitavad, millise üheksast eelmääratletud asendist see võtab, või kas LED peaks sisse või välja lülitama või kas see sooritab etteantud "tantsu" või juhuslikke liigutusi.
Süsteemi põhielemendiks on Google Coral TPU kiirendi, mis võimaldab Tensorflow Lite mudeleid väga suure kiirusega võrguühenduseta käitada isegi "nõrgal" arvutis nagu Raspberry Pi. See võimaldab nt. kiire objekti tuvastamine ja klassifitseerimine RPi kaamera abil, aga ka masinõppepõhiste häältuvastusfunktsioonide kohalik käivitamine.
Minu teada on see esimene avaldatud näide Coral Accelerator häältuvastusega juhitava füüsilise isetegemisseadme kohta ja lisatud koodinäidet võib kasutada ka muude keerukamate projektide jaoks.
Hääljuhtimine põhineb näitel „kuulev madu” „projekti märksõnade märkajas” (https://github.com/google-coral/project-keyword-spotter), mis hiljuti (septembris 2019) GitHubi saidile paigutati. Minu konfiguratsioonis koosneb süsteem Raspberry Pi 4 -st, mis on varustatud Adafruit 16 -kanalilise servokangaga, Google Coral TPU kiirendi ja veebikaameraga, mida kasutatakse siin mikrofonina. Jumping Jacki oli varem kirjeldatud ühes eelmises juhendis, kus seda häälkäskluste lugemiseks kasutas Google Voice'i komplekt, mis on kinnitatud servokapoti külge järgmises versioonis 2.0.
Eelmisel Google Voice Kiti versioonil oli kolm keskset piirangut: see sõltus Google'i veebipõhistest kõnetuvastusteenustest ja seadistamine oli suhteliselt keeruline, enne käsu andmist oli vaja vajutada mingit nuppu ja tekkis tõsine viivitus käsu ütlemise ja süsteemi vastuse vahel. Google Coral kiirendi kasutamine vähendab reageerimisaega sekunditeni, ei sõltu Interneti -ühendusest ja kuulab kogu aeg. Mõningate muudatustega saate seda kasutada palju keerukamate seadmete juhtimiseks, näiteks hüppepistik, robotid või autod või kõik, mida saate Raspberry Pi abil ehitada ja juhtida.
Praeguses versioonis mõistab märksõnade otsija umbes 140 lühimärksõnast/võtmefraasist koosnevat komplekti, mis on määratletud kaasasolevas mudelfailis („voice_commands_v0.7_egetpu.tflite”) ja kirjeldatud eraldi sildifailis („labels_gc2.raw.txt”). Määratletud vabalt muudetava failiga (“commands_v2_hampelmann.txt”), kaardistatakse spetsiaalselt meie skripti poolt kasutatavad märksõnad virtuaalse klaviatuuri klahvivajutustele, nt. tähtede, numbrite puhul üles/alla/vasakule/paremale, crtl+c jne.
Siis nt. klahvi pygame.key abil loetakse neid klahvivajutusi ja neid kasutatakse selleks, et kontrollida, milliseid toiminguid seade, siin hüpikpistik, sooritab. Meie puhul tähendab see kahe servo juhtimist etteantud asendisse või LED -ide sisse- või väljalülitamist. Kuna märksõnade jälgija töötab eraldi turvis, saab see teie tellimusi pidevalt kuulata.
Versioon 21. september 2019
Tarvikud
Vaarika Pi 4, Pimoroni kaudu
Google Coral TPU kiirendi, Mouseri Saksamaa kaudu, 72 €
Adafruit 16 Servo Bonnet, Pimoroni kaudu, umbes 10 €
www.adafruit.com/product/3416
learn.adafruit.com/adafruit-16-channel-pwm…
Virnastaja päis (vajadusel)
www.adafruit.com/product/2223
4x AA patareipakk (või muu 5-6V toiteallikas) Servo Kapoti jaoks
Vana veebikaamera, mikrofon
Servomootoriga hüppetõstuk, nagu on kirjeldatud eelmises juhendis. Paigutusjoonised on lisatud järgmisele sammule, kuid võivad vajada kohandamist.
Hüppetõstuki jaoks vajalikud osad:
- 3 mm Forexi plaat
- 2 mikro servot
- 2 ja 3 mm kruvid ja mutrid
- 2 valget LED -i ja takisti
- natuke kaablit
Samm: seadme seadistamine
Hüppetõstuki ehitamiseks järgige eelmises juhendis toodud juhiseid. Ma kasutasin oma prototüübi jaoks Forexi, kuid võite kasutada laserlõigatud akrüül- või vineerplaate. Võimalik, et peate kohandama paigutust vastavalt oma servode suurusele jne. Kontrollige, kas jäsemed ja käik saavad hõõrdumata liikuda.
Seadistage oma Raspberry Pi. Coral Githubi saidil on saadaval Raspiani pilt, mis sisaldab kõike, mis on vajalik Corali kiirendi käivitamiseks Pi -l, ja sisaldab palju projekte, kusjuures kõik seaded on juba paigas.
Hankige projekti märksõnade otsija lehelt Google Coral GitHub. Installige kogu vajalik tarkvara, nagu näidatud.
Installige kaasasolevad failid. Asetage hüpikpistoni skript projekti märksõna märkaja kausta ja vastavad käskude fail konfiguratsiooni alamkausta.
Kinnitage Adafruit Servo Kapott Pi külge. Kuna kasutan ventilaatoriga RPI -korpust, pidin ühenduse võimaldamiseks kasutama GPIO virnastajaid (nt saadaval Pimoronilt). Installige kõik nõutavad teegid, nagu on märgitud Adafruit'i juhikomplekti juhistes.
Kinnitage servovõllile 5-6V toiteallikas. Kinnitage servod ja LED -id. Minu puhul kasutasin LED -de jaoks porti 0 ja servode jaoks porte 11 ja 15.
Kõigi kontrollimiseks soovitaksin kõigepealt proovida projekti märksõna märkaja "kuulmis madu" näidet ja Adafruit servo kapoti näiteid.
2. samm: hüppepistiku käivitamine
Kui kõik osad on seadistatud ja töötavad, proovige seda kasutada. Skripti saate käivitada IDE -s või käsurealt.
"Asendi 0" hüüdmine "positsioonile 9" kutsub hüppava Jacki võtma ühe eelmääratud positsiooni. Ma määratlesin "1" mõlema käena üles (uu), "3" vasakuna üles, paremale alla (ud), "9" kui mõlemad käed alla (dd) ja "5" mõlema käe keskele (cc).
uu uc ud = 1 2 3
cu cc cd = 4 5 6
du dc dd = 7 8 9
"0" on identne "5" -ga. Märksõna märgaja ei tunne "3" ja "8" väga hästi ära ja võib -olla tuleb neid korrata.
Võimalik, et peate iga servo/külje minimaalseid ja maksimaalseid väärtusi reguleerima, et servod ei blokeeruks ja võtaksid siis liiga palju energiat.
"Järgmine mäng" alustab "tantsu", st teatud positsioonide jada, "juhuslik mäng" aga alustab hüppavat Jacki juhusliku liigutuste jada tegemiseks. Mõlemal juhul töötavad need igavesti, seega peate võib -olla liikumised peatama, nt. käsuga "positsioon null".
"stop game" kutsub esile "ctrl + c" ja peatab protsessi.
"sisselülitamist" ja "väljalülitamist" saab kasutada LED -ide sisse- ja väljalülitamiseks.
Time.sleep väärtusi muutes saate reguleerida liikumiskiirust.
Samm: kood ja käskude fail
Siin esitatud kood on modifikatsioon "kuulmismadu" koodist, mis on osa projekti märksõnade jälgija paketist. Eemaldasin lihtsalt kõik, mis polnud minu rakenduse jaoks vajalik, ilma üksikasjadest reaalselt aru saamata. Igasugused parandused on teretulnud.
Seejärel lisasin nende näidisfailide põhjal Adafruit Servo Kapoti jaoks vajalikud osad.
Tahaksin tänada mõlema osa programmeerijaid.
Koodi leiate failina manusena. Kasutage seda omal vastutusel, muutke, täiustage, mängige sellega.
# Autoriõigus 2019 Google LLC
# # Litsentsitud Apache litsentsi versiooni 2.0 ("litsents") alusel; # te ei tohi seda faili kasutada, välja arvatud vastavalt litsentsile. # Litsentsi koopia saate hankida aadressilt # # https://www.apache.org/licenses/LICENSE-2.0 # # Kui kohaldatav seadus seda ei nõua või pole kirjalikult kokku lepitud, levitatakse litsentsi alusel levitatud tarkvara # "NAGU ON" PÕHJUS, # ILMA GARANTIIDE VÕI TINGIMUSTEGA, nii otsesed kui ka kaudsed. # Vaadake litsentsist litsentsist tulenevaid õigusi ja # piiranguid reguleerivat konkreetset keelt. from _future_ import absoluutne_import _future_ impordi osakonnast _future_ impordi print_funktsioon import argparse import os juhuslikust importimisest randint alates keermestamise importimine Lõim impordi aeg edgetpu.basic.basic_engine import BasicEngine impordimudeli importimise pygame saidilt pygame.locals import * impordijärjekord juhuslikust impordist randrange alates adafruit_servokit import ServoKiti imporditahvli import busio importimine adafruit_pca9685 impordi aeg i2c = busio. I2C (board. SCL, board. SDA) hat = adafruit_pca9685. PCA9685 (i2c) hat.frequency = 60 kit = ServoKit (channels = 16) # set number kanalitest #komplekt.servo [0].actuation_range = 160 #kit.servo [0].set_pulse_width_range (1000, 2000) #üles-, kesk- ja allapoole seaded vasakule ja paremale käele üles_l = 35 md_l = 90 dn_l = 160 üles_r = 160 md_r = 90 dn_r = 35
lft = 15 # servopordi arv, vasak servo (0-8)
rgt = 11 # servopordi arv, parem servo (0-8) led_channel_0 = hat.channels [0] # LED on seadistatud pordile 0 led_channel_0.duty_cycle = 0 # sisselülitamine LED 100% # käe seadete loend üheksa positsiooni jaoks = [(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)] # määratleb 9 JumpingJack positsiooni, mis on tähistatud täisarvudega 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 "tantsuklass" Kontrollija (objekt): #Callback function def _init _ (self, q): self._q = q def callback (self, käsk): ise. on_event (ise, sündmus): if event.type == pygame. QUIT: self._running = False def JumpingJack0 (ise, võtmed): # juhib Jumping Jacki, märksõnad: "position x" võti = int (võtmed) p = positsioon [võti] a = p [0] b = p [1] print ("Positsioon:", võti, vasakul) /parem: ", a,"/", b," kraad ") # sys.stdout.write (" Positsioon: ", võti," vasak/parem: ", a,"/", b," kraad ") kit.servo [lft].nurk = komplekt.servo [rgt].nurk = b time.sleep (0.1) def JumpingJack1 (ise): # juhib Jumping Jack dance, märksõna: "järgmine mäng" dnce = dance1 sp = (len (dnce)) r jaoks vahemikus (sp): # positsioonide tantsimise järjekord, sp sammud dc = dnce [r] kui (dc ei ole vahemikus (10)): # print ("sisestusviga asendis", sp) dc = 4 p = asukoht [dc] a = p [0] b = p [1] komplekt.servo [lft].nurk = komplekt.servo [rgt].nurk = b time.sleep (0.25) # määrab kiiruse of liigutused def JumpingJack2 (ise, klahvid): # juhib Jumping Jacki LEDid, märksõnad: "lülita sisse/välja" led = int (võtmed) kui led = = 1: led_channel_0.duty_cycle = 0xffff #lülita LED 100% time.sleep (0.1) kui led == 0: led_channel_0.duty_cycle = 0 # lülitage LED time.sleep välja (0,1), kui led == 2: # vilgub led_channel_0.duty_cycle = 0xffff #lülitage LED 100% time.sleep (0.5) led_channel_0.duty_cycle = 0 #lülitage LED sisse 100% time.sleep (0.5) led_channel_0.duty_cycle = 0xffff #LED -i sisselülitamine 100% time.sleep (0,5) led_channel_0.duty_cycle = 0 #sisselülitamine LED 100% time.sleep (0,5) led_channel_0.duty_cycle = 0xffff #lülita LED 100% time.sleep (0,1) def JumpingJack3 (ise): # juhib Jumping Jack tantsu, märksõna: "juhuslik mäng" # h vahemikus (10): dr = randrange (9) p = positsioon [dr] a = p [0] b = p [1] kit.servo [lft].nurk = komplekt.servo [rgt].nurk = b time.sleep (0.25) # määrab liikumiskiiruse def spotter (ise, args): engine = BasicEngine (args.model_file) mic = args.mic if args.mic pole ükski teine int (args.mic) model.classify_audio (mikrofon, mootor, sildid_fail = "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 (ise, args):
kui mitte self.on_init (): self._running = False q = model.get_queue () self._controler = Kontrollija (q) kui mitte args.debug_keyboard: t = Thread (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 (Tõsi, 0,1), välja arvatud järjekord. Empty: new_item = Puudub, kui new_item ei ole Puudub: item = new_item if (args.debug_keyboard ja võtmed [pygame. K_ESCAPE]) või item == "stop": self._running = False # if (args.debug_keyboard ja võtmed [pygame. K_SPACE]) või item == "go": # self. JumpingJack0 (7) # if (args.debug_keyboard and keys [pygame. K_RIGHT]) või item == "right": ise. JumpingJack0 (6) kui (args.debug_keyboard ja klahvid [pygame. K_LEFT]) või 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 ja klahvid [pygam e. K_0]) või üksus == "0": self. JumpingJack0 (0) if (args.debug_keyboard and keys [pygame. K_1]) või item == "1": self. JumpingJack0 (1) if (args. silumise_klaviatuur ja klahvid [pygame. K_2]) või üksus == "2": self. JumpingJack0 (2) if (args.debug_keyboard and keys [pygame. K_3]) or item == "3": self. JumpingJack0 (3) if (args.debug_keyboard ja võtmed [pygame. K_4]) või item == "4": self. JumpingJack0 (4) if (args.debug_keyboard and keys [pygame. K_5]) või item == "5": self. JumpingJack0 (5) kui (args.debug_keyboard ja klahvid [pygame. K_6]) või üksus == "6": self. JumpingJack0 (6) if (args.debug_keyboard ja klahvid [pygame. K_7]) või 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) kui (args.debug_keyboard ja klahvid [pygame. K_a]) või item == "d": self. JumpingJack1 () #dancing Jack, "next_game" if (args. silumisklaviatuur ja klahvid [pygame. K_j]) või üksus == "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" swithch off "if (args.debug_keyboard ja klahvid [pygame. K_l]) või item == "l": self. JumpingJack2 (1) #LED vilgub "target" if (args.debug_keyboard and keys [pygame. K_r]) or item == "r": self. JumpingJack3 () #random dance "juhuslik mäng" time.sleep (0.05) self.on_cleanup () if _name_ == '_main_': parser = argparse. ArgumentParser () parser.add_argument ('-debug_keyboard', help = 'JumpingJacki juhtimiseks kasutage klaviatuuri. ', action =' store_true ', default = False) model.add_model_flags (parser) args = parser.parse_args () the_app = App () the_app.on_execute (args)
Samuti on käsu konfiguratsioonifail "commands_v2_hampelmann.txt". Muutke oma äranägemise järgi. See on lihtsalt siltide failil põhinev "käskude, võtmete, (tugevus,)" kombinatsioonide loend.
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, alla, liiguta_tagasi, vasakule, liiguta edasi, paremale, mine tagasi, vasakule, mine edasi, paremale, 0,8 sihtmärk, l, vaigista, z, jah, y, ei, n, lülita sisse, j, lülita välja, k, helitugevus üles, üles, helitugevus alla, alla, järgmine_mäng, d, juhuslik mäng, r, algusmäng, s, stoppmäng, ctrl+c,
Samm: täiendavad ideed ja muud näited
On üsna ilmne, et seda seadet võib kasutada ka robotite või muude seadmete juhtimiseks. Põhimõtteliselt kõike, mida võib juhtida Raspberry Pi.
Töötan MeArmi juhtimiseks skripti laienduse kallal ja loodan, et saan selle esitada oktoobris 2019.
Samuti kaalun Jumping Jacki kasutamist semaforina ja jäsemete positsiooni tuvastamise programmi "projekt posenet" kui tööriista Jumping Jacki positsioonide lugemiseks ja selle arvu muutmiseks. Sel viisil võib see isegi teksti edastada, kuna 2x 8 positsiooni võib näidata 64 erinevat numbrit, mis on tähestiku, numbrite ja märkide jaoks enam kui piisav. See võib võimaldada, kuigi veidi muudetud, kavandatava IETF -i "IP -datagrammide edastamine üle semaforilipu signaalisüsteemi (SFSS)" füüsilise teostuse (https://tools.ietf.org/html/rfc4824).
Kuid see on veel üks õpetlik. Ja nagu esimesed katsed näitasid, et hüppepistik vajab olulisi muudatusi, enne kui tehisintellekti süsteem selle inimeseks tunnistab, võib kuluda veidi aega.
Juhin teie tähelepanu järgmisele juhendatavale: Objektiotsingu-isiklik-assistent-robot-Ft-Vaarikas, kus kirjeldatakse objektiotsimisrobotit, mis kasutab Raspberry Pi ja Google Coral TPU kombinatsiooni.
Soovitan:
E-dohicky Russ'i laservõimsusmõõturi elektrooniline versioon Dohicky: 28 sammu (koos piltidega)
E-dohicky Russ'i laservõimsusmõõturi elektrooniline versioon Dohicky: Laser-elektritööriist. E-dohicky on Russ SADLERi dohicky elektrooniline versioon. Russ animeerib väga head SarbarMultimedia youtube'i kanalit https://www.youtube.com/watch?v=A-3HdVLc7nI&t=281sRuss SADLER esitab lihtsa ja odava lisaseadme
ThreadBoard (mitte-3D-prinditud versioon): E-Textile Rapid Prototyping Board: 4 sammu (koos piltidega)
ThreadBoard (mitte-3D-trükitud versioon): E-Textile Rapid Prototyping Board: ThreadBoard V2 3D-trükitud versiooni juhend on leitav siit. ThreadBoardi 1. versiooni leiate siit. Läbi kulude, reisimine, pandeemiad ja muud takistused, ei pruugi teil olla juurdepääsu 3D -printerile, kuid soovite
Kuulmismeel, Google Coral TPU kiirendi: 3 sammu
A Hearing MeArm, Google Coral TPU Accelerator Driven: Järgnevalt tahaksin kirjeldada MeArmi, väikese haaratsiga xyz-robotkäe hääljuhtimisega versiooni. Kasutasin MIME tööstusharudest pärit MeArm Pi, kuid süsteem peaks olema rakendatav mis tahes MeArmi versiooni või sarnase servoajami jaoks
Häälega juhitav hüppepistik- Google Voice AIY versioon: 3 sammu
Häälega juhitav hüppamispistik- Google Voice AIY versioon: Nii et teil on jõuludeks see AIY häältekomplekt ja olete sellega juhiseid järgides mänginud. See on naljakas, aga nüüd? Järgnevalt kirjeldatud projekt esitab lihtsa seadme, mida saab luua Raspbe AIY häälkübara abil
Google AIY VoiceHAT Raspberry Pi komplekti jaoks (MagPi 57 versioon 2017): 6 sammu (koos piltidega)
Google AIY VoiceHAT Raspberry Pi komplekti jaoks (MagPi 57 versioon 2017): juhendid MagPi häälkomplekti kokkupanekuks