Чи є Wi-Fi Arduino достатньо швидким для керування транспортним засобом?

Я будую простий моторизований автомобіль, який я хочу зробити автономним через використання нейронних мереж. Я використовую Arduino, оскільки я новинка в електроніці, але більше досвіду в програмуванні. Я впевнений, що там є набагато потужніші мікроконтролери, але для моїх цілей (і коштів) Arduino Mega 2560 - це те, що я б вважав за краще використовувати (і у мене його вже є). Тепер я підозрюю, що Мега, навіть якщо вона є набагато більш можливою, ніж Uno або аналогічно невеликі плати Arduino, не здатна запускати нейронну мережу, яка приймає входи з пристойно пронумерованого масиву датчиків і генерує кілька виходів (можливо, 5?) .

Отже, моя ідея полягає в тому, щоб запустити нейронну мережу на моєму телефоні, якщо вона достатньо швидко, або на моєму настільному комп'ютері, якщо ні. Так чи інакше, я вирішив, що найкращий спосіб передавати вхідний і вихідний дані назад і вперед між зовнішнім процесором (телефон/настільний ПК), а Arduino буде WiFi. Я бачив відео YouTube про когось, хто контролює RC-автомобіль із додаванням Android, який передає дані через Wi-Fi, і хоча трохи розривається для цілей РР, воно здавалося б протягом 1 секунди затримки.

Хто-небудь знає, чи WiFi буде швидким/достатньо надійним, щоб керувати невеликим автономним автомобілем? Припустимо, що він буде подорожувати по темпах дорослої людської прогулянки та реагування на його оточення на основі гідролокації. (Затримка передачі даних буде важливою, тому що дані гідролокатора повинні бути оброблені комп'ютером, але в ідеалі робот буде продовжувати рухатися без уповільнення або припинення чекати даних.)

2
Є одна дійсно брудна точка тут. На мікроконтролері написання оптимізованого коду дійсно має значення. Щоб повністю оптимізувати, ви навіть повинні знати, як виходить ваш асемблер (я мав це робити раніше, у системі з обмеженим доступом до бюджету), і це не весело.
додано Автор Dan, джерело
Я насправді просто давав деякий внесок "не здатний керувати нейронною мережею, яка приймає входи з пристойно пронумерованого масиву датчиків і генерує кілька виходів" З якоїсь причини я читав це без цього. Я думав, що решта - це ваш контрплан. Я думаю, ви могли б отримати нейронну мережу базового рівня роботи з контролером себе, це все, гра, як складні входи, якщо ви говорите про майже bitmap даних, ніколи. Якщо ви говорите про 64 входи і 5 виходів, може бути.
додано Автор Dan, джерело
Я бачив це зроблено з FPGA з великим успіхом (і майже немає затримки на сигнал в порівнянні з моторної відповіді), але я не зробив це сам. Бажаю вам великої удачі.
додано Автор Dan, джерело
Я заплутався, мікроконтроллер буде обробляти лише певні вказівки, такі як написання нової ШІМ на сервоприводі або двигуні, а також відправлення вхідних даних від своїх датчиків на зовнішню пораду, насправді він буде робити дуже мало обробки. Я розумію, що оптимізація все ще важлива, але це не змінює того факту, що переважна більшість обробки буде зроблено на чомусь з декількома ядрами 3GHZ та дуже великою кількістю оперативної пам'яті, якщо я нічого не розумію.
додано Автор Patrick Szalapski, джерело
Я отримав бот і працює, але це не зроблено, і він використовує бортові апаратні засоби для обробки затримкою чутливих процесів, як уникнення перешкод та надзвичайні зупинки. Я насправді закінчив, використовуючи "RFD21815 Eval Board for RFD21733" від компанії під назвою RF Digital. Це було в основному для ручного відхилення, щоб керувати ботом з мого ПК. Вона не має достатньої пропускної здатності для потокового відео або аудіо, я точно повинен купити щось інше. На даний момент Wi-Fi використовується для відправлення такого роду інформації назад.
додано Автор Patrick Szalapski, джерело
Якби я знав раніше, що купив Arduino, я б одержав одне з них. Схоже, що вони безумно швидко в порівнянні з Arduinos ... не кажучи вже про барана. Незважаючи на це, я думаю, що в кінцевому підсумку я буду використовувати RFM12s або XBEE, щоб мій комп'ютер зробив важкий підйом. Якщо затримка погана, я намагатимусь зберігати найважливіші речі на Arduino. Я обов'язково пам'ятаю ці речі. Я просто стурбований тим, що деякі матеріали, які я хочу поекспериментувати, напевно будуть насторожено ресурсоємними.
додано Автор Patrick Szalapski, джерело
Ага я бачу, спасибі за роз'яснення. Я планую розпочати проект з відносно невеликою кількістю входів, розроблених модульним способом, щоб дозволити мені додавати більше входів у майбутньому. Однак спочатку з нього, ймовірно, буде близько 4 або 5 входів, але всі вони будуть вигадані за допомогою власних алгоритмів, лише пара входів буде настільки ж простий, як 1 , якщо датчик виявляє щось або 0 , якщо це не означає. Решта повинна бути розрахована на основі сенсорних даних, перш ніж вона може бути передана в нейронну мережу.
додано Автор Patrick Szalapski, джерело
Один з варіантів, замість Arduino, буде ChipKIT. Це використовує 32-розрядний мікроконтроллер ПІК (на основі MIPS), що надає йому величезну кількість енергії більше, ніж Arduino. Програмування практично однакове.
додано Автор Majenko, джерело
@Маєнко - Хороша пропозиція, я хотів би це згадати також :-) Хоча я і не використовував ChipKIT (я розумію, це сумісно з більшістю матеріалів Arduino), я використав велику кількість PIC32, це потужний, дешевий і добре документований КС.
додано Автор Skilldrick, джерело
Отже, через рік - ти нарешті зумів це зробити? Я роблю подібну справу, однак вся тренування відбувається на робочому столі, тоді нейронна мережа завантажується в arduino, хто її запускає.
додано Автор PeeS, джерело

