Агуулгын хүснэгт:

Kinect бүхий дууны локалчлах манекен толгой: 9 алхам (зурагтай)
Kinect бүхий дууны локалчлах манекен толгой: 9 алхам (зурагтай)

Видео: Kinect бүхий дууны локалчлах манекен толгой: 9 алхам (зурагтай)

Видео: Kinect бүхий дууны локалчлах манекен толгой: 9 алхам (зурагтай)
Видео: Как собрать управляемую звуком вращающуюся световую цепь из 10 светодиодов 2024, Долдугаар сарын
Anonim
Kinect -тэй манекений толгойг нутагшуулах
Kinect -тэй манекений толгойг нутагшуулах

Жолоочийн ядаргаа хянах системийн туршилтын дамми Маргареттай танилцана уу. Тэрээр саяхан үүрэгт ажлаасаа тэтгэвэртээ гарч манай оффис руу нүүсэн бөгөөд тэр үеэс хойш өөрийгөө "аймшигтай" гэж боддог хүмүүсийн анхаарлыг татсан юм. Шударга ёсны төлөө би түүнийг буруутгагчидтай нүүр тулан уулзах чадварыг өгсөн. сэтгэлгүй харцаараа чамайг дагаж байгаа юм шиг санагдахын оронд одоо тэр үнэхээр тэгж байна. Систем нь Microsoft Kinect -ийн микрофоны массив болон servo -ийг ашиглан түүнийг ойролцоо байгаа хүмүүсийн зүг чиглүүлэхэд чиглүүлдэг.

Алхам 1: Онол

Онол
Онол

Өнцгийг тооцоолох

Бид ямар нэг юм сонсоход энэ чимээ бидний урд шууд биш л бол нэг чихэнд нөгөө чихээрээ хүрдэг. Бидний тархи ирэлтийг хойшлуулж байгааг ойлгодог бөгөөд үүнийг дуу чимээ гарч буй ерөнхий чиглэл болгон хувиргадаг бөгөөд энэ нь бидэнд эх сурвалжийг олох боломжийг олгодог. Бид хос микрофон ашиглан яг ижил төрлийн нутагшуулалтанд хүрч чадна. Микрофоны хос ба дууны эх үүсвэрийг агуулсан диаграмыг авч үзье. Хэрэв бид дээрээс доошоо харж байгаа бол дууны долгион нь дугуй хэлбэртэй боловч хэрэв эх үүсвэр хүртэлх зай нь микрофон хоорондын зайтай харьцангуй том байвал бидний мэдрэгчийн харах өнцгөөс харахад долгион нь ойролцоогоор хавтгай хэлбэртэй байдаг. Үүнийг алс холын таамаглал гэж нэрлэдэг бөгөөд бидний асуудлын геометрийг хялбаршуулдаг.

Тиймээс долгионы фронтыг шулуун шугам гэж үзье. Хэрэв дуу баруун талаас гарч байгаа бол t2 үед микрофон #2, t1 үед микрофон #1 дээр тусна. 2 -р микрофон ба 1 -р микрофоныг цохих хоорондох дууны зай нь дууны хурдыг v s -ээр үржүүлсэн цаг хугацааны зөрүү юм.

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

Бид энэ зайг микрофон хос ба θ өнцгийн хоорондох дууны эх үүсвэр хүртэлх d 12 зайтай холбож болно.

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

Бид зөвхөн хоёр микрофонтой учраас дууны эх үүсвэр урд эсвэл хойно байгаа эсэх талаар бидний тооцоололд хоёрдмол утга гарах болно. Энэ системд бид дууны эх үүсвэрийг хосын урд талд байгаа гэж үзээд 0 градус (хосын баруун талд бүрэн) 180 градус (бүрэн зүүн тийш) өнцгийг хавчих болно.

Эцэст нь бид урвуу косинусыг авч Тетагийн асуудлыг шийдэж чадна.

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

Өнцгийг арай илүү байгалийн болгохын тулд бид тетагаас 90 градусыг хасах боломжтой бөгөөд ингэснээр 0 градус нь хосын урд талд, +/- 90 градус нь зүүн эсвэл баруун талд бүрэн байна. Энэ нь бидний илэрхийлэлийг урвуу косинусаас урвуу синус болгон хувиргадаг.

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

Саатал олох

Дээрх тэгшитгэлээс харж байгаагаар бид өнцгийн хувьд шийдэх ёстой зүйл бол хоёр дахь микрофонтой харьцуулахад микрофоны нэг рүү ирэх дууны долгионы саатал юм. дууны хурд ба микрофон хоорондын зай нь тогтмол ба мэдэгдэж байна. Үүнийг хийхийн тулд бид эхлээд аудио дохиог fs давтамж дээр дээжлэн аналогиас дижитал хэлбэрт шилжүүлж өгөгдлийг дараа ашиглах зорилгоор хадгалдаг. Бид дээжийн цонх гэж нэрлэгддэг хэсэг хугацаанд дууны долгионыхоо онцлог шинж чанарыг олж авахад хангалттай урт хугацаанд дээж авдаг. Жишээлбэл, бидний цонх сүүлийн хагас секундын аудио өгөгдөл байж магадгүй юм.

