2. The EU-8’s impact on the objectives of ENP
2.2 The CEECs’ impact on the Council’s decisions to impose sanctions
2.2.1 The CEECs’ preferences with regard to the type of sanctions to be
El prototipo de robot autobalanceado, hace una lectura de 200 veces por segundo del chip MPU6050 (acelerómetro y giroscopio), de tal manera que calcula el ángulo con respecto a un horizonte y compara este ángulo con el ángulo seleccionado (0° si se quiere mantener el equilibrio sin moverse, o un ángulo positivo o negativo para moverse hacia adelante o hacia atrás). De tal modo que usando la diferencia entre el ángulo seleccionado y el ángulo real conduce a un sistema de control para enviar los comandos correctos a los motores, y así mantener el equilibrio. Los comandos hacia los motores son la aceleración, por ejemplo, si el robot esta inclinado hacia adelante, el microcontrolador envía una orden a los motores para que aceleren hacia adelante hasta que el ángulo se reduzca a cero y de esta manera mantener el equilibrio.
UNIVERSIDAD DISTRITAL 58
Figura 45 Esquema del algoritmo de control [Fuente el autor]
En la figura 45 refleja el esquema del algoritmo de control, Para iniciar la lectura
del sensor, el prototipo de robot necesita estar al menos entre 10 y 15 segundos sin movimiento, el MPU6050 está conectado vía I2C con el microcontrolador, va adquiriendo las lecturas del microchip y haciendo la estimación del ángulo utilizando un filtro complementario, que es la combinación entre los datos tomados del giroscopio y el acelerómetro. Una vez hecho el cálculo del ángulo estimado, la salida de este cálculo entra al algoritmo de control, primero pasa por un controlador de estabilidad (control de estabilidad). Para el prototipo, el centro de gravedad no siempre está ubicado encima del eje de las ruedas, por lo que es necesario ajustar un poco el ángulo de inclinación para mantener el equilibrio. Por esto es necesario hacer uso de un segundo controlador (controlador de velocidad), éste compensa la inclinación para mantener al prototipo equilibrado. De tal modo que para complementar se utiliza un controlador PID estándar para la estabilidad del robot, donde un controlador PI se usa para el control de la velocidad y un controlador PD para la estabilidad (ángulo del robot), la salida de este controlador es la aceleración de los motores.3.4.1. Ángulo de inclinación.
Para encontrar la posición angular del prototipo de robot autobalanceado es necesario hacer uso de un filtro complementario para esto el MPU6050 detecta el cambio de aceleración y la velocidad angular. Esta clase de filtro depende de un ángulo determinado por las aceleraciones y por un ángulo determinado por la velocidad angular. El ángulo determinado por las aceleraciones se halla de la siguiente manera; La aceleración de la gravedad (ag) afectará en este caso a dos
componentes básicos, una aceleración en el eje Y (ay), y una aceleración en el
UNIVERSIDAD DISTRITAL 59 Figura 46 Aceleraciones en el MPU6050 [55]
El ángulo de desviación del prototipo es el mismo ángulo que se deforma entre los vectores (Figura 47), la gravedad y la aceleración en z, así que para encontrar ese ángulo de desviación se hace uso de una función trigonométrica, el arco tangente.
Figura 47 Angulo de desviación del prototipo [55]
∅ = tan
−1𝑎
𝑦𝑎
𝑧De tal manera que, para adquirir el ángulo a partir de las aceleraciones, el primer paso es declarar las variables y a continuación encontrar el ángulo a partir de las aceleraciones, de la siguiente manera;
Donde “accel_angle” es el ángulo de inclinación, “accel_t_gyro.value.y_accel” es la aceleración en el Y, y “accel_t_giro.value.z_accel” es la aceleración en Z. Este
UNIVERSIDAD DISTRITAL 60
resultado da en radianes, después se multiplica por una constante “RAD2GRAD” que tiene el valor de 57.2957795, para poder hacer la conversión a grados. Para encontrar el ángulo a partir de la velocidad angular, es necesario integrar la velocidad y conocer el ángulo inicial, para ello se usa la siguiente formula:
∅ = ∅
𝑥0+ 𝑊
𝑥∆𝑡
Cuando se refiere a Øx se refiere al ángulo que gira el eje X sobre su propio eje. Como se puede ver en la siguiente imagen.
Figura 48 ángulo que gira el eje X sobre su propio eje.[56]
Por consiguiente, para poder calcular el ángulo con la velocidad angular, primero se hace la conversión a grados por segundo, de la siguiente manera:
Ya hecho la conversión, el paso siguiente es hacer uso del filtro complementario, de tal manera que se toman las señales de movimiento lento del acelerómetro y las señales de movimiento rápido de un giroscopio y de esta manera poder combinarlas. El objetivo es pasar las señales del acelerómetro a través de un filtro pasa bajo y las señales del giroscopio a través de un filtro pasa alto, en su forma más simple el filtro complementario se puede usar de la siguiente manera:
𝑎𝑛𝑔𝑙𝑒 = (1 − 𝑎𝑙𝑝ℎ𝑎) ∗ (𝑎𝑛𝑔𝑙𝑒 + 𝑔𝑦𝑟𝑜 ∗ 𝑑𝑡) + (𝑎𝑙𝑝ℎ𝑎) ∗ (𝑎𝑐𝑐)
Donde el Alpha es la relación entre el tiempo que se desea tomar la muestra y la frecuencia de muestro, gyro es el ángulo del giroscopio y acc es el ángulo del acelerómetro, dt es el tiempo que ha pasado desde que se ha calculado el filtro. Para este caso se toma un alfa de 0.99, y en el algoritmo se implementa a continuación:UNIVERSIDAD DISTRITAL 61
Y para determinar el dt se mide el transcurso de tiempo en que el Arduino empezó a ejecutar el programa actual, con la función micros, que permite determinar el número de microsegundos. Una vez adquiere el valor de tiempo de inicio, se toma la diferencia entre un valor anterior y un valor nuevo, y se multiplica para tener el valor de dt en segundos.
3.4.2. Control
De tal manera que, para mantener una posición estable, el prototipo de robot debe conducir sus ruedas en dirección a la de su caída, y así poder mantener el centro de gravedad del robot por encima del punto de giro. Para poder conducir las ruedas en la dirección de caída, se debe saber el ángulo de inclinación y la velocidad a la que está cayendo.
Figura 49 Comportamiento del prototipo de robot (1. Posición estable, 2. Posición inclinada, 3. Corrección de posición) [Fuente el autor]
UNIVERSIDAD DISTRITAL 62
Una vez ajustado y calibrado la lectura del ángulo de inclinación del prototipo, el paso siguiente es calcular una velocidad estimada(estimated_speed). Para eso se toma la velocidad de los dos motores combinados (actual_robot_speed), junto con la velocidad del robot que es leída por el IMU (angular_velocity), para mejorar la calidad de la lectura de la velocidad, al final se pasa por un filtro pasa bajo en la velocidad estimada.
La velocidad estimada junto con un setpiont de velocidad, se introducen en un tipo de control PI el cual arroja como resultado un valor de ángulo de inclinación. Las entradas del sistema son la variación de tiempo (DT), la velocidad estimada (input), la velocidad deseada (setpoint), las variantes de Kp y Ki. Arrojando el resultado un ángulo de posición.
El paso siguiente es introducir esta salida de ángulo estimado al controlador PD, el control de estabilidad. Para lo cual se hace uso del ángulo estimado calculado anteriormente, anexando las K’s del sistema su salida es la posición. De la siguiente manera.
UNIVERSIDAD DISTRITAL 63
Esta salida es convertida en datos hacia la librería steeper, que toma los datos de dirección y aceleración, ya que se deriva dos veces la posición, y la salida de este controlador realmente es la aceleración hacia los motores, como se puede ver en las siguientes líneas de código, donde se deriva por segunda vez la posición. Son la salida hacia el driver de los motores paso a paso.
3.5. Implementación de cámara.
El prototipo de robot autobalanceado cuenta con una cámara instalada en el brazo, que permite la Teleoperación del robot, en esta parte del documento se recopila una serie de pasos que permiten la instalación y adecuación de cámara para la trasmisión de imágenes que puede proyectar el prototipo de robot autobalanceado. Para lo cual se tuvo en cuenta el uso de una raspberry pi, y una cámara web.
En la implementación de la cámara, primero se debe tener instalado el sistema operativo Raspbian (Anexo 1), una vez realizada la instalación y activando las características de SSH y VNC de la raspberry (Anexo 2), se debe establecer una conexión con la red creada por el módulo ESP8266. Para ello se tiene que dejar
UNIVERSIDAD DISTRITAL 64
la IP fija, de tal manera que se edita el archivo “interfaces”, en la consola se debe digitar la siguiente línea de código:
Dentro de este archivo se deben añadir, modificar o sustituir las líneas que falten, estas modificaciones sirven en la mayoría de las versiones de raspbian, así como también en las distribuciones basadas e Debian, Ubuntu, etc. En algunas ocasiones puede generarse conflictos de red. El archivo queda modificado como se ve en la Figura 50.
Figura 50 Archivo interfaces modificado IP estática [Fuente el autor]
Se ha dejado la IP estática en la declaración de eth0, así mismo se añadió un auto. Por otro lado, en eth0 se configuro la dirección de IP deseada (address) en el caso de la conexión ethernet es 192.168.10.2, la máscara de red (netmask), normalmente se hace uso de 255.255.255.0 y la puerta de enlace (gateway) se configuro la puerta con la IP 192.168.10.1, se deja estas configuraciones de eth0 para poder acceder a la raspberry usando una comunicación cableada. Así mismo se configura la conexión vía wifi, en la puerta de enlace se inserta la IP 192.168.4.1 que se crea con el módulo ESP8266, además del nombre de la red wifi (wpa-ssid) para este caso se creó “JJROBOTS_15”, y se anexa su contraseña (wpa-passhrase) “87654321”.
El paso por seguir es instalar es el software Motion, tiene como función el monitoreo de señal de video de una o más cámaras, con detección de
UNIVERSIDAD DISTRITAL 65
movimiento. Lo conveniente para hacer esta instalación es actualizar el sistema, usando los comandos “Update” y “Upgrade”.
Una vez instalado el programa con el comando “sudo apt—get install motion”, se conecta la cámara web por alguno de los puertos USB de la raspberry, paso siguiente, se debe enviar el comando “lusb”, este arroja los dispositivos conectados en los puertos USB.
En este caso da una lista, y en el puerto 4 se encuentra la cámara con el nombre de “Genesys logic inc”. El paso siguiente es ajustar algunos componentes del archivo en el programa motion, para ello se entra con el comando “sudo nano /etc/motion/motion.conf” una vez dentro del archivo, se modifican las siguientes líneas de código:
1. Cambiar la línea de código “Daemon” a ON
2. Configurar el “framerate” por cualquier valor entre 2 a 100.
UNIVERSIDAD DISTRITAL 66
Al finalizar estas modificaciones, se guarda las configuraciones oprimiendo las teclas CTRL+O, y se accede a la opción de guardar, después se debe salir del archivo con las teclas CTRL+X, para dar inicio al programa motion, en primer lugar, se tiene que reiniciar el software, para esto se escribe el comando “sudo service motion restart”, y paso siguiente digitar el comando “sudo motion”.
También se puede dar inicio al programa motion, con el comando “sudo service motion start”-
Para parar la transmisión se ejecuta el comando “sudo service motion stop”.
A continuación, se conecta un dispositivo a la red creada por el módulo, y se abre un navegador. En el navegador se digita la IP estática de la raspberry con el puerto 8081, en este caso 192.168.4.200:8081, a continuación, saldrá la imagen proyectada por la cámara y trasmitida en la red.
UNIVERSIDAD DISTRITAL 67
3.6. Comunicación Inalámbrica.
Como se ha descrito anteriormente, la comunicación para la trasmisión de datos entre la interfaz gráfica y el robot, se hace uso de un módulo wifi que está en integrado con una plataforma denominada BRAIN SHIELD. De tal manera que le permite una conexión vía Wifi, además es compatible con el protocolo TCP/IP, y cumple con el objetivo de dar acceso a cualquier microcontrolador a una red. En este caso, la comunicación entre el módulo y el microcontrolador es serial (figura 25). Una vez conectado, el paso siguiente es programar el módulo ESP8266 haciendo uso de los comandos AT.
Se empieza por reiniciar el módulo con el comando “AT+RST”, el módulo en respuesta a este comando envía un mensaje de “OK”, una vez reseteado se procede a generar una red Wifi, con el comando “AT+CWMODE=2”, el modo que se selecciono es “AP” el cual configura el módulo en modo de punto de acceso, hace que el dispositivo proporcione a otros dispositivos una red Wifi, el número de dispositivos que pueden conectarse simultáneamente al módulo es de 0 a 8. Se configura al punto de acceso con el nombre de la red “JJROBOTS” y su contraseña es “87654321”.
Después se crea un servidor UDP, seleccionando el comando “AT+CIPMUX=0”, y configurando los parámetros de puerto en 2223 y 2222. Y la dirección de IP del servidor que es por defecto “192.168.4.1” y el cliente tomaría la dirección de “192.168.4.2”.
UNIVERSIDAD DISTRITAL 68
Este tipo de configuración permitirá conectarse con cualquier dispositivo que tenga una conexión a wifi, ya que el ESP8266 crea la red (Figura 45), y de esta manera se puede conectar la interfaz gráfica, este en cualquier dispositivo, un Smartphone o una Tablet, se puede conectar a la red del prototipo de robot, y así pueda interactuar en la manipulación del robot.
Figura 52 Red del prototipo [Fuente el autor].
3.7. Interfaz Gráfica.
Para la comunicación entre el prototipo de robot autobalanceado y el operador, se hace uso de un protocolo de comunicación especializado “OSC”, su función principal es la manipulación entre un computador y un instrumento musical como sintetizadores de sonido y otros dispositivos multimedia en tiempo real [47], en este caso se crea una interfaz gráfica para la manipulación del prototipo de robot, ya que esta herramienta moderna permite la interoperabilidad, precisión, flexibilidad y una mejor organización.
UNIVERSIDAD DISTRITAL 69
El primer paso es instalar El programa touchOSC EDITOR en el computador, este permite crear una interfaz con elementos como: Faders,Rotary controls, Encoder controls, Push Buttons, Toggle Buttons, XY pads, Multi-push, multi- toggles, multi-pads, LEDs, Labels, Time y baterry displays.
Figura 53 TouchOSC EDITOR [Fuente el autor]
El propósito de usar esta aplicación es que el prototipo de robot autobalnceado pueda ser controlado por el usuario desde casi cualquier dispositivo existente, y se puede controlar vía remota usando el protocolo OSC a través de una conexión a internet utilizando paquetes UDP, una forma ligera y eficiente de enviar comandos al prototipo.
UNIVERSIDAD DISTRITAL 70
Figura 54 Ventana para crear botones [Fuente el autor]
Para seleccionar la clase de botones e indicadores, se debe dar clic derecho sobre la pantalla negra, aparecerá una ventana donde se puede elegir el tipo de botón o indicador (figura 41 interfaz TouchOSC EDITOR.)
Cada vez que se crea un nuevo botón, se puede modificar su nombre, su rango de valor, el tamaño del botón y su ubicación dentro de la interfaz, estos parámetros están ubicados en la parte izquierda de la interfaz del programa TouchOSC EDITOR.
UNIVERSIDAD DISTRITAL 71
Los parámetros de los botones para el manejo del prototipo de robot autobalanceado son:
• Fader1: rango de valor 0 a 1, color naranja. Se interpreta como la aceleración del robot
• Fader2: rango de valor de 0 a 1, color verde. Se interpreta como la dirección (izquierda o derecha).
• Push1: rango de valor 0 a 1, color amarillo, opción “send on press” activada. Se interpreta como el botón que maneja la visión de la cámara.
Figura 56 Interfaz gráfica PRAS (Prototipo de Robot Autobalanceado con fines de Seguridad) [Fuente el autor]
Creada la interfaz gráfica, se guarda como un tipo de archivo “touchosc”, ahora en el dispositivo con el que se podrá operar el prototipo de robot, se debe descargar la aplicación TouchOSC, se puede descargar desde la playstore para los dispositivos que manejen el sistema operativo Android, básicamente es una superficie de control OCS.
UNIVERSIDAD DISTRITAL 72
Figura 57 Aplicación Touch OSC [Fuente el autor]
Descargada e instalada la aplicación, el paso siguiente es configurar los parámetros de comunicación “OSC”, para lo cual la aplicación cuenta con las siguientes opciones:
Figura 58 Parámetros de comunicación OSC. [Fuente el autor]
En el parámetro “Host” se introduce el servidor en este caso es la IP “192.168.4.1” configurada en el módulo ESP8266, el puerto de salida “2222” y el puerto de entrada “2223”.
UNIVERSIDAD DISTRITAL 73
El paso por seguir es grabar la interfaz gráfica dentro del dispositivo con el cual se va a interactuar, en este caso un smartphone, el programa TouchOSCEditor crea un archivo tipo “.touchosc”, se conecta el dispositivo al computador y se guarda el archivo dentro del dispositivo.
Figura 59 Programa TouchOSCEditor y Archivo "UD.touchosc" [Fuente el autor]
Una vez guardado, se debe ir a la aplicación OSC, y después al menú de configuraciones y escoger la opción layout, allí se despliega un selector de interfaces gráficas predeterminadas.
Figura 60 Menu de Layout(Cuadro rojo) e interfaces graficas predeterminadas (cuadro azul) [Fuente el autor]
UNIVERSIDAD DISTRITAL 74
Además, cuenta con la opción de agregar una nueva interfaz gráfica “Add from file”, allí se elige la dirección del archivo donde se guardó la interfaz gráfica diseñada, y el resultado de la interfaz en el dispositivo es:
Figura 61 Interfaz gráfica vista desde un dispositivo (smartphone o Tablet) [Fuente el autor]
Para enviar datos y recibir datos de la interfaz gráfica, se debe hacer uso de la librería OSC message y OSC bundle, una vez instaladas, para recibir datos solo hay que dar la instrucción de “OSC.MsgRead();” y separar los mensajes de lectura en un vector, y hacer la conversión a enteros para poder ser operados en el programa del algoritmo de control.