Мікроконтролер / процесор для швидкої тригонометрії у робота?


15

Це стосується обладнання, яке мало важить, тому що (густий кіт розміром, 6 ніг з 3 DOF) ходить робот повинен носити його навколо. Через цю ходьбу потрібно буде зробити багато тригонометрії (використовуючи матричну математику чи я ще не впевнений), і ось звідки це питання.

PIC, Arduino або дешевий AVR недостатньо швидкий, щоб обчислити все 100 / секунду і мати на увазі такі речі, як інертність та уникнення перешкод, або навіть грубі сили / ходи.

  • План А - перенести мозок на робота. Будь то мікропроцесор, мікро ITX, неттоп чи інше; що є ефективним обладнанням для швидкої математики тригонометрії / матриці?

    Я шукав в Інтернеті і очікував дізнатися про мікроконтролери AVR, x86 або ARM, що спеціалізуються на цьому, але не пощастило.

  • План B полягає в тому, щоб підключити машину x86 через WiFi для важкого підйому. Також чудово підходить для складання прототипів, але я хотів би це перенести на план A в кінцевому підсумку, коли апаратне забезпечення мініатюризується. Але навіть тоді, який настільний процесор може зробити тригонометрію найшвидше?

  • План C полягає в розподілі навантаження та наявності одного енергоефективного мікроконтролера / сердечника для кожної ноги, хоча це не найкраще рішення з багатьох причин, що мені подобається розширення можливостей цього.

Я ще не визначився з мовою та / або бібліотекою, яка використовується, але віддаю перевагу Pascal та C ++.

(пропозиції щодо більш підходящих тегів, ласкаво просимо, я новачок тут)


11
математика з плаваючою комою не є обов'язковою. Ви завжди можете будувати таблиці синусів (або будь-яких інших функцій), вводити їх у спалах AVR та інтерполювати між величинами за допомогою обчислень з фіксованою точкою. Це може бути досить швидким для ваших потреб.
Крістоф

3
Замість того, щоб втрачати важку математику в режимі реального часу, загальним рішенням є попередньо обчислити таблиці значень, а потім шукати відповідь. Ідея розподілу роботи між декількома процесорами також хороша, наприклад, один потужний головний процесор, а потім один процесор на ногу.
Джон У

2
Ви також можете задати подібне запитання на сайті Robotics Stackexchange .
Rocketmagnet

1
План B зробить обчислення досить швидко, але зв’язок по WiFi, швидше за все, знищить підвищення продуктивності. Ви розглядали можливість використання телефону Android, підключеного через usb? Це набагато більше обчислювальної потужності без затримки wifi
stefan

1
Плата STM32F4 з блоком з плаваючою точкою здається достатньою для вашої заявки. У ньому є 128 Кб оперативної пам’яті з 64 кКМ. Він може працювати на 168 МГц. 32-бітове множення з плаваючою комою займає лише 1 цикл процесора ..
richieqianle

Відповіді:


16

Це не здається, що ваш додаток насправді все інтенсивно обчислює. Наприклад, dsPIC може виконати інструкцію 400 k для кожної вашої ітерації. Це багато. Буде корисно, однак, мати хороші можливості вводу / виводу низького рівня, ШІМ генератори, таймери тощо.

Синус і косинус насправді не так важко зробити в цілій машині, як dsPIC. Я робив це кілька разів сам. Хитрість полягає в тому, щоб підібрати правильне зображення для кутів. Радянам може бути приємно з теоретичної точки зору, але це незручно в обчисленні. Дегрес штучний і просто дурний. Використовуйте повний діапазон будь-якого цілого чисельного розміру, щоб представити одне повне обертання. Наприклад, на dsPIC, який є 16-бітовим процесором, одне повне обертання нараховує 65536, що набагато більше точності та роздільної здатності, ніж вам потрібно для управління роботом, або що ви можете виміряти в будь-якому випадку.

