Технический вызов ETSIIT | От студентов колледжей до предпринимателей
Год назад мы начали работу над IV техническим соревнованием ETSIIT (видео). Кто мы? Что ж, нас четверо студентов, изучающих электротехнику и информатику в Университете Гранады в Испании.
Наша команда, Prometheus, выиграла технический конкурс, спонсируемый RTI. Для решения этой задачи командам из четырех или пяти студентов необходимо было создать продукт, позволяющий решить задачу, предложенную внешней компанией. Темой конкурса в этом году была «Распределенная видео система с несколькими агентами».
Мы присоединились к этой задаче, чтобы получить практический опыт. Спустя год после Tech Challenge мы все еще являемся студентами, но теперь мы изучили бизнес-возможности, разработали конкурентоспособный продукт Locaviewer, разработали стратегию его продажи на рынке и создали рабочий прототип в дополнение к курсовой работе, необходимой для наши степени.
Locaviewer
Большинство родителей с детьми в детском саду беспокоятся о здоровье и успеваемости своих детей. Наш продукт, Locaviewer, пытается предоставить родителям возможность отслеживать и видеть своего ребенка в режиме реального времени. В рамках нашего маркетингового плана мы создали рекламный ролик. Наш код выпущен под лицензией MIT на GitHub.
Организация и расписание команды
На выполнение проекта у нас ушло около 250 часов. Каждую неделю мы встречались не менее 4 часов, за исключением последнего месяца, когда мы тратили на проект 20 часов в неделю. Для большей эффективности мы разделились на две команды. Два человека работали над алгоритмом определения местоположения по Bluetooth в помещении. Два других сосредоточены на приложении для захвата, кодирования / декодирования видеопотока и совместного использования его с помощью RTI Connext DDS.
Алгоритм определения местоположения
Первым и наиболее важным шагом нашего решения было определение местонахождения детей в детском саду. Каждый ребенок должен был носить браслет с устройством Bluetooth-датчиком-, который постоянно сообщал о мощности сигнала, полученного устройством Bluetooth -dongle-, размещенным в стенах комнаты. Это значение индикатора уровня принятого сигнала (RSSI) обычно измеряется в децибелах (дБ). Мы определили взаимосвязь между RSSI и расстоянием.


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

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

Мы использовали следующий код 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"));
На стороне клиента мы использовали следующую конфигурацию:

Мы использовали следующий код 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 в нашей системе.

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

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

На последнем этапе мы обработали данные и записали результат как Дочерние данные тема. Это было сделано сервером комнаты (реализованным с Raspberry Pi или MK802 III), который триангулировал дочернее местоположение и
Интернет вещей
- Часто задаваемые вопросы из наших веб-семинаров по удаленному доступу
- Колледж сообщества добавляет гибкость для студентов, изучающих производство композитных материалов
- Клиент из Ливана учится работать на станке с ЧПУ
- Наши клиенты из Иордании посетили наш завод
- Клиент из Канады посетил наш завод
- Наш инженер отправился в Дубай для оказания зарубежной технической поддержки
- Клиент из Катара посетил наш завод в апреле 2017 г.
- Наш клиент из Бенгалии осматривает наше новое деревообрабатывающее оборудование
- Клиенты из Индии приезжали на наш завод, чтобы осмотреть оборудование
- Посетители из Кореи на фрезерном станке с ЧПУ