1604
Домашній автономний літаючий апарат від Android смартфона

Розважатися з автономною літаючою машиною весело, але це ще більше задоволення для створення! Ця стаття призначена для тих, хто хоче розвивати свій власний смарт-коптер і містить набір простих інструкцій про те, як досягти результатів за допомогою смартфона в Android, OpenCV, C++ і Java. Ну, якщо ви можете пройти перші кроки і хочете додатково поліпшити апарат – в кінці повідомлення ви знайдете корисне посилання і харчування для думки.
Для того, щоб коптер зміг самостійно літати, необхідно включити всі необхідні датчики, достатню обчислювальну потужність і засоби зв'язку. Це не так багато, але практично всі доступні комерційні моделі не роблять. Є, наприклад, моделі руху яких визначається датчиками, розташованими в приміщенні. Ще один варіант GPS-контролю. GPS-приймач дешевий і простий у використанні, але має великі затримки в приході даних і не є досить точним. Не про це добре для нас.
Щоб здійснити назву «інтелента», ваш коптер повинен мати можливість сприймати і проаналізувати навколишню реальність. Для цього потрібен не тільки потужний процесор, місткий акумулятор, якісне камеру і достатній комплект датчиків, але і швидкі пристрої зв'язку. І звичайно, всі системи повинні бути добре керованими і просто програмованими. Отже, ми приїжджаємо до ідеї: не реалізовувати копіювальний центр мозку на основі смартфона? Зручно використовувати пристрій на основі Android, оскільки під цією ОС є зручні інструменти розробки та компоненти програмного забезпечення, такі як Intel Integrated Performance Primitives (Intel IPP) або OpenCV. У сучасному смартфоні є всі апаратні компоненти, які нам потрібно, тому немає необхідності відновити колесо.
Отже, обраний контрольний центр, тепер потрібно підключити двигуни до нього. Ми обрали серво контролер Pololu Maestro близько $5, він підключений через USB і має інтерфейс Bluetooth. За допомогою цієї картки будуть керуватися стандартні сервоприводи. За допомогою серво контролера Pololu Maestro і смартфону, це порівняно легко перетворити керований літак в автономний.

03039, Україна
За допомогою декількох ліній коду і стандартних інструментів для Андроїд, ми керуємо серводвигунами і тим самим рухом коптера. Більше рядків коду, і ми будемо мати доступ до GPS, камери та передачі даних через мережу.
Контроль дзвінків Трансфер з USBDeviceConnection:
імпорт android.hardware.usb.UsbDeviceConnection; // ... приватний USBDeviceConnection підключення; // ... підключення.controlTransfer(0x40, команда, значення, канал, null, 0, 5000);
Контролер дозволяє контролювати сервоприводи, встановити кінцеву позицію, швидкість і прискорення – все, що потрібно для плавного руху. Цей аргумент може прийняти один з трьох значень:
публічний статичний кінцевий int USB_SET_SETTING = 0x85; публічний статичний кінцевий int USB_SET_SPEED = 0x87; публічний статичний кінцевий int USB_SET_ACCELERATION = 0x89;
Виберіть відповідні значення та передайте їх до потрібного серводвигуна за допомогою аргументу каналу. Посилання на повне джерело коду і конфігурації доступу USB в додатку, що проявляється в кінці повідомлення.Особливості квадрокоптера Поки все буде добре. Апаратні компоненти з'єднуються між собою без проблем, програмування легко, оскільки все реалізовано на Android. Однак існує одна особливість, пов'язана з будівництвом квадрокоптера. На відміну від простих моделей, таких як автомобіль або літак, квадрокоптер повинен постійно стежити за його стабільністю. Саме тому модуль стабілізації є необхідним компонентом. Звичайно, ви можете зробити стабілізатор програмне забезпечення, написавши купу коду в C++ або Java. Але набагато простіше купити за кілька доларів стабілізатором картки, підключених безпосередньо до Pololu і контролювати чотири сервоприводи пристрою. Все інше можна зробити з простими командами, такими як висота ±, швидкість ± /, нахил ± і напрямок ±.
Якщо ви створюєте квадрокоптер, будьте на увазі: ця карта зробить ваше життя набагато простіше. Все, що ви повинні зробити, це калібрувати, а потім забути про це.
Отже, в результаті першого етапу проектування автономного квадрокоптера ми маємо наступні апаратні мережі:
смартфон <> micro USB-USB адаптер <> USB-mini кабель USB <> Карта Pololu Maestro <> 4 кабелі JR <> стабілізація картки <> кабелі JR <> сервоприводи <> двигуни








У разі простого пристрою ланцюг буде коротшим:
Смартфон <> micro USB-USB адаптер <> USB-mini USB-кабель <> Pololu Maestro карта <> кабелі JR <> сервоприводи <> двигуни



999 р.


Крім того, ви можете встановити інші актуатори на вашому льотному пристрої, наприклад, для клаптиків або приземних передач. Карта Pololu Maestro має підтримку для управління до 24 дисків – для нашого проекту, ймовірно, навіть надпотужний.
Базова платформа встановлена. Тепер час облаштувати наш пристрій з баченням.
Очевидно, що без комп’ютерної системи зору не можна вважати інтелектуальним пристроєм. Для цього ми використовуємо можливості OpenCV.
OpenCV - це бібліотека з відкритим вихідним кодом, яка підлягає безлімітному впровадженню систем комп'ютерного зору та віртуальної реальності. Спочатку розроблений Intel, тепер доступний для різних апаратних платформ і операційних систем.
Для практики намагатися розпізнати простий знак у вигляді кола і сидіти перед цим знаком на певній відстані. Для спрощення завдання тесту перемістіть смартфон вручну.

OpenCV не є бібліотекою, доступним для Java під Android. EnglishDeutschPусский简体中文中國傳統EspañolالعربيةFrançaisελληνικάDanskАнглійскаябългарскиCatalàČeskýEestiSuomiGaeilgeहिन्दीHrvatskiMagyarIndonesiaIcelandicItalianoעברי日本の한국의LietuvosLatvijasмакедонскиMalayMaltiNederlandsNorskPolskiPortuguêsRomânescSlovenskýSlovenskiShqiptarCрпскиSvenskaไทยTürkçeYкраїнськийTiếng việtייִדישKiswahili Захоплення зображень і візуалізація буде виконано в Java, для взаємодії між Java і C++ ми будемо використовувати JNI. Ми повинні встановити Android NDK і Android SDK, створити новий проект Colls, додати компонент C. C++ та змініть властивості проекту, щоб використовувати бібліотеку OpenCV, як показано на скріншотах нижче:




В результаті ваш проект буде:
Головний Java-файл - Src/MainActivity. скачати
Файл XML Markup "Res/layout/action_main.xml" і проявляється
Два файла "Jni/Android.mk" і "Jni/Application.mk"
Код cpp "Jni/ComputerVision_jni.cpp" і заголовок "Jni/ComputerVision_jni.h"
На відміну від Java, C++ необхідно скомпільувати для конкретного процесора. Налаштування здійснюється шляхом редагування змінної APP_ABI в додатку. mk файл. Якщо у вас є смартфон Intel, то правильне значення - x86. NDK зробить все самим.
OpenCV є бібліотекою, яка використовується нескінченною кількістю додатків Android, і їх версія бібліотеки може бути використана по-різному. Як розробник, ви можете зв'язати свій додаток до конкретної версії OpenCV, але є кращим варіантом. Використовуйте менеджер залежностей, який називається OpenCV Manager. Це додаток Android, який визначає вам потрібно OpenCV прямо зараз і завантажує точно версію, яку вам потрібно.
Ми хочемо виявляти кола в OpenCV, визначити свій центр і радіус, і надати інструкції оператора смартфона, щоб досягти центрального кола потрібного розміру. Наступний Java-код приймає зображення з камери за допомогою Java API для Андроїд, викликає функцію в C++ через JNI, і прикріплює точилка для зображення в пам'яті. Код C++ обробляє зображення для виявлення кола. Java називається знову для відображення виявлених кола і коментарів.
Java код:
... // захоплення зображень з камери імпорт org.opencv.Android.CameraBridgeViewBase; // load OpenCV рідна залежність імпорт org.opencv. Українська OpenCVLoader; ... громадська неїда наResume() { super.onResume(); // OpenCV завантаження з викликом // не типовий код, специфічний для OpenCV OpenCVLoader.initAsync(OpenCVLoader). OpenCV_VERSION_2_4_6, це, mLoaderCallback); } ... // Після створення посилання менеджера OpenCV // ми можемо завантажити динамічну бібліотеку System.loadLibrary("jni_part"); ...
C++... // типовий для JNI : Ім'я класу Java // точилка для зображення RGB як аргумент JNIEXPORT int JNICALL JavaScript licenses API Веб-сайт Go1.13.8 Отримати карту з токера Mat&mRgb = *(Mat *)addrRgba; ////пут, необхідний коло випромінювання 20, /Grain, /Gremac, /Gremaclearkmac, /Greamiclear to Detector in Відстань /Greamicleark, /G2, /Greamclearkmac, /Greamiclearkmac, /Greamiclecularity /Greamicle, /Greamicle, /Greamicle, /Greamculity /Greamicle, /Greamiclemic /Greamicle
Для тестування я перемістив смартфон перед шматком паперу з друкованим кругом. Повідомляємо, що з відстані 20 см зображення кола буде мати розмір 300 пікселів – розглянемо це правильне положення. Якщо коло менше, смартфон повинен переміщатися ближче, якщо більше – далі. Це найпростіший варіант. Ви можете використовувати дві концентричні круги, більші для навігації довгостійкості, менші для навігаційної навігації. Ніщо не заважає розпізнати інші конкретні фігури, наприклад, стріли. В кінцевому підсумку, ми повинні отримати систему, яка використовує дані GPS і кольорову інформацію з камери.
Встановіть OpenCV Manager і файл APK з Eclipse. Запустити його і пройти всі кроки налаштування. Визначте круги в полі зору і доводите рух смартфона в центрі кола даного діаметра.
На тест-смартфоні ми отримали і обробляємо картину кожні 8 сот другого – 12,5 р. за секунду. Це доводить, що комп'ютерне бачення для коптера є реальною, навіть з обмеженим часом і фінансовими ресурсами.
Широкі можливості для подальшого розвитку. OpenCV - це бібліотека з відкритим вихідним кодом. Крім того, Intel IPP замінює деякі низькорівневі дзвінки OpenCV і прискорює ваш код, вставляючи функції добре оптимізовані для процесорів Intel. Ви можете зберігати портативний код – в майбутньому, вам може знадобитися більш потужний смартфон.
Ну, що робити далі - ви будете підказувати матеріали з сайту Intel. Він написаний у великій деталях, як побудувати літальний апарат і що його навчити.
Тепер деякі більш специфічні посилання:
Оригінальна стаття англійською мовою в PDF Код джерела Тест АРК
Джерело: habrahabr.ru/company/intel/blog/230299/