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

Мобильная камера удаленного наблюдения

Компоненты и расходные материалы

SparkFun Arduino Pro Mini 328 - 5 В / 16 МГц
× 1
Шина + двигатель постоянного тока с коробкой передач + кронштейн
× 1
Драйверы двигателя SparkFun Dual H-Bridge L298
× 1
Raspberry Pi 3, модель B
× 1
Модуль камеры Raspberry Pi
× 1

Необходимые инструменты и машины

USB-последовательный адаптер FTDI FT232RL
IDE Arduino
Drill
Пила с тонким полотном
Отвертки
Паяльник (общий)
Кусачки

Об этом проекте

Этот интересный, но сложный проект будет охватывать все:от создания робота до расширенных конфигураций в Linux (raspberry pi) до создания приложения для Android и управления роботом.

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

Сначала мы построим робота из оргстекла, пластиковых листов, двигателей постоянного тока с коробками передач и различных электронных компонентов. Устройство сможет независимо перемещать два передних колеса и сможет использовать свою фару. Затем мы собираемся настроить Raspberry Pi, питающий робота, настроить проект и установить различные зависимости. Затем мы собираемся создать и установить приложение для Android и использовать его для удаленного управления роботом с помощью камеры и Wi-Fi.

Здесь мы будем изучать технологии и концепции :

Платформы разработки:Arduino, Raspberry pi, Android

Электроника:H-мост, транзистор для управления большой нагрузкой, инфракрасные датчики

Linux:использование docker, docker compose, настройка служб с помощью systemctl, потоковая передача видео

Программирование:приложения Android, Python, язык Arduino, последовательная связь, MQTT

Шаг 1. Необходимые действия

Детали:

1. Лист оргстекла

2. Пластиковый лист (здесь также можно использовать лист из оргстекла)

3. Клей

4. Шина + двигатель постоянного тока с коробкой передач + кронштейн. Маленькие гайки и болты, металлические распорки с шестигранной головкой

6. 2 шины любого направленного колеса

7. Маленький светодиодный фонарик (трансформируется в фару)

8. Arduino pro mini 328p

9. 2 инфракрасных датчика препятствий

10. Печатная плата

11. Транзистор НПН (для привода фонарика)

12. Регулятор L7805CV 5 В

13. H-образный мост L298

14. Резистор 220 Ом

15. Штекерный разъем USB

16. Штекерный разъем micro usb

17. Разные провода

18. Регулятор 3 В (для связи между Arduino и Raspberry Pi)

19. Разъемы для печатных плат "папа" и "мама"

20. Выключатель

21. Разъем LiPo, розетка XT-60

22. 2S LiPo аккумулятор емкостью 1300 мАч с разъемом XT-60

23. Аккумулятор 5 В

24. Raspberry Pi 3

25. Карта Raspberry Pi

26. Корпус Raspberry Pi

27. Камера Raspberry Pi

Инструменты: 1. Переходник с USB на последовательный FTDI FT232RL для программирования arduino pro mini

2. IDE Arduino

3. Дрель

4. Пила с мелким полотном

5. Отвертки

6. Паяльник

7. Кусачки

Навыки:

1. Пайка, проверьте это руководство

2. Основы программирования на Arduino, это руководство может быть полезно

3. Конфигурация службы Linux, установка пакета

Шаг 2. Создание платформы для роботов

Робот мы собираемся построить, будет иметь следующие спецификации :

- Он будет иметь тягу на передних колесах двумя отдельно стоящими двигателями постоянного тока

- задние колеса должны иметь возможность вращаться в любом направлении на 360 градусов

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

- сверху будут фонари

- в нем должно быть достаточно места для электроники, аккумуляторов и корпуса raspberry pi с камерой

- необходим дорожный просвет в несколько сантиметров для преодоления небольших препятствий

Не забывайте проверять изображения на наличие важных деталей и советов по сборке.

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

Опорная плита будет 18 x 13 см на опорной плите, двигатели постоянного тока будут крепиться металлическими скобами, гайками и болтами. Н-образный мост будет установлен посередине плиты, обращенной к полу. Задние колеса будут прикреплены с помощью шестигранных металлических проставок 2 см (одна сторона - охватываемая, другая - внутренняя)

Большое отверстие рядом с H-образным мостом необходимо для подключения электроники на верхней стороне.

