9/08/2016

Introducción a Dynamixel

Saludos,
como ha sido el final de las vacaciones?... Pues imagino que traumático para casi todos, al segundo día ya estábamos mirando el calendario a ver cuándo caían las siguientes. Pero como era de esperar, hay mucho trabajo que hacer.


Hoy os hablare de mi pequeña experiencia con los servos Dynamixel, recordáis la anterior publicación del "el tentáculo que quería reptar",  pues la historia continua. Los tentáculos se emplearán para un Workshop la semana que viene, pero también para la semana que viene tengo que tener tres brazos como estos, para realizar una performance entre otros robots.







Con los servos Dynamixel tenía ganas de trabajar, pues son los 100% bellota de los servos, al igual que su precio. Pero descubrí que hay una familia de pequeñines los XL-320 con un precio razonable. Igual que paso con casi todos los sensores, motores, placas etc. Buscas en google como conectar/controlar con Arduino/Genuino, hay otros tantos, pero es como las consultas de Linux, de Ubuntu hay mas información. Y de cómo controlar estos servos.





Pues es algo tan sencillo como bajarse la librería, abrir uno de sus ejemplos básicos “XL320_servo_example” y a correr. Explicar que este ejemplo emplea la librería <SoftwareSerial.h> para no usarla, el pin de data está conectado directamente al TX del serial Pin 1. Pero podemos emplear el SoftwareSerial y conectar el data al pin 11, y el serial emplearlo de debugger.





Que problemas os encontrareis. Bien el programa “XL320_servo_set_baud_rate_or_id” sí que o cambia el baud rate de comunicación con el servo, pero no nos cambia la dirección, y esto es porque los servos se ponen automáticamente a 9600 baud cuando se le va a cambiar la id, si la velocidad es otra pasa de ti. Aquí os dejo una versión modificada,  simplemente a la variable newID le asignáis la dirección que queréis dar al servo, cargáis el programa conectáis el servo, solamente el que vais a programar y pulsáis el reset, si la configuración se ha realizado correctamente el servo se moverá aleatoriamente, eso si os los dejara a 9600.


Hacer el setup de uno en uno


Otro problema que tendréis, es la imposibilidad de tener feedback del servo, al solo emplear el pin de transmitir, no recibiréis nada del servo y si puenteáis los pines TX/RX tampoco os funcionara. Es malo esto, depende de lo que quieras hacer, tener un servo con muy buenas prestaciones y no poder hacer uso de ellas.





Algunas posibles soluciones 


Soluciones unas cuantas, 74HC126, 74LS241, lo que me obligaba a ir de compras… La mayor fuerza del progreso es la pereza, aunque también es su problema. Porque digo esto, tratar de evitar tenerme que dar un paseo me ha hecho mirar y remirar en webs, foros, etc. Tenía pensado hacer una prueba con el MAX485 que sé que tengo en el trabajo, pero he encontrado algo más simple en esta web. Lo que me ha hecho buscar en las estanterías componentes para conseguir este simple circuito. Pues bien funciona, se puede enviar y recibir información.





Hay una ligera desviación de la orden de movimiento y la lectura que hace pero no es preocupante.



Anakleto.

8 comentarios:

  1. Buena noche
    Tengo un inconveniente con los servos, estoy trabajando con la opencm 9.04 y necesito reiniciar los servos a su estado de fabrica. Me podrías ayudar, gracias.

    ResponderEliminar
  2. Amigo logre solucionarlo...!!!! dejo el comentario por si a alguien le puede ser útil.
    Al trabajar con la tarjeta controladora OPENCM 9.04 y los motores dynamixel XL 320 debes tener en cuenta el ID y los Bad de comunicación... pero es de suma importancia verificar el estado de cada motor... Me explico:

    - En mi caso la tarjeta OpenCM 9.04 funcionaba bien, pero por mas de que descargara los códigos era inútil generar movimiento en los sevos XL 320.
    - Intente leer los datos de posición de los servomotores y para mi sorpresa funciono la lectura, entonces no estaba quemada ni la tarjeta ni los servos.
    - Yendo un poco mas a fondo, descubrí que cuando lees información del servo motor el torque se vuelve casi nulo, esto con el fin de poder manipular los servos mientras se encuentran con alimentación de voltaje.
    Como solución encontré que se debe fijar el valor de Dxl.maxTorque(NUM_ID, 1023), así pues se habilita nuevamente la función de movimiento. Tal vez no parezca muy importante pero me tomo algo de tiempo solucionarlo

    ResponderEliminar
  3. Perdona que no te haya podido atender. Pero me alegra que los hayas podido solucionar y gracias por comentar la solución.

    ResponderEliminar
  4. Hello first thank you for this ! I have a probleme !I 've got success the operation for one servo but when i try to do the same thing for my second xl320 it don t work, can i change the id of each xl320 separatly or have i to do it by pluging the first and then the second one to assign him the new id ?

    ResponderEliminar
    Respuestas
    1. To change the direction and the baurate must be done one by one.

      Eliminar
    2. hello please help me with working of xl with arduino uno
      its doesnt work for infinite turn mode please refer me something so that i can do it.

      Eliminar
  5. bonjour je n'arrive pas à parametrer et utiliser le deuxième XL320 , le premier fonctionne mais le second non . merci de votre aide !

    ResponderEliminar
    Respuestas
    1. bonjour, pour configurer les servos, vous devez le faire un par un, séparément.

      Eliminar