# Proyecto Cuadrúpedo ## Descripción del Proyecto El proyecto consiste en el desarrollo de un robot cuadrúpedo destinado a mejorar la seguridad en la industria minera al explorar áreas peligrosas e inaccesibles para los trabajadores humanos, como túneles estrechos, zonas con gases tóxicos o riesgo de colapso. La implementación en hardware implicará la construcción de un chasis ligero capaz de soportar las condiciones ambientales propias de la mina y que tenga un grado de protección IP ante polvo y agua, pero lo suficientemente ligero para no impedir movimientos ágiles del robot por su entorno. Este robot estará equipado con una suite de sensores exteroceptivos y propioceptivos que le permitirá estimar de manera robusta su estado actual y el de su entorno en tiempo real. Para este fin, se desarrollará el software de la plataforma utilizando un enfoque modular inalámbrico basado en ROS2, con simulaciones en Gazebo y Rviz para validar el sistema antes de desplegarlo y permitir desarrollo continuo de sus subcomponentes. Posteriormente, será desplegado en la supercomputadora de Inteligencia Artificial llamada Jetson Orin Nano de Nvidia. En cuanto a la gestión energética, se diseñarán baterías eficientes, con buena durabilidad y factor de forma optimizado para asegurar lograr un mayor tiempo de uso sin recargar y extender el tiempo de vida de las baterías durante el momento de operación. Se abordarán cuatro aspectos clave durante el desarrollo del software: percepción, planificación, comunicación y control. Los algoritmos avanzados de percepción permitirán al robot interpretar la transmisión de video y detectar en tiempo real elementos usando sus sensores exteroceptivos, proporcionando información acerca de los cambios topográficos y anomalías geológicas en áreas que presenten grietas o fisuras. Se desarrollarán algoritmos de planificación de trayectorias para garantizar un movimiento seguro y eficiente, evitando colisiones y obstáculos en la mayoría de los casos. Se establecerán sistemas resilientes de comunicación para la interacción con operadores humanos a distancia de manera segura en entornos denegados, facilitando la supervisión remota y la transmisión de datos en tiempo real. Además, se implementarán algoritmos de control modernos para garantizar una locomoción fluida y estable del robot en diversos terrenos y condiciones operativas. Cabe resaltar que, en estas condiciones, los robots a ruedas y drones tienen una operatividad limitada, por lo que este proyecto ofrece una prueba de concepto que pretende ser validada en los entornos competentes y, en el futuro, poder ser incluido durante las actividades diarias en una operación minera. Es decir, se espera que el robot sea programado para realizar inspecciones regulares de manera autónoma de la infraestructura minera, permitiendo la detección temprana de problemas de seguridad o mantenimiento y contribuyendo así a una actividad minera más tecnológica y segura en el Perú. ## Conocimientos Previos Software ### GIT y GitHub Desktop GIT es un software de control de versiones. Los proyectos generalmente tienen múltiples desarrolladores trabajando en paralelo. Así que necesitan un sistema de control de versiones para asegurarse de que no hay conflictos de código entre ellos. El sistema de ramas en Git permite a los desarrolladores trabajar individualmente en una tarea (Por ejemplo: una rama -> una tarea O una Rama -> un desarrollador). Básicamente, se puede pensar en Git como una aplicación de software pequeña que controla tu código base, si eres un desarrollador. En un nivel más alto, GitHub es un servicio en la nube que ayuda a los desarrolladores a almacenar, administrar su código y crear repositorios basados en GIT, al igual que llevar un registro y control de cualquier cambio sobre este código. #### Flujo de Git * Git fetch: Descarga archivos de un repositorio remoto a tu repositorio local. Este comando descarga el contenido remoto, pero no actualiza el estado de trabajo del repositorio local, por lo que el trabajo actual no se verá afectado. * Git pull: El comando git pull se emplea para extraer y descargar contenido desde un repositorio remoto y actualizar al instante el repositorio local para reflejar ese contenido. * Git push: Se usa para cargar contenido del repositorio local a un repositorio remoto. * Git merge: Se usa para fusionar una rama con otra rama activa. * Git add: Se usa para agregar archivos al área de preparación. * Git commit: Captura una instantánea de los archivos del área de preparación y las guarda en el repositorio local. Las instantáneas confirmadas pueden considerarse como versiones "seguras" de un proyecto.
Instalar ubuntu se puede hacer de varias maneras, la más sencilla es atravez de [wsl2](https://learn.microsoft.com/es-es/windows/wsl/install), las otras son dual boot y a travez de una máquina virtual.
1. wsl (instalación fácil, recomendado)
2. dual boot (instalación tediosa, recomendado)
3. máquina virtual (no recomendado)
#### Instalar wsl en windows
Para esto se puede seguir la guía oficial de windows [link](https://learn.microsoft.com/es-es/windows/wsl/) o sino siga estos pasos:
##### Abrir un terminal de windows PowerShell o Windows Command en modo administrador.
###### Image
##### Ejecutar
```bash
wsl --install -d Ubuntu-22.04
```
###### Output (en el caso de ustedes se procedera con la instalación)
##### Descargar visual estudio code
```bash
wsl --install -d Ubuntu-22.04
```
#### Instalar Ubuntu en dual boot
Para instalar rn dual boot se encuentran varios videos de youtube, [video](https://www.youtube.com/watch?v=FId4-IO-yj4)
#### Instalar ROS2 Humble
Para instalar Ros2 Humble solo seguir el siguiente [documento](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html) o en tal caso ejecutar las siguientes lineas de codigo en el terminal.
##### Configuración regional o local
```bash
locale # check for UTF-8
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale # verify settings
```
##### Setup resources
```bash
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
```
##### Install ros2
```bash
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop
```
##### Configuración de entorno
Cada vez que se abre una nueva terminal, es necesario configurarla utilizando el siguiente comando:
```bash
source /opt/ros/humble/setup.bash
```
Si no desea realizar esta acción manualmente cada vez, puede agregar esta línea al archivo .bashrc, el cual se ejecuta automáticamente cada vez que se abre una nueva terminal. Para hacerlo, utilice el siguiente comando:
```bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
```
Después de modificar el archivo .bashrc, es necesario reiniciar la terminal actual para que los cambios surtan efecto. Esto solo es necesario si continúa trabajando en la misma terminal, ya que el archivo .bashrc se ejecuta automáticamente al abrir una nueva terminal. Para aplicar los cambios en la terminal actual, ejecute:
```bash
source ~/.bashrc
```
##### Probar un ejemplo básico
Abrir un terminal y ejecutar
###### Terminal 1
```bash
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker
```
###### Terminal 2
```bash
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener
```
Ejecutar source **/opt/ros/humble/setup.bash** solo es necesario si no se agrego la línea source **/opt/ros/humble/setup.bash** al archivo **.bashrc.**
###### Output terminal 1
###### Output terminal 2
## Configuración de entorno
```bash
source ~/quadruped_robot_ws/install/setup.bash
```
### Lanzamiento
```bash
ros2 launch quadruped_description rviz_fake_joints.launch.xml
```
#### Output