Однією з переваг цього представлення є те, що все обгортання відбувається автоматично саме завдяки тому, як працює безпідписане ціле число додавання та віднімання. Ще одна істотна перевага полягає в тому, що це представлення особливо добре використовує таблиці пошуку для синусів і косинусів. Вам потрібно зберігати лише 1/4 циклу. Два верхніх біта кута вказують, в якому квадранті ви знаходитесь, який підказує, чи слід вказувати в таблицю вперед чи назад, а також відмовити результат чи ні. Наступні N нижніх бітів використовуються для індексації до таблиці, при цьому таблиця має 2 N сегментів (2 N +1 балів). Зауважте, що індексація в таблицю назад просто доповнює біти індексу таблиці.

Ви можете дати таблиці достатньо балів, щоб вибрати найближчу відповідь досить добре. Наприклад, якщо таблиця має 1024 сегменти, то синус і косинус будуть обчислені до найближчої 1/4096 кола. Цього буде достатньо для управління роботом. Якщо ви хочете отримати більшу точність, ви можете або збільшити таблицю більшою, або використати решту нижніх бітів кута для лінійної інтерполяції між суміжними записами таблиці.

У будь-якому разі, справа в тому, що здається, що ваші вимоги до цього процесора не відповідають заявленій проблемі. Я, мабуть, використовував dsPIC33F. Це, звичайно, невелика, невелика вага та набагато більш енергоефективна, ніж повноцінна обчислювальна машина загального призначення, як x86 на одному бортовому комп'ютері.


Я завжди мав враження, що PIC повинен уповільнити навіть просто зворотну кінематику, але мені, можливо, доведеться переглянути. Чи можливо зробити зворотну кінематику для 6 ніг 3DOF принаймні 100 / секунду? Це зворотна кінематика 6x3x100 лише для того, щоб отримати рухи живими ногами. У будь-якому разі мені потрібна зворотна кінематика на тій самій платформі, що і алгоритм, щоб мені не довелося повторно виконувати ці частини двічі. Алгоритм був би більш вимогливим і, звичайно, не зможе працювати на платі PIC або Arduino-Isch.
Баррі Стейс

9

Ви збираєтеся мати справу з великою кількістю вхідних сигналів. Вам не обов’язково потрібен процесор з високою пропускною здатністю; паралельно може оброблятися багато сигналів. Це типова територія ДСП. Звичайно, ви також хочете загальної функціональності процесора. Це не проблема. Є багато процесорів з інтегрованими DSP.

Типовою конструкцією мікросхем для таких застосувань є Cortex-M4. Це постачається з інтегрованим DSP, а версії -M4F також мають FPU. Це може не бути необхідним, тригонометрію легко зробити в математиці з фіксованою точкою.


Чи матиме матрична математика грань на Cortex-M4F? (на випадок, коли я заробляю там, прототипуючи)
Баррі Стейс

3
Щоб бути трохи педантичним - процесорне ядро ​​Cortex-M4 не має інтегрованого DSP, він має ступінь можливості DSP, включеного в його основне ядро ​​процесора. Розширення DSP - це доповнення інструкцій множення / накопичення, які полегшують типові функції DSP, такі як фільтрація та перетворення.
uɐɪ

6

Кілька зауважень:

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

  2. Для експерименту я реалізував алгоритм AHRS з фільтром Kalman в мікроконтролері ARM Cortex M0 (це був STM32, не пам’ятаю точно інших, але я думаю, що це було 32 МГц), і за допомогою математики з фіксованою точкою я міг би запустити це приблизно 40 зразків / секунду. За допомогою більш швидкого контролера ви зможете легко переносити його, і звичайно, ви можете спробувати FPGA або DSP.

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


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

5

Тригонометрія складна, але є ярлики. Якщо вам не вистачає потужності для обробки, врахуйте алгоритм CORDIC.

Це в основному таблиця значень для [наприклад] синуса. Кути можуть бути в градусах, радіанах, що завгодно. Справа в тому, що SINE цих значень дорівнює 1/2 (0,5), 1/4 (0,25), 1/8, 1/16 ..... до будь-якої частки ступеня, яку може використовувати ваш робот.

