HRI - RoboticsURJC/tfg-jlopez GitHub Wiki

HRI (Human-robot interaction) o también conocido en español como interacción humano-robot. Es importante definir en el proyecto el tipo de interacción que tiene que existir en este robot y yo creo que para el objetivo final debe ser como teleoperado.

Para profundizar en la explicación y los tipos que existen, me he basado en las siguientes fuentes: fuente 1 y fuente 2.

Para poder conseguir que el robot sea teleoperado, es importante crear una interfaz sencilla para poder manejarlo. Sin embargo, no es tarea fácil ya que es necesario instalar y configurar el servidor web en la Raspberry Pi y poder crear un entorno gráfico sencillo para el usuario. El objetivo final sería crear una app y poder controlar el movimiento del robot desde ella.

Instalación y Configuración de un Servidor Web en Raspberry Pi

  • Paso 1, actualiza la lista de paquetes disponibles e instala las actualizaciones disponibles:
sudo apt-get update
sudo apt-get upgrade
  • Paso 2: Instalar Apache y PHP

¿Qué es Apache?

El servidor HTTP Apache es un servidor web HTTP de código abierto, para plataformas Unix, BSD, GNU/Linux, Microsoft Windows, Macintosh y otras, que implementa el protocolo HTTP/1.1 y la noción de sitio virtual según la normativa RFC 2616.

¿Qué es PHP?

sudo apt install apache2 php libapache2-mod-php
  • Paso 3: Reiniciar Apache

Reinicia el servidor Apache para asegurarte de que se carguen los cambios:

sudo /etc/init.d/apache2 restart
  • Paso 4: Otorgar Permisos
sudo chown www-data:www-data /var/www/html/

Otorga permisos a la carpeta /var/www/html:

sudo chmod 775 /var/www/html/

Añade el usuario pi al grupo www-data:

sudo usermod -a -G www-data pi
  • Paso 5: Editar el Archivo sudoers

Edita el archivo sudoers para otorgar permisos adicionales al grupo www-data:

sudo visudo

Agrega la siguiente línea al final del archivo:

www-data ALL=(root) NOPASSWD:ALL

  • Paso 6: Reiniciar el Servidor
sudo /etc/init.d/apache2 restart
  • Paso 7: Prueba desde el Navegador Web

Prueba la configuración desde tu navegador web colocando en la URL la IP de tu Raspberry Pi. Por ejemplo:

http://192.168.5.75/
  • Paso 8: Crear un Archivo de Prueba
sudo nano /var/www/html/hola_mundo.php

Agrega el siguiente código en el archivo, cierra y guárdalo:

<?php
echo "HOLA MUNDO DESDE RASPBIAN";
?>
  • Paso 9: Acceder al Archivo de Prueba
http://192.168.5.75/hola_mundo.php

Deberías ver la salida "HOLA MUNDO DESDE RASPBIAN".

Estos pasos los he seguido gracias al siguiente tutorial.

Creación del entorno gráfico

A partir de este tutorial, lo quiero aplicar para crear la interfaz gráfica. Casualmente, la misma fuente de información que buscaba también tiene un ejemplo parecido que yo terminaré adoptando a mi manera.

Internamente el proyecto funciona así (descripción obtenido del tutorial):

Desde un dispositivo móvil por ejemplo una tablet o un celular nos conectamos al navegador web, haciendo petición al servidor web, que está instalado en la Raspberry PI, el cual nos responderá con una interfaz de control, que cuenta con 5 botones, avanza, izquierda, derecha, retrocede y detenido; entonces por ejemplo cuando damos clic en el botón adelante, este se conecta internamente con PHP a través de jQuery-Ajax, donde PHP ejecuta el script de Python llamado avanza.py, el cual envía las señales al puente H, para poner en marcha los dos motores en un mismo sentido, y este mismo proceso se repite cuando habilitamos los demás botones-estados.

Todos los códigos para que funcionen como aplicación web tienen que estar almacenadas en /var/www/html ya que Apache tiene definido que se encuentren en ese path. Además, para tener los cambios localizados en el repo, he decidido incluirlo en control.

Los comandos que uso para ir probando los cambios en el servidor web son (y se puede ver este path en concreto):

pi@raspberrypi:~/Desktop/tfg-jlopez/code/control $ sudo rm -rf /var/www/html/control/*
pi@raspberrypi:~/Desktop/tfg-jlopez/code/control $ sudo cp  -r *  /var/www/html/control

En mi caso he hecho las siguientes versiones:

- Versión 1

Como primera versión he decidido crear las diferentes imágenes para mejorar el entorno gráfico y el resultado final sería este:

Además, he asignado el código de testing_motors3.py a la aplicación web como primera versión. Sin embargo, el movimiento obtenido no es el deseado: solo se mueve 1 segundo por cada vez que se pulsa y no cambia si antes de ese segundo se pulsa otra tecla. El objetivo ideal sería que el movimiento fuese continuo y se pudiese cambiar instantáneamente cuando se pulse otra tecla.

Video demostración de esta versión:

- Versión 2

En esta segunda versión he decidido mejorar el movimiento de los motores y por ello todo está documentado allí. A nivel de la propia interfaz no he tocado nada.

Video demostración de esta versión:

Incluir favicon

He incluido un favicon al entorno gráfico para solucionar el problema de la interfaz en el entorno gráfico. He usado las siguientes fuentes: fuente 1 y fuente 2