Верхняя часть Робот состоит из двух пластин L-образной формы:одна будет 12 x 13 см, а другая 6,5 x 13 см. Пластиковые пластины будут склеены. Эти пластины обеспечат крышку для электроники, место для крепления фары и опору для корпуса raspberry pi. Верхняя часть будет прикреплена к нижней части с помощью шестиугольных металлических распорок 6 см)

Шаг 3. Создание электроники

Распиновка (arduino):

Светодиодный фонарик:D3

Левый мотор:ШИМ (D5), EN1, EN2 (A4, A5)

Правый мотор:ШИМ (D6), EN1, EN2 (A3, A2)

Инфракрасные датчики:передний (A0), задний (A1)

Контакты Raspberry Pi:Tx:D11, Rx:D10

Сборка печатной платы, сборка

1. На последнем этапе мы уже разместили H-образный мост на стороне пола робота. Нам также потребуется установить два инфракрасных датчика . один спереди и один сзади. Мы собираемся установить их на шасси с помощью небольшой металлической пластины. Металлическая пластина будет иметь L-образную форму с двумя отверстиями. Используя гайки и болты, мы собираемся установить его на шасси. Датчики будут находиться в середине шасси, один спереди и один сзади.

2. Далее фара Для этого я использовал светодиодный фонарик на 5 вольт. Я вырезал фару, обнажив только «головную» часть, и припаял два провода для ее питания. Затем я приклеил фару к середине верхней части робота и просверлил отверстие возле фары, пропустил кабели через отверстие и припаял к нему небольшой двухпроводной разъем.

3. Сборка корпуса raspberry pi. Вам понадобится raspberry pi, пи-камера, карта памяти не менее 4 ГБ, разъем для пи-камеры. Вставьте карту с установленной последней версией Raspian, затем возьмите разъем камеры pi, аккуратно вставьте его в raspberry pi, затем вставьте в камеру, затем закройте корпус.

Если вы не знаете, как установить операционную систему Raspian, перейдите по этой ссылке.

Для получения дополнительной информации о том, как установить камеру и включить ее, прочтите эту официальную статью.

4. Сборка печатной платы с основными электронными компонентами . Схемы фритзинга прикрепил в формате фзз и в виде картинки. Вы можете использовать его как справочник о том, как собрать электронику.

Этапы пайки:

а. Отрежьте гнездовые разъемы печатной платы, есть два 12-контактных разъема для микроконтроллера и два 5-контактных разъема, есть два 3-контактных разъема для ИК-датчиков, шестиконтактный разъем для H-моста и контактный разъем для связи Raspberry Pi. (земля, TX, RX) б. После того, как все разъемы будут вырезаны, их необходимо припаять на обратной стороне печатной платы

в. Припаиваем коннектор КФ301-2П

г. Припаяйте транзистор NPN и соответствующий резистор к его базе

е. Припаиваем регулятор L7805CV 5V

f. Припаяйте регулятор 3,3 В . от Arduino к линии Raspeberry Pi TX

g. Припаяйте штырьковые контакты к arduino pro mini

ч. Припаяйте все тонкие красные (+), черные (-) и белые (сигнальные) провода в соответствии со схемой fritzig

i. Припаяйте штекер к макетной плате для фонарика

5. Коннекторы

а. Соберите разъем от аккумуляторной батареи USB 5 В к Raspberry Pi и Arduino, вам понадобится штекерный USB-разъем типа A, штекерный разъем micro USB с черным и красным проводами, термоусадочная трубка и разъем между гнездом и гнездом макетной платы. Сначала разрежьте разъем «мама» на «мама» пополам, эти части войдут в отрицательный и положительный штырьковые контакты Arduino. Разъем USB типа A будет передавать питание на Arduino, а также на Raspberry Pi с помощью разъема micro USB. Проверьте изображения на наличие пайки usb-наконечников.

б. Создайте коннектор Чтобы подключить LiPo аккумулятор к плате электроники, вам понадобится LiPo разъем XT-60, красный и черный провода, термоусадочная трубка и небольшой переключатель, способный работать с 10 A. Черный провод будет подключен непосредственно к XT-60. к плате электроники (штекер KF301-2P с винтовым соединителем) красный провод будет подключен через маленький переключатель

в. Подключите два ИК-датчика робота к соответствующим гнездовым разъемам на печатной плате, используя разъемы для макетной платы «мама - папа»

г. Подключите H-образный мост к 6-контактным гнездовым разъемам на печатной плате, используя разъемы «папа-мама» на макетной плате

е. Подключите положительную и отрицательную клеммы двигателя к H-мосту

