Sisukord:

Heli lokaliseeriv mannekeenipea koos Kinectiga: 9 sammu (piltidega)
Heli lokaliseeriv mannekeenipea koos Kinectiga: 9 sammu (piltidega)

Video: Heli lokaliseeriv mannekeenipea koos Kinectiga: 9 sammu (piltidega)

Video: Heli lokaliseeriv mannekeenipea koos Kinectiga: 9 sammu (piltidega)
Video: Обзор вилочных погрузчиков HELI 2024, Juuli
Anonim
Heli lokaliseeriv mannekeenipea koos Kinectiga
Heli lokaliseeriv mannekeenipea koos Kinectiga

Tutvuge juhi väsimuse jälgimissüsteemi testiva mannekeeniga Margaret. Ta lahkus hiljuti oma ülesannetest ja leidis tee meie kontoriruumidesse ning on sellest ajast peale juhtinud nende tähelepanu, kes arvavad, et ta on "jube". Õigluse huvides olen andnud talle võimaluse oma süüdistajatele pea ees vastu astuda; selle asemel, et näiliselt sind oma hingetu pilguga jälgida, teeb ta seda nüüd. Süsteem kasutab Microsofti Kinecti mikrofoni ja servot, et juhtida teda tema läheduses rääkivate inimeste suunas.

1. samm: teooria

Teooria
Teooria

Nurga arvutamine

Kui me midagi kuuleme, jõuab see müra otse meie ette, kui see pole meie ees. Meie aju tajub seda saabumise viivitust ja muudab selle üldiseks suunaks, kust müra tuleb, võimaldades meil leida allika. Mikrofonipaari kasutades saame saavutada täpselt samalaadse lokaliseerimise. Mõelge näidatud skeemile, mis sisaldab mikrofonipaari ja heliallikat. Kui vaatame ülalt alla, on helilained ringikujulised, kuid kui kaugus allikast on mikrofonide vahekauguse suhtes suur, siis on meie andurite vaatenurgast laine ligikaudu tasane. Seda tuntakse kui kaugvälja eeldust ja see lihtsustab meie probleemi geomeetriat.

Seega oletame, et lainefront on sirgjoon. Kui heli tuleb paremalt, tabab see mikrofoni nr 2 ajal t2 ja mikrofoni nr 1 ajal t1. Mikrofoni nr 2 ja mikrofoni nr 1 vahel läbitud heli vahemaa d on heli tuvastamise ajavahe korrutatuna helikiirusega v s:

d = v s *(t1-t2) = vs *Δt

Selle vahemaa saame seostada kaugusega d 12 mikrofonipaari ja nurga θ vahel paarist heliallikani suhtega:

cos (θ) = d /d 12 = vs*Δt /d12

Kuna meil on ainult kaks mikrofoni, on meie arvutustes ebamäärane, kas heliallikas on meie ees või taga. Selles süsteemis eeldame, et heliallikas on paari ees ja kinnitame nurga 0 kraadi (täielikult paarist paremale) ja 180 kraadi (täielikult vasakule) vahele.

Lõpuks saame teeta jaoks lahenduse võtta pöördkoosinuse:

θ = acos (vs*Δt/d12), 0 <= θ <= π

Et muuta nurk natuke loomulikumaks, võime teetast lahutada 90 kraadi, nii et 0 kraadi on otse paari ees ja +/- 90 kraadi täis vasakule või paremale. See muudab meie väljenduse pöördkoosinusest pöörd -siinuseks.

  • cos (θ-π/2) = sin (θ) = d/d12 = vs*Δt/d12
  • θ = asin (vs*Δt/d12), -π/2 <= θ <= π/2

Hilinemise leidmine

