куточок радіоаматора

Навчаємо дрона автономності, управління голосом і розпізнаванню осіб.

В силу своєї професії, я нерідко стежу не тільки за гучними подіями в світі IT, але і за подвигами простих радіоаматорів (а їм в свою чергу, доводиться бути ще й програмістами). Нещодавно я натрапив на статтю Лукаса Біволда на порталі O''Reilly, в якій він детально описав, як з дрона за 200 $ (в Росії такий коштує близько 20 тисяч рублів) за допомогою простої комп'ютерної магії зібрати апарат мінімум в 5 разів дорожче. Ось переклад статті.

Вибір готового дрона

Найскладніший етап в процесі злому дрона - початковий. Моїм першим проектом був дрон, якого я зібрав сам з різних частин, і, як і будь-який інший мій саморобний проект, це коштувало мені набагато більше, ніж покупка вже готового дрона. Якщо говорити відверто, мій саморобний дрон літав не дуже добре. Безумовно, купити готового набагато простіше і дешевше.

Більшість виробників дронів обіцяють надавати програмний інтерфейс (API), але серед них немає лідера, який міг би надати екосистему для любителів. Більшість дронів зі зручним інтерфейсом стоять більше $ 1000, що є серйозною перешкодою.

Після деяких пошуків, мені вдалося знайти Parrot AR Drone 2.0. який, на мою думку, є вдалим вибором, якщо вам потрібен недорогий і легко програмований дрон для розваг. Ви можете купити новий за $ 200, але, з огляду на кількість людей, які їх купують і ніколи не використовують, краще купити старий на eBay менш ніж за $ 130.

куточок радіоаматора

Parrot AR не так стабільно літає, як набагато більш дорогий (близько $ 550) новий Parrot Bebop 2. але для Parrot AR існує клієнтська бібліотека на node.js під назву node-ar-drone. Вона ідеально підходить в якості основи для програмування дрона.

Ще одна перевага Parrot AR - його дуже важко зламати. При тестуванні коду автономного режиму мій дрон не раз врізався в стіни, меблі, квіткові горщики і гостей, і все ще чудово літає.

Однією з проблем дронів в порівнянні з наземними роботами є невеликий час роботи їх акумулятора. Підзарядка може займати кілька годин, а вистачить її всього десь на 10 хвилин польоту. Я рекомендую купити 2 додаткові батареї і змінювати їх в процесі тестування.

програмування дрона

архітектура

Я вирішив запустити логічний алгоритм на ноутбуці, а систему машинного навчання - в хмарі. Така схема дозволила знизити час очікування в порівнянні з запуском нейромережі безпосередньо на комп'ютері Raspberry PI. і я вважаю, що вона є доцільною для аматорських дрон-проектів.

Microsoft, Google, IBM, і Amazon пропонують недорогі хмарні інтерфейси машинного навчання. Я вибрав Microsoft's Cognitive Service для цього проекту, оскільки це єдиний інтерфейс, що підтримує настроюється розпізнавання осіб.

куточок радіоаматора

початок настройки

За замовчуванням Parrot AR 2.0 роздає власну клієнтську бездротову мережу. Це неймовірно ускладнює злом пристрою. Кожен раз, коли ви щось робите, вам необхідно від'єднатися від своєї мережі і підключитися до мережі дрона. На щастя, існує дуже корисний проект ardrone-wpa2. який допоможе налаштувати дрон на підключення до вашої Wi-Fi мережі.

Дуже весело використовувати протокол Telnet і експериментувати, Parrot починає нагадувати урізану версію Linux. Коли ви в останній раз підключалися до чого то через Telnet? Ось приклад, як можна відкрити термінал і увійти безпосередньо в систему дрона.

% Script / connect "The Optics Lab" -p "particleorwave" -a 192.168.0.1 -d 192.168.7.43

Управління польотом командним рядком

Після установки бібліотеки node можна зробити цикл типу прочитати-обчислити-записати (REPL) і тим самим почати управляти дроном.

var arDrone = require ( 'ar-drone');