4 Відповіді

Так, це можливо. Є навіть люди, які керують своїми Quadrocopters за допомогою Wi-Fi, але латентність дійсно є проблемою. ця річ є комерційним продуктом, і вони дозволяють користувачеві керувати ним через Wi-Fi, але вони мають величезну навантаження на алгоритми на борт, щоб зробити його керованим. у вашій програмі я ніколи не буду користуватися WiFi, але 433 МГц/868 МГц можна купити модулі приблизно на 5 євро - називається RFM12 ( від hoperf ). для них є величезна кількість бібліотек в інтернеті. Невеликий відгук: не виконуйте всю обробку на одному великому хості, затримка триватиме довше, ніж обробка на борту.

3
додано
Ні, не кращий спосіб. це саме те, що я хотів би запропонувати. Єдине, про що я міг би подумати, - це не використовувати Arduino на комп'ютері для взаємодії RFM12, а TI Launchpad або деякої самонабірної плати AVR (наприклад, на макеті), щоб знизити витрати.
додано Автор Botto, джерело
добре, наприклад, виявляєте змову на борту, але малюєте карту чи щось інше, що ви хочете зробити на хості. все, що критично важливо, треба робити на Arduino (Uno просто добре для виявлення змов, не потрібно для Mega)
додано Автор Botto, джерело
Як би ви запропонували перейти на взаємодію RFM12 для спілкування з моїм мобільним телефоном або комп'ютером? Все, що я можу придумати, - це використання іншого MCU з другим RFM12, підключеним через USB на моєму комп'ютері, виконуючи себе просто як приймач і не обробляючи самого себе. Чи є кращий спосіб це зробити?
додано Автор Patrick Szalapski, джерело
Це була чудова пропозиція, спасибі. З якоїсь причини я зрозумів у голові, що все це потрібно робити на великому комп'ютері або самому дошку, але не розбивати навантаження між ними.
додано Автор Patrick Szalapski, джерело
Отже, що ви маєте на увазі, не виконуйте всю обробку на одному великому хості? Ви пропонуєте, що Arduino Mega здатний виконувати такий подвиг, який я описав, або ви пропонуєте, щоб я знайшов спосіб розділити завдання, які він повинен виконати, і обробляти найбільш чутливі до часу на борту, з все інше робиться через бездротовий зв'язок?
додано Автор Patrick Szalapski, джерело

