Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Интернет вещей

Технический вызов ETSIIT | От студентов колледжей до предпринимателей

Год назад мы начали работу над IV техническим соревнованием ETSIIT (видео). Кто мы? Что ж, нас четверо студентов, изучающих электротехнику и информатику в Университете Гранады в Испании.

Наша команда, Prometheus, выиграла технический конкурс, спонсируемый RTI. Для решения этой задачи командам из четырех или пяти студентов необходимо было создать продукт, позволяющий решить задачу, предложенную внешней компанией. Темой конкурса в этом году была «Распределенная видео система с несколькими агентами».

Мы присоединились к этой задаче, чтобы получить практический опыт. Спустя год после Tech Challenge мы все еще являемся студентами, но теперь мы изучили бизнес-возможности, разработали конкурентоспособный продукт Locaviewer, разработали стратегию его продажи на рынке и создали рабочий прототип в дополнение к курсовой работе, необходимой для наши степени.

Locaviewer

Большинство родителей с детьми в детском саду беспокоятся о здоровье и успеваемости своих детей. Наш продукт, Locaviewer, пытается предоставить родителям возможность отслеживать и видеть своего ребенка в режиме реального времени. В рамках нашего маркетингового плана мы создали рекламный ролик. Наш код выпущен под лицензией MIT на GitHub.

Организация и расписание команды

На выполнение проекта у нас ушло около 250 часов. Каждую неделю мы встречались не менее 4 часов, за исключением последнего месяца, когда мы тратили на проект 20 часов в неделю. Для большей эффективности мы разделились на две команды. Два человека работали над алгоритмом определения местоположения по Bluetooth в помещении. Два других сосредоточены на приложении для захвата, кодирования / декодирования видеопотока и совместного использования его с помощью RTI Connext DDS.

Алгоритм определения местоположения

Первым и наиболее важным шагом нашего решения было определение местонахождения детей в детском саду. Каждый ребенок должен был носить браслет с устройством Bluetooth-датчиком-, который постоянно сообщал о мощности сигнала, полученного устройством Bluetooth -dongle-, размещенным в стенах комнаты. Это значение индикатора уровня принятого сигнала (RSSI) обычно измеряется в децибелах (дБ). Мы определили взаимосвязь между RSSI и расстоянием.

Рисунок 2. Эмпирическое измерение сигналов Bluetooth по углу и расстоянию.
Рисунок 3. Носимый Locaviewer.

Значения RSSI были переданы на миникомпьютер (Raspberry Pi или MK802 III) для запуска алгоритма триангуляции и определения местоположения ребенка. Поскольку мы знали положение камеры, после определения положения ребенка мы знали, какие камеры записывают ребенка, и выбрали лучшую камеру.

Рисунок 4. Внутренняя триангуляция.

Приложение для записи видео

Для записи, кодирования, декодирования и визуализации видео мы использовали GStreamer для Java. Мы пробовали другие библиотеки, такие как vlcj, но они не поддерживали Raspberry Pi и не удовлетворяли ограничениям нашей системы в реальном времени. После некоторого исследования мы обнаружили GStreamer, который работал с Raspberry Pi и мог легко получить закодированный видеобуфер в реальном времени (используя AppSink и AppSource элементы). Это позволило нам инкапсулировать его и отправить в тему DDS. Мы работали над этим в течение нескольких месяцев, даже применяя временный обходной путь с потоковой передачей HTTP с использованием vlcj, пока не остановились на нашем окончательном подходе.

Мы использовали видеокодер VP8 (WebM). Поскольку оболочка для Java работает только с GStreamer версии 0.10, мы не смогли ее оптимизировать, и пришлось уменьшить размеры видео. В наших тестах использовался Raspberry Pi, но мы планируем использовать устройство MK802 III в окончательной реализации, поскольку оно имеет ту же цену, но большую вычислительную мощность. Окончательная конфигурация кодировки была следующей:

Рисунок 5. Конвейер GStreamer для записи, кодирования и получения видео.

