Programación de JUS con Python.

Este tutorial se corresponde con el repositorio https://github.com/therobotacademy/Maestro, que nos servirá para controlar el Micro Maestro de Pololu y, por tanto, nuestro robot JUS mediante scripts en Python. En este repositorio, encontraremos numerosos ejemplos creados para aprender los comandos más utilizados y motivar a los usuarios a modificarlos y crear los suyos propios.

Repositorio Maestro

Con la siguiente explicación, entenderás cómo se utiliza el repositorio Maestro, que se encuentra en GitHub y que nos servirá para controlar el Micro Maestro de Pololu y, por tanto, nuestro robot JUS mediante scripts en Python. En este repositorio, encontraremos numerosos ejemplos creados para aprender los comandos más utilizados y motivar a los usuarios a modificarlos y crear los suyos propios.

Importante: en el repositorio Maestro podremos observar que hay muchas parejas de scripts del estilo de fw.py / fw-.py. El primero de ellos, está destinado a aquellos servos que ya vengan con el sentido de rotación invertido en uno de ellos. En caso contrario, es necesario invertir manualmente el sentido de giro de uno de los servos, que es lo que se hace en los scripts que incluyen el carácter "-".

Indicaciones generales:

  • Para clonar el repositorio en vuestro robot (o en vuestro PC), ejecutad el siguiente comando en el directorio deseado:
    git init && git clone https://github.com/therobotacademy/Maestro
  • Para ejecutar cualquiera de los scripts, ejecutad el siguiente comando:
    python nombre_del_script.py

A continuación, vamos a describir brevemente el funcionamiento de los scripts fundamentales:

  • maestro.py: se trata de la librería que permite la comunicación en lenguaje Python entre la Raspberry y el Micro Maestro. Incluye la clase Controller y, dentro de ella, los métodos que es posible utilizar. Los más importantes y utilizados son: setTarget (manda una posición al servo, aunque en nuestro caso, al utilizar servos de rotación continua, estaremos mandando una velocidad. El valor de velocidad puede ser digital o analógico, en cuyo caso iría, aproximadamente, desde 3000 hasta 9000. De 3000 a 6000 va en un sentido y de 6000 a 9000 en el otro, siendo 6000 el valor más bajo en ambos casos) y getPosition (que se utiliza para leer el canal que deseemos como, por ejemplo, en nuestro caso, el canal 0, que se corresponde con el sensor Sharp). Sin embargo, hemos creado un nuevo método a partir de setTarget que hace que el uso sea más intuitivo: setTargetA. En este método, en lugar de tener como entrada un valor en cuartos de microsegundos que varíe entre 3000 y 9000, tiene un valor en cm/s. Por último, hemos incluido unas líneas de código para detectar automáticamente el identificador del puerto serie al que está conectado el Micro Maestro. Así, nos bastará con conectar el Micro para que funcione.

  • fw-.py: en este script, el robot se moverá hacia delante durante un tiempo especificado. Es el primer script en el que incluimos el método setTargetA, aunque en todos los demás podremos sustituir setTarget por el correspondiente setTargetA. No solo en llano también será capaz de ascender cuestas.

5

  • bk-.py: es equivalente al anterior, pero en sentido contrario.

  • cw-.py y ccw-.py: hacen girar al robot en el sentido horario y antihorario, respectivamente. Si en el nombre del script se incluye "forever", el movimiento será continuo, es decir, sin parar.

  • stop.py: como indica su nombre, para el robot.

  • 3avoid_obstacles-.py: con este script nuestro robot girará si detecta un objeto a una distancia menor a una especificada por nosotros y luego seguirá hacia delante. Será un robot evitador de obstáculos.

5

  • 3read_sharp.py: al ejecutar este script, obtendremos en la terminal las medidas de nuestro sensor de distancia. Hay que realizar una recta de mínimos cuadrados cuyos puntos relacionen el voltaje con la distancia correspondiente. La ecuación que represente esa recta será la regla de conversión entre el voltaje que mide el sensor de distancia y la distancia a la que se encuentra dicho sensor.

5

  • straight_calibration.py: este script tiene como objetivo subsanar los defectos físicos y mecánicos de los servos y el robot. Cada servo, debido a defectos de fabricación, tiene una respuesta ligeramente distinta para una velocidad determinada. A causa de esto, nuestro robot puede desviarse cuando vaya en línea recta.

5

Para solucionar dicho problema deberemos hacer pruebas experimentales con el script fw-.py para averiguar que servomotor actúa con mayor potencia, y posteriormente, debemos alterar el parámetro correc del archivo python straight_calibration.py, que mide el porcentaje de corrección que hay que subsanar entre ambos servos en un rango de que va desde 0 hasta 1 y que se debe ir variando hasta que nuestro robot consiga ir en línea recta a una velocidad determinada.Todo ello se realizará por el método de ensayo y error.

5

  • cam_still.sh: cuando lanzamos este script de bash, la PiCamera hace una foto y la guarda en el directorio que nos encontremos con el nombre "cam.jpg". Para abrir la imagen ejecutaremos por línea de comando  eom cam.jpg

5

Una vez comprendidos estos scripts, es fácil modificarlos, mezclarlos o incluso crear algunos desde cero. Desde The Robot Academy, os animamos a que lo hagáis y compartáis con toda nuestra comunidad vuestros resultados e innovaciones y, por supuesto, todas las dudas que os puedan surgir.