f. Подключите основной источник питания H-моста к штепсельному разъему KF301-2P на печатной плате

6. Перед тем, как разместить Arduino на печатной плате, дважды проверьте все с помощью лупы и мультиметра

Шаг 4. Код Arduino

Сначала мне нужно ответить на важный вопрос: Почему должен существовать промежуточный уровень Arduino, а не напрямую подключать Pi к электронике?

1. Он более модульный, вы можете повторно использовать робота Arduino в другом проекте без PI

2. В целях безопасности дешевле заменить arduino pro mini за 3 доллара, чем на Pi (35 долларов)

3. Arduino не вмешивается в операционную систему, как пи, поэтому более эффективно реализовать ШИМ-элементы управления для моторов, опрашивая передние и задние датчики несколько раз в секунду

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

5. Отладочную систему проще отлаживать

Итак, я рассмотрел часть «Почему», я немного объясню скетч Arduino. В основном он выполняет две функции:

1. Он получает двигатели и свет команды от последовательной линии и запустить двигатели или переключить свет

Например:

* " М:-25:16; "означает (-25 влево) и (16 мощности), это будет преобразовано в левый мотор 17% и правый мотор 32%, и направление вперед *" M:44:19; "означает (44 вправо) и (19 мощность) это будет преобразовано в:левый двигатель 38%, правый двигатель 5% и направление вперед

* " L:1; "означает огни и" L:0 "свет выключен

2. Он опрашивает инфракрасные датчики сзади и спереди робота и отправляет данные о расстояниях через последовательную линию

Сначала вам нужно скачать и установить эту библиотеку:

Основной код находится в репозитории github здесь, или вы можете скопировать и вставить его снизу.

Загрузите код в Arduino с помощью адаптера FTDI. Теперь вы можете дать роботу команды, чтобы увидеть, как он работает, для этого просто подключите вторую последовательную линию и отправьте через нее двигатель или свет. Один из способов сделать это - использовать модуль Bluetooth, например HC-05, и подключить его к телефону с помощью приложения Bluetooth. Затем дайте ему последовательные команды, такие как "L:1"

  // исходный код TextMotorCommandsInterpretter:"https://github.com/danionescu0/arduino/tree/master/libraries/TextMotorCommandsInterpretter" #include  #include  0) {currentCommand =masterComm.readString (); processCommand (); } если (inMotion &&millis () - lastCheckedTime> maxDurationForMottorCommand) {stopMotors (); } если (millis () - lastTransmitTime> TransmitingInterval) {lastTransmitTime =millis (); masterComm.print (getObstacleData ()); Serial.print (analogRead (BACK_DISTANCE_SENSOR)); Serial.print ("---"); Serial.println (getObstacleData ()); } / * ДЛЯ ОТЛАДКИ motorCommandsInterpretter.analizeText ("M:-14:40;"); Serial.write ("Left =="); Serial.println (motorCommandsInterpretter.getPercentLeft ()); Serial.write ("Right =="); Serial.println (motorCommandsInterpretter.getPercentRight ()); delay (10000); * /} String getObstacleData () {int frontDistance =analogRead (FRONT_DISTANCE_SENSOR); int backDistace =analogRead (BACK_DISTANCE_SENSOR); frontDistance =map (frontDistance, maxObstacleDetection, minObstacleDetection, 0, 10); backDistace =map (backDistace, maxObstacleDetection, minObstacleDetection, 0, 10); return String ("F =" + String (frontDistance) + ":B =" + String (backDistace) + ";"); } void processCommand () {переключатель (currentCommand.charAt (0)) {case (MOTOR_COMMAND):steerCar (); ломать; case (LIGHT_COMMAND):toggleLight (currentCommand.charAt (2)); ломать; }} void steerCar () {motorCommandsInterpretter.analizeText (currentCommand); float percentLeftMotor =motorCommandsInterpretter.getPercentLeft (); float percentRightMotor =motorCommandsInterpretter.getPercentRight (); Serial.write ("Left ="); Serial.println (percentLeftMotor); Serial.write ("Right ="); Serial.println (percentRightMotor); setMotorsDirection (motorCommandsInterpretter.getDirection ()); analogWrite (LEFT_MOTOR_PWM_PIN, percentLeftMotor * maxPwmValue); analogWrite (RIGHT_MOTOR_PWM_PIN, percentRightMotor * maxPwmValue); inMotion =true; lastCheckedTime =миллис (); } void setMotorsDirection (логическое значение вперед) {если (вперед) {digitalWrite (LEFT_MOTOR_EN1_PIN, HIGH); digitalWrite (LEFT_MOTOR_EN2_PIN, LOW); digitalWrite (RIGHT_MOTOR_EN1_PIN, HIGH); digitalWrite (RIGHT_MOTOR_EN2_PIN, LOW); } еще {digitalWrite (LEFT_MOTOR_EN1_PIN, LOW); digitalWrite (LEFT_MOTOR_EN2_PIN, HIGH); digitalWrite (RIGHT_MOTOR_EN1_PIN, LOW); digitalWrite (RIGHT_MOTOR_EN2_PIN, HIGH); }} void stopMotors () {Serial.println ("Остановка двигателей"); analogWrite (LEFT_MOTOR_PWM_PIN, 0); analogWrite (RIGHT_MOTOR_PWM_PIN, 0); inMotion =false; } void toggleLight (char command) {Serial.println ("Переключить свет"); если (команда =='1') {digitalWrite (FLASH_PIN, HIGH); } else {digitalWrite (FLASH_PIN, LOW); }}  