Введіть свій кут, відніміть перше значення таблиці, встановіть результат на перший результат (0,5). Якщо, віднімаючи, ваш кут став негативним, додайте наступне значення (і відніміть 0,25). В іншому випадку продовжуйте віднімання кутів та додавання результатів.

Коли ви дістанетесь до кінця таблиці, все, що ви зробили, - це додавання і віднімання, але ви вже сильно близькі. Є кінцевий "скрипковий коефіцієнт", помножений на.

Точність [та швидкість] результату залежить від розміру [та роздільної здатності] таблиці пошуку.


CORDIC виглядає приємно, але я буду використовувати його лише в тому випадку, якщо він робить робота швидшим (ось така потреба).
Баррі Стейс

3

Ви можете розглянути можливість використання плати Raspberry Pi, яка працює в системі GNU / Linux загального призначення. Raspberry Pi має кілька штифтів GPIO, які можна використовувати для підключення сервоприводів роботів або подовжувачів.

http://www.youtube.com/watch?v=RuYLTudcOaM

Модель A Raspberry Pi може робити до 24 GFLOP загальноприйнятих обчислень з плаваючою точкою, використовуючи свій графічний процесор, використовуючи OpenGL ES 2, залишаючись при енергоблоці не більше 2,5 Вт.

http://elinux.org/RPi_Hardware

Приклад: налаштування робота, що працює на батареях, реалізована за допомогою Raspberry Pi.

http://www.homofaciens.de/technics-robots-R3-construction_en_navion.htm

Приклад 2: Робот із 6 ніг, керований малиновим пі:

http://www.youtube.com/watch?v=Yhv43H5Omfc

Приклад 3: самоврівноважений робочий робочий маятник з двома колесами, керований малиновим пі:

http://www.youtube.com/watch?v=n-noFwc23y0


2

Для робочого з ніг ви можете створити кілька заздалегідь визначених послідовностей, що рухаються ногами, і «грати в них». Уникнення перешкод у режимі реального часу можна здійснити за допомогою легкої fuzzy logicреалізації, коли все знову знаходиться у форматі таблиці, і все, що вам потрібно зробити, це вибрати правильне значення з нього та використовувати його для defuzzyficationпроцесу.

Все можна зробити в C на чомусь швидшому процесорі, як ARM7. Я спробував це AVRі не вдався, витративши багато часу на перетворення все на fixed point arithmetics.


Грати в анімацію ходи - саме те, чого я не хочу. Алгоритм я хочу реалізувати, щоб зрозуміти, що робити з ногами самостійно, і саме для цього мені потрібна швидка тригонометрія. Однак мені не вистачило ясності в питанні. І побачивши, що так багато звучать на цьому, я б не зміг редагувати питання. Я запитую і буду конкретнішим, у свій час.
Баррі Стейс

У такому випадку я б пішов на систему сервоприводів. У кожної ноги є свій контролер. Агентський підхід.
Gossamer

1

Платформа Texas Instruments Stellaris за замовчуванням має на плаванні блок з плаваючою комою. Не впевнений, чи 80-ГГц тактовий контролер ARM досить швидкий для вашої програми, але плата розробки LaunchPad досить дешева: http://www.ti.com/ww/uk/launchpad/stellaris_head.html

Це програмується через USB, доступні безкоштовні ланцюги інструментів для принаймні Windows та Linux, розміром близько 4 × 6 см і мають 30+ шпильок GPIO (якщо я правильно порахував).


0

Ви можете вбудувати плату процесора x86 power pc у робототехнічну програму за допомогою AVR для управління накопичувачами роботи як картки для взаємодії. Самий швидкий і дешевий спосіб вирішення вашої проблеми. Але так, вам доведеться багато кодувати в архітектурі x86, але, на щастя, ви можете зрозуміти багато кодування з відкритих вихідних кодів ОС. (Якщо ваша механічна конструкція може нести таку вагу)


4
"x86" та "power pc" - це дві абсолютно різні (і, принаймні, в деяких моментах історії) конкуруючі архітектури.
Кріс Страттон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.