Logo
Published on

Waspr Project - From galvos to Turrets

Authors

Februar 22 - Aiming to the target


TODO Translate this!

Ahora sé que puedo mover el puntero, y puedo reconocer objetivos por colores en la cámara. El siguiente paso será intentar apuntar al objetivo.

Empiezo haciendo un programa que recibe la imagen de la cámara, la muestra por pantalla, y luego puedo hacer click sobre la imagen para establecer un objetivo. El programa debería reconocer el puntero láser en cada imagen. Si el puntero láser está por debajo del objetivo en el que hice click debería dar la orden de girar un poquito el motor del eje Y para mover puntero un poco hacia arriba. Cuanto más cerca esté el láser del objetivo, más pequeño será el pasito para acercarse. Esto se repetiría por cada imagen que se vaya recibiendo de la cámara, hasta que el puntero esté sobre el punto en el que hice click.

Bueno, funcionar, funciona, pero el resultado es bastante lamentable. Hago pruebas para intentar hacer el movimiento más rápido y más fluido, pero sólo consigo fracasos y frustración.

Investigando por qué se mueve tan lento y a trompicones me doy cuenta de que los motores no hacen nada si intento dar pasos pequeñitos. Todas las órdenes que el programa le da a los motores para mover el puntero menos de un centímetro son ignoradas. Luego, si el programa da órdenes cada vez más grandes, el puntero se mueve de repente mucho más de lo que debería.

Buscando información sobre este comportamiento aprendo sobre un nuevo concepto: la banda muerta. Resulta que por razones de cómo funcionan internamente los servo motores, se añade a propósito, durante la fabricación, esta necesidad de un cambio mínimo. ¿y por qué?. Pues los servo motores reciben la dirección en la que deben apuntar a través de la intensidad eléctrica que reciben en un tercer cable. Para dejar el motor inmóvil en una posición determinada, habría que mantener perfectamente constante esa intensidad del tercer cable. Pero mantener una intensidad constante es prácticamente imposible, por eso se opta a ignorar cambios pequeños de intensidad. El rango de intensidades que se deciden ignorar es lo que se conoce como banda muerta. Añadir una banda muerta ancha es últil para reducir el gasto de energía en micro-movimientos que serían probablemente indeseados. Pero para mí, es una putada.

Leo además que los servos suelen llevar engranajes de reducción, que sirven para controlar la velocidad a la que gira el eje y para aumentar su fuerza (torsión). El problema es que estos engranajes tienen siempre imperfecciones en el ensamblado, lo que aumenta la banda muerta. Especialmente cuando los engranajes son de plástico, cómo los que yo tengo. Pero me costaron como 2 euros cada uno. No se puede pretender hacer bolsos de seda con una oreja de cerdo.

Entonces, el problema que tengo es de principalmente de precisión. Para solucionar esto se me ocurren dos cosas:

  1. Comprar unos servo motores de mejor calidad
  2. Pasar de los servos y usar motores de pasos

Sobre motores de pasos no tengo ni puta idea, así que mejor probar primero si el problema se soluciona con servos mejores.

Compro dos servos de metal, con engranajes de metal, por 18 y 17 euros.