Reproduciendo movimientos grabados con servos

2

Soy nuevo en motores / servos, así que podría hacer con un poco de consejo. Actualmente estoy trabajando con 3 servos Dynamixel y es genial que puedan programarse con bastante facilidad y puedo obtener la posición actual cuando se desactiva el par. Actualmente estoy tratando de grabar movimientos y luego reproducirlos.

En este momento tengo un enfoque muy básico: grabo un conjunto de posiciones a lo largo del tiempo (varias veces por segundo) y cuando "reproduzco" las posiciones, simplemente las paso como posiciones objetivo. El problema está en este momento, con incrementos de posición lentos, tengo movimientos bruscos. Me imagino que es porque sigo estableciendo una nueva posición de objetivo, aunque algunas posiciones están bastante cerca. Me imagino que será más eficiente dividir de alguna manera una lista densa de posiciones en algunas posiciones "clave" separadas en un intervalo de tiempo mayor y solo establecer una nueva posición de meta para esos tiempos "clave".

¿Esto suena razonable? Si es así, ¿hay algún consejo sobre lo que debería hacer para comenzar? Si no, ¿qué ideas hay por ahí? ¿Cómo se ocupan los robots de animación de las personas con el movimiento de grabación y con su uso?

    
pregunta George Profenza

2 respuestas

3

El movimiento brusco es probablemente causado por el hecho de que el servo puede moverse bastante rápido en comparación con la velocidad a la que está enviando comandos de posición. Si tuviera que grabar el movimiento en una cámara de alta velocidad y reproducirlo a cámara lenta, lo que vería es que el servo se mueve rápidamente hacia su posición de destino y comienza a disminuir su velocidad cuando alcanza esa posición, finalmente parada en el objetivo.

Luego, le envías una nueva posición de destino, y se acelera rápidamente hasta la velocidad máxima, luego vuelve a disminuir la velocidad y se detiene en el próximo objetivo.

Si tuviera que registrar el doble de posiciones, de modo que envíe los objetivos con el doble de frecuencia, es posible que el motor no se haya detenido por completo antes de que llegue el próximo objetivo. En ese punto, vuelve a acelerar. Esto producirá un movimiento notablemente más suave, porque hay menos variación en la velocidad (el servo nunca se detiene por completo).

Vuelve a duplicar la tasa objetivo y obtendrás un movimiento aún más suave. Personalmente, sugiero enviar objetivos a la tasa más alta que puedas. Esto no significa que deba tomar más lecturas de posición. Puede usar interpolación lineal (o interpolación cúbica, desplácese hacia abajo hasta la sección de interpolación en mi página sobre Perlin Noise ) para aumentar el número de posiciones de destino.

Cuanto más a menudo envíes las posiciones de destino, menos variará la velocidad del servo y más suave será su movimiento.

Pero, si prestas atención, notarás que cada vez que llega un nuevo objetivo, el servo no ha alcanzado su objetivo anterior. Por lo tanto, el servo siempre llega tarde a sus objetivos.

Esto puede no ser un problema para usted, y es el comportamiento normal de un servo. Mientras no le estés pidiendo al servo que vaya más rápido de lo que es capaz, entonces no se quedará tan atrás y probablemente no notarás el error.

Si realmente necesitas que el servo esté muerto en el blanco todo el tiempo. Por ejemplo, si está operando una fresadora CNC y necesita mecanizar metal con una precisión de 10um, entonces necesita usar un lazo de control de posición / velocidad que conozca la lista de las próximas posiciones de destino, y pueda controlar el velocidad en consecuencia. Probablemente no sea posible hacer esto con un servo Dynamixel.

    
respondido por el Rocketmagnet
2

Los servos no están destinados a moverse rápido. Ofrecen un alto par y una baja velocidad con relativa precisión dependiendo de la aplicación.

Supongo que es desigual porque le estás dando posiciones con objetivo con demasiada frecuencia y, antes de que alcance una posición que tienes que alcanzar, recibe otro comando para ir a otra parte.

Podrías grabar los movimientos más lentamente si la velocidad, de hecho, es el problema. O tal vez podría grabar los movimientos a un ritmo normal, y reproducirlos a un ritmo más lento.

O bien, su opción de asignación de clave a posición de objetivo también parece estar bien, es solo que se perderán las posiciones no clave, y no sé cuán importantes son para lo que intenta hacer.

Finalmente, supongamos que tienes posiciones de objetivos como estas:

0 - > 90 - > 180

Tire los 90 si va de 0 a 90 y de 90 a 180 al mismo ritmo. De lo contrario, se detendrá a los 90 y aumentará la sacudida. Creo que estabas entendiendo esto, pero solo quería ser más claro.

    
respondido por el capcom

Lea otras preguntas en las etiquetas