grabación de secuencia de movimiento / movimiento de manera eficiente y precisa

1

Tenemos una plataforma de movimiento (camera - pan & tilt) que está controlada por un usuario mediante un joystick (por lo que las entradas de demanda son pan & velocidad de inclinación).

La plataforma en sí utiliza motores paso a paso, por lo que tenemos un circuito de control en nuestro micro que maneja el movimiento. Puede correr hacia la velocidad requerida (joystick) o moverse a posiciones absolutas, en ambos casos teniendo en cuenta las curvas de aceleración / desaceleración, los límites de velocidad / objetivos y los límites de movimiento (topes finales).

Lo que queremos implementar es una grabación y reproducción de una secuencia de movimientos ejecutados por el usuario bajo el control del joystick. Esto presenta un problema, ya que el usuario nos está dando velocidades (velocidad de giro del 50% a la derecha) en intervalos de tiempo irregulares y esperará que la cámara reproduzca sin problemas el movimiento mientras también golpea los mismos objetivos de posición que golpeó durante La "grabación": con un zoom de 50x, debe ser muy preciso, a unos pasos de distancia y apuntar a una pantalla completa lejos de lo que se supone que debe estar viendo.

Creo que esto pone algoritmos básicos, como registrar cambios en la velocidad de la demanda y amp; el tiempo en que se producen debido a la posibilidad de errores (especialmente errores acumulativos en secuencias complejas) es demasiado alto.

Hay varias maneras en las que puedo pensar en lograr esto, pero todas parecen bastante incómodas / poco elegantes y potencialmente requieren mucha memoria para un entorno incrustado pequeño (imagina la posición de grabación y la velocidad 10 veces por segundo durante 60 segundos) y Tengo la sensación de que me estoy perdiendo algo o repasando un viejo terreno para resolver un problema que ya se resolvió 100 veces antes, por ejemplo en robótica industrial.

¡Bienvenidos todos los pensamientos, enlaces y recomendaciones de lectura!

    
pregunta John U

2 respuestas

1

Respuesta re-trabajada total:

La clave es solo asegurarse de que los datos que van al controlador del motor sean los mismos, ya sea a través del joystick o la memoria. Por lo tanto, mientras los datos que almacenes y los datos del joystick puedan convertirse a una señal idéntica, que luego se envía a los motores, no es posible hacer nada más que dar el mismo resultado.

Un aspecto que debería ser útil es el impulso del motor, los pasos digitales con una resolución suficientemente alta eliminarán virtualmente los movimientos temblorosos de la cámara. Además, también puede tener circuitos para suavizar los pasos.

Entonces, en última instancia, los motores necesitarán una señal que corresponda a una velocidad. Y la posición del joystick corresponde a esa velocidad. Sin embargo, las señales entre ellas pueden tener una forma intermedia, que podría ser aceleración, posición o velocidad.

Usted dice que el almacenamiento de memoria será un problema. Pero como mínimo, deberá almacenar datos que representen la posición del joystick. No hay manera de evitar eso. Si desea una frecuencia de muestreo de 10Hz y el joystick tiene una alta resolución, necesitará unos 10 valores registrados por segundo. Pero durante más de 60 segundos, esto solo necesita 600 palabras almacenadas en la memoria RAM, que está disponible cómodamente en procesadores de bajo costo. Por ejemplo, el AT91SAM3X8E (como se usa en el Arduino Due) tiene 96 kB, que a 10 Hz de X e Y da un tiempo de grabación de 80 minutos.

    
respondido por el CL22
0

El enfoque se vuelve claro una vez que te das cuenta de lo que realmente hace el sistema:

  1. La entrada de velocidad se da desde el joystick.

  2. Un generador de trayectoria toma la entrada del joystick y genera los puntos de referencia de posición , con las curvas adecuadas, etc.

  3. Un controlador de posición acciona los motores para seguir el punto de ajuste de posición.

Al grabar, guarda la salida de (2). Al reproducir, sustituya (2) con una grabación. Puede comprimir los datos, por ejemplo, mediante el uso de histéresis y codificación de longitud de ejecución.

    
respondido por el Kuba Ober

Lea otras preguntas en las etiquetas