Цонхтой аудио дохиог авсны дараа тэдгээрийн хоорондын уялдаа холбоог тооцоолох замаар хоцрогдлыг олж мэднэ. Хөндлөн корреляцийг тооцоолохын тулд бид нэг микрофоны цонхтой дохиог тогтмол барьж, хоёр дахь дохиог цагийн тэнхлэгийн дагуу эхнийхээс бүхэлд нь, эхнийхээс урагш гулсуулна. Слайдынхаа алхам бүр дээр бид тогтмол дохионы цэг бүрийг гулсах дохионы харгалзах цэгээр үржүүлж, дараа нь бүх үр дүнг нэгтгэн тухайн үе шатны хамаарлын коэффициентийг тооцоолно. Манай слайдыг бөглөсний дараа хамгийн өндөр корреляцийн коэффициент бүхий алхам нь хоёр дохио хоорондоо ижил төстэй байх бөгөөд бид ямар алхам дээр байгаа вэ?, дараа нь хоёр дохио нь нэг дохионы ард хоцорч байна, эерэг байвал хоёр дохио өмнө байна, тэг бол хоёр нь аль хэдийн зэрэгцсэн байна. Бид энэ дээжийн офсетыг delayt = n/fs хамааралтай түүвэрлэх давтамжийг ашиглан цаг хугацааны хоцрогдол болгон хувиргадаг.

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

Алхам 2: бүрэлдэхүүн хэсгүүд