Шаг 5. Установка и настройка проекта Raspberry Pi и зависимостей

Как это работает:

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

а. Приложение для Android показывает потоковую передачу uv4l внутри веб-просмотра. Процесс uv4l запускается на raspberry pi, захватывает видеовход с камеры и передает его в потоковом режиме. Это отличный инструмент с множеством функций

б. Использование элементов управления внутри приложения для Android:индикаторы и команды двигателей отправляются на сервер MQTT

в. Сервер python внутри контейнера докеров на raspberry pi слушает команды MQTT и передает их через последовательный интерфейс в Arduino. Плата Arduino управляет двигателями и освещением.

г. Arduino определяет расстояния спереди и сзади робота и отправляет данные через последовательный интерфейс на сервер python, питон пересылает их в MQTT, и они принимаются интерфейсом Android и отображаются пользователю

Первый Вам понадобится полностью установленный и настроенный Raspbian на Raspberry Pi, а камера должна быть физически подключена и настроена. Кроме того, вся конфигурация будет производиться с использованием ssh, так что это хорошо, если вы настроите его.

Мы не можем здесь рассказать обо всех основных вещах, но при необходимости попробуйте воспользоваться этими ссылками:

Если вы не знаете, как установить операционную систему Raspbian, перейдите по этой ссылке. Для получения дополнительной информации о том, как установить камеру и включить ее, прочтите эту официальную статью.

Чтобы узнать, как настроить ssh на Raspbian, проверьте это.

Если вы хотите управлять своим роботом с помощью приложения для Android за пределами Wi-Fi, вам следует подумать о переадресации портов на своем маршрутизаторе Wi-Fi, в противном случае вы будете ограничены использованием локальных IP-адресов внутри вашего Wi-Fi.

Чтобы узнать ваш локальный IP-адрес на Raspberry Pi, используйте ifconfig:

  ifconfig ......... eth0 Link encap:Ethernet HWaddr b8:27:eb:16:e7:ff inet6 addr:fe80 ::ff00:f22f:9258:b92b / 64 Область применения:Link UP BROADCAST MULTICAST MTU:1500 Метрика:1 RX пакеты:0 ошибок:0 отброшено:0 переполнений:0 кадров:0 TX пакетов:0 ошибок:0 сброшено:0 переполнений:0 несущая:0 коллизий:0 txqueuelen:1000 байтов RX :0 (0,0 Б) Байты передачи:0 (0,0 Б) ........ wlan0 Link encap:Ethernet HWaddr 00:c1:41:00:10:f6 inet addr:192.168.0.102 Bcast:192.168.0.255 Маска:255.255.255.0 inet6 адрес:fe80 ::e1f4:5112:9cb2:3839/64 Область:Link UP ТРАНСЛЯЦИЯ ВЫПОЛНЯЕТСЯ MULTICAST MTU:1500 Метрика:1 RX пакеты:1678396 ошибок:0 отброшено:0 переполнений:0 кадров:0 TX пакетов:381859 ошибок:0 отброшено:0 переполнений:0 носитель:0 коллизий:0 txqueuelen:1000 байтов RX:259428527 (247,4 МБ) байтов TX:187573084 (178,8 МБ) .....  

Нас интересует inet-адрес wlan0, в нашем случае "192.168.0.102"

Перенаправляемые порты (по умолчанию):9090 для uv4l и 1883 для mosquitto. Вы можете перенаправить эти порты на те же выходные порты, если они не заблокированы брандмауэром интернет-провайдера или некоторыми другими портами.

