Съдържание:

Звукова локализация на манекенска глава с Kinect: 9 стъпки (със снимки)
Звукова локализация на манекенска глава с Kinect: 9 стъпки (със снимки)

Видео: Звукова локализация на манекенска глава с Kinect: 9 стъпки (със снимки)

Видео: Звукова локализация на манекенска глава с Kinect: 9 стъпки (със снимки)
Видео: Аускультация лёгких | Дыхательные шумы | Видео с примерами 2024, Юли
Anonim
Звукова локализация на манекенска глава с Kinect
Звукова локализация на манекенска глава с Kinect

Запознайте се с Маргарет, манекен за тестване на система за следене на умората на водача. Наскоро тя се оттегли от задълженията си и намери пътя си до офис пространството ни и оттогава привлече вниманието на онези, които смятат, че е „страховита“. В интерес на справедливостта съм й дал способността да се изправи лице в лице с обвинителите си; вместо на пръв поглед да ви следва с бездушния си поглед, сега тя всъщност го прави. Системата използва микрофонния масив на Microsoft Kinect и серво, за да я насочи по посока на хората, които говорят близо до нея.

Стъпка 1: Теория

Теория
Теория

Изчисляване на ъгъла

Когато чуем нещо, освен ако този шум не е точно пред нас, той достига едното ухо преди другото. Нашият мозък възприема това забавяне на пристигането и го преобразува в обща посока, от която идва шумът, което ни позволява да намерим източника. Можем да постигнем абсолютно същия вид локализация, използвайки чифт микрофони. Помислете за показаната диаграма, която съдържа двойка микрофони и източник на звук. Ако гледаме отгоре надолу, звуковите вълни са кръгли, но ако разстоянието до източника е голямо спрямо разстоянието между микрофоните, тогава от гледната точка на нашите сензори вълната е приблизително плоска. Това е известно като предположение за далечното поле и опростява геометрията на нашия проблем.

Така че приемете, че вълновият фронт е права линия. Ако звукът идва отдясно, той ще удари микрофон #2 в момент t2 и микрофон #1 в момент t1. Разстоянието d на изминатия звук между ударния микрофон #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 (срещу*Δt/d12), -π/2 <= θ <= π/2

Намиране на забавянето

Както можете да видите от уравнението по -горе, всичко, което трябва да решим за ъгъла, е забавянето на звуковата вълна, пристигаща при микрофон един в сравнение с микрофон два; скоростта на звука и разстоянието между микрофоните са фиксирани и известни. За да постигнем това, първо изпробваме аудио сигналите с честота fs, като ги преобразуваме от аналогови в цифрови и съхраняваме данните за по -късна употреба. Ние вземаме проби за период от време, известен като прозорец за вземане на проби, който е достатъчно дълъг, за да улови отличими черти на нашата звукова вълна. Например, нашият прозорец може да бъде стойността на аудио данните за последната половина секунда.

След получаване на прозоречните аудио сигнали, ние откриваме закъснението между двете чрез изчисляване на тяхната кръстосана корелация. За да изчислим кръстосаната корелация, задържаме прозоречния сигнал от един фиксиран микрофон и плъзгаме втория сигнал по оста на времето от целия път зад първия до целия път преди първия. На всяка стъпка по нашия слайд ние умножаваме всяка точка в нашия фиксиран сигнал със съответната точка в нашия плъзгащ сигнал, след което сумираме всички резултати, за да изчислим нашия коефициент на корелация за тази стъпка. След завършване на нашия слайд, стъпката, която има най -висок коефициент на корелация, съответства на точката, в която двата сигнала са най -сходни, и на каква стъпка сме, ни казва колко проби n сигнал два е изместен от сигнал 1. Ако n е отрицателно, тогава сигнал два изостава от сигнал един, ако е положителен, тогава сигнал два е напред, а ако е нула, тогава двете вече са подравнени. Преобразуваме това изместване на извадката във времево закъснение, използвайки нашата честота на дискретизация със съотношението Δt = n/fs, като по този начин:

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

Стъпка 2: Компоненти