drone> client.animate ( 'yawDance, 1.0)

Якщо ви прямуєте моїм інструкціям, до цього моменту ви вже точно кілька разів упустили ваш дрон. Я тисячу разів переклеював захисний каркас перш ніж він розвалився, і мені довелося купувати новий. Я сумніваюся, чи варто це говорити, але Parrot літає набагато краще без каркаса. Але літаючи без нього лопаті можуть зачепитися і зламати щось, зіпсувати меблі.

Управління польотом з веб-сторінки

Створити веб-інтерфейс для управління польотом - приємно і легко. Платформа express.js сильно спрощує створення невеликого веб-сервера:

var express = require ( 'express');

app.get ( '/', function (req, res)

app.get ( '/ land', function (req, res)

app.get ( '/ takeoff', function (req, res)

if (response.length> 0)

Я використовував чудову бібліотеку ImageMagick щоб позначати особи на PNG. На цьому етапі можна використовувати безліч різних розширень, наприклад, інтерфейс для визначення емоцій emotion API.

Установка системи розпізнавання мовних команд

Найскладнішою частиною установки системи розпізнавання мови є не саме по собі розпізнавання мови, а трансляція звукової доріжки з веб-сторінки на мій локальний сервер в форматі, якого вимагає Microsoft's Speech API. а це, в свою чергу, виливається в дуже довгий код. Одного разу зберігши аудіо в одноканальному форматі і з вірною вибіркової частотою, ви зможете почати легко і успішно використовувати інтерфейс. Вартість 1000 запитів - $ 4, так що для аматорських проектів сервіс практично безкоштовний.

Сервіс RecordRTC має відмінну бібліотеку і прекрасно підходить для початкової клієнтської звукозапису. З боку клієнта ми може додати код, який би зберігав аудіофайл:

app.post ( '/ audio', function (req, res)

var form = new formidable.IncomingForm ();

// specify that we want to allow the user to upload multiple files in a single request

form.uploadDir = path.join (__ dirname, '/ uploads');

form.on ( 'file', function (field, file)

fs.rename (file.path, path.join (form.uploadDir, filename));

// log any errors that occur

console.log ( 'An error has occured: \ n' + err);

// once all the files have been uploaded, send a response to the client

// parse the incoming request containing the form data

Я використовував утиліту FFmpeg для того, щоб знизити якість аудіо і звести його в один канал для завантаження в сервіс Microsoft.

exports.parseWav = function (wavPath, callback)

var cmd = 'ffmpeg -i' + wavPath + '-ar 8000 -ac 1 -y tmp.wav';

exec (cmd, function (error, stdout, stderr)

console.log (stderr); // command output is in stdout

На цьому етапі також можна використовувати інтерфейс Microsoft для перетворення тексту в мову. щоб дрон міг відповідати вам.

Автономний маршрут доступу

Я використовував бібліотеку ardrone-autonomy для планування автономного маршруту доступу для мого дрона. Після численних зіткнень з меблями і домашніми квітами в вітальні моя дружина делікатно запропонувала мені перенести тестування мого проекту в гараж, де менше того, що можна зламати, але менше простору для маневрів.

куточок радіоаматора

Коли я розширю простір своєї лабораторії, я більш щільно займуся опрацюванням розумних пошукових алгоритмів, але на даному етапі обмежуся тим, що дрон буде злітати і повертатися в пошуках ворогів і друзів.

var autonomy = require ( 'ardrone-autonomy');

console.log ( "Here we go!")

zero () // Sets the current state as the reference

Як тільки ви все налаштуєте і зможете управляти дроном через API, все це буде приносити неймовірне веселощі. З новою системою розпізнавання зображень з'являється багато нових можливостей, починаючи від дослідження планів приміщень до фарбування стін. Parrot спочатку не був створений для безпечних польотів в невеликих будинках на зразок мого, але дорожчий дрон цілком здатний втілити це в реальність. Зрештою, дрони будуть ставати більш стабільною, дешевше, а кількість способів їх застосування в повсякденному житті буде дуже швидко зростати.

Хмарний програмний інтерфейс Microsoft Cognitive Service дуже простий у використанні і неймовірно мало коштує. Спочатку я був стурбований, що незвично широкоугольная камера дрона може перешкодити нормальному розпізнаванню осіб, а також що гучний звук від лопатей буде перешкоджати звукам, але на ділі все працює набагато краще, ніж я очікував. Час очікування не є проблемою, якою я припускав вона може бути. Твір всіх обчислень в хмарі в режимі передачі зображень в реальному часі спочатку здається трохи дивним вибором архітектури, але ймовірно стане стандартом для багатьох додатків в майбутньому.

Схожі статті