Перенаправление портов - это что-то, что делается по-разному на каждом маршрутизаторе, вот несколько руководств:это, и вы также можете попробовать поискать в Google " перенаправление портов your_router_model ", чтобы увидеть более релевантные результаты.

Предварительные требования:

а. установить git из командной строки

б. клонировать проект github в домашнюю папку:

Местоположение папки важно, потому что в docker-compose.yml местоположение жестко закодировано как:/ home / pi / robot-camera-platform:/ root / debug Если вам нужно изменить местоположение, измените значение в docker-compose тоже

  git clone https://github.com/danionescu0/robot-camera-platform.git  

c. отключите последовательную консоль пи, если вы не знаете, как это сделать, проверьте эту ссылку

Установить потоковую передачу Uv4l:

  chmod + x uv4l / install.sh chmod + x uv4l / start.sh sh ./uv4l/install.sh  

Если это не удается или вам нужно узнать больше о uv4l, посмотрите это руководство.

Конфигурация:

а. отредактировав uv4l / start.sh вы можете настроить следующие параметры потокового видео:пароль, порт, частоту кадров, с, высоту, поворот и некоторые другие второстепенные аспекты

б. отредактируйте config.py и замените пароль с вашим собственным паролем, который вы установили на сервере mosquitto

в. отредактируйте docker-container / mosquitto / Dockerfile и замените эту строку

  ВЫПОЛНИТЬ mosquitto_passwd -b / etc / mosquitto / pwfile user your_password  

с вашим собственным пользователем и паролем от Mosquitto

г. отредактируйте config.py и замените последовательный порт и скорость передачи с вашей собственной, я рекомендую вам сохранить скорость передачи. Если вы хотите изменить его, не забудьте отредактировать его и в скетче Arduino

Проверьте установку uv4lа. Запустить:

  sh ./uv4l/start.sh  

б. Протестируйте его в браузере по адресу:http:// your_ip:9090 / stream

в. Прекрати

  sudo pkill uv4l  

Установите docker и docker-compose

Об установке докера:https://www.raspberrypi.org/blog/docker-comes-to -...

Об установке docker-compose:https://www.raspberrypi.org/blog/docker-comes-to -...

Автозапуск служб при перезагрузке / запуске

By making the services auto start you'll eliminate the need of manually login through ssh and then activate all the services by hand, we're going to do this using systemctl.

a. Copy the files from systemctl folder in systemctl folder to /etc/systemd/system/

b. Enable services

sudo systemctl enable robot-camera.service sudo systemctl enable robot-camera-video.service  

c. Reboot

d. Optional, check status:

sudo systemctl status robot-camera.service sudo systemctl status robot-camera-video.service  

Step 6:Configuring and Building the Android Application

We're all most done, in this step we're going to install the android application. These are all the prerequisites:

1. Clone the github project:

git clone https://github.com/danionescu0/android-robot-camera  

The next steps involves setting up your environment, i'll just enumerate them and give a link to a specialized tutorial, in case you don't know how to do it.

2. Enable developer options on your android phone. You can find out more here:https://developer.android.com/studio/debug/dev-opt...

3. Download and install Android studio:https://developer.android.com/studio/index.html?ut... and this https://www.javaworld.com/article/3095406/android/...

4. Import project :https://developer.android.com/studio/intro/migrate...

Now we're going to configure the the streaming and MQTT credentials:

5. Edit ./app/src/main/values/passwords.xml and configure MQTT and streaming

The MQTT host should be something like:1883

The streaming host should be something like:

6. Upload and run the application

Step 7:Using the Robot and Debugging

Using the app

The application has only a main screen, in the left of the screen the streamming image is displayed. On the right

there are the controls. The main control is a steering wheel, touch the steering wheel in the direction you wish the robot to move. Below the steering wheel there is a headlight button, touch it to toggle the light.

In the top right corner there is a text like :"- Batt Connected".

* First dash means no obstacles, if there is an obstacle in front or in the back of the robot it will be signaled with a small arrow pointing in front or in the back.

* The "Batt" status is not implemented yet.

* "Connected" means that MQTT server is connected so the robot can be used, the other possible value is "Disconnected"

Debugging can be done on multiple layers:

1. On the arduino layer

- Connect the FTDI adapter to the second serial line to the laptop (RX to pin 11 and TX to pin 10) and issue motor commands and light commands to see if the robot responds to these commands

