3. | Comenzar a programar con robobopy
Antes de comenzar la descripción de los métodos de Python que nos permitirán programar a Robobo, es necesario instalar la librería correctamente y tener claros algunos conceptos clave para realizar los programas con éxito.
3.1 Instalación de la librería, importación y conexión con Robobo
Para poder ejecutar código en el robot, es necesario instalar la librería robobopy. Para ello utilizaremos el gestor de paquetes de Python pip (Package Installer for Python).
A continuación, se explican los pasos para instalar esta librería con pip. Para ello, usaremos la terminal PowerShell de Windows:
- Escribimos “PowerShell” en el campo de búsqueda de la barra de Windows.
- Aparecerá la opción “Windows PowerShell”. Se seleccionará esta opción.
- A continuación, se abrirá una ventana con la terminal “Windows PowerShell”.
4. Para instalar la librería, se ejecutará en la terminal PowerShell el siguiente comando:
C:\> pip install robobopy
NOTA: para la versión de MacOS podría ser necesario utilizar el comando pip3.
Todos los programas que se desarrollen en Python para programar al robot Robobo tienen una primera parte inicial común: importar la librería robobopy y realizar la conexión con el robot real o con el simulador.
Siempre será necesario incluir al menos las siguientes líneas:
- Se importa la clase Robobo de la librería robobopy.
from robobopy.Robobo import Robobo
- Se crea un objeto de la clase Robobo, indicando la dirección IP de Robobo.
2.1 En el caso del robot físico, se pone la IP correspondiente. Por ejemplo, si la IP es 10.113.26.130 se incluye la siguiente línea:
rob = Robobo("10.113.26.130")
rob = Robobo("10.113.26.150")
2.2 En el caso del simulador, lo habitual es tenerlo instalado en el mismo ordenador en el que se realizan los programas, con lo que la dirección será "localhost".
rob = Robobo("localhost")
- Se establece la conexión con el simulador, a través del método
connect:
rob.connect()
Más detalles sobre la configuración del robot Robobo en Python están desarrollados en:
3.2 Ventana de monitorización
Mientras se están creando programas con Robobo, puede ser necesario conocer el valor de los sensores de cara a establecer umbrales o valores de referencia. Por este motivo, Robobo incluye una ventana de monitorización web, que es altamente recomendable tener abierta.
Para acceder a esta ventana, basta con ir a esta URL:
https://monitor.theroboboproject.com/
En la página que se abre, debemos escribir, en la parte superior izquierda, la dirección IP del robot real o bien localhost si estamos usando RoboboSim, y pulsar el botón Connect.
La ventana de monitorización mostrará los valores de los diferentes sensores en tiempo real según van cambiando.
3.3 Conexión de robobopy y RoboboSim
Una vez instalada la aplicación, podemos comprobar su correcto funcionamiento en RoboboSim mediante la ejecución de un programa de ejemplo simple. Antes de nada, se debe ejecutar el simulador, y en la pantalla inicial, se accede a la selección de mundos a través del botón “World select”.
Se elige un mundo; por ejemplo, “Four Walls”.
Al pulsar sobre la imagen en miniatura del mundo, se muestra una pantalla como la siguiente:
A continuación, creamos un archivo “prueba.py” en Visual Studio Code (u otro IDE similar) con el siguiente contenido:
# Importamos la librería
from robobopy.Robobo import Robobo
# Creamos una instancia de la clase Robobo con la dirección IP “localhost
rob = Robobo("localhost")
# Conectamos con el simulador
rob.connect()
# Robobo se mueve en línea recta durante 4 segundos
rob.moveWheelsByTime(10, 10, 4)
# Desconectamos Robobo
rob.disconnect()
El último paso es ejecutar el ejemplo y el robot debería moverse en línea recta durante 4 segundos.
Es importante destacar que algunos módulos no están implementados en el simulador y, por lo tanto, no se puede utilizar ninguno de sus métodos. Los módulos no implementados en el simulador son:
• Micrófono.
• Detección facial.
• Detección de líneas.
• Detección de carriles.
La cámara del simulador siempre está activa por defecto, por lo que los métodos startCamera y stopCamera no están implementados. Además, solo se trabaja con la cámara frontal del teléfono, por lo que los métodos setFrontCamera y setBackCamera no están implementados.
Justo al comienzo de la ejecución de un programa en el simulador, los valores de los sensores no están cargados todavía, por lo que hay que esperar un instante para poder leerlos. Si la primera instrucción de un programa consiste en leer un sensor, puede devolver un valor de 0, que no se correspondería con el valor medido en otro momento para las mismas condiciones.
Por último, el simulador puede emitir sonidos como el robot real, pero también es posible mostrar un bocadillo con el texto que se está reproduciendo.
3.4 Clases y enumerados requeridos
En algunos casos, los parámetros que reciben los métodos o los valores que devuelven son clases o enumerados que se encuentran en otros módulos y, por tanto, tendremos que añadir un import de las clases o enumerados que necesitemos.
En cada grupo de métodos se describen de forma detallada las clases y los enumerados necesarios para la utilización de ese grupo de métodos.
Por ejemplo, Robobo tiene varios infrarrojos para detectar la distancia a los objetos cercanos. Estos infrarrojos están almacenados en el enumerado IR. El método readIRSensor sirve para leer los valores detectados por un infrarrojo, pero es necesario especificar qué sensor infrarrojo se desea leer. Para eso se utiliza el enumerado IR, y antes de utilizarlo es necesario añadir la siguiente línea:
from robobopy.utls.IR import IR3.5 Modos de ejecución
Los métodos de Robobo permiten, en la mayoría de los casos, dos modos de ejecución: bloqueante y no bloqueante:
• Una instrucción es bloqueante cuando evita que se realice otra hasta que la instrucción en curso termine su ejecución completamente.
• Una instrucción es no bloqueante cuando permite que se ejecute otra al mismo tiempo. Por ejemplo: el robot avanza hacia delante (instrucción de movimiento), al mismo tiempo gira la cabeza (instrucción de movimiento) y comunica información a través del altavoz (instrucción de producción de sonido).
3.6 Método wait
El método wait es un método especial que hace que Robobo espere durante el tiempo indicado antes de ejecutar la siguiente instrucción. A lo largo de este manual se utiliza en muchos de los ejemplos.
| wait(seconds) |
| Pausa el programa durante el tiempo especificado. Después de ese tiempo, se ejecuta la siguiente instrucción. Parámetros: • seconds (float): El tiempo en segundos. Los valores deben ser positivos. |
Ejemplo de Uso
El siguiente programa hace que Robobo se mueva en línea recta hacia delante durante dos segundos; luego espera durante dos segundos y, por último, se vuelve a mover durante dos segundos.
from robobopy.Robobo import Robobo
from robobopy.utils.Wheels import Wheels
rob = Robobo("localhost")
rob.connect()
rob.moveWheelsByTime(10, 10, 2)
rob.wait(2)
rob.moveWheelsByTime(10, 10, 2)
3.7 Módulos habilitados y deshabilitados
Un módulo agrupa un conjunto de métodos que puede utilizar Robobo. Para mejorar el rendimiento, algunos módulos están deshabilitados por defecto. Para utilizar estos módulos, es necesario activarlos. Después de utilizarlos, es recomendable deshabilitarlos.
Por ejemplo, la detección de ArUco está deshabilitada por defecto. Para utilizar cualquier método relacionado con la detección de ArUcos, como el método readArucoTag, primero es necesario habilitar el módulo con el método startArUcoTagDetection. Después de trabajar con la detección de ArUcos, se puede deshabilitar con el método stopArUcoTagDetection.
Los módulos habilitados por defecto son:
• Detección de caras.
• Detección de blobs.
• Detección de QRs.
Los módulos deshabilitados por defecto son:
• Stream de la cámara.
• Detección de líneas.
• Detección de carriles.
• Reconocimiento de objetos.
• Detección de ArUcos.
3.8 Coordenadas de la pantalla
En algunos métodos se utilizan coordenadas para indicar la posición de ciertos elementos dentro de la pantalla.
Las coordenadas de la pantalla tienen su origen en la esquina superior izquierda de la pantalla, como se ve en la figura siguiente. El eje X sigue el borde superior de la pantalla, de izquierda a derecha. Toma valores entre 0 y 100, siendo 0 el borde izquierdo y 100 el borde derecho de la pantalla. El eje Y sigue el borde izquierdo de la pantalla, de arriba abajo. Toma valores entre 0 y 100, siendo 0 el borde superior y 100 el borde inferior de la pantalla.
3.9 Cambios persistentes
Algunos métodos afectan al hardware de Robobo. Los cambios persistentes permanecen incluso cuando el programa termina y hasta que Robobo se reinicia, momento en el que toma de nuevo todos los valores por defecto.
Por ejemplo, la detección de ArUcos está deshabilitada por defecto y se habilita con el método startArUcoTagDetection. A partir de ese momento, se puede utilizar cualquier método relacionado con la detección de ArUcos, como el método readArucoTag. Aunque finalice el programa, no será necesario habilitar de nuevo la detección de ArUcos hasta que Robobo se reinicie. Una vez reiniciado, el módulo estará de nuevo deshabilitado.
3. | Comenzar a programar con robobopy
Antes de comenzar la descripción de los métodos de Python que nos permitirán programar a Robobo, es necesario instalar la librería correctamente, y tener claros algunos conceptos clave para realizar los programas con éxito. movil?
3.1 Instalación de la librería, importación y conexión con Robobo
Para poder ejecutar código en el robot, es necesario instalar la librería robobopy. Para ello utilizaremos el gestor de paquetes de Python pip (Package Installer for Python).
A continuación, se explican los pasos para instalar esta librería con pip. Para ello, usaremos la terminal PowerShell de Windows:
- Escribimos “PowerShell” en el campo de búsqueda de la barra de Windows.
- Aparecerá la opción “Windows PowerShell”. Se seleccionará esta opción.
- A continuación, se abrirá una ventana con la terminal “Windows PowerShell”.
4. Para instalar la librería, se ejecutará en la terminal PowerShell el siguiente comando:
C:\> pip install robobopy
NOTA: para la versión de MacOS podría ser necesario utilizar el comando pip3.
Todos los programas que se desarrollen en Python para programar al robot Robobo tienen una primera parte inicial común: importar la librería robobopy y realizar la conexión con el robot real o con el simulador.
Siempre será necesario incluir al menos las siguientes líneas:
- Se importa la clase Robobo de la librería robobopy.
robobopy.Robobo import Robobo2. Se crea un objeto de la clase Robobo, indicando la dirección IP de Robobo.
2.1 En el caso del robot físico, se pone la IP correspondiente. Por ejemplo, si la IP es 10.113.26.130 se incluye la siguiente línea.
rob = Robobo("10.113.26.150")2.2 En el caso del simulador, lo habitual es tenerlo instalado en el mismo ordenador en el que se realizan los programas, con lo que la dirección será “localhost”.
Más detalles sobre la configuración del robot Robobo en Python están desarrollados en:
3.2 Ventana de monitorización
Mientras se están creando programas con Robobo, puede ser necesario conocer el valor de los sensores de cara a establecer umbrales o valores de referencia. Por este motivo, Robobo incluye una ventana de monitorización web, que es altamente recomendable tener abierta. Para acceder a esta ventana, basta con ir a esta url: https://monitor.theroboboproject.com/
En la página que se abre, debemos escribir, en la parte superior izquierda, la dirección IP del robot real o bien localhost si estamos usando RoboboSim, y pulsar el botón Connect.
La ventana de monitorización mostrará los valores de los diferentes sensors en tiempo real según van cambiando.
3.3 Conexión de robobopy y RoboboSim
Una vez instalada la aplicación, podemos comprobar su correcto funcionamiento en RoboboSim mediante la ejecución de un programa de ejemplo simple. Antes de nada, se debe ejecutar el simulador, y en la pantalla inicial, se accede a la selección de mundos a través del botón “World select”.
Se elige un mundo; por ejemplo, “Four Walls”.
Al pulsar sobre la imagen en miniatura del mundo, se muestra una pantalla como la siguiente:
A continuación, creamos un archivo “prueba.py” en Visual Studio Code (u otro IDE similar) con el siguiente contenido:
# Importamos la librería
from robobopy.Robobo import Robobo
# Creamos una instancia de la clase
Robobo con la dirección IP “localhost
rob = Robobo("localhost")
# Conectamos con el simulador
rob.connect()
# Robobo se mueve en línea recta
durante 4 segundos
rob.moveWheelsByTime(10, 10, 4)
# Desconectamos Robobo
rob.disconnect()
El último paso es ejecutar el ejemplo y el robot debería moverse en línea recta durante 4 segundos.
Es importante destacar que algunos módulos no están implementados en el simulador y, por lo tanto, no se puede utilizar ninguno de sus métodos. Los módulos no implementados en el simulador son:
• Micrófono.
• Detección facial.
• Detección de líneas.
• Detección de carriles.
La cámara del simulador siempre está activa por defecto, por lo que los métodos startCamera y stopCamera no están implementados. Además, solo se trabaja con la cámara frontal del teléfono, por lo que los métodos setFrontCamera y setBackCamera no están implementados.
Justo al comienzo de la ejecución de un programa en el simulador, los valores de los sensores no están cargados todavía, por lo que hay que esperar un instante para poder leerlos. Si la primera instrucción de un programa consiste en leer un sensor, puede devolver un valor de 0, que no se correspondería con el valor medido en otro momento para las mismas condiciones.
Por último, el simulador puede emitir sonidos como el robot real, pero también es posible mostrar un bocadillo con el texto que se está reproduciendo.
3.4 Clases y enumerados requeridos
En algunos casos, los parámetros que reciben los métodos o los valores que devuelven son clases o enumerados que se encuentran en otros módulos y, por tanto, tendremos que añadir un import de las clases o enumerados que necesitemos.
En cada grupo de métodos se describen de forma detallada las clases y los enumerados necesarios para la utilización de ese grupo de métodos.
Por ejemplo, Robobo tiene varios infrarrojos para detectar la distancia a los objetos cercanos. Estos infrarrojos están almacenados en el enumerado IR. El método readIRSensor sirve para leer los valores detectados por un infrarrojo, pero es necesario especificar qué sensor infrarrojo se desea leer. Para eso se utiliza el enumerado IR, y antes de utilizarlo es necesario añadir la siguiente línea:
from robobopy.utls.IR import IR3.5 Modos de ejecución
Los métodos de Robobo permiten, en la mayoría de los casos, dos modos de ejecución: bloqueante y no bloqueante:
• Una instrucción es bloqueante cuando evita que se realice otra hasta que la instrucción en curso termine su ejecución completamente.
• Una instrucción es no bloqueante cuando permite que se ejecute otra al mismo tiempo. Por ejemplo: el robot avanza hacia delante (instrucción de movimiento), al mismo tiempo gira la cabeza (instrucción de movimiento) y comunica información a través del altavoz (instrucción de producción de sonido).
3.6 Método wait
El método wait es un método especial que hacer que Robobo espere durante el tiempo indicado antes de ejecutar la siguiente instrucción. A lo largo de este manual se utiliza en muchos de los ejemplos.
| wait(seconds) |
|
Pausa el programa durante el tiempo especificado. Después de ese tiempo, se ejecuta la siguiente instrucción. Parámetros: • seconds (float): El tiempo en segundos. Los valores deben ser positivos. |
Ejemplo de Uso
El siguiente programa hace que Robobo se mueva en línea recta hacia delante durante dos segundos; luego espera durante dos segundos y, por último, se vuelve a mover durante dos segundos.
from robobopy.Robobo import Robobo
from robobopy.utils.Wheels
import Wheels
rob = Robobo("localhost")
rob.connect()
rob.moveWheelsByTime(10, 10, 2)
rob.wait(2)
rob.moveWheelsByTime(10, 10, 2)3.7 Módulos habilitados y deshabilitados
Un módulo agrupa un conjunto de métodos que puede utilizar Robobo. Para mejorar el rendimiento, algunos módulos están deshabilitados por defecto. Para utilizar estos módulos, es necesario activarlos. Después de utilizarlos, es recomendable deshabilitarlos.
Por ejemplo, la detección de ArUco está deshabilitada por defecto. Para utilizar cualquier método relacionado con la detección de ArUcos, como el método readArucoTag, primero es necesario habilitar el módulo con el método startArUcoTagDetection. Después de trabajar con la detección de ArUcos, se puede deshabilitar con el método stopArUcoTagDetection.
Los módulos habilitados por defecto son:
• Detección de caras.
• Detección de blobs.
• Detección de QRs.
Los módulos deshabilitados por defecto son:
• Stream de la cámara.
• Detección de líneas.
• Detección de carriles.
• Reconocimiento de objetos.
• Detección de ArUcos.
3.8 Coordenadas de la pantalla
En algunos métodos se utilizan coordenadas para indicar la posición de ciertos elementos dentro de la pantalla.
Las coordenadas de la pantalla tienen su origen en la esquina superior izquierda de la pantalla, como se ve en la figura siguiente. El eje X sigue el borde superior de la pantalla, de izquierda a derecha. Toma valores entre 0 y 100, siendo 0 el borde izquierdo y 100 el borde derecho de la pantalla. El eje Y sigue el borde izquierdo de la pantalla, de arriba abajo. Toma valores entre 0 y 100, siendo 0 el borde superior y 0 el borde inferior de la pantalla.
3.9 Cambios persistentes
Algunos métodos afectan al hardware de Robobo. Los cambios persistentes permanecen incluso cuando el programa termina y hasta que Robobo se reinicia, momento en el que toma de nuevo todos los valores por defecto.
Por ejemplo, la detección de ArUcos está deshabilitada por defecto y se habilita con el método startArUcoTagDetection. A partir de ese momento, se puede utilizar cualquier método relacionado con la detección de ArUcos, como el método readArucoTag. Aunque finalice el programa, no será necesario habilitar de nuevo la detección de ArUcos hasta que Robobo se reinicie. Una vez reiniciado, el módulo estará de nuevo deshabilitado.