Nagu ülaltoodud võrrandist näete, peame nurga jaoks lahendama ainult ühe mikrofoni saabuva helilaine viivituse võrreldes teise mikrofoniga; heli kiirus ja mikrofonide vaheline kaugus on nii fikseeritud kui ka teada. Selle saavutamiseks proovime esmalt helisignaale sagedusel fs, teisendades need analoog -digitaalseks ja salvestades andmed hilisemaks kasutamiseks. Proovime prooviperioodi, mida nimetatakse proovivõtuaknaks ja mis on piisavalt pikk, et jäädvustada meie helilaine eristavaid jooni. Näiteks võib meie aken olla viimase poole sekundi väärtuses heliandmeid.

Pärast aknaga audiosignaalide saamist leiame nende vahelise viivituse, arvutades nende ristkorrelatsiooni. Ristkorrelatsiooni arvutamiseks hoiame ühe mikrofoni aknasignaali fikseerituna ja libistame teise signaali piki ajatelge esimese tee tagant kuni esimese ees. Slaidi igal sammul korrutame iga fikseeritud signaali punkti selle libisemissignaali vastava punktiga, seejärel liidame kõik tulemused kokku, et arvutada selle sammu korrelatsioonikoefitsient. Pärast slaidi lõpuleviimist vastab kõrgeima korrelatsioonikoefitsiendiga samm punktile, kus kaks signaali on kõige sarnasemad, ja see, millises etapis me oleme, ütleb meile, mitu proovi n signaal kaks on signaalist 1 nihutatud. Kui n on negatiivne, siis signaal kaks jääb signaalist 1 maha, kui see on positiivne, siis signaal kaks on ees ja kui see on null, siis on need kaks juba joondatud. Teisendame selle proovi nihke aja viivituseks, kasutades meie diskreetimissagedust suhtega Δt = n/fs, seega:

  • = asin (vs*n/(d12*fs)), -π/2 <= θ <= π/2

2. samm: komponendid