- Double check the connections, if the motors are moving backwards reverse the both motor wires, if one motor is moving backwards reverse the it's wires

- Check if the arduino is connected properly to the H-bridge, check this link for more information

2. On the rasberry pi layer

- Check docker is running the two containers (mosquitto and python server)

pi@raspberrypi:~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 473a56da2230 dockercontainer_python-server "python /root/debu..." 9 months ago Up 4 hours dockercontainer_python-server_1 3e0b1933d310 robot-camera-mosquitto "/usr/bin/entry.sh..." 9 months ago Up 4 hours 0.0.0.0:1883->1883/tcp dockercontainer_mosquitto_1  

- Check the processes are running on specified ports, you should look for 9090 (streamming) and 1883 (mosquitto)

pi@raspberrypi:~ $ netstat -nltp (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp6 0 0 :::1883 :::* LISTEN - tcp6 0 0 :::5900 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN -  

- Check the serial port exists (it's the correct one) and it's specified in the project config.py

pi@raspberrypi:~ $ ls -l /dev/ttyS0 crw-rw---- 1 root dialout 4, 64 Jan 14 19:59 /dev/ttyS0  

- Stop the docker process and manually connect to serial using picocom

Then issue motor and light commands directly to see if the robot responds

sudo systemctl start robot-camera.service picocom -b 9600 /dev/ttyS0 # now issue motor and light commands to test the robot  

- Check if the serial console is deactivated on the raspberry pi

- Check the streaming and MQTT are accessible outside the raspberry pi suing a mosquitto client (for MQTT) and checking the streaming in a web browser)

3. Android application layer

- Check all the necessary steps to enable the phone into debugging mode (check this out)

- Make sure you've set up the passwords and endpoints correctly in the passwords.xml

- Check the streaming and MQTT are accessible outside the raspberry pi suing a mosquitto client (for MQTT) and checking the streaming in a web browser)

- See the top right corner of the app and check for "Connected"

- Use the android debugger to check for errors

Step 8:Other Use Cases, Extending the Code

Another use case is a object following robot .The robot will follow an object of a specific color and size threshold

Check above for the video.

Because this is out of scope of this tutorial i'll just give you some hints:

First install dependencies using pip, the installation process will be quite slow

sudo pip3 install -r /home/pi/robot-camera-platform/navigation/requirements.txt 

- make sure python 3.x is installed though

- In navigation/config_navigation.py you'll find:

 hsv_bounds =( (24, 86, 6), (77, 255, 255) ) object_size_threshold =(10, 100)  

HSV means hue saturation value, and for our color object detection to work it has a lower and an upper bound, our object color will have to be in this range to be detected. Here you can find a visual HSV object threshold detector.

Object size threshold means the smallest and the highest object radius size (in percents from width) which will be considered a detection.

- install and configure VNC (more information of how to install VNC here)

- Run the object tracking script in VNC graphical interface in a terminal. This will enable you to view the video, with a circle drawn over it. The circle means that the object has been detected.

python3 object_tracking.py colored-object --show-video  

OR Run the object tracking script with no video output:

python3 object_tracking.py colored-object 

I think the main advantage of this platform is versatility , it can be adapted easily to other interesting usages, some of my ideas:

- Following a person by face recognition

- Patrolling and reporting movement

- Replace the wifi with a 3G modem and the robot can be controlled outside, maybe exploring dangerous zones

This being a very complex project i assume that there will be errors, i will appreciate if you ask me anything in the comments area.

If you like my project please my youtube channel for more interesting stuff.

Код

Android application
https://github.com/danionescu0/android-robot-camera
Main repository for arduino, python code
https://github.com/danionescu0/robot-camera-platform

Схема

sketch_nWf7cZeUWL.fzz
Main repository for arduino, python code
The main repositoryhttps://github.com/danionescu0/robot-camera-platform
Android application
https://github.com/danionescu0/android-robot-camera

Производственный процесс

  1. Камера
  2. Объектив камеры
  3. MrRobot - мобильное приложение Ubuntu с поддержкой робототехники (задействованы Raspberry Pi и arduino)
  4. Робот для наблюдения Roomberry:Roomba + Pi Zero + камера
  5. Моторизованный слайдер камеры Arduino с управлением через Bluetooth
  6. Удовольствие от гироскопа с кольцом NeoPixel
  7. Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android
  8. Игровой контроллер Arduino
  9. Pixie:наручные часы NeoPixel на базе Arduino
  10. Распознавание и синтез речи с помощью Arduino