CxemCAR 2 — управление роботом и просмотр real-time видео с Android-смартфона

В интернете существует масса статей по использованию мобильных платформ совестно с IP или Web-камерой. Но в большинстве из них используются ноутбук, либо внутренности маршрутизатора с перепрошивкой на Open-WRT или DD-WRT. Просмотр видео и управление платформой в таких проектах как правило осуществляется с компьютера/ноутбука. В данном проекте реализована система управления мобильной гусеничной платформой с любого Android-устройства (планшет, смартфон и т.п.), а также просмотр real-time видео и управление поворотом IP-камеры. Вся электронная начинка осталась практически в неизменном видео с первого проекта CxemCAR, изменения коснулись Android-приложения для работы с IP камерой.

Проект построен на платформе Arduino. Управление гусеничной платформой осуществляется по Bluetooth каналу. В качестве IP камеры я использовал популярную модель Foscam FI8918, процесс покупки которой я подробно расписывал в данной статье. На сегодняшний день (август 2013) оригинальная Foscam FI8918 на AliExpress стоит 90$. Появилось много аналогов по цене 30-40$, с такими же функциями, но не известно управляются ли они также сриптами (об этом чуть ниже) через web.

Как видно на вышеприведенном рисунке, взаимодействие между смартфоном и гусеничной платформой осуществляется напрямую по Bluetooth-каналу, а взаимодействие с камерой осуществляется по Wi-Fi каналу, но через маршрутизатор. И это большой минус — т.к. без маршрутизатора все операции с камерой работать не будут, к примеру на улице или где-нибудь за городом. Я пытался сделать прямое управление через Wi-Fi, включив на Android’е режим Host Wi-Fi, но ничего не получилось, до камеры не удается достучаться, но работать в этом направлении продолжаю, и возможно что в дальнейшем получиться сделать прямое взаимодействие без маршрутизатора. Есть предположение, что для этого необходима камера с поддержкой технологии W-Fi Direct.

IP-камера

IP-камера Foscam FI8918 выдает видеопоток в формате MJPEG (Motion JPEG), в котором каждый кадр сжимается при помощи популярного алгоритма сжатия изображения JPEG. При разрешении потока 320×240, количество кадров в секунду (FPS) составляет 25-30. Если разрешение видеопотока увеличить до 640х480, то FPS падает примерно в 2 раза. Для Android на просторах сети интернет был найден соответствующий MJPEG класс для обработки и вывода данных в activity приложения.

Модель FI8918 имеет функцию вращения и наклона камеры через web-интерфейс. В данном проекте эта функция также реализована. Функциональные возможности камер Foscam хорошо документированы (см. файл IPCAM CGI SDK V1.7). Просмотр потока, управление, настройки осуществляются через CGI скрипты. Просмотр потока осуществляется путем вызова videostream.cgi с соответствующими параметрами, например:
http://192.168.1.10:8081/videostream.cgi?user=cxemcar&pwd=cxemcar&resolution=8
где user — имя пользователя, pwd — пароль, resolution — разрешение видеопотока (8 — 320×240, 16 — 640×480)

Для управления движением камерой (функция pan/tilt) используется скрипт decoder_control.cgi, а параметром command задаются команды:
0 — движение камеры вверх
1 — остановка движения вверх
2 — движение вниз
3 — остановка движения вниз
4 — поворот влево
5 — остановка поворота влево
6 — поворот вправо
7 — остановка поворота вправо
25 — установка по центру
26 — вертикальное «патрулирование»
27 — остановка вертикального «патрулирования»
28 — горизонтальное «патрулирование»
29 — остановка горизонтального «патрулирования»