Части

  • Microsoft Kinect за Xbox 360, модел 1414 или 1473. Kinect има четири микрофона, подредени в линеен масив, който ще използваме.
  • Адаптер за преобразуване на собствения конектор на Kinect в USB + AC захранване като този.
  • Raspberry Pi 2 или 3, работещ с Raspbian Stretch. Първоначално се опитах да използвам Pi 1 Model B+, но не беше достатъчно мощен. Продължавах да имам проблеми при прекъсването на връзката с Kinect.
  • Най -страховитата манекенска глава, която можете да намерите
  • Аналогово серво, достатъчно силно, за да завърти главата ви на манекен
  • 5V USB зарядно за стена с достатъчен ампераж за захранване както на Pi, така и на серво и поне два порта. (Използвах 5A 3-порт щепсел, подобен на този
  • Удължителен кабел с два изхода (единият за USB зарядното устройство за стена, а другият за променливотоковия адаптер Kinect.
  • Два USB кабела: тип A към микро-USB кабел за захранване на Pi и друг за захранване на серво, което нямате нищо против да отрежете
  • Платформа, на която може да седне всичко, и друга по -малка платформа за главата на манекена. Използвах пластмасова тава за сервиране като основа и пластмасова чиния като платформа за глава. И двете бяха от Walmart и струваха само няколко долара
  • 4x #8-32 1/2 "болта и гайки за закрепване на вашето серво към по-голямата платформа
  • 2x M3 8 мм болт с шайби (или какъвто и да е размер, от който се нуждаете, за да прикрепите вашия серво клаксон към по -малката платформа)
  • Две джъмперни проводници от мъжки към мъжки, един червен и един черен и един женски джъмпер
  • Велкро ленти с подплата
  • Електрическо тиксо
  • Тиксо за управление на кабели

Инструменти

  • Dremel с режещо колело
  • Пробивна машина
  • Свредла 7/64 ", 11/16" и 5/16"
  • M3 кран (по избор, в зависимост от вашия серво клаксон)
  • Отвертка
  • Поялник с спойка
  • Помощни ръце (по избор)
  • Маркер
  • Компас
  • Машини за сваляне на тел
  • Мултицет (по избор)

ЛПС

  • Предпазни очила

  • Маска за лице (за пластмасови битове с драмел).

Стъпка 3: Долен монтаж на платформа

Долен монтаж на платформа
Долен монтаж на платформа
Долен монтаж на платформа
Долен монтаж на платформа
Долен монтаж на платформа
Долен монтаж на платформа

Първата част, която ще направим, е долната платформа, която ще побере нашия Kinect, серво и цялата ни електроника. За да направите платформата, ще ви трябва:

  • Пластмасова тава за сервиране
  • Серво
  • 4x #8-32 1/2 "болта с гайки
  • Dremel с режещо колело
  • Отвертка
  • Пробивна машина
  • Свредло 11/16"
  • Маркер

Как да направя

  1. Обърнете тавата с главата надолу.
  2. Поставете вашето серво встрани близо до задната част на тавата, уверете се, че изходното зъбно колело на сервото е разположено по централната линия на тавата, след което маркирайте около основата на серво.
  3. С помощта на вашия dremel и режещото колело изрежете зоната, която сте маркирали, след което плъзнете серво в неговото гнездо.
  4. Маркирайте центровете на монтажните отвори на корпуса на серво на тавата, след това премахнете серво и пробийте тези дупки с Вашата бормашина 11/16 ". Много е лесно да се напукат тънки пластмаси по този начин при пробиване на отвори, така че намирам за много по -безопасно да прокарате бормашината на заден ход и бавно да отстраните материала. Това е много по -бавно от правилното пробиване на отворите, но гарантира, че няма пукнатини.
  5. Поставете вашето серво обратно в слота, след което го монтирайте към таблата с болтове и гайки #8-32.

Стъпка 4: Монтаж на платформа за глава

Сглобяване на платформа за глава
Сглобяване на платформа за глава
Сглобяване на платформа за глава
Сглобяване на платформа за глава
Сглобяване на платформа за глава
Сглобяване на платформа за глава
Сглобяване на платформа за глава
Сглобяване на платформа за глава

Следващата част, която ще направим, ще бъде платформа за свързване на манекенската глава към сервото. За да направите платформата за глава, ще ви трябва:

  • Пластмасова плоча
  • Серво клаксон
  • 2x M3 8 мм болт с шайби
  • Отвертка
  • Пробивна машина
  • Свредла 7/64 "и 5/16"
  • Компас
  • Dremel с режещо колело

Как да направя

  1. Поставете компаса си в радиуса на основата на главата на манекена.
  2. Използвайте компаса си, за да маркирате кръг, центриран в центъра на плочата. Това ще бъде действителният размер на нашата платформа за глава.
  3. Използвайте своя dremel и режещо колело, за да изрежете по -малката платформа от плочата.
  4. Пробийте центъра на новата си платформа с бормашина 5/16 ". Това ще ни даде достъп до винта, който монтира нашия серво рог към нашето серво. За да придадем стабилност на платформата, докато пробивах дупката, слагам макара тел под него и пробит през центъра на макарата.
  5. Подравнете вашия серво клаксон с центъра на платформата и маркирайте два отвора, за да прикрепите клаксона към платформата. Уверете се, че тези монтажни отвори са достатъчно отдалечени, така че да има място за вашите M3 болтови глави и шайби.
  6. Пробийте тези маркирани дупки със свредло 7/64 ".
  7. Долният отвор на моя серво рог беше гладък, тоест нямаше резби за болта M3. По този начин използвах свредлото си и кран M3, за да направя нишките.
  8. Използвайте болтовете и шайбите, за да прикрепите серво рога към платформата на главата.

Стъпка 5: Серво захранващ кабел

Серво захранващ кабел
Серво захранващ кабел
Серво захранващ кабел
Серво захранващ кабел
Серво захранващ кабел
Серво захранващ кабел
Серво захранващ кабел
Серво захранващ кабел

Аналоговите сервоустройства обикновено се захранват с 4.8-6V. Тъй като Raspberry Pi вече ще се захранва от 5V от USB, ние ще опростим нашата система, като захранваме и серво от USB. За да направим това, ще трябва да променим USB кабел. За да направите серво захранващия кабел, ще ви трябва:

  • Резервен USB кабел с край тип A (такъв, който се включва към компютъра ви)
  • Един червен и един черен проводник
  • Поялник
  • Припой
  • Машини за сваляне на тел
  • Електрическо тиксо
  • Помощни ръце (по избор)
  • Мултицет (по избор)

Как да направя

  1. Изрежете конектора без USB тип A от кабела си, след това отстранете малко изолацията, за да разкриете четирите вътрешни проводника. Прекъснете екранирането около откритите проводници.
  2. Обикновено USB кабелът ще има четири проводника: два за предаване и приемане на данни и два за захранване и заземяване. Интересуваме се от мощност и земя, които обикновено са червени и черни съответно. Отстранете част от изолацията от червените и черните проводници и отрежете зелените и белите проводници. Ако се притеснявате, че нямате правилните захранващи и заземяващи проводници, можете да включите кабела в USB захранващия адаптер и да проверите изходното напрежение с мултицет.
  3. След това отрежете единия край на червените и черните джъмперни кабели и отстранете част от изолацията.
  4. Сега завъртете заедно откритите черни проводници на джъмпера и USB кабелите. Пресечете центровете на откритите проводници и ги завъртете един около друг. След това нанесете спойка върху чифтосаните проводници, за да ги държите заедно. Помагащите ръце ще направят това по -лесно, като държите кабелите си на място.
  5. Повторете стъпка 4 за червените проводници.
  6. Покрийте откритото окабеляване с електрическа лента или термосвиваеми тръби, ако ви е фантазия. Тези съединения ще бъдат крехки, тъй като проводниците са толкова малки, затова добавете втори слой лента, която държи джъмперните кабели към външната изолация на USB кабела. Това ще направи монтажа по -твърд и по този начин е по -малко вероятно да се скъса от огъване.

Стъпка 6: Монтаж на електроника

Монтаж на електроника
Монтаж на електроника
Монтаж на електроника
Монтаж на електроника
Монтаж на електроника
Монтаж на електроника

И накрая, ние ще съберем всичко заедно, монтирайки нашата електроника и всичко останало на долната платформа. Ще имаш нужда:

  • Долна платформа
  • Платформа за глава
  • Манекенска глава
  • Kinect с USB+AC адаптер
  • USB захранващ адаптер
  • Удължител
  • Микро USB кабел
  • Серво захранващ кабел
  • Малина Пи
  • Кабел за джъмпер от мъжки към женски
  • Лепило велкро
  • Ножици

Как да направя

  1. Монтирайте Pi до дъното на тавата с велкро.
  2. Прикрепете USB захранващия адаптер с велкро.
  3. Включете серво и Pi в USB захранващия адаптер.
  4. Свържете щифт 12 (GPIO18) на Pi към сигналния кабел на сервото. Това е шестият щифт отдясно.
  5. Прокарайте удължителния си кабел през задната дръжка на тавата и включете USB захранващия адаптер в едната страна.
  6. Вземете USB+AC адаптера на Kinect и включете захранващия адаптер в другата страна на удължителния кабел, а USB в Pi.
  7. Прокарайте кабела на Kinect през предната дръжка на тавата и го включете в адаптера Kinect.
  8. Използвах тиксо, за да държа кабелите към долната страна на платформата. Това не изглежда най -елегантно, но за щастие всичко това е скрито.
  9. Обърнете платформата с дясната страна нагоре и използвайте велкро, за да монтирате Kinect в предната част на платформата.
  10. Използвайте велкро, за да монтирате главата на манекена към платформата на главата. След като всичко се подреди обаче, отделете двете части, за да имаме достъп до монтажния винт на серво клаксона. Все още не завийте клаксона към сервото, тъй като трябва първо да се уверим, че серво е в централната си позиция, за да можем да подредим всичко. Ще направим това в по -късна стъпка.

Стъпка 7: Софтуер и алгоритъм

Софтуер и алгоритъм
Софтуер и алгоритъм

Общ преглед

Софтуерът за този проект е написан на C ++ и е интегриран с Robot Operating System (ROS), рамка за писане на софтуер за роботика. В ROS софтуерът за система е разделен на колекция от програми, наречени възли, където всеки възел реализира определен подраздел от функционалността на системата. Данните се предават между възлите, използвайки метод за публикуване/абониране, където възлите, които произвеждат данните, го публикуват, и възли, които консумират данните, се абонират за него. Разделянето на кода по този начин позволява лесно разширяване на системната функционалност и позволява споделяне на възли между системите за по -бързо развитие.

В тази система ROS се използва главно за отделяне на кода, изчисляващ посоката на пристигане (DOA) на източника на звук от кода, управляващ сервото, позволявайки на други проекти да включват оценката на Kinect DOA, без да включва серво код, който може да не им е необходим или да не се иска. Ако искате да разгледате самия код, той може да бъде намерен на GitHub:

github.com/raikaDial/kinect_doa

Kinect DOA възел

Възелът kinect_doa е месото и костите на тази система, което прави основно всичко интересно. При стартиране той инициализира ROS възела, като прави възможна цялата ROS магия, след което качва фърмуера в Kinect, така че аудио потоците да станат достъпни. След това създава нова нишка, която отваря аудио потоците и започва да чете данни от микрофона. Kinect взема проби от четирите си микрофона на честота от 16 kHz всеки, така че е добре да има кръстосана корелация и събиране на данни в отделни нишки, за да се избегнат липсващи данни поради изчислително натоварване. Взаимодействието с 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 изчисления. Бихме могли да подобрим това, като вместо това извършим кръстосана корелация в честотната област, която включва бърза трансформация на Фурие (nlogn изчисления), умножавайки всяка точка в един трансформиран сигнал със съответната точка в другата (n изчисления), след което изпълняваме обратна преобразуване на Фурие, за да се върнете във времевата област (nlogn изчисления), което води до n+2*nlogn изчисления, по -малко от n^2. Това обаче е наивният подход. Микрофоните в нашия масив са толкова близо един до друг и скоростта на звука е толкова относително бавна, че звуковите форми на вълните вече ще бъдат предимно подравнени. По този начин можем да проследим нашата кръстосана корелация, за да вземем предвид само изместванията, които са малко напред или назад. За микрофони 1 и 4 изоставането трябва да падне между +/- 12 проби, което означава, че за всяка кръстосана корелация трябва да извършим само 24*n изчисления, което води до изчислителни спестявания, когато нашите форми на вълната са по-дълги от 2900 проби.

Тази система използва библиотеката minidsp, която реализира алгоритъма GCC-PHAT с оптимизация 3.

След като открие изоставането в сигналите от всяка двойка микрофони, програмата избира средната стойност за изоставането, използва я за изчисляване на прогнозния ъгъл и публикува резултата, така че да може да се използва за управление на серво.

Серво контролен възел

В сравнение с възела kinect_doa, серво възелът е сравнително прост. Неговата задача е да вземе единствено прогнозния DOA и да премести серво към този ъгъл. Той използва библиотеката wiringPi за достъп до хардуерния PWM модул на Raspberry Pi, като го използва за задаване на ъгъла на серво. Повечето аналогови сервоустройства се управляват от ШИМ сигнал с ширина на импулса от 1000 µs до 2000 µs, съответстваща на ъгъл от 0 ° до 180 °, но използваното от мен серво се контролира с 500 µs до 2500 µs, съответстващо на ъгъл от 0 ° до 270 °. По този начин възелът се конфигурира за различен серво хардуер чрез задаване на параметри за минималната ширина на импулса, максималната ширина на импулса и разликата между максималния и минималния ъгъл. Освен това, сервото не се премества веднага към целевия ъгъл, а по -скоро се придвижва към ъгъла с конфигурируема скорост, придавайки на Маргарет по -постепенно, страховито настроение (плюс, звукът от серво, което се движи бързо напред -назад става досадно много бързо).

Стъпка 8: Изграждане и инсталиране

Инсталиране на зависимости:

Първо инсталирайте libfreenect. Трябва да го изградим от източника, защото версията, която можете да получите с мениджъра на пакети, не включва поддръжка за аудио. Това е така, защото трябва да качим фърмуер в Kinect, за да активираме аудиото, а разпространението на този фърмуер не е законно в определени юрисдикции. Освен това можем да избегнем изграждането на примери, които изискват OpenGL и пренасищане, ненужни за безглавни инсталации Raspbian.

sudo apt-get install git cmake build-съществен libusb-1.0-0-dev

cd git clone https://github.com/OpenKinect/libfreenect cd libfreenect mkdir build cd build cmake.. -DCMAKE_BUILD_REDIST_PACKAGE = OFF -DCMAKE_BUILD_EXAMPLES = OFF направи sudo направи инсталиране sudo cfrect/lib.rules /etc/udev/rules.d udevadm control --reload-rules && udevadm тригер

След това трябва да инсталираме пакета wiringPi, който ни позволява да контролираме GPIO щифтовете на Pi:

cd

git клониране git: //git.drogon.net/wiringPi cd ~/wiringPi./build

Прикрепете манекенска глава:

С инсталиран wiringPi вече можем да направим бърз отклонение обратно към хардуерната земя, за да прикрепим главата на манекена към долната платформа. За да центрирате сервото чрез командния ред, въведете следните команди:

gpio pwm-ms

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

Ако няма движение, тогава вашето серво вероятно е вече центрирано. За да сте сигурни обаче, можете да настроите серво на нецентрирана стойност, напр. gpio -g pwm 18 200, след което го задайте обратно на 150.

След като сте сигурни, че сервото е центрирано, прикрепете серво рога на платформата на главата към серво, така че главата ви на манекен да гледа право напред. След това завийте клаксона върху сервото и прикрепете главата си чрез битовете за велкро.

Инсталирайте ROS:

След това инсталирайте ROS на вашия Pi. Тук можете да намерите страхотно ръководство за инсталиране; за нашата система не се нуждаем от OpenCV, така че можете да пропуснете стъпка 3. Тази компилация ще отнеме няколко часа, за да завърши. Когато приключите, следвайки ръководството за инсталиране, добавете източник на инсталацията към вашия bashrc, за да можем да използваме нашите новоинсталирани ROS пакети:

ехо "източник /opt/ros/kinetic/setup.bash" >> ~/.bashrc

Изградете Kinect DOA пакет:

След като всичко е направено, направете работно пространство за нашия проект и влезте в директорията 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 на true. Освен това, ако сте използвали различно серво от мен, вероятно е стандартно аналогово серво, така че докато сте в стартовия файл, променете параметъра 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: Скрийте го в офиса

Скриване в офиса
Скриване в офиса

Сега за забавната част. Насочете се към работа след часове и настройте манекенската си глава в тайна. След това просто седнете и вижте колко време отнема на вашите колеги да се хванат! Вашето ново творение гарантирано ще обърне няколко глави …

Препоръчано: