¿Microcontrolador / CPU para una trigonometría rápida en un robot?

15

Esto se refiere al hardware que pesa poco, porque un robot caminante (del tamaño de un gato gordo, 6 patas con 3 DOF) debería llevarlo consigo. Debido a eso, tendrá que hacer una gran cantidad de trigonometría (con matrices o no, todavía no estoy seguro) y de ahí viene esta pregunta.

El PIC, Arduino o el AVR barato no son lo suficientemente rápidos para calcular todo a 100 / segundo y tienen en cuenta cosas como la inercia y la evitación de obstáculos, o incluso las rutas de la fuerza bruta.

  • El plan A es llevar el cerebro en el robot. Sea microprocesador, micro ITX, nettop u otro; ¿Cuál es el hardware eficiente para hacer trigonometría / matriz matemática rápidamente?

    Busqué en línea y esperaba encontrar información sobre AVR, x86 o ARM Los microcontroladores se especializaron en esto, pero no hubo suerte.

  • El plan B es tener una máquina x86 conectada a través de WiFi para hacer el trabajo pesado levantamiento. También es genial para la creación de prototipos, pero me gustaría que migrase a Planee A eventualmente cuando el hardware se miniaturice. Pero incluso entonces, ¿qué? CPU de escritorio puede hacer trigonometría el más rápido?

  • El plan C es distribuir la carga y tener un microcontrolador / núcleo eficiente para cada pata, aunque esa no es la mejor solución por muchas razones, me gusta la capacidad de extensión.

Todavía no me he decidido por el idioma y / o la biblioteca utilizada, pero prefiero Pascal y C ++.

(las sugerencias para etiquetas más adecuadas son bienvenidas, soy nuevo aquí)

    
pregunta Barry Staes

8 respuestas

16

No parece que su aplicación sea realmente tan intensiva en computación. Un dsPIC, por ejemplo, puede ejecutar instrucciones de 400 k para cada una de sus iteraciones. Eso es mucho. Sin embargo, será útil tener una buena capacidad de E / S de bajo nivel, generadores de PWM, temporizadores y similares.

El seno y el coseno realmente no son tan difíciles de hacer en una máquina de enteros como un dsPIC. Yo mismo lo he hecho un poco. El truco es elegir la representación correcta para los ángulos. Los radianes pueden ser agradables desde un punto de vista teórico, pero son inconvenientes computacionalmente. Los grados son artificiales y simplemente tontos. Utilice el rango completo de lo que sea el número entero de su máquina para representar una rotación completa. Por ejemplo, en un dsPIC, que es un procesador de 16 bits, una rotación completa equivale a 65536 cuentas, lo que es mucho más precisa y resolución de la que necesita para controlar un robot o que puede medir de todos modos.

Una de las ventajas de esta representación es que toda la envoltura se produce automáticamente solo debido a la forma en que funcionan los enteros y resta sin signo. Otra ventaja importante es que esta representación se presta particularmente bien al uso de tablas de búsqueda para seno y coseno. Solo necesitas almacenar 1/4 de ciclo. Los dos bits superiores del ángulo le indican en qué cuadrante se encuentra, lo que le indica si debe indexar la tabla hacia adelante o hacia atrás, y si debe negar el resultado o no. Los siguientes N bits inferiores se utilizan para indexar en la tabla, con la tabla con 2 segmentos N (2 N +1 puntos). Tenga en cuenta que la indexación en la tabla hacia atrás simplemente complementa los bits de índice de la tabla.

Puede dar a la tabla suficientes puntos para que seleccionar la respuesta más cercana sea lo suficientemente bueno. Por ejemplo, si la tabla tiene 1024 segmentos, entonces el seno y el coseno se calcularán al 1/4096 más cercano de un círculo. Eso va a ser suficiente para controlar un robot. Si desea mayor precisión, puede hacer que la tabla sea más grande o usar los bits inferiores restantes del ángulo para interpolar linealmente entre las entradas de la tabla adyacente.

De todos modos, el punto es que parece que sus requisitos para este procesador no coinciden con el problema indicado. Probablemente usaría un dsPIC33F. Sin duda, es pequeño, liviano y mucho más eficiente que un proceso informático de propósito general completo como un x86 en una computadora de una sola placa.

    
respondido por el Olin Lathrop
9

Vas a lidiar con muchas señales de entrada. No necesariamente necesitas una CPU con un alto rendimiento; Se pueden procesar muchas señales en paralelo. Este es el territorio típico de DSP. Por supuesto, usted también quiere una funcionalidad general de la CPU. Esto no es problema Hay un montón de CPU con DSP integrados.

Un diseño de chip típico para tales aplicaciones es un Cortex-M4. Esto viene con un DSP integrado, y las versiones -M4F también tienen una FPU. Esto podría no ser necesario, la trigonometría se puede hacer fácilmente en matemáticas de punto fijo.

    
respondido por el MSalters
6

Algunas observaciones:

  1. No es necesario procesar las operaciones de trigonometría en la misma CPU que ejecuta la evitación de obstáculos. Puede dividir las tareas entre dos microcontroladores y usar un protocolo de comunicación para hacerles hablar.

  2. Para un experimento, he implementado un algoritmo AHRS con un filtro de Kalman en un microcontrolador ARM Cortex M0 (Era un STM32, no recuerdo exactamente el resto, pero creo que era de 32 MHz), y usando matemática de punto fijo, podía ejecutarlo a aproximadamente 40 muestras / segundo. Con un controlador más rápido, debería poder llevarlo fácilmente y, por supuesto, puede probar el modo FPGA o DSP.

  3. Diría que el control de las piernas no requiere un uso intensivo de la CPU y que puede controlar todas las piernas juntas, tal vez por separado de las operaciones de trigonometría y de evitación de obstáculos (ver 1)

respondido por el clabacchio
5

La trigonometría es complicada, pero hay atajos. Si tiene poca capacidad de procesamiento, considere el algoritmo CORDIC.

Es básicamente una tabla de valores para [por ejemplo] seno. Los ángulos pueden ser en grados, radianes, lo que quieras. El punto es que el SINE de estos valores es 1/2 (0.5), 1/4 (0.25), 1/8, 1/16 ..... a cualquier fracción de grado que su robot pueda usar.

Ingrese su ángulo, reste el primer valor de la tabla, configure su resultado al primer resultado (0.5). Si, al representar su ángulo, su ángulo se volvió negativo, entonces AGREGUE el siguiente valor (y reste 0.25). De lo contrario, continúa restando ángulos y agregando resultados.

Cuando llegue al final de la tabla, todo lo que ha hecho es agregar & Resta aún eres muy fuerte. Hay un "factor de violín" final para multiplicar por.

La precisión [y la velocidad] del resultado depende del tamaño [y la resolución] de la tabla de búsqueda.

    
respondido por el Alan Campbell
3

Puede considerar el uso de una placa Raspberry Pi que ejecute un sistema GNU / Linux de propósito general. La Raspberry Pi tiene varios pines GPIO que se pueden usar para conectar servos de robot o tableros de extensión.

enlace

El modelo A Raspberry Pi puede hacer hasta 24 GFLOP de cómputo de punto flotante de propósito general usando su GPU usando OpenGL ES 2 mientras se mantiene por debajo del presupuesto de potencia de 2.5W.

enlace

Ejemplo: una configuración de robot alimentado por batería implementada usando la Raspberry Pi.

enlace

Ejemplo 2: un robot de 6 patas controlado por una frambuesa pi:

enlace

Ejemplo 3: un robot de péndulo invertido de 2 ruedas con equilibrio automático controlado por una frambuesa pi:

enlace

    
respondido por el xranby
2

Para los robots con patas, puede crear algunas secuencias de movimiento de piernas predefinidas y "reproducirlas". La prevención de obstáculos en tiempo real se puede hacer con la implementación light fuzzy logic , donde todo vuelve a estar en formato de tabla y todo lo que necesita hacer es seleccionar el valor correcto y usarlo para el proceso defuzzyfication .

Todo se puede hacer en C en un procesador más rápido como ARM7 . Lo he probado en AVR y he fallado, después de pasar mucho tiempo transformando todo en fixed point arithmetics .

    
respondido por el Gossamer
1

La plataforma Stellaris de Texas Instruments tiene una unidad de punto flotante a bordo de forma predeterminada. No estoy seguro de si el controlador ARM cronometrado de 80MHz es lo suficientemente rápido para su aplicación, pero la placa de desarrollo LaunchPad es bastante barata: enlace

Es programable a través de USB, las cadenas de herramientas gratuitas están disponibles para al menos Windows y Linux, miden aproximadamente 4 × 6 cm y tienen más de 30 pines GPIO (si conté correctamente).

    
respondido por el jippie
0

Puede integrar la placa de CPU x86 power pc en su aplicación robótica con la ayuda de AVR para controlar las unidades del robot como una tarjeta de interfaz. La solución más rápida y barata de su problema. Pero sí, tienes que meter mucha codificación en la arquitectura x86, pero afortunadamente puedes captar mucha codificación de los códigos de SO de código abierto. (Si su construcción mecánica puede soportar este peso)

    
respondido por el Abdul Rehman

Lea otras preguntas en las etiquetas