В Android приложении я использовал обращение лишь к этим двум скриптам, но как уже сказано выше через соответствующие CGI скрипты можно делать очень многое (подробнее смотрите прикрепленный внизу PDF файлик IPCAM CGI SDK V1_7.pdf), например:
get_camera_params.cgi — получить текущие параметры камеры. Скрипт возвращает разрешение, яркость, контрастность, режим 50/60 Гц, режим Flip.
camera_control.cgi — установка параметров камеры.
reboot.cgi — перезагрузка камеры.
restore_factory.cgi — восстановление заводских настроек.
get_params.cgi — информация о камере и многих параметров.
set_datetime.cgi — установка времени и даты.
set_network.cgi — установка сетевых настроек.
set_wifi.cgi — установка настроек Wi-Fi сети.
set_ddns.cgi — установка настроек Dynamic DNS.
set_ftp.cgi — установка настроек FTP соединения.
set_mail.cgi — установка настроек для работы MAIL.
И др.

Камера настроена на работу со статическим IP-адресом. Чтобы к ней можно было обратиться из приложения. Хотя Foscam поддерживает и DDNS сервисы, поэтому можно использовать и динамический IP при условии использования Dynamic DNS.

Шасси

Т.к. IP-камера представляет из себя довольно таки массивную конструкцию, то и платформа должна быть соответствующих размеров. В качестве шасси, я использовал широко распространенную гусеничную платформу Rover 5. Стоимость на это шасси варьируется в зависимости от количества двигателей (2 или 4), а также наличия энкодеров.

Платформа поставляется без верхней крышки, в точно таком же виде, как на фото выше.

Крышка была вырезана из рекламного пластика и установлена на небольших стойках, чтобы внутри разместить аккумуляторы для питания камеры и двигателей, отдельные аккумуляторы для питания Arduino, а также преобразователь напряжения 5В для питания камеры.

Вид с установленной крышкой:

В платформе Rover 5 было вырезано отверстие для установки сдвоенного 3-хпозиционного переключателя питания/зарядки.

Аккумуляторы и плата преобразователя были расположены внутри корпуса шасси. В крышке были вырезаны отверстия для вывода проводов к плате управления, камере и драйверу двигателей. Для зарядки аккумуляторов были выведены 2 разъема.

 

IP-камера, контроллер Arduino, Bluetooth-модуль и драйвер двигателей были установлены на крышку шасси.

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

Аппаратная часть

Эта часть проекта практически полностью идентична CxemCAR 1.0 на Arduino. Единственное, что добавилась камера и т.к. она требует 5В источника постоянного тока, то был добавлен step-down преобразователь напряжения на микросхеме LM2596.

Схема же управления шасси осталась неизменной:

В качестве контроллера используется Arduino Nano V3. В качестве Bluetooth модуля используется HC-06. А для управления двигателем применена плата с микросхемой L298N.

Если будете питать плату Arduino от 4В и выше, то между выводами RX (модуля HC-06) и TX (платы Arduino) необходимо поставить делитель напряжения, т.к. логические уровни у модуля 3.3В. А ещё лучше использовать специализированную микросхему, например MAX232.

Скетч для Arduino остался таким же, и выложен на GitHub’е (ссылка внизу страницы).

Программная часть

Весь софт написан в свободно-распространяемой среде Eclipse. Структура проекта:

Проект содержит 4 активити: главное, о программе, работа с Flash и основное активити для управления шасси и просмотра видео.

За работу с MJPEG потоком отвечает 2 класса: MjpegInputStream и MjpegView.

Проект на 2-языках: английский и русский. В папке ресурсов для русского языка задействуются 2 вложенные папки: values-ru и xml-ru. В папках values и xml по умолчанию содержаться английские версии этих файлов.

Приложение содержит меню с настройками:

Настройки подробно расписывать не буду, тут думаю все понятно.

Окно управления выглядит следующим образом:

Слева расположены кнопки управления платформой, по центру отображается видеопоток с камеры, а справа расположены кнопки управления камерой.

При наличии навыков программирования на ПК, можно реализовать управление гусеничной платформой с компьютера, через интернет и др. способами.

Проект для Android (GitHub)
Проект для Arduino (GitHub)

Тема поддержки на форуме


Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.