Эд анги

  • Microsoft Kinect for Xbox 360, model 1414 эсвэл 1473. Kinect нь бидний ашиглах шугаман массивт байрлуулсан дөрвөн микрофонтой.
  • Kinect -ийн өмчлөлийн холбогчийг USB + AC тэжээл болгон хувиргах адаптер.
  • Raspberry Pi 2 эсвэл 3 ажиллаж байгаа Raspbian Stretch. Би анх Pi 1 Model B+ашиглахыг оролдсон боловч хангалттай хүч чадалгүй байсан. Надад Kinect -аас салгах асуудал гарсаар байна.
  • Таны олж чадах хамгийн аймшигтай манекен толгой
  • Манекений толгойг эргүүлэх хангалттай хүчтэй аналог servo
  • 5V USB ханын цэнэглэгч нь хангалттай хүчдэлтэй бөгөөд Pi болон servo болон дор хаяж хоёр портыг хоёуланг нь тэжээх боломжтой. (Би үүнтэй төстэй 5А 3 порттой залгуурыг ашигласан
  • Хоёр залгууртай өргөтгөлийн утас (Нэг нь USB ханын цэнэглэгч, нөгөө нь Kinect AC адаптер).
  • Хоёр USB кабель: Pi-ийг тэжээх зориулалттай А хэлбэрийн микро-USB кабель, нөгөө нь servo-ийг асаах зориулалттай өөр утас.
  • Бүх зүйл дээр суух тавцан, манекений толгойд зориулсан өөр нэг жижиг тавцан. Би хуванцар тавиурыг суурь болгон ашиглаж, хуванцар хавтанг толгойн тавцан болгон ашигласан. Тэд хоёулаа Walmart -аас ирсэн бөгөөд хэдхэн долларын үнэтэй байв
  • 4x #8-32 1/2 инчийн боолт ба самар нь том хэмжээтэй тавцан дээр сервоо бэхлэх болно
  • Угаагчтай 2х M3 8мм боолт (эсвэл servo эвэрээ жижиг тавцан дээр холбоход ямар хэмжээтэй байх шаардлагатай)
  • Эрэгтэй-эрэгтэй хоёр холбогч утас, нэг нь улаан, нэг нь хар, нэг нь эмэгтэй-эрэгтэй холбогч утас
  • Наалдамхай наалдамхай тууз
  • Цахилгаан соронзон хальс
  • Кабелийн удирдлагад зориулсан наалдамхай тууз

Багаж хэрэгсэл

  • Дремель хайчлах дугуйтай
  • Өрөмдлөг
  • 7/64 ", 11/16", 5/16 "өрмийн битүүд
  • M3 товчлуур (Таны servo эвэрнээс хамаарч заавал биш)
  • Халив
  • Гагнууртай гагнуурын төмөр
  • Туслах гар (заавал биш)
  • Тэмдэглэгч
  • Луужин
  • Утас хуулагч
  • Мультиметр (заавал биш)

PPE

  • Аюулгүй шил

  • Нүүрний маск (маш сайн хуванцар битэнд зориулагдсан)

Алхам 3: Доод платформын угсралт

Доод платформын угсралт
Доод платформын угсралт
Доод платформын угсралт
Доод платформын угсралт
Доод платформын угсралт
Доод платформын угсралт

Бидний хийх эхний хэсэг бол доод платформ бөгөөд бидний Kinect, servo болон бүх цахилгаан хэрэгслүүдийг багтаасан болно. Платформ хийхийн тулд танд дараахь зүйлс хэрэгтэй болно.

  • Хуванцар тавиур
  • Servo
  • 4x #8-32 1/2 "самартай боолт
  • Таслагч дугуйтай Дремел
  • Халив
  • Өрөмдлөг
  • 11/16 "өрмийн
  • Тэмдэглэгч

Яаж хийх вэ

  1. Тавиураа дээш нь эргүүлээрэй.
  2. Сервоо тавиурын арын ойролцоо хажуу тийш нь байрлуулж, servo -ийн гаралтын араа нь тавиурын дунд шугамын дагуу байгаа эсэхийг шалгаад, servo -ийн суурийн эргэн тойронд тэмдэглээрэй.
  3. Дремель ба хайчлах дугуй ашиглан тэмдэглэсэн хэсгийг хайчилж аваад сервогоо үүр рүү нь гулсуулна уу.
  4. Тавцан дээрх servo орон сууцны бэхэлгээний нүхнүүдийн төвийг тэмдэглээд дараа нь servo -ийг аваад 11/16 инчийн өрмийн тусламжтайгаар эдгээр нүхийг өрөмдөнө. Цооног өрөмдөхдөө ийм нимгэн хуванцарыг хагарах нь маш амархан тул илүү аюулгүй гэж бодож байна. Өрөмдлөгийг урвуугаар хийж, материалыг аажмаар ховхлох нь нүхийг зөв өрөмдөхөөс хамаагүй удаан боловч хагарал үүсэхгүй байхыг баталгаажуулдаг.
  5. Сервоо үүрэнд буцааж байрлуулаад #8-32 боолт, самар ашиглан тавиур дээр холбоно уу.

Алхам 4: Толгойн платформын угсралт

Платформын дарга
Платформын дарга
Платформын дарга
Платформын дарга
Платформын дарга
Платформын дарга
Платформын дарга
Платформын дарга

Бидний хийх дараагийн хэсэг нь манекины толгойг servo руу холбох платформ байх болно. Толгойн платформ хийхийн тулд танд дараахь зүйлс хэрэгтэй болно.

  • Хуванцар хавтан
  • Servo эвэр
  • Угаагчтай 2х М3 8мм боолт
  • Халив
  • Өрөмдлөг
  • 7/64 "ба 5/16" өрмийн битүүд
  • Луужин
  • Дремель хайчлах дугуйтай

Яаж хийх вэ

  1. Луужингаа манекений толгойн суурийн радиуст тохируулна уу.
  2. Луужингаа ашиглан хавтангийн голд төвлөрсөн тойргийг тэмдэглээрэй. Энэ нь бидний толгойн тавцангийн бодит хэмжээ байх болно.
  3. Дремель болон хайчлах дугуйгаа ашиглан жижиг тавцанг хавтан дээрээс хайчилж ав.
  4. Шинэ тавцангийнхаа төвийг 5/16 инчийн өрөмдлөгөөр өрөмдөнө. Энэ нь бидний servo эвэрийг servo руу холбосон шураг руу нэвтрэх боломжийг олгоно. Би нүх өрөмдөж байхдаа тавцангийн тогтвортой байдлыг хангахын тулд дамар тавив. доор нь утас хийж дамарны дундуур өрөмдөнө.
  5. Серво эвэрээ тавцангийн төв хэсэгт байрлуулж, эвэрийг тавцан дээр бэхлэх хоёр нүхийг тэмдэглээрэй. Эдгээр бэхэлгээний нүхнүүд хоорондоо хангалттай зайтай байгаа эсэхийг шалгаарай, ингэснээр таны M3 боолтны толгой ба угаагчийг байрлуулах боломжтой болно.
  6. Эдгээр тэмдэглэгдсэн нүхийг 7/64 инчийн өрмийн тусламжтайгаар өрөмдөнө.
  7. Миний servo эвэрний доод нүх нь гөлгөр байсан, өөрөөр хэлбэл M3 боолтны утас байхгүй байв. Тиймээс би өрөм, М3 цорго ашиглан утас хийж байв.
  8. Боолт ба угаагчийг ашиглан servo эвэрийг толгойн тавцан дээр бэхлээрэй.

Алхам 5: Servo цахилгаан кабель

Servo цахилгаан кабель
Servo цахилгаан кабель
Servo цахилгаан кабель
Servo цахилгаан кабель
Servo цахилгаан кабель
Servo цахилгаан кабель
Servo цахилгаан кабель
Servo цахилгаан кабель

Аналог servo нь ихэвчлэн 4.8-6V хүчдэлээр тэжээгддэг. Raspberry Pi аль хэдийн USB -ээс 5V -ээр тэжээгдэх болсон тул бид servo -г USB -ээс тэжээх замаар системээ хялбарчлах болно. Үүнийг хийхийн тулд бид USB кабелийг өөрчлөх шаардлагатай болно. Серво цахилгаан кабель хийхийн тулд танд дараахь зүйлс хэрэгтэй болно.

  • А төрлийн төгсгөлтэй сэлбэг USB кабель (таны компьютерт залгагддаг)
  • Нэг улаан, нэг хар холбогч утас
  • Гагнуурын төмөр
  • Гагнуур
  • Утас хуулагч
  • Цахилгаан соронзон хальс
  • Туслах гар (заавал биш)
  • Мультиметр (заавал биш)

Яаж хийх вэ

  1. USB төрлийн А хэлбэрийн бус холбогчийг кабелиасаа салгаад, дотор талын дөрвөн утсыг ил гаргахын тулд тусгаарлагчийг нь бага зэрэг хуулж ав. Ил гарсан утсыг тойрсон хамгаалалтыг таслана.
  2. Ихэвчлэн USB кабель нь дөрвөн утастай байдаг: хоёр нь мэдээлэл дамжуулах, хүлээн авах, хоёр нь цахилгаан ба газардуулга. Бид ихэвчлэн улаан, хар өнгөтэй байдаг хүч чадал, газрыг сонирхдог. Улаан, хар утаснуудын тусгаарлагчийн зарим хэсгийг хуулж, ногоон, цагаан утсыг хайчилж ав. Хэрэв танд зөв тэжээл, газардуулгын утас байхгүй гэж санаа зовж байгаа бол кабелийг USB тэжээлийн адаптертаа холбож, гаралтын хүчдэлийг мултиметрээр шалгаж болно.
  3. Дараа нь улаан, хар холбогч кабелийнхаа нэг үзүүрийг хайчилж, зарим тусгаарлагчийг нь тайл.
  4. Одоо холбогч болон USB кабелийн хар утсыг холбоно уу. Ил гарсан утаснуудын төвийг гаталж, бие биенээ тойрон эргүүлээрэй. Дараа нь хооронд нь холбохын тулд холбосон утаснуудад гагнуур тавь. Туслах гар нь кабелуудаа байрлуулснаар үүнийг хөнгөвчлөх болно.
  5. Улаан утаснуудын хувьд 4 -р алхамыг давтана уу.
  6. Нээлттэй утсыг цахилгаан соронзон хальсаар хучих эсвэл хэрэв танд сонирхолтой санагдаж байвал дулааныг багасгадаг хоолойгоор таглаарай. Утаснууд нь маш жижиг тул эдгээр холбоосууд нь эмзэг байх тул USB кабелийн гаднах тусгаарлагч дээр холбогч кабелийг барьж буй хоёр дахь соронзон хальс нэмнэ. Энэ нь угсралтыг илүү хатуу болгож, улмаар гулзайлгахаас сэргийлнэ.

Алхам 6: Электроникийн суурилуулалт

Электроникийн суурилуулалт
Электроникийн суурилуулалт
Электроникийн суурилуулалт
Электроникийн суурилуулалт
Электроникийн суурилуулалт
Электроникийн суурилуулалт

Эцэст нь бид бүх зүйлээ нэгтгэж, цахилгаан бараа, бусад бүх зүйлээ доод тавцан дээр суурилуулах болно. Танд хэрэгтэй болно:

  • Доод тавцан
  • Толгойн тавцан
  • Манекен толгой
  • USB+AC адаптертай холбогдоорой
  • USB цахилгаан адаптер
  • Өргөтгөх утас
  • Микро USB кабель
  • Servo цахилгаан кабель
  • Raspberry Pi
  • Эрэгтэй-эмэгтэй холбогч кабель
  • Наалдамхай хилэн
  • Хайч

Яаж хийх вэ

  1. Pi -ийг тавиурын ёроолд Velcro ашиглан холбоно уу.
  2. USB тэжээлийн адаптерийг Velcro ашиглан холбоно уу.
  3. USB тэжээлийн адаптерт servo болон Pi залгаарай.
  4. Pi -ийн 12 -р зүү (GPIO18) -ийг servo дохионы кабельд холбоно уу. Энэ бол баруун талд байрлах 6 дахь зүү юм.
  5. Өргөтгөх утсыг тавиурын арын бариулаар дамжуулж, USB тэжээлийн адаптерийг нэг тал руу залгаарай.
  6. Kinect USB+AC адаптерийг аваад тэжээлийн адаптерийг сунгах утасны нөгөө талд, USB -ийг Pi -д залгаарай.
  7. Kinect -ийн утсыг тавиурын урд талын бариулаар дамжуулж, Kinect адаптер руу залгаарай.
  8. Би кабелийг тавцангийн доод талд барихын тулд наалдамхай тууз ашигласан. Энэ нь хамгийн дэгжин харагддаггүй, гэхдээ азаар энэ бүхэн нуугддаг.
  9. Платформыг баруун тийш эргүүлээд Velcro ашиглан Kinect-ийг платформын урд талд холбоно уу.
  10. Толгойн тавцан дээр манекины толгойг бэхлэхийн тулд Velcro ашиглана уу. Бүх зүйл дараалан тавигдсаны дараа хоёр хэсгийг салгаж авснаар бид servo эвэр бэхлэх шураг руу орох боломжтой болно. Сервийг эвэр рүү бүү шургуул. Бид үүнийг дараагийн алхамаар хийх болно.

Алхам 7: Програм хангамж ба алгоритм

Програм хангамж ба алгоритм
Програм хангамж ба алгоритм

Тойм

Энэхүү төслийн програм хангамж нь C ++ хэл дээр бичигдсэн бөгөөд роботын програм хангамж бичих хүрээ болох Robot Operating System (ROS) системтэй нэгтгэгдсэн болно. ROS дээр системийн програм хангамжийг зангилаа гэж нэрлэгддэг програмуудын цуглуулга болгон хуваадаг бөгөөд зангилаа бүр нь системийн үйл ажиллагааны тодорхой дэд хэсгийг хэрэгжүүлдэг. Өгөгдлийг нийтлэх/захиалах аргыг ашиглан зангилааны хооронд дамжуулдаг бөгөөд өгөгдөл үйлдвэрлэж буй зангилаанууд үүнийг нийтэлдэг бөгөөд өгөгдлийг ашигладаг зангилаа үүнийг бүртгэдэг. Ийм байдлаар кодыг салгах нь системийн ажиллагааг хялбархан өргөжүүлэх боломжийг олгодог бөгөөд илүү хурдан хөгжүүлэхийн тулд зангилаа системийг хооронд нь хуваалцах боломжийг олгодог.

Энэ системд ROS нь дууны эх үүсвэрийн ирэх чиглэлийг (DOA) тооцоолох кодыг servo -ийг хянадаг кодоос салгахад ашигладаг бөгөөд бусад төслүүдэд Kinect DOA -ийн тооцооллыг оруулах шаардлагагүй эсвэл хүсээгүй servo кодыг оруулалгүйгээр оруулах боломжийг олгодог.. Хэрэв та кодыг өөрөө харахыг хүсвэл үүнийг GitHub дээрээс олж болно.

github.com/raikaDial/kinect_doa

Kinect DOA зангилаа

Kinect_doa зангилаа нь энэ системийн мах, яс бөгөөд үндсэндээ сонирхолтой бүх зүйлийг хийдэг. Эхлэх үед энэ нь ROS зангилааг эхлүүлж, ROS -ийн бүх ид шидийг боломжтой болгож, дараа нь аудио дамжуулалтыг ашиглах боломжтой болгохын тулд програмыг Kinect -д байршуулдаг. Дараа нь аудио урсгалыг нээж, микрофоны өгөгдлийг уншиж эхэлдэг шинэ хэлхээг бий болгодог. Kinect нь дөрвөн микрофоноо тус бүр 16 кГц давтамжтайгаар дээжлэдэг тул тооцооллын ачааллаас болж өгөгдөл алдагдахаас зайлсхийхийн тулд харилцан хамаарал, өгөгдөл цуглуулах ажлыг тусад нь хийх нь зүйтэй юм. Kinect-тэй харилцах нь түгээмэл нээлттэй эх сурвалжийн драйвер болох libfreenect-ийг ашиглан хийгддэг.

Цуглуулах утас нь шинэ өгөгдөл хүлээн авах бүрт дуудлага хийх функцийг гүйцэтгэдэг бөгөөд хоёуланг нь өгөгдлийг хадгалж, DOA -ийг хэзээ тооцоолохоо тодорхойлдог. Микрофон бүрийн өгөгдлийг манай дээж авах цонхтой тэнцэх урттай буферт хадгалдаг бөгөөд энд 8192 дээж байна. Энэ нь гүйцэтгэл ба тооцооллын ачааллын хоорондох тэнцвэрийг сайн туршиж үзээд олж мэдсэн сүүлийн хагас секундын өгөгдөлтэй харьцуулсан харилцан хамаарлыг тооцоолох гэсэн үг юм. DOA-ийн тооцоолол нь 4096 дээж тутамд үндсэн утас руу дохио өгдөг бөгөөд ингэснээр дараалсан харилцан хамаарал 50%-иар давхцдаг. Давхардал байхгүй тохиолдолд та маш хурдан дуу чимээ гаргаж, дээж авах цонхоор хагасыг нь огтолж авсан тохиолдлыг авч үзье. Таны өвөрмөц дууны өмнө болон хойно цагаан дуу чимээ гарах магадлалтай бөгөөд энэ нь хоорондоо уялдаа холбоотой байх нь хэцүү байдаг. Давхардсан цонхнууд нь дууны илүү бүрэн гүйцэд дээж авах боломжийг олгодог бөгөөд энэ нь бидний хоорондоо ялгаатай шинж чанаруудыг өгч, бидний хоорондын хамаарлын найдвартай байдлыг нэмэгдүүлдэг.

Гол утас нь цуглуулах утаснаас дохио хүлээж, дараа нь DOA -ийн тооцооллыг тооцоолно. Нэгдүгээрт, авсан долгионы хэлбэр нь цагаан дуу чимээнээс эрс ялгаатай эсэхийг шалгадаг. Энэхүү шалгалтгүйгээр бид сонирхолтой чимээ гарсан эсэхээс үл хамааран тооцоололоо секундэд дөрвөн удаа тооцоолох бөгөөд манекен толгой маань маш эмх замбараагүй болно. Энэ системд ашигладаг цагаан дуу чимээ илрүүлэх алгоритм нь энд жагсаасан хоёрын эхнийх юм. Бид долгионы хэлбэрийн деривативын үнэмлэхүй интегралийн үнэмлэхүй интегралтай харьцуулсан харьцаа; Цагаан дуу чимээ ихтэй дохионы хувьд энэ харьцаа нь дуу чимээ багатай дохионоос өндөр байна. Дуу чимээг дуу чимээнээс ялгах энэ харьцааны босгыг тогтоосноор бид зөвхөн зохих үед л хөндлөн хамаарлыг бий болгож чадна. Мэдээжийн хэрэг, энэ харьцаа нь системийг шинэ орчинд шилжүүлэх бүрт дахин тохируулах шаардлагатай зүйл юм.

Долгионы хэлбэр нь дуу чимээ багатай агуулга агуулж байгааг тогтоосны дараа уг хөтөлбөр нь харилцан хамаарлыг үргэлжлүүлнэ. Эдгээр тооцоонд гурван чухал оновчлол бий:

  1. Kinect дээр дөрвөн микрофон байдаг бөгөөд энэ нь долоон хос долоон хос хэлбэртэй байдаг. Гэхдээ хэрэв та микрофоны массивын орон зайн зохион байгуулалтыг харвал 2, 3, 4 микрофонууд хоорондоо маш ойрхон байгааг харж болно. Үнэн хэрэгтээ тэд маш ойрхон байгаа тул дууны хурд болон бидний дээж авах давтамжийн ачаар 2, 3, 4 -т хүлээн авсан долгионы хэлбэрийг хамгийн ихдээ нэг дээжээр урд эсвэл хойно тусгаарлах бөгөөд үүнийг maxlag = Δd тооцооллоор шалгаж болно. *fs/vs, энд Δd нь микрофоны хосыг салгах, fs нь түүвэрлэх давтамж, vs бол дууны хурд юм. Тиймээс эдгээр гурвын хоорондох хосыг хооронд нь уялдуулах нь утгагүй бөгөөд бид зөвхөн 1, 2, 3, 4 гэсэн микрофоныг хооронд нь холбох хэрэгтэй.
  2. Аудио дохионы стандарт харилцан хамаарал нь цуурайтах үед цуурай муутай ажилладаг. Бат бөх хувилбарыг фазын хувиргалт (GCC-PHAT) -тай ерөнхий кросс-корреляци гэж нэрлэдэг. Энэ арга нь кросс-корреляцийн оргил үеийг нэмэгдүүлдэг жинлэх функцийг ашиглахад хүргэдэг бөгөөд ингэснээр анхны дохиог цуурайнаас ялгахад хялбар болгодог. Би GCC-PHAT-ийн гүйцэтгэлийг реверберацийн камер дахь энгийн хөндлөн корреляцитай харьцуулсан (уншина уу: бетон угаалгын өрөөг шинэчилж байна), GCC-PHAT нь зөв өнцгийг тооцоолоход 7 дахин илүү үр дүнтэй болохыг олж мэдэв.
  3. Хөндлөн корреляци хийхдээ бид хоёр дохиог авч, нөгөөгийнхөө дагуу гулсуулж, алхам тутамд тогтмол дохионы цэг бүрийг гулсах дохионыхоо цэг болгон үржүүлж байна. N урттай хоёр дохионы хувьд энэ нь n^2 тооцоололд хүргэдэг. Үүнийг сайжруулахын тулд давтамжийн домэйны хөндлөн хамаарлыг гүйцэтгэж болох бөгөөд үүнд хурдан Fourier хувиргалт орно (nlogn тооцоо), нэг хувиргасан дохионы цэг бүрийг нөгөө цэгийн харгалзах цэгээр үржүүлж (n тооцоо), дараа нь урвуу дарааллаар гүйцэтгэнэ. цаг домэйнд буцаж очихын тулд Fourier хувиргалт (nlogn тооцоо), n+2*nlogn тооцоолол, n^2 -оос бага. Гэсэн хэдий ч энэ бол гэнэн хандлага юм. Манай массив дахь микрофонууд хоорондоо маш ойрхон бөгөөд дууны хурд нь харьцангуй удаан байдаг тул аудио долгионы хэлбэрийг аль хэдийн голчлон нийцүүлэх болно. Тиймээс, бид бага зэрэг урагш эсвэл хоцрогдсон офсетуудыг авч үзэхийн тулд харилцан уялдаа холбоогоо тодорхойлж чадна. 1 ба 4 микрофонуудын хувьд хоцрогдол нь +/- 12 дээжийн хооронд байх ёстой бөгөөд энэ нь харилцан хамаарал бүрийн хувьд бид зөвхөн 24*н тооцоолол хийх шаардлагатай бөгөөд ингэснээр бидний долгионы хэлбэр 2900 дээжээс урт байх үед тооцооллыг хэмнэх болно.

Энэ систем нь GCC-PHAT алгоритмыг оновчлол 3 ашиглан хэрэгжүүлдэг minidsp номын санг ашигладаг.

Микрофон хос бүрийн дохионы хоцрогдлыг олж мэдсэний дараа програм нь хоцролтын дундаж утгыг сонгож, тооцоолсон өнцгийг тооцоолохын тулд үр дүнг нийтэлж, servo -ийг хянахад ашиглаж болно.

Servo хяналтын зангилаа

Kinect_doa зангилаатай харьцуулахад servo зангилаа харьцангуй энгийн. Түүний даалгавар бол зөвхөн тооцоолсон DOA -ийг аваад servo -ийг энэ өнцөгт шилжүүлэх явдал юм. Энэ нь Raspberry Pi -ийн техник хангамжийн PWM модульд нэвтрэхийн тулд wiringPi номын санг ашиглан servo -ийн өнцгийг тохируулдаг. Ихэнх аналог servo -ийг 1000 µs -аас 2000 µs хүртэлх импульсийн өргөнтэй ХОУХ -ийн дохиогоор удирддаг бөгөөд 0 ° -аас 180 ° өнцөгт харгалзах боловч миний ашигладаг servo нь өнцөгт харгалзах 500 µs -аас 2500 µs хүртэл удирддаг. 0 ° -аас 270 ° хүртэл. Тиймээс хамгийн бага импульсийн өргөн, хамгийн их импульсийн өргөн, хамгийн их ба хамгийн бага өнцгийн ялгааг тохируулах замаар зангилааг өөр өөр servo тоног төхөөрөмжид тохируулж болно. Нэмж дурдахад, servo нь зорилтот өнцөг рүү шууд хөдөлдөггүй, харин өнцөг рүүгээ тохируулагдсан хурдаар хөдөлдөг бөгөөд энэ нь Маргаретад аажмаар аажмаар, аймшигтай уур амьсгалыг өгдөг (дээрээс нь хурдан, нааш цааш хөдөлж буй servo -ийн дуу үнэхээр хурдан уурлуулдаг.).

Алхам 8: Бүтээх ба суурилуулах

Хараат байдлыг суулгах:

Эхлээд libfreenect -ийг суулгаарай. Багцын менежерээс авах боломжтой хувилбар нь аудиог дэмждэггүй тул бид үүнийг эх сурвалжаас бүтээх ёстой. Учир нь бид аудиог идэвхжүүлэхийн тулд Kinect -д програм хангамжийг байршуулах ёстой бөгөөд энэ програмыг дахин түгээх нь зарим улс оронд хууль ёсны биш юм. Нэмж дурдахад бид Raspbian -ийн толгойгүй суурилуулалтанд шаардлагагүй OpenGL болон glut шаарддаг жишээнүүдийг бий болгохоос зайлсхийх боломжтой.

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

cd git clone https://github.com/OpenKinect/libfreenect cd libfreenect mkdir cd build cmake бий болгох.. -DCMAKE_BUILD_REDIST_PACKAGE = OFF -DCMAKE_BUILD_EXAMPLES = OFF -ийг sudo cp ~/linb -reen -sudo cp//libfreen.rules /etc/udev/rules.d udevadm control-reload-rules && udevadm trigger

Дараа нь бид Pi -ийн GPIO тээглүүрийг хянах боломжийг олгодог wiringPi багцыг суулгах хэрэгтэй.

cd

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

Манекений толгойг бэхлэх:

WiringPi суулгасны дараа манекений толгойг доод тавцан дээр бэхлэхийн тулд бид техник хангамжийн газар руу хурдан эргэх боломжтой. Сервог командын мөрөөр дамжуулахын тулд дараах тушаалуудыг оруулна уу.

gpio pwm-ms

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

Хэрэв хөдөлгөөн байхгүй бол таны servo аль хэдийн төвлөрсөн байж магадгүй юм. Гэхдээ итгэлтэй байхын тулд та servo-г төвийн бус утгад тохируулж болно. gpio -g pwm 18 200, дараа нь үүнийг 150 болгож тохируулна уу.

Серво төвд байгаа гэдэгт итгэлтэй болсны дараа толгойны тавцангийн servo эвэрийг servo дээр бэхлээрэй. Дараа нь эвэрээ servo дээр шургуулж, толгойгоо Velcro битээр холбоно.

ROS суулгах:

Дараа нь Pi дээрээ ROS суулгаарай. Маш сайн суулгах гарын авлагыг эндээс олж болно; манай системийн хувьд бидэнд OpenCV хэрэггүй тул та 3 -р алхамыг алгасаж болно. Энэхүү бүтээн байгуулалтыг дуусгахад хэдэн цаг шаардагдах болно. Суулгах гарын авлагыг дагаж дууссаны дараа bashrc дээрээ эх үүсвэрийг нэмж оруулснаар бид шинээр суулгасан ROS багцуудаа ашиглах боломжтой болно.

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

Kinect DOA багцыг бүтээх:

Үүнийг хийсний дараа манай төслийн хувьд catkin ажлын талбар хийж src лавлах санд оруулна уу.

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

Энэ төслийн код kinect_doa багцад байгаа тул үүнийг өөрийн шинэ ажлын талбарын src директор руу хуулна уу.

git clone

Robot_upstart багц нь эхлүүлэх файлуудыг эхлүүлэх үед ажиллуулахын тулд суулгахад хялбар хэрэгсэл бөгөөд үүнийг ажлын талбарт хуулбарлах болно.

git clone

Одоо бид ажлын талбайнхаа дээд түвшний лавлахаас catkin_make руу залгаж төслийн кодыг бүтээж, дараа нь манай бүтцийг бий болгохын тулд манай багцыг ашиглах боломжтой болно.

cd ~/kinect_doa_ws

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

Гүйлт ба тааруулалт:

Бүх зүйл залгагдаж, асаалттай байгаа гэж үзвэл та одоо системийг эхлүүлж, Kinect дуу хоолойгоо өөрийн дуу хоолойтой болгох боломжтой байх ёстой! Гэхдээ хэрэв танд Kinect 1473 байгаа бол эхлээд ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch файлыг текст засварлагч дээр нээж, using_kinect_1473 параметрийг үнэн болгож тохируулаарай. Нэмж хэлэхэд, хэрэв та надаас өөр servo ашиглаж байсан бол энэ нь стандарт аналог servo байж магадгүй, тиймээс эхлүүлэх файлд min_us параметрийг 1000, max_us -ийг 2000, max_deg -ийг 180 болгож өөрчилнө үү.

roslaunch kinect_doa kinect_doa.launch

Хэсэг хугацаанд түүнтэй хамт тогло. Хэрэв та систем хэт мэдрэмтгий санагдаж байвал (дуу хоолой, өвөрмөц дуу чимээнд нийцэхгүй санамсаргүй чиглэл рүү харж байгаа бол) эхлүүлэх файл дахь white_noise_ratio параметрийг өөрчилж, хариу үйлдэл нь таны хүссэн хэмжээнд байх хүртэл системийг дахин эхлүүлээрэй.. Харьцааг нэмэгдүүлэх нь системийг хариу үйлдэл үзүүлэх чадваргүй болгоно, харин эсрэгээр. Та хүссэн гүйцэтгэлээ авахын тулд системийг өөр байрлал руу шилжүүлэх бүртээ энэ тааруулалтыг хийх хэрэгтэй болно.

Pi -г асаахад програмыг эхлүүлэхийн тулд бид robot_upstart багцыг ашиглан эхлүүлэх файлаа суулгадаг. Хэрэв ROS одоогоор ажиллаагүй бол roscore командыг ашиглан эхлүүлнэ үү. Дараа нь шинэ терминал нээж, эхлүүлэлтийг дараах байдлаар суулгана уу.

rosrun robot_upstart kinect_doa/launch/kinect_doa.launch --user root --symlink суулгах

Бид эхлүүлэх файл руу хуулахын оронд симлинк холбоос үүсгэдэг бөгөөд ингэснээр ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch -ийг засварлаж параметрүүдийг өөрчилж болно.

Алхам 9: Үүнийг оффис дээр нуух

Үүнийг оффис дээр нууж байна
Үүнийг оффис дээр нууж байна

Одоо хөгжилтэй хэсгийн талаар. Хэдэн цагийн дараа ажилдаа ороод манекеныхаа толгойг нууцаар тавь. Дараа нь зүгээр л суугаад хамт ажиллагсад тань хичнээн их амжилтанд хүрэхийг хараарай! Таны шинэ бүтээл хэдэн толгой эргүүлэх баталгаатай болно …

Зөвлөмж болгож буй: