Esto se refiere al hardware que pesa poco, porque un robot ambulante (del tamaño de un gato gordo, 6 patas con 3 DOF) debería llevarlo. Debido a esa caminata, tendrá que hacer mucha trigonometría (usando matemática matricial o no, todavía no estoy seguro) y de aquí viene esta pregunta.
PIC, Arduino o AVR barato no es lo suficientemente rápido como para calcular todo 100 / segundo y tener en cuenta cosas como la inercia y la evitación de obstáculos, o incluso caminos / pasos de fuerza bruta.
El plan A es llevar el cerebro al robot. Ya sea microprocesador, micro ITX, nettop u otro; ¿Qué es un hardware eficiente para hacer trigonometría / matemática matricial rápidamente?
Busqué en línea y esperaba conocer los microcontroladores AVR, x86 o ARM especializados en esto, pero no tuve suerte.
El plan B es tener una máquina x86 conectada a través de WiFi para hacer el trabajo pesado. Ideal para la creación de prototipos también, pero me gustaría que esto migre al plan A eventualmente cuando el hardware se miniaturice. Pero incluso entonces, ¿qué CPU de escritorio puede hacer la trigonometría más rápido?
El plan C es distribuir la carga y tener un microcontrolador / núcleo eficiente en energía para cada tramo, aunque esa no es la mejor solución por muchas razones, me gusta su capacidad de extensión.
Todavía no he decidido el idioma y / o la biblioteca utilizados, pero prefiero Pascal y C ++.
(sugerencias para etiquetas más adecuadas son bienvenidas, soy nuevo aquí)
fuente
Respuestas:
No parece que su aplicación sea realmente tan computacional. 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 PWM, temporizadores y similares.
El seno y el coseno realmente no es tan difícil de hacer en una máquina entera como un dsPIC. Lo he hecho algunas veces yo mismo. 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. El progreso es artificial y simplemente tonto. Use 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 es de 65536 recuentos, que es mucha más precisión y resolución de la que necesita para controlar un robot o que puede medir de todos modos.
Una ventaja de esta representación es que todo el ajuste ocurre automáticamente debido a cómo el entero sin signo suma y resta el trabajo. Otra ventaja importante es que esta representación se presta particularmente bien al uso de tablas de búsqueda para seno y coseno. Solo necesita 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 en la tabla hacia adelante o hacia atrás, y si negar el resultado o no. Los siguientes N bits inferiores se utilizan para indexar en la tabla, con la tabla que tiene 2 N segmentos (2 N +1 puntos). Tenga en cuenta que la indexación hacia atrás en la tabla solo complementa los bits de índice de la tabla.
Puede darle a la mesa suficientes puntos para que elegir la respuesta más cercana sea lo suficientemente bueno. Por ejemplo, si la tabla tiene 1024 segmentos, el seno y el coseno se calcularán al 1/4096 más cercano de un círculo. Eso será suficiente para controlar un robot. Si desea más 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 adyacentes de la tabla.
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. Ciertamente es pequeño, liviano y mucho más eficiente energéticamente que un proceso informático de propósito general completo como un x86 en una computadora de placa única.
fuente
Vas a lidiar con muchas señales de entrada. No necesariamente necesita una CPU con un alto rendimiento; Se pueden procesar muchas señales en paralelo. Este es el territorio típico de DSP. Por supuesto, también desea la funcionalidad general de la CPU. Esto no es problema Hay muchas 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.
fuente
Algunas observaciones:
No necesita 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 utilizar un protocolo de comunicación para que hablen.
Para un experimento, implementé un algoritmo AHRS con un filtro 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 podría ejecutar a aproximadamente 40 muestras / segundo. Con un controlador más rápido, debería poder transportarlo fácilmente y, por supuesto, puede probar el modo FPGA o DSP.
Yo diría que el control de las piernas no requiere mucha CPU y puede controlar todas las piernas juntas, tal vez por separado de las operaciones de trigonometría y evitación de obstáculos (ver 1)
fuente
La trigonometría es complicada, pero hay atajos. Si tiene poca potencia de procesamiento, considere el algoritmo CORDIC.
Básicamente es una tabla de valores para [por ejemplo] seno. Los ángulos pueden estar 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, establezca su resultado en el primer resultado (0.5). Si, al restar, su ángulo se volvió negativo, entonces AGREGUE el siguiente valor (y reste 0.25). De lo contrario, continúe restando ángulos y agregando resultados.
Cuando llegues al final de la tabla, todo lo que has hecho es sumar y restar, pero estás muy cerca. Hay un último "factor de violín" para multiplicar por.
La precisión [y velocidad] del resultado depende del tamaño [y la resolución] de la tabla de búsqueda.
fuente
Puede considerar usar 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 placas de extensión.
http://www.youtube.com/watch?v=RuYLTudcOaM
El modelo A Raspberry Pi puede hacer hasta 24 GFLOP de cómputo de punto flotante de uso general usando su GPU usando OpenGL ES 2 mientras se mantiene por debajo del presupuesto de potencia de 2.5W.
http://elinux.org/RPi_Hardware
Ejemplo: una configuración de robot con batería implementada con Raspberry Pi.
http://www.homofaciens.de/technics-robots-R3-construction_en_navion.htm
Ejemplo 2: un robot de 6 patas controlado por una frambuesa pi:
http://www.youtube.com/watch?v=Yhv43H5Omfc
Ejemplo 3: un robot de péndulo invertido de 2 ruedas con equilibrio automático controlado por una frambuesa pi:
http://www.youtube.com/watch?v=n-noFwc23y0
fuente
Para el robot con patas, puede crear algunas secuencias de movimiento de patas predefinidas y "reproducirlas". La evasión de obstáculos en tiempo real se puede hacer con una
fuzzy logic
implementación ligera donde todo vuelve a estar en formato de tabla y todo lo que necesita hacer es elegir el valor correcto y usarlo paradefuzzyfication
proceso.Todo se puede hacer en C en un procesador de alguna manera más rápido
ARM7
. Lo probéAVR
y fallé, después de pasar mucho tiempo transformando todofixed point arithmetics
.fuente
La plataforma Stellaris de Texas Instruments tiene una unidad de coma flotante a bordo por defecto. No estoy seguro de si el controlador ARM con reloj de 80MHz es lo suficientemente rápido para su aplicación, pero una placa de desarrollo LaunchPad es bastante barata: http://www.ti.com/ww/en/launchpad/stellaris_head.html
Es programable a través de USB, las cadenas de herramientas gratuitas están disponibles para al menos Windows y Linux, mide aproximadamente 4 × 6 cm y tiene más de 30 pines GPIO (si contaba correctamente).
fuente
Puede incrustar 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 económica de su problema. Pero sí, tiene que codificar mucho la arquitectura x86, pero afortunadamente puede captar gran cantidad de codificación de los códigos de SO de código abierto. (Si su construcción mecánica puede soportar este peso)
fuente