Repository navigation
Funcionamiento del robot
Se encuentran dos principales funcionalidades distintas en este tanque inteligente:
La primera funcionalidad permite que la cámara, montada sobre un servo en el coche, detecte y siga a una persona. Esto se logra mediante:
- Detección de personas utilizando un modelo de inteligencia artificial en el ESP32 que analiza imágenes en tiempo real llamado YOLO.
- Movimiento automático de la cámara: Los servos controlan la orientación de la cámara para que la persona permanezca centrada en la imagen.
- Filtro de confianza: La cámara solo se moverá si la detección tiene una confianza mayor al 80%.
Video.sin.titulo.Hecho.con.Clipchamp.7.mp4
La segunda funcionalidad permite controlar el movimiento del tanque inteligente a través de un mando a distancia vía bluetooth. Esto incluye:
- Control manual de dirección: Mover el coche hacia adelante, atrás, izquierda y derecha mediante comandos enviados desde un mando.
- Respuesta en tiempo real: Los comandos enviados se procesan rápidamente para garantizar una experiencia de control fluida teniendo en cuanta las limitaciones de latencia de la ESP32.
- Interfaz amigable: El mando ofrece una interfaz sencilla para facilitar la operación del coche ya que basta con encender el mando, encender el coche y vincular ambos vía bluetooth.
WhatsApp.Video.2024-11-19.at.14.00.56.mp4

(Foto realizada con Inkscape )
Antes de empezar es necesario tener instalado OpenCV y bien configurada la cámara ESP32 en el IDE de Arduino. Para ello es necesario seguir los siguientes pasos:
Una vez instalado, continuar con los siguientes pasos:
- Ejecutar el código CameraWebServer (se encuentra en este repositorio) en la ESP32. Seleccionar el puerto correspondiente y de nombre de board: ESP32 Wrover Module. Para ello es necesario conectar la ESP con un cable de extremos USB-C y USB.

- Usar la URL mostrada en el Serial Monitor del IDE de Ardino:

Si no aparece el Serial Monitor, pulsar arriba a la derecha en:
- El código tarda en subirse. Una vez subido, abrir la página web de la url dada y hacer click en 'start stream':

Después hacer click en 'VFlip' una o dos veces hasta que la cámara se muestre rotada ( en nuestro caso sí tenemos que rotar la imagen debido a la manera de acoplar la cámara en el hardware):

Por último, hay que elegir la resolución de imagen, un formato mayor hará que la torreta apunte con mayor precisión más adelante al emplear openCV, sin embargo también requiere un coste computacional mayor y puede tener cierto 'delay' cuando se retransmita el vídeo.

Una vez se complete este paso:
- Ejecutar el código 'yoloElegoo.py' como módulo, de la siguiente manera en el terminal:
python -m yoloElegoo
Este código empezará a utilizar su propia red neuronal de YOLO para detectar personas y mandará por MQTT la información al topic que se muestra en el propio código. El código lo hará con todo lo que se muestre en pantalla, por lo que nos tenemos que ir a la página web anterior, cerrar el menú pulsando en las tres barras superiores izquierdas y preparar la página para que cuando más adelante lancemos el código como tal, entremos en esta página web y pulsemos f11 para que el video se muestre a pantalla completa (lo ampliamos y centramos lo que sea necesario) y openCV realice su trabajo sobre toda la pantalla. Si se tienen dos monitores, se puede observar en uno el video entero y en la otra se puede seguir manipulando las interfaces y el código. Es importante tener en cuenta que todo lo que se muestre en la pantalla, será lo que use opencv para el procesado de imagen, por eso se comenta todo este procedimiento.
-
Ejecutar en el arduino de Elegoo el código de 'arduino_code.ino', para ello cambiamos la palanca de la placa de 'camera' a 'upload'. Esta palanca se encuentra al lado de la entrada de corriente a la placa ( la que conecta el arduino de Elegoo con el ordenador por USB).
-
Se ejecuta el código de arduino y una vez se haya subido correctamente, se vuelve a cambiar la palanca a 'camera'. De esta manera pueden comunicarse la ESP32 y el arduino usando la comunicación 'Serial'.
-
Ahora es momento (como se comentaba anteriormente) de dejar el video que se publica en la url, en pantalla completa.
-
Ante cualquier problema dela imagen retransmitida por la cámara, se debe pulsar el botón de reset de la propia cámara ESP32. En caso de encontrar problemas con el resto de la funcionalidad, se debe de pulsar el botón de reset de la propia placa de Elegoo.

- Ejecutar el código "ControllerEsp.ino" (se encuentra en este repositorio) en la ESP32. Seleccionar el puerto correspondiente y de nombre de board: ESP32 Wrover Module. Para ello es necesario conectar la ESP con un cable de extremos USB-C y USB.

- Ejecutar el código "Controller.ino" (se encuentra en este repositorio) en el Arduino. Seleccionar el puerto correspondiente y de nombre de board: Arduino Uno. Para ello es necesario conectar el Arduino con un cable de extremos USB-B 2.0 y USB.

- Instalar la librería de control bluetooth bluepad32. Para ello, podemos hacerlo tanto desde el propio Arduino IDE o podemos descargarlo de fuentes si fuera necesario. En cualquiera de los dos casos basta con seguir los pasoso de instalación de los creadores de bluepad32. Es importante también en el apartado de Preferences->Additional boards manager URLs añadir los siguientes json
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
https://raw.githubusercontent.com/ricardoquesada/esp32-arduino-lib-builder/master/bluepad32_files/package_esp32_bluepad32_index.json

- Por ultimo, una vez ejecutado el código tanto en la ESP32 como en en Arduino bastaría con pulsar el botón de reset de la ESP32 para que este empiece a buscar nuestro mando bluetooth.

-
Cuando la ESP32 ya esta funcionando, tenemos que poner nuestro mando bluetooth en modo emparejamiento y cuando ambos se encuentren todo debería funcionar correctamente.
-
Para comandar velocidades a el coche puede ser un poco lioso dependiendo de el mando que estemos usando ya que la cantidad de soporte de mando es bastante amplio. Pero al menos con los que nosotros hemos probado, Nintendo Switch Pro Controller y Dualshock 4, las velocidades se mandan a través de la cruceta.

