Як було зроблено проект - M-Research/OpenCVLunohod GitHub Wiki

Мета проекту

Створити рухому платформу, що буде об’іжджати перешкоди. Технічна база - плата Adruino з датчиком перешкод і моторами, планшет Nexus 7 з OpenCV Android Tegra. Камера планшета має оброблювати відеопотік і визначати перешкоди, давати сигнал-рішення платі щодо повороту.

Встановлення середовища розробки під Ubuntu

Багато підводних каменів. Встановлюємо компоненти окремо

  • OpenCV 2.4.5 Android SDK
  • Android SDK with 4.2.2
  • Android NDK
  • Eclipse (Juno or Indigo)
  • Eclipse ADT Plugin
  • Eclipse C++ Dev Plugins

Додавання проекту в workspace

З папки OpenCV SDK з папки sdk імпортуємо проект. Треба імпортувати проект OpenCV Library як бібліотечний, і семпли. В папці семплів створюємо окрему папку і там розгортаємо скачаний репозиторій. Заходимо у всі проекти, Properties->C++ Build i там замінюємо імена з**.cmd** на імена скриптів без ціього розширення. Далі в проектах на вкладках **Properties-> Android **Відмічаємо існуючу в Вас встановлену версію Android API. Проект семплів, як і даний, має включати проект OpenCV як бібліотечний. На всякий випадок зробити Project-Clean на всіх проектах. Ще, якщо будуть проблеми, одразу після імпорту проектів залізти з консолі в папки і відалити файл .settings

Основні моменти в коді

За основу обробки відео було використано статтю звідси http://www.codeproject.com/Articles/339206/An-Introduction-to-OpenCV-Displaying-and-Manipulat Основні кроки в методі onCameraFrame:

  • Віднімання двух фреймів, знаходження різниці absdiff
  • Побудова threshold
  • Знаходження контурів
  • Описування контурів прямокутниками
  • Знаходження максимальних прямокутників за площею і їх центру
  • Знаходження середнього центру руху на кадрі
  • Акумулятор для визначення повороту наліво або направо, залежно від знаходження центрів руху в лівій або правій частині екрану
  • Емуляція навігації голосом та текстом на екрані

Проблеми такого рішення

  • Поки не приймається рішень з повороту при наближенні перешкоди прямо. Передбачається комбінування з ультразвуковим датчиком на платі
  • Багато зовнішніх "шумів" від руху сцени і віддалених предметів. Можна спробувати налаштувати параметри threshold і граничних площ прямокутників контуру. Також можна зважити середній центр руху площами відповідних контурів.

Подальша інтеграція з платою

За допомогою бібліотеки http://code.google.com/p/usb-serial-for-android/. Через звичайний потік вводу-виводу можна розробити найпростіший протокол щодо руху вліво-вправо рухомої платформи залежно від рішень, прийнятих планшетом з камерою. Необхідно розпаяти кабель usb-розетка - usb-розетка, щоб під’єднати плату до планшета.