Мы использовали следующий код Java для создания элементов кодировщика VP8.

  Элемент codec =ElementFactory.make ("vp8enc", null); codec.set ("thread", 5); codec.set ("max-keyframe-distance", 20); codec.set ("скорость", 5); Элемент capsDst =ElementFactory.make ("capsfilter", null); capsDst.setCaps (Caps.fromString ("video / x-vp8 profile =(string) 2"));  

На стороне клиента мы использовали следующую конфигурацию:

Рисунок 6. Конвейер GStreamer для установки, декодирования и воспроизведения видео.

Мы использовали следующий код Java для создания элементов декодера VP8.

  String caps ="video / x-vp8, width =(int) 320, height =(int) 240, framerate =15/1"; Element capsSrc =ElementFactory.make (" capsfilter ", null); capsSrc.setCaps (Caps.fromString (caps)); Element queue =ElementFactory.make (" queue2 ", null) Element codec =ElementFactory.make (" vp8dec ", null); Element convert =ElementFactory. make ("ffmpegcolorspace", null);  

Мы также попробовали кодирование JPEG, но это было невозможно для использования в реальном времени из-за большего размера и большего количества пакетов.

Архитектура DDS

Подход "публикация-подписка" был ключевым в нашем решении. Это позволило нам обмениваться данными между множеством клиентов, не беспокоясь о сетевых сокетах или соединениях. Нам просто нужно было указать, какие данные отправлять и получать. Мы создали библиотеку-оболочку DDStheus, чтобы абстрагироваться от использования DDS в нашей системе.

Рисунок 7. Общая DDS-архитектура системы.

Наше окончательное решение состояло из шести программ, разделяющих три темы. Мы использовали разные языки программирования:

  1. Python для работы на низком уровне (HCI) с устройствами Bluetooth
  2. MATLAB / Octave для создания скрипта триангуляции
  3. Java для работы с RTI Connext DDS и графическими пользовательскими интерфейсами.

Нам нужно было знать все значения RSSI в комнате. Мы создали сценарий для настройки ключей Bluetooth и получения информации RSSI. Эти значения были отправлены в программу Java с использованием простого сокетного соединения на той же машине. Приложение Java опубликовало данные в Sensor Data тема. Он отправил идентификатор ребенка (датчик Bluetooth MAC), идентификатор ключа Bluetooth и положение, текущую комнату (как ключ для фильтрации по комнате), значение RSSI и срок действия.

Рисунок 8. Блок-схема программы датчиков.

После того, как камеры записали и закодировали видео, Java-программа Gava отправляет видео через Video Data тема. Он отправил идентификатор камеры в качестве значения ключа для фильтрации потока с помощью ContentFilteredTopic с положением камеры, комнатой, кодированным кадром и информацией о кодеке.

Кроме того, приложение помещало идентификатор камеры, комнату и положение камеры в значение QoS USER_DATA каждого издателя видео. Тогда триангуляционный миникомпьютер мог получить всю информацию о камере в комнате, просто обнаружив издателей. Он также может обнаруживать новые и сломанные камеры в режиме реального времени и обновлять сценарий местоположения, чтобы улучшить алгоритм выбора камеры.

Рисунок 9. Блок-схема видеопрограммы.

На последнем этапе мы обработали данные и записали результат как Дочерние данные тема. Это было сделано сервером комнаты (реализованным с Raspberry Pi или MK802 III), который триангулировал дочернее местоположение и

[1] [2] 下一页

Интернет вещей

  1. Часто задаваемые вопросы из наших веб-семинаров по удаленному доступу
  2. Колледж сообщества добавляет гибкость для студентов, изучающих производство композитных материалов
  3. Клиент из Ливана учится работать на станке с ЧПУ
  4. Наши клиенты из Иордании посетили наш завод
  5. Клиент из Канады посетил наш завод
  6. Наш инженер отправился в Дубай для оказания зарубежной технической поддержки
  7. Клиент из Катара посетил наш завод в апреле 2017 г.
  8. Наш клиент из Бенгалии осматривает наше новое деревообрабатывающее оборудование
  9. Клиенты из Индии приезжали на наш завод, чтобы осмотреть оборудование
  10. Посетители из Кореи на фрезерном станке с ЧПУ