Osad

  • Microsoft Kinect Xbox 360 -le, mudel 1414 või 1473. Kinectil on neli mikrofoni, mis on paigutatud lineaarsesse massiivi.
  • Adapter, mis muudab Kinecti patenteeritud pistiku selliseks USB + vahelduvvoolutoiteks.
  • Raspberry Pi 2 või 3 töötab Raspbian Stretchiga. Algselt proovisin kasutada mudelit Pi 1 B+, kuid see polnud piisavalt võimas. Mul oli pidevalt probleeme Kinectiga ühenduse katkestamisega.
  • Kõige jubedam mannekeenipea, mille leiate
  • Analoogservo, mis on piisavalt tugev, et muuta teie mannekeeni pea
  • 5V USB -laadija, millel on piisavalt voolutugevust nii Pi kui ka servo ja vähemalt kahe pordi toiteks. (Ma kasutasin sarnast 5A 3-portilist pistikut
  • Kahe väljundiga pikendusjuhe (üks USB -laadija jaoks ja teine Kinecti vahelduvvooluadapteri jaoks.
  • Kaks USB-kaablit: A-tüüpi mikro-USB-kaabel Pi toiteks ja teine servo toiteks, mille lõikamist te ei pahanda
  • Platvorm kõigele istumiseks ja teine väiksem platvorm mannekeenipeale. Kasutasin alusena plastikust serveerimisalust ja peaplatvormina plastikust plaati. Mõlemad olid Walmartist ja maksid vaid paar dollarit
  • 4x #8-32 1/2 "poldid ja mutrid servo kinnitamiseks suurema platvormi külge
  • 2x M3 8 mm polt koos seibidega (või mis tahes suurusega, mida vajate servosarve kinnitamiseks väiksemale platvormile)
  • Kaks isast-meessoost hüppajajuhet, üks punane ja üks must ning üks naissoost-isasilmus
  • Liimiga tagatud Velcro ribad
  • Elektriline lint
  • Kleeplint kaabli juhtimiseks

Tööriistad

  • Dremel lõikerattaga
  • Puurida
  • 7/64 ", 11/16" ja 5/16 "puurid
  • M3 kraan (valikuline, sõltuvalt teie servosarvest)
  • Kruvikeeraja
  • Jootekolb joodisega
  • Abikäed (valikuline)
  • Marker
  • Kompass
  • Traadi eemaldajad
  • Multimeeter (valikuline)

Isikukaitsevahendid

  • Ohutusprillid

  • Näomask (dremmel-ed plastikust juppide jaoks).

Samm: platvormi alumine kokkupanek

Alumise platvormi komplekt
Alumise platvormi komplekt
Alumise platvormi komplekt
Alumise platvormi komplekt
Alumise platvormi komplekt
Alumise platvormi komplekt

Esimene osa, mille me teeme, on alumine platvorm, mis mahutab meie Kinecti, servo ja kogu meie elektroonika. Platvormi valmistamiseks vajate:

  • Plastist serveerimisalus
  • Servo
  • 4x #8-32 1/2 "poldid koos mutritega
  • Dremel lõikerattaga
  • Kruvikeeraja
  • Puurida
  • 11/16 "puur
  • Marker

Kuidas teha

  1. Pöörake salv tagurpidi.
  2. Asetage oma servo salve tagakülje lähedale, veenduge, et servo väljundvõimsus asub piki salve keskjoont, seejärel märkige servo põhja ümber.
  3. Lõika oma dremeli ja lõikeratta abil märgitud ala välja, seejärel lükake servo oma pesasse.
  4. Märkige servole korpuse kinnitusavade keskpunktid, seejärel eemaldage servo ja puurige need augud oma 11/16 "puuriga välja. Aukude puurimisel on õhukest plastikut väga lihtne praguneda, seega leian, et see on palju turvalisem puuri tagurpidi pööramiseks ja materjali aeglaselt eemaldamiseks. See on palju aeglasem kui aukude õige puurimine, kuid see tagab pragude puudumise.
  5. Asetage servo pesasse tagasi ja seejärel kinnitage see poltide ja mutritega #8-32 salve.

4. samm: pea platvormi kokkupanek

Pea platvormi kokkupanek
Pea platvormi kokkupanek
Pea platvormi kokkupanek
Pea platvormi kokkupanek
Pea platvormi kokkupanek
Pea platvormi kokkupanek
Pea platvormi kokkupanek
Pea platvormi kokkupanek

Järgmine osa, mille me teeme, on platvorm mannekeenipea ühendamiseks servoga. Peaplatvormi valmistamiseks vajate:

  • Plastist plaat
  • Servosarv
  • 2x M3 8mm polt koos seibidega
  • Kruvikeeraja
  • Puurida
  • 7/64 "ja 5/16" puurid
  • Kompass
  • Dremel lõikerattaga

Kuidas teha

  1. Seadke oma kompass mannekeenipea aluse raadiusele.
  2. Märkige kompassi abil ring, mille keskpunkt on plaat. See on meie peaplatvormi tegelik suurus.
  3. Kasutage oma dremeli ja lõikeratast, et lõigata väiksem platvorm plaadist välja.
  4. Puurige oma uue platvormi keskosa välja 5/16 tolli puurvardaga. See annab meile juurdepääsu kruvile, mis kinnitab meie servosarve meie servo külge. Et platvormi stabiilsus auku puurides oleks, panin pooli traat selle all ja puuritud läbi pooli keskosa.
  5. Joondage oma servosarv platvormi keskosaga ja märkige sarve platvormile kinnitamiseks kaks auku. Veenduge, et need kinnitusavad oleksid üksteisest piisavalt kaugel, nii et teie M3 poltide ja seibide jaoks oleks ruumi.
  6. Puurige need märgitud augud välja 7/64 "puuriga.
  7. Minu servosarve alumine auk oli sile, st sellel puudusid M3 poldi keermed. Niisiis kasutasin niitide tegemiseks oma puurit ja M3 kraani.
  8. Kasutage poltide ja seibide abil servosarve peaplatvormi külge.

Samm: servo toitekaabel

Servo toitekaabel
Servo toitekaabel
Servo toitekaabel
Servo toitekaabel
Servo toitekaabel
Servo toitekaabel
Servo toitekaabel
Servo toitekaabel

Analoogservod on tavaliselt 4,8–6 V toitega. Kuna Raspberry Pi saab juba 5 V toite USB -lt, lihtsustame oma süsteemi, toites ka servo USB -lt. Selleks peame USB -kaablit muutma. Servo toitekaabli valmistamiseks vajate:

  • A-tüüpi otsaga USB-kaabel (selline, mis ühendatakse arvutiga)
  • Üks punane ja üks must hüppaja traat
  • Jootekolb
  • Jootma
  • Traadi eemaldajad
  • Elektriline lint
  • Abikäed (valikuline)
  • Multimeeter (valikuline)

Kuidas teha

  1. Katkestage kaabli küljest mitte-A-tüüpi USB-pistik, seejärel eemaldage neli isolatsiooni, et paljastada neli sisemist juhtmest. Katkesta katmata juhtmeid ümbritsev varjestus.
  2. Tavaliselt on USB -kaablil neli juhtmest: kaks andmeedastuseks ja vastuvõtmiseks ning kaks toite- ja maandusjuhtmeks. Oleme huvitatud võimsusest ja maapinnast, mis on tavaliselt vastavalt punased ja mustad. Eemaldage osa isolatsioonist punastelt ja mustadelt juhtmetelt ning katkestage rohelised ja valged juhtmed. Kui olete mures, et teil pole õigeid toite- ja maandusjuhtmeid, võite ühendada kaabli USB -toiteadapteriga ja kontrollida multimeetriga väljundpinget.
  3. Seejärel lõigake punaste ja mustade hüppajajuhtmete üks ots ära ja eemaldage osa isolatsioonist.
  4. Nüüd keerake oma hüppaja ja USB -kaablite mustad juhtmed kokku. Risti üle avatud juhtmete keskpunktid ja keerake need üksteise ümber. Seejärel kandke paaritatud juhtmetele jootet, et neid koos hoida. Abistavad käed muudavad selle lihtsamaks, hoides kaableid paigal.
  5. Korrake punaste juhtmete jaoks sammu 4.
  6. Katke avatud juhtmestik elektrilindiga või termokahaneva toruga, kui tunnete end väljamõeldud. Need ühendused on habras, kuna juhtmed on nii väikesed, seega lisage USB -kaabli välisele isolatsioonile teine kiht teipi, mis hoiab hüppajakaableid. See muudab sõlme jäigemaks ja seega vähem tõenäoliseks, et see paindub.

6. samm: elektroonika paigaldamine

Elektroonika paigaldus
Elektroonika paigaldus
Elektroonika paigaldus
Elektroonika paigaldus
Elektroonika paigaldus
Elektroonika paigaldus

Lõpuks koondame kõik kokku, paigaldades oma elektroonika ja kõik muu alumisele platvormile. Sa vajad:

  • Alumine platvorm
  • Pea platvorm
  • Mannekeeni pea
  • Kinect koos USB+vahelduvvooluadapteriga
  • USB toiteadapter
  • Pikendusjuhe
  • Micro USB kaabel
  • Servo toitekaabel
  • Vaarika Pi
  • Meeste-naiste hüppajakaabel
  • Kleepuv Velcro
  • Käärid

Kuidas teha

  1. Paigaldage Pi Velcro abil salve põhja.
  2. Kinnitage USB toiteadapter takjakinnitusega.
  3. Ühendage servo ja Pi USB toiteadapteriga.
  4. Ühendage Pi tihvt 12 (GPIO18) servo signaalikaabliga. See on 6. nööpnõel paremal.
  5. Sirutage oma pikendusjuhe salve tagumise käepideme kaudu ja ühendage USB -toiteadapter ühele küljele.
  6. Võtke Kinect USB+vahelduvvooluadapter ja ühendage toiteadapter pikendusjuhtme teise küljega ja USB Pi -ga.
  7. Tõmmake Kinecti juhe läbi salve esikäepideme ja ühendage Kinecti adapteriga.
  8. Kasutasin kleeplinti, et hoida kaableid platvormi alumisel küljel. See ei tundu kõige elegantsem, kuid õnneks on see kõik varjatud.
  9. Pöörake platvorm paremale küljele üles ja kinnitage Kinect platvormi esiküljele Velcro abil.
  10. Kinnitage mannekeenipea pea platvormile Velcro abil. Kui kõik on joondatud, eraldage need kaks tükki, et saaksime pääseda juurde servosarve kinnituskruvile. Ärge siiski keerake sarve servo külge, sest peame veenduma, et servo on kõigepealt keskmises asendis, et saaksime kõik joondada. Me teeme seda hilisemas etapis.

Samm 7: Tarkvara ja algoritm

Tarkvara ja algoritm
Tarkvara ja algoritm

Ülevaade

Selle projekti tarkvara on kirjutatud C ++ keeles ja on integreeritud robootikatarkvara kirjutamise raamistikuga Robot Operating System (ROS). ROS -is on süsteemi tarkvara jaotatud programmide kogumiks, mida nimetatakse sõlmedeks, kus iga sõlm rakendab süsteemi funktsionaalsuse konkreetse alajao. Andmed edastatakse sõlmede vahel avaldamis-/tellimismeetodi abil, kus andmeid tootvad sõlmed avaldavad need ja andmeid tarbivad sõlmed tellivad selle. Koodi sel viisil lahti sidumine võimaldab süsteemi funktsioone hõlpsalt laiendada ja võimaldab sõlmede kiiremaks arendamiseks süsteemide vahel jagada.

Selles süsteemis kasutatakse ROS -i peamiselt heliallika saabumissuunda (DOA) arvutava koodi eraldamiseks servot juhtivast koodist, mis võimaldab teistel projektidel lisada Kinect DOA hinnangu ilma servokoodi lisamata, mida nad ei vaja või ei taha. Kui soovite koodi ise vaadata, leiate selle GitHubist:

github.com/raikaDial/kinect_doa

Kinect DOA sõlm

Kinect_doa sõlm on selle süsteemi liha ja luud, tehes põhimõtteliselt kõike huvitavat. Käivitamisel lähtestab see ROS -sõlme, muutes kogu ROS -i maagia võimalikuks, ja laadib seejärel Kinecti püsivara üles, et helivoo saaks kättesaadavaks. Seejärel tekitab see uue lõime, mis avab helivoo ja hakkab mikrofoni andmeid lugema. Kinect proovib oma nelja mikrofoni sagedusega 16 kHz, nii et ristkorrelatsioon ja andmete kogumine on hea eraldi lõimena, et vältida arvutusliku koormuse tõttu andmete kadumist. Kinectiga liidestamine toimub populaarse avatud lähtekoodiga draiveri libfreenect abil.

Kogumisniit täidab uute andmete vastuvõtmisel tagasihelistamisfunktsiooni ning salvestab mõlemad andmed ja määrab kindlaks, millal DOA -d hinnata. Iga mikrofoni andmed salvestatakse jooksvatesse puhvritesse, mis on võrdsed meie proovivõtuakna pikkusega, siin on 8192 proovi. See tähendab ristkorrelatsiooni arvutamist umbes viimase poole sekundi väärtusega andmetega, mida leidsin katsetades hea tasakaalu jõudluse ja arvutusliku koormuse vahel. DOA hinnang käivitatakse iga 4096 proovi kohta, andes märku põhilõngast, nii et järjestikused ristkorrelatsioonid kattuvad 50%. Mõelge juhtumile, kus kattuvus puudub, ja teete väga kiiret müra, mille proovivõtuaken pooleks lõikab. Enne ja pärast teie eristavat heli on tõenäoliselt valge müra, mida võib olla raske ristkorrelatsiooniga joondada. Kattuvad aknad pakuvad meile täielikku helinäidet, suurendades meie ristkorrelatsiooni usaldusväärsust, andes meile rohkem eristuvaid jooni.

Põhilõng ootab kogumisniidi signaali ja arvutab seejärel DOA hinnangu. Esiteks kontrollib see siiski, kas jäädvustatud lainekujud erinevad oluliselt valgest mürast või mitte. Ilma selle kontrollita arvutaksime oma hinnangu neli korda sekundis, olenemata sellest, kas oli huvitavaid müra või mitte, ja meie mannekeenipea oleks spastiline jama. Selles süsteemis kasutatav valge müra tuvastamise algoritm on esimene siin loetletud kahest. Arvutame oma lainekuju tuletise absoluutse integraali ja selle absoluutse integraali suhte; kõrge valge mürasisaldusega signaalide puhul on see suhe suurem kui vähem müra tekitavate signaalide puhul. Seades sellele suhtele künnise, eraldades müra mittemürast, saame ristkorrelatsiooni käivitada ainult siis, kui see on asjakohane. Loomulikult on see suhe midagi, mida tuleb iga kord, kui süsteem uude keskkonda viiakse, uuesti häälestada.

Kui programm on kindlaks teinud, et lainekujud sisaldavad märkimisväärset müravälist sisu, jätkab programm ristkorrelatsioone. Nendes arvutustes on aga kolm olulist optimeerimist:

  1. Kinectil on neli mikrofoni, mis tähendab, et kokku on kuus lainekuju, mida saame ristkorrelatsioonis siduda. Kui aga vaadata mikrofonimassiivi ruumilist paigutust, näete, et mikrofonid 2, 3 ja 4 on üksteisele väga lähedal. Tegelikult on need nii lähedal, et helikiiruse ja meie proovivõtu sageduse tõttu eraldatakse 2, 3 ja 4 lainekuju maksimaalselt ühe ees või taga oleva prooviga, mida saame kontrollida arvutusega maxlag = Δd *fs/vs, kus Δd on mikrofonipaari eraldatus, fs on diskreetimissagedus ja vs on helikiirus. Seega on paaride korrelatsioon nende kolme vahel kasutu ja meil on vaja ainult mikrofon 1 ristkorrelatsioonis 2, 3 ja 4.
  2. Helisignaalide standardne ristkorrelatsioon toimib teatavasti kajades (kaja). Tugevat alternatiivi tuntakse kui üldist ristkorrelatsiooni faasitransformatsiooniga (GCC-PHAT). See meetod põhineb kaalumisfunktsiooni rakendamisel, mis võimendab ristkorrelatsiooni piike, muutes algse signaali kajastest lihtsamaks. Võrdlesin GCC-PHAT toimivust lihtsa ristkorrelatsiooniga järelkõlakambris (loe: betoonist vannituba on ümber kujundatud) ja leidsin, et GCC-PHAT on õige nurga hindamisel 7 korda tõhusam.
  3. Ristkorrelatsiooni teostamisel võtame kaks signaali, libistades üksteist mööda ja korrutame igal sammul fikseeritud signaali iga punkti meie libiseva signaali iga punktiga. Kahe signaali pikkusega n annab tulemuseks n^2 arvutust. Me võiksime seda parandada, tehes ristkorrelatsiooni sageduspiirkonnas, mis hõlmab kiiret Fourier 'teisendust (nlogn-arvutused), korrutades iga teisendatud signaali punkti teise vastava punktiga (n arvutust), seejärel sooritades vastupidise Fourier teisendus, et naasta ajadomeeni (nlogn arvutused), mille tulemuseks on n+2*nlogn arvutused, vähem kui n^2. See on aga naiivne lähenemine. Meie massiivi mikrofonid on nii lähestikku ja helikiirus on nii suhteliselt aeglane, et heli lainekujud on juba enamasti joondatud. Seega saame oma ristkorrelatsiooni aknaga arvestada ainult nihetega, mis on veidi ees või taga. Mikrofonide 1 ja 4 puhul peab viivitus jääma +/- 12 proovi vahele, mis tähendab, et iga ristkorrelatsiooni puhul peame tegema ainult 24*n arvutusi, mille tulemuseks on arvutuslik kokkuhoid, kui meie lainekujud on pikemad kui 2900 proovi.

See süsteem kasutab minidsp raamatukogu, mis rakendab optimeerimisega GCC-PHAT algoritmi 3.

Kui igast mikrofonipaarist pärinevate signaalide viivitus on leitud, valib programm viivituse mediaanväärtuse, kasutab seda hinnangulise nurga arvutamiseks ja avaldab tulemuse, et seda saaks kasutada servo juhtimiseks.

Servo juhtimissõlm

Võrreldes sõlmega kinect_doa on servosõlm suhteliselt lihtne. Selle ülesanne on võtta ainult hinnanguline DOA ja liigutada servo selle nurga alla. See kasutab Raspberry Pi riistvara PWM -moodulile juurdepääsuks raamatukogu wiringPi, kasutades seda servo nurga määramiseks. Enamikku analoogservosid juhib PWM -signaal, mille impulsi laius on vahemikus 1000 µs kuni 2000 µs, mis vastab nurgale 0 ° kuni 180 °, kuid minu kasutatavat servot juhiti 500 µs kuni 2500 µs, mis vastab nurgale 0 ° kuni 270 °. Seega on sõlme konfigureeritav erinevate servo riistvara jaoks, seadistades minimaalse impulsi laiuse, maksimaalse impulsi laiuse ning maksimaalse ja minimaalse nurga erinevused. Lisaks ei liigu servo kohe sihtnurka, vaid liigub nurga suunas seadistatava kiirusega, andes Margaretile järkjärgulise ja jube vibratsiooni (pluss, kiiresti edasi -tagasi liikuva servo heli muutub väga kiiresti tüütuks.).

Samm: ehitamine ja paigaldamine

Installi sõltuvused:

Esiteks installige libfreenect. Peame selle üles ehitama allikast, kuna pakettide halduriga saadav versioon ei sisalda heli tuge. Seda seetõttu, et heli lubamiseks peame Kinecti üles laadima püsivara ja selle püsivara ümberjaotamine ei ole teatud jurisdiktsioonides seaduslik. Lisaks ei saa me luua näiteid, mis nõuavad OpenGL -i ja ülevoolu, mis pole peata Raspbiani installimisel tarbetud.

sudo apt-get install git cmake build-essential libusb-1.0-0-dev

cd git kloon https://github.com/OpenKinect/libfreenect cd libfreenect mkdir build cd build cmake.. -DCMAKE_BUILD_REDIST_PACKAGE = OFF -DCMAKE_BUILD_EXAMPLES = VÄLJA tee sudo make install sudo cp ~/libfreenekt platform/platform/.rules /etc/udev/rules.d udevadm control-laadimisreeglid && udevadm trigger

Järgmisena peame installima paketi wiringPi, mis võimaldab meil juhtida Pi GPIO kontakte:

cd

git kloon git: //git.drogon.net/wiringPi cd ~/wiringPi./build

Mannekeeni pea kinnitamine:

Kui wiringPi on paigaldatud, saame nüüd teha kiire ümbersõidu riistvara maale, et kinnitada mannekeenipea alumisele platvormile. Servo tsentreerimiseks käsurealt sisestage järgmised käsud:

gpio pwm-ms

gpio pwmc 192 gpio pwmr 2000 gpio -g pwm 18 150

Kui liikumist ei toimu, on teie servo tõenäoliselt juba tsentreeritud. Kindluse huvides võiksite aga servo seadistada mitte-keskväärtusele, nt. gpio -g pwm 18 200, seejärel seadke see tagasi 150 -le.

Kui olete kindel, et servo on tsentreeritud, kinnitage pea platvormi servosarv servo külge nii, et teie mannekeenipea vaataks otse ette. Seejärel keerake sarv servo külge ja kinnitage oma pea takjakinnituste abil.

Paigaldage ROS:

Seejärel installige ROS oma Pi -le. Suurepärase installijuhendi leiate siit; meie süsteemi jaoks ei vaja me OpenCV -d, nii et saate 3. sammu vahele jätta. Selle koostamise lõpuleviimiseks kulub mitu tundi. Kui olete installijuhendi järgimise lõpetanud, lisage oma bashrc -le install, et saaksime kasutada oma äsja installitud ROS -pakette:

kaja "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

Ehitage Kinect DOA pakett:

Pärast seda, kui kõik on tehtud, tehke meie projekti jaoks catkini tööruum ja sisestage kataloog src:

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

Selle projekti kood on pakendis kinect_doa, nii et kloonige see oma uue tööruumi src kataloogi:

git kloon

Pakett robot_upstart pakub hõlpsasti kasutatavat tööriista käivitusfailide installimiseks nii, et need käivitamisel töötavad, seega kloonige see ka oma tööruumi:

git kloon

Nüüd saame projekti koodi koostada, helistades meie tööruumi ülataseme kataloogist catkin_make, seejärel hankime oma ehituse, nii et meie paketid on saadaval:

cd ~/kinect_doa_ws

catkin_make echo "source /home/pi/kinect_doa_ws/devel/setup.bash" >> ~/.bashrc

Jooksmine ja häälestamine:

Eeldades, et kõik on vooluvõrku ühendatud ja sisse lülitatud, peaksite nüüd saama süsteemi käivitada ja lasta Kinectil oma häält kuulata! Kui teil on aga Kinect 1473, avage esmalt tekstiredaktoris fail ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch ja seadistage parameeter, kasutades_kinect_1473 väärtust true. Lisaks, kui kasutasite erinevat servot kui mina, on see tõenäoliselt tavaline analoogservo, nii et muutke käivitusfailis parameetrit min_us väärtusele 1000, max_us väärtusele 2000 ja max_deg väärtusele 180.

roslaunch kinect_doa kinect_doa.launch

Mängige sellega mõnda aega. Kui tunnete, et süsteem on liiga tundlik (vaadates juhuslikke suundi, mis ei vasta häältele või iseloomulikele helidele), proovige käivitusfailis muuta parameetrit white_noise_ratio ja taaskäivitage süsteem, kuni reageerimisvõime on teie jaoks sobival tasemel. Suhte tõstmine muudab süsteemi vähem reageerivaks ja vastupidi. Tõenäoliselt peate selle häälestamise sooritama alati, kui teisaldate süsteemi soovitud jõudluse saavutamiseks teise kohta.

Programmi käivitamiseks Pi sisselülitamisel kasutame käivitusfaili installimiseks paketti robot_upstart. Kui ROS praegu ei tööta, käivitage see käsuga roscore. Seejärel avage uus terminal ja installige käivitus:

rosrun robot_upstart install kinect_doa/launch/kinect_doa.launch -kasutaja juur --symlink

Loome käivitamisfailile kopeerimise asemel sümbolingi, et saaksime parameetreid muuta, muutes ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch.

9. samm: peitmine kontoris

Selle varjamine kontoris
Selle varjamine kontoris

Nüüd lõbusa osa juurde. Minge pärast tunde tööle ja pange mannekeen salaja püsti. Siis istuge lihtsalt maha ja vaadake, kui kaua läheb töökaaslastel aega haarata! Teie uus looming pöörab kindlasti mõne pea…

Soovitan: