Домашній автономний літаючий апарат від 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/