Ви запитуєте кілька речей тут:

  • Is the arduino capable of reading several sensors/updating several control outputs fast enough for managing a vehicle?

    • Absolutely. It should be pretty trivial to manage ~1-10 inputs and 1-5 outputs 100+ times per second.
    • Note: This depends somewhat on the sensors feeding the inputs. If you have cameras, or any other devices which produce lots of data, an arduino is not the proper tool. It's probably better to think of, for example, a 640px * 480px camera as 307,200 (e.g. 640 * 480) separate single sensors. That will give you a better idea of the update rates you may achieve, at least without heavy optimization.
      A similar rule should be applied for any sensor that returns more then one value.
  • Is WiFI a reasonable idea for low-latency communication.

    • NO
      • The commercial products that use wifi for remote control usually only do so because they're designed to interoperate with commodity devices (tablets, phones, etc...). WiFi is actually pretty terrible from a latency perspective. It certainly is possible, but if you do want to use wifi, you need to realize you're really doing two projects. Your neural-net thing, and writing a predictive communication layer for wifi that tries to hide the latency as much as possible.
    • Personally, I would seek to only do one complicated project at a time.
    • If you can, use USB for connectivity. It's pretty bulletproof.
    • If you really need wireless connectivity, the XBee wireless modules are very nice. You get a decent amount of bandwidth, and most of the complexity of the actual wireless layer is fairly effectively hidden from you. The modules handle error-retransmission, checksumming, etc... silently, so you don't need to worry about them.
    • The RFM12 modules are also nice, but they're not quite as plug-and-play as the XBee modules. Again, I would seek to minimize (exposed) hardware complexity as much as possible (XBees are very complex, but they come as a complete module, so you don't need to worry about that complexity, at least initially), particularly since you're not too experienced with hardware.

Не можна переконати той факт, що arduino виглядає "повільним". Речі, подібні до ChipKIT, мають набагато більшу обчислювальну потужність, але для багатьох речей ATmega дуже багато. 16 МГц 16 MIPS. Якщо вам потрібно управляти 100 оновленнями/секунду, це - цикли інструкцій 160000 для кожного оновлення. У цьому можна багато чого зробити.

1
додано
RPi є варіантом. Тим не менш, вам слід пам'ятати, що Linux є не операційною системою в реальному часі. Таким чином, якщо ви говорите з будь-яким пристроєм, яким є регулярних оновлень, не можна гарантувати, що це станеться в Linux.
додано Автор Connor Wolf, джерело
@sandundhammika - Дох! Ви повністю правильні. Я чув rPi, і припустив Linux.
додано Автор Connor Wolf, джерело
як щодо RPI? повноцінний одноплатний комп'ютер?
додано Автор Wilhelm, джерело
так що мова йде про те, чи могли ви могли або не могли запустити хороший RTOS в апаратній RPI правильно?
додано Автор Wilhelm, джерело

Подумайте про використання кількох мікроконтролерів, щоб делегувати деякі розрахунки. Якщо у вашій мережі є декілька шарів, ви можете об'єднати декілька процесорів. Я настійно рекомендую паралакс-пропелером, що працює на частоті до 80 МГц, має декілька ядер 32 біт. Це досить легко програмувати. Складність збільшується різко, коли а. Використання декількох процесорів і b. використовуючи багатоядерний процесор, але у вас не виникне жодних труднощів при зшиванні даних для мережі і все одно зможе продовжувати обробку на автомобілі.

1
додано
Я сумніваюся, що проблема тут полягає в процесі обробки. Питання полягає в тому, що Wi-Fi є реалістичним бездротовим носієм для додатків у режимі реального часу.
додано Автор Neil Foley, джерело

Цей блог може бути корисним. Реле Wi-Fi та контролер iMatic досить прохолодно. Однак я не можу зробити це працювати. :-(

0
додано
Будь ласка, додайте ще кілька подробиць з блогу. На даний момент це дуже просто відповідь на посилання, і їх не рекомендують, оскільки вони стають марними, якщо зв'язок вмирає.
додано Автор Timo002, джерело