Микроконтроллер / процессор для быстрой тригонометрии в роботе?


15

Это касается оборудования, которое мало весит, потому что ходовой робот (размером с толстую кошку, 6 ног с 3 степенями свободы) должен носить его с собой. Из-за этого хождения потребуется много тригонометрии (я использую матричную математику или нет, я еще не уверен), и вот откуда этот вопрос.

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

  • План А - нести мозг роботу. Будь то микропроцессор, микро-ITX, неттоп или другие; Что такое эффективное оборудование для быстрой тригонометрии / математики?

    Я искал в Интернете и ожидал узнать о микроконтроллерах AVR, x86 или ARM, специализирующихся на этом, но не повезло.

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

  • План C состоит в том, чтобы распределить нагрузку и иметь по одному энергоэффективному микроконтроллеру / ядру для каждой ветви, хотя это не лучшее решение по многим причинам, мне нравится его расширяемость.

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

(предложения для более подходящих тегов приветствуются, я новичок здесь)


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

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

2
Вы также можете задать вопрос такого рода на сайте Robotics Stackexchange .
Ракетный магнит

1
План B будет выполнять вычисления довольно быстро, но связь по WiFi, скорее всего, убьет прирост производительности. Вы рассматривали возможность использования телефона Android, подключенного через USB? Это намного больше вычислительной мощности без отставания от Wi-Fi
Стефан

1
Плата STM32F4 с модулем с плавающей запятой достаточна для вашего применения. Он имеет 128 тыс. SRAM с 64 тыс. CCM. Он может работать на 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 на одноплатном компьютере.


У меня всегда было впечатление, что ПИК должен замедляться даже для обратной кинематики, но мне, возможно, придется пересмотреть. Можно ли сделать обратную кинематику для 6-ти футов 3DOF по крайней мере 100 в секунду? Thats 6x3x100 обратная кинематика, чтобы получить живые движения ног. В любом случае мне нужно, чтобы обратная кинематика происходила на той же платформе, что и алгоритм, так что мне не нужно дважды переопределять эти части. Алгоритм будет более требовательным и, конечно, не сможет работать на PIC или Arduino-isch.
Барри Стес

9

Вы собираетесь иметь дело с большим количеством входных сигналов. Вам не обязательно нужен процессор с высокой пропускной способностью; много сигналов могут обрабатываться параллельно. Это типичная территория DSP. Конечно, вам нужна общая функциональность процессора. Это не проблема. Есть много процессоров со встроенными DSP.

Типичный дизайн чипа для таких приложений - Cortex-M4. Это идет с интегрированным DSP, и версии -M4F также имеют FPU. В этом может не быть необходимости, тригонометрия может быть легко выполнена в математике с фиксированной точкой.


Будет ли матричная математика иметь преимущество в Cortex-M4F? (в случае, если я рискну там, прототипирование)
Барри Стес

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

6

Несколько замечаний:

  1. Вам не нужно обрабатывать тригонометрические операции на том же процессоре, который выполняет обход препятствий. Вы можете разделить задачи между двумя микроконтроллерами и использовать протокол связи, чтобы заставить их говорить.

  2. Для эксперимента я реализовал алгоритм AHRS с фильтром Калмана в микроконтроллере 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.


Воспроизведение анимации походки - именно то, чего я не хочу. Алгоритм, который я хочу реализовать, выясняет, что делать с его ногами, и этот алгоритм - вот почему мне нужна быстрая тригонометрия. Однако мне не хватило ясности в моем вопросе. И, видя, как много в этом замешано, я бы не стал редактировать вопрос. Я попрошу и быть более конкретным, в свое время.
Барри Стес

В этом случае я бы пошел на систему ног сервопривода. У каждой ноги свой контроллер. Агентный подход.
паутинка

1

Платформа Texas Instruments Stellaris по умолчанию имеет блок с плавающей запятой. Не уверен, достаточно ли быстродействующего контроллера ARM с тактовой частотой 80 МГц для вашего приложения, но плата разработки LaunchPad довольно дешева: http://www.ti.com/ww/en/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.