Робот танк. Распознавание лиц и TTS

Вспомнил свои наработки по OpenCV наработки по распознаванию лиц и решил доработать код Python скрипта под raspberry 3b+ и ее камеру на танке. Также решил озвучить имя опознанного.

Первая задача решилась довольно просто, в описанном в статье гите был скрипт для raspberry, пришлось его лишь слегка доработать под свои нужды

Озвучка происходит при помощи Node Red и Google TTS: сервис озвучивает фразу и обратно отдает ссылку на wav со звуком голоса. Wav воспроизводится на компьютере с веб интерфейсом Node Red.

Флоу для Node Red тут

Код питон тут

 

 

 

Робот-танк. Новости

В связи с карантином получается чуть-чуть больше времени на развлечение с игрушкой. Вкратце опишу, что наделал.

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

https://pastebin.com/0TANSzx1

Но он нуждается в доработке. Танк выглядит так.

IMG_20200421_104519

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

2. Настроил вывод с камеры на веб страницу при помощи программы https://elinux.org/RPi-Cam-Web-Interface

При установке выбрал знакомый мне nginx в качестве вебсервера. Теперь на 80 порту Малины можно любоваться картинкой с камеры

3. Настроил веб интерфейс управления танком с выводом изображения с камеры при помощи Node red Dashboard. Флоу ниже

https://pastebin.com/uuzU8JS9

Снимок

Танк управляется при помощи кнопок на экране, а также при помощи клавиатуры. Картинка просто вырезается с интерфейса RPI Cam при помощи фрейма. Теперь можно сидя за компом управлять движением танка по местности =)

ну и видосик

ezgif.com-optimize

 

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

Робот-танк. Развитие идеи

Потихоньку воплощаю свой проект   Робот-танк. Постановка задачи

Бом лист такой:

  1. Шасси. Ссылка на али

39

 

Дороговато, но зато полный комплект с моторами 12В без допиливания напильником. Правда, китайцы перепутали некоторые детальки и потом пришлось ждать, когда дошлют.

2. Драйвер для двух моторов — шилд для Arduino Uno. Ссылка на али

40

Недорогой и работает.

3. В качестве платы управления выбрана Arduino Uno

4. Для ручного управления выбран беспроводной джойстик для Sony Playstation 2 с али. Ссылка на али

41

Для джойстика есть библиотека для Arduino IDE.

5. Raspberry Pi 3b+ в качестве сервера. На малине установлен Node Red, который пока дублирует управление джойстика, общаясь с Uno по UART.

Чуть позже скину скетч и флоу для Node Red

WhatsApp-Video-2020-01-30-at-21.00.36

 

WhatsApp-Video-2020-01-30-at-20.50.07

Приём данных с датчика LoRa Sensor BME

Наконец-то получил в руки «пироженку», датчик температуры, влажности и давления LoraSensor BME. Сайт проекта http://lorasensor.site/

Датчик передает данные в виде строки с JSON по LoRa на 434Мгц (возможны и другие частоты). Принимать данные можно при помощи любого устройства LoRa, так как любое устройство LoRa является трансивером, т.е. приемопередатчиком. В моем случае таким устройством стала Arduino подобная плата с Ali на базе проца Atmega32u4 и трансивера 433 МГц LoRA RA02 от AI-Thinker. Плата без проблем прошивается из Arduino IDE, предварительно нужно установить библиотеку https://github.com/BSFrance/BSFrance-avr для платы и добавить ее описание.2-433-LoRa32u4-Ra02-LoRa-WiFi.jpg_960x960

Далее необходимо выбрать скетч LoRaReceiverCallback.ino и модифицировать под свои нужды. Мне необходимо было изменить частоту на 434Е6, распиновку выбрать для платы 433 V1.2 и вместо хардварного Serial применять софтовый при помощи библиотеки SoftwareSerial. Данные передаются на пины 10 и 11 и далее на плату NodeMCU (ESP8266) на пины RX и TX. В ESP используется прошивка ESPEASY Mega с плагином Serial2Net. Плата поднивает сервер последовательного порта и транслирует данные на выбранный TCP порт ESP.

https://www.letscontrolit.com/wiki/index.php/Ser2Net

Затем я подключаюсь к выбранному порту ESP при помощи своего нетбука в установленным Node Red.

Ниже ссылка на флоу, где данные забираются из TCP, преобразуются в JSON объект, затем разбираются по метрикам и транслируются в MQTT и Dashboard.

https://pastebin.com/zpeQH59b

 

Моя реализация GyverLamp

Понравился очень этот проект https://alexgyver.ru/gyverlamp/ , а вернее его интерпретация https://github.com/vvip-68/GyverMatrixWiFi

В результате приобрел на али матрицу 16х16 светиков WS2812B, платку NodeMCU, варварски разобрал БП 5В 2A от OrangePi и при помощи паяльника, термопистолета и некоторой сноровки засунул все в корпус от лампы IKEA.

https://yadi.sk/i/uEGrA-VSSuupaw

Получилось симпатично, правда матрицу пришлось обрезать до 13х16, но на результат это мало повлияло.

Передача метеоданных из Node Red на narodmon.ru

Задался целью передачи данных с домашней метеостанции на сервис narodmon.ru.

Так как данные в mqtt я уже давно пробросил, осталось лишь найти способ передать инфу на сервер Народного Монитора. В поиске нашел подходяший флоу для Node Red  https://flows.nodered.org/flow/0053edc0d47781313c4c

Для работы флоу надо установить необходимые ноды из консоли, находясь в папке Node Red (в интерфейсе Node Red установка этих нодов недоступна):

npm install mdef/node-narodmon

Свой флоу я немного доработал под свои нужды:

https://pastebin.com/WPv399L1

Осталось только настроить на сайте единицы измерения для передаваемых переменных.

36

 

Установка и настройка распознавания лиц при помощи OpenCV за полчаса

Неудача при тестировании OpenCV на Raspberry Pi Zero W (офигенные тормоза в работе) заставила искать иные пути. Поставил Ubuntu второй системой на свой старый ноут , накатил pip3 и с его помощью установил OpenCV. Устанавливается все просто:

sudo apt-get -y install python3-pip
pip3 install opencv-contrib-python

Затем устанавливаем пакет face recognition и следуем инструкциям установщика:

pip3 install face_recognition

Также  клонируем гит в заранее созданную папку

git clone https://github.com/ageitgey/face_recognition
И все.

Подробности использования пакета по ссылке https://github.com/ageitgey/face_recognition

Моей целью было распознавание лиц в видеопотоке с вебкамеры ноута. Идем в папку examples, куда положим фотографии образцы нужных лиц. В это папке есть файл кода Python, настроенный  для распознавания Обамы и Байдена

facerec_from_webcam_faster.py

Мы создаем его копию facerec_from_webcam_faster_your_copy.py и редактируем вот эти куски в соответствии с нашими фото-примерами. При необходимости добавления более двух лиц добавляем куски кода.

# Load a sample picture and learn how to recognize it.
obama_image = face_recognition.load_image_file(«obama.jpg»)
obama_face_encoding = face_recognition.face_encodings(obama_image)[0]

# Load a second sample picture and learn how to recognize it.
biden_image = face_recognition.load_image_file(«biden.jpg»)
biden_face_encoding = face_recognition.face_encodings(biden_image)[0]

 

Сохраняем и запускаем скрипт командой

pip3 facerec_from_webcam_faster_your_copy.py

В результате имеем поток с наложением рамки и текста с распознанными лицами

ezgif-1-d682729d1324

Робот-танк. Постановка задачи

Захотелось своего домашнего питомца — робота.

Цели:

  1. Фан
  2. Прокачать скилл в робототехнике и особенно в OpenCV
  3. Надежда на интерес со стороны подрастающего поколения.

Что робот должен уметь делать:

  1. Передвигаться по квартире и улице в хорошую погоду. Управление с помощью пульта ДУ, через приложение Android, через веб интерфейс
  2. Передвигаться самостоятельно в пределах комнаты или иного помещения
  3. Изображать ум и сообразительность: распознавать лица домашних
  4. Распознавать голоса домашних
  5. Отвечать на вопросы (некий функционал Алисы)
  6. Воспроизводить музыку
  7. Коммуницировать с УД: передавать данные телеметрии (уровень заряда батареи), фото, стримить видео. Управляться удаленно через веб интерфейс
  8. Камера  крутится в двух плоскостях
  9. Уметь самостоятельно заряжаться (нужно разработать некую док станцию для робота)
  10. Питание от батарей 18650

 

Пока заказал шасси TS100 на али

https://www.aliexpress.com/item/32827408778.html?spm=a2g0s.9042311.0.0.6cbf4c4dbfM2qZ

 

RedMobile или Node Red на мобиле!

Поставил себе на мобильник сиё чудо. Теперь интеграция мобилки и УД ограничена только фантазией: тут и голосовое управление и передача геоданных, уровня батареи, показаний датчиков и т.д. Существенный минус — программирование в визуальной среде на самой мобилке является актом садомазохизма. Пришлось искать пути решения данной проблемы.

Решением оказалось поднятие сервера VPN на домашнем роутере Keenetic Lite и подключение к нему мобилки. Мобилке присвоил IP из домашней подсети и прокинул порт RedMobile в инет, чтобы была возможность зайти без настройки VPN на чужом (рабочем) компе.

 

Миграция умного дома на нетбук с Virtualbox и Ubuntu

Волею судеб моя raspberry накрылась: после скачка напряжения сгорела карта памяти и сам контроллер. Было решено запустить линукс на нетбуке с win10. Сносить win10 не хотелось, так как на нем работали SMB и FTP сервисы. Вышел из положения установкой Oracle VirtualBox 6.0 и запуском машины Ubuntu 18.04.

Установка не составила большого труда. Ввиду скромности ресурсов нетбука выделил 512мб оперативы. На сегодняшний момент на Ubuntu работают:

Node Red (восстановил все флоу из бэкапов), Domoticz (восстановил вручную), Home Assistant (решил попробовать), локальный MQTT брокер Mosquitto. Работает вполне шустро, пока меня устраивает.

UPD: Контроллер не сгорел, просто плата начинает мигать светиками только после установки bootable SD карты. Сейчас уже на малине стоит линух, думаю, чем ее занять =)