Оглавление:

Звуковая локализация головы манекена с помощью 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 (vs * Δ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 + питание переменного тока, как этот.
  • Raspberry Pi 2 или 3 работает под управлением Raspbian Stretch. Первоначально я пытался использовать Pi 1 Model B +, но он был недостаточно мощным. У меня постоянно возникали проблемы с отключением от Kinect.
  • Самая жуткая голова манекена, которую вы можете найти
  • Аналоговый сервопривод, достаточно мощный, чтобы повернуть голову манекена
  • Настенное зарядное устройство USB на 5 В с достаточной силой тока для питания Pi, сервопривода и как минимум двух портов. (Я использовал 3-портовый штекер на 5 А, похожий на этот
  • Удлинитель с двумя розетками (один для настенного зарядного устройства USB, а другой - для адаптера переменного тока Kinect.
  • Два USB-кабеля: кабель типа A - micro-USB для питания Pi, а другой - для питания сервопривода, который вы не против разрезать.
  • Платформа, на которой можно сидеть, и еще одна платформа поменьше для головы манекена. Я использовал пластиковый поднос для сервировки в качестве основы и пластиковую тарелку в качестве платформы для головы. Оба были из Walmart и стоили всего несколько долларов.
  • 4 болта и гайки # 8-32 1/2 дюйма для крепления сервопривода к более крупной платформе
  • 2 болта M3 8 мм с шайбами (или любого другого размера, который вам нужен, чтобы прикрепить рог сервопривода к меньшей платформе)
  • Две перемычки «папа-папа», одна красная и одна черная, и одна перемычка «мама-папа»
  • Полоски на липучке на липкой основе
  • Электроизоляционная лента
  • Изолента для управления кабелями

Инструменты

  • Дремель с отрезным кругом
  • Дрель
  • Сверла 7/64, 11/16 и 5/16 дюйма
  • Метчик M3 (опционально, в зависимости от вашего сервопривода)
  • Отвертка
  • Паяльник с припоем
  • Руки помощи (по желанию)
  • Маркер
  • Компас
  • Инструмент для зачистки проводов
  • Мультиметр (опционально)

СИЗ

  • Безопасные очки

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

Шаг 3: Сборка нижней платформы

Сборка нижней платформы
Сборка нижней платформы
Сборка нижней платформы
Сборка нижней платформы
Сборка нижней платформы
Сборка нижней платформы

Первая часть, которую мы сделаем, - это нижняя платформа, на которой будет находиться наш Kinect, сервопривод и вся наша электроника. Для изготовления платформы вам понадобятся:

  • Пластиковый поднос для сервировки
  • Сервопривод
  • 4 болта # 8-32 1/2 дюйма с гайками
  • Dremel с отрезным кругом
  • Отвертка
  • Дрель
  • Сверло 11/16"
  • Маркер

Как сделать

  1. Переверните лоток вверх дном.
  2. Поместите сервопривод боком рядом с задней частью лотка, убедитесь, что выходная шестерня сервопривода лежит вдоль центральной линии лотка, затем отметьте вокруг основания сервопривода.
  3. Используя дремель и отрезной круг, вырежьте отмеченную область, затем вставьте сервопривод в его прорезь.
  4. Отметьте центры монтажных отверстий корпуса сервопривода на лотке, затем снимите сервопривод и просверлите эти отверстия своим сверлом 11/16 дюйма. При сверлении отверстий очень легко расколоть тонкий пластик, поэтому я считаю это намного безопаснее вращать дрель в обратном направлении и медленно удалять материал. Это намного медленнее, чем сверление отверстий должным образом, но гарантирует отсутствие трещин.
  5. Поместите сервопривод обратно в слот, затем прикрепите его к лотку с помощью болтов и гаек №8-32.

Шаг 4: Сборка платформы головы

Сборка главной платформы
Сборка главной платформы
Сборка главной платформы
Сборка главной платформы
Сборка главной платформы
Сборка главной платформы
Сборка главной платформы
Сборка главной платформы

Следующая часть, которую мы сделаем, будет платформой для соединения головы манекена с сервоприводом. Для изготовления подголовника вам потребуются:

  • Пластиковая тарелка
  • Сервопривод
  • 2 болта M3 8 мм с шайбами
  • Отвертка
  • Дрель
  • Сверла 7/64 "и 5/16"
  • Компас
  • Дремель с отрезным кругом

Как сделать

  1. Установите компас на радиус основания головы манекена.
  2. С помощью циркуля отметьте круг с центром в центре пластины. Это будет фактический размер нашей головной платформы.
  3. Используйте дремель и отрезной круг, чтобы вырезать меньшую платформу из пластины.
  4. Просверлите центр вашей новой платформы сверлом 5/16 дюйма. Это даст нам доступ к винту, который крепит наш рог сервопривода к сервоприводу. Чтобы придать платформе устойчивость, когда я просверливал отверстие, я вставил катушку с проволока под ним и просверливается через центр катушки.
  5. Совместите рог сервопривода с центром платформы и отметьте два отверстия, чтобы прикрепить рог к платформе. Убедитесь, что эти монтажные отверстия расположены достаточно далеко друг от друга, чтобы было место для головок болтов M3 и шайб.
  6. Просверлите эти отмеченные отверстия сверлом 7/64 дюйма.
  7. Нижнее отверстие моего сервопривода было гладким, то есть в нем не было резьбы для болта M3. Таким образом, я использовал свое сверло и метчик M3, чтобы сделать резьбу.
  8. Используйте болты и шайбы, чтобы прикрепить рог сервопривода к платформе головы.

Шаг 5: кабель питания сервопривода

Кабель питания сервопривода
Кабель питания сервопривода
Кабель питания сервопривода
Кабель питания сервопривода
Кабель питания сервопривода
Кабель питания сервопривода
Кабель питания сервопривода
Кабель питания сервопривода

Аналоговые сервоприводы обычно получают питание от 4,8 до 6 В. Поскольку Raspberry Pi уже будет получать питание 5 В от USB, мы упростим нашу систему, также запитав сервопривод от USB. Для этого нам потребуется модифицировать USB-кабель. Для изготовления кабеля сервопривода вам потребуются:

  • Запасной USB-кабель с концом типа A (тот, который подключается к вашему компьютеру)
  • Одна красная и одна черная перемычка
  • Паяльник
  • Припой
  • Инструмент для зачистки проводов
  • Электроизоляционная лента
  • Руки помощи (по желанию)
  • Мультиметр (опционально)

Как сделать

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

Шаг 6: Монтаж электроники

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

Наконец, мы соберем все вместе, установив нашу электронику и все остальное на нижнюю платформу. Тебе понадобится:

  • Нижняя платформа
  • Платформа головы
  • Голова манекена
  • Kinect с USB + адаптером переменного тока
  • Адаптер питания USB
  • Удлинитель
  • Кабель Micro USB
  • Кабель питания сервопривода
  • Raspberry Pi
  • Кабель-перемычка между мужчинами и женщинами
  • Клейкая липучка
  • Ножницы

Как сделать

  1. Прикрепите Pi к дну лотка на липучке.
  2. Прикрепите адаптер питания USB с помощью липучки.
  3. Подключите сервопривод и Pi к адаптеру питания USB.
  4. Подключите контакт 12 (GPIO18) Pi к сигнальному кабелю сервопривода. Это шестая булавка справа.
  5. Проденьте удлинитель через заднюю ручку лотка и вставьте адаптер питания USB в одну сторону.
  6. Возьмите адаптер Kinect USB + AC и подключите адаптер питания к другой стороне удлинителя, а 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 кГц каждый, поэтому хорошо иметь взаимную корреляцию и сбор данных в отдельных потоках, чтобы избежать потери данных из-за вычислительной нагрузки. Взаимодействие с 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 до 2000 мкс, что соответствует углу от 0 ° до 180 °, но сервопривод, который я использовал, управлялся с интервалом от 500 до 2500 мкс, что соответствует углу от 0 ° до 270 °. Таким образом, узел конфигурируется для различного сервооборудования, устанавливая параметры для минимальной ширины импульса, максимальной ширины импульса и разницы между максимальным и минимальным углами. Кроме того, сервопривод не сразу движется к заданному углу, а скорее движется к нему с настраиваемой скоростью, придавая Маргарет более постепенную, жуткую атмосферу (плюс, звук сервопривода, быстро движущегося вперед и назад, очень быстро раздражает.).

Шаг 8: Сборка и установка

Установить зависимости:

Сначала установите libfreenect. Мы должны собрать его из исходного кода, потому что версия, которую вы можете получить с помощью диспетчера пакетов, не включает поддержку звука. Это связано с тем, что мы должны загрузить прошивку на Kinect, чтобы включить звук, а распространение этой прошивки незаконно в некоторых юрисдикциях. Кроме того, мы можем избежать создания примеров, требующих OpenGL и перенасыщения, ненужных для безголовых установок Raspbian.

sudo apt-get install git cmake build-essential 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 make sudo make install sudo cp ~ / libfreenect / platform.rules /etc/udev/rules.d udevadm control --reload-rules && триггер udevadm

Затем нам нужно установить пакет wiringPi, который позволяет нам управлять контактами GPIO Pi:

CD

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

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

Установив wiringPi, мы можем быстро вернуться к аппаратной площадке, чтобы прикрепить голову манекена к нижней платформе. Чтобы центрировать сервопривод через командную строку, введите следующие команды:

gpio pwm-ms

gpio pwmc 192 gpio pwmr 2000 gpio -g pwm 18150

Если нет движения, значит, ваш сервопривод, вероятно, уже отцентрован. Однако, чтобы быть уверенным, вы можете установить сервопривод на нецентральное значение, например gpio -g pwm 18 200, затем снова установите значение 150.

Убедившись, что сервопривод находится в центре, прикрепите рог сервопривода платформы головы к сервоприводу так, чтобы голова манекена смотрела прямо вперед. Затем прикрутите рог на сервопривод и прикрепите голову с помощью насадок на липучке.

Установите ROS:

Затем установите ROS на свой Pi. Здесь можно найти отличное руководство по установке; для нашей системы нам не нужен OpenCV, поэтому вы можете пропустить шаг 3. Эта сборка займет несколько часов. Когда вы закончите следовать руководству по установке, добавьте источник установки в ваш bashrc, чтобы мы могли использовать наши недавно установленные пакеты ROS:

echo "источник /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 "источник /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 install kinect_doa / launch / kinect_doa.launch --user root --symlink

Мы создаем символическую ссылку на файл запуска вместо его копирования, чтобы мы могли изменять параметры, редактируя ~ / kinect_doa_ws / src / kinect_doa / launch / kinect_doa.launch.

Шаг 9: прячем в офисе

Прячем в офисе
Прячем в офисе

Теперь самое интересное. Отправляйтесь на работу в нерабочее время и держите манекен в секрете. Затем просто сядьте и посмотрите, сколько времени понадобится вашим коллегам, чтобы понять! Ваше новое творение обязательно повернет несколько голов …

Рекомендуемые: