{"id":29087112,"url":"https://github.com/zuecopio/rom_2425","last_synced_at":"2025-06-28T01:07:40.359Z","repository":{"id":300179885,"uuid":"1003545041","full_name":"zuecopio/ROM_2425","owner":"zuecopio","description":"Mobile Robotics (ROM) subject works and practices","archived":false,"fork":false,"pushed_at":"2025-06-20T08:12:23.000Z","size":112401,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-20T09:24:21.244Z","etag":null,"topics":["coppeliasim","navigator2","ros2-humble","rviz","turtlebot3"],"latest_commit_sha":null,"homepage":"https://deepwiki.com/zuecopio/ROM_2425","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zuecopio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-17T10:01:25.000Z","updated_at":"2025-06-20T08:12:26.000Z","dependencies_parsed_at":"2025-06-20T09:35:25.525Z","dependency_job_id":null,"html_url":"https://github.com/zuecopio/ROM_2425","commit_stats":null,"previous_names":["zuecopio/rom_2425"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zuecopio/ROM_2425","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zuecopio%2FROM_2425","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zuecopio%2FROM_2425/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zuecopio%2FROM_2425/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zuecopio%2FROM_2425/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zuecopio","download_url":"https://codeload.github.com/zuecopio/ROM_2425/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zuecopio%2FROM_2425/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262357555,"owners_count":23298465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["coppeliasim","navigator2","ros2-humble","rviz","turtlebot3"],"created_at":"2025-06-28T01:07:39.739Z","updated_at":"2025-06-28T01:07:40.336Z","avatar_url":"https://github.com/zuecopio.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🤖 Proyecto de Robótica Móvil\n\n![Imagen de ejemplo del proyecto.](media/main.png)\n\n## Índice\n\n- [Descripción](#-descripción)\n- [Objetivos](#-objetivos)\n- [Requisitos](#-requisitos)\n    - [Instalación de CoppeliaSim](#-instalación-de-coppeliasim)\n    - [Configuración del entorno de ROS 2](#-configuración-del-entorno-de-ros-2)\n    - [Clonar repositorio y compilar el paquete](#-clonar-repositorio-y-compilar-el-paquete)\n- [Ejecución del programa](#-ejecución-del-programa)\n    - [Paso 1. Cartografiar en escenario](#-paso-1-cartografiar-en-escenario)\n    - [Paso 2. Ejecutar programa principal](#-paso-2-ejecutar-programa-principal)\n- [Conclusiones](#-conclusiones)\n- [Trabajo a futuro](#-trabajo-a-futuro)\n- [Licencia](#-licencia)\n- [Agradecimientos](#-agradecimientos)\n\n## 📋 Descripción\n\nEste proyecto de robótica móvil tiene como objetivo desarrollar un sistema autónomo capaz de navegar y realizar tareas específicas en un entorno simulado utilizando ROS 2 y CoppeliaSim. \nEl robot será capaz de:\n- 🗺️ Cartografiar su entorno\n- 📍 Planificar rutas\n- 📦 Ejecutar órdenes de navegación para recoger y entregar objetos\n\n## 🎯 Objetivos\n\n- ✅ Desarrollar un sistema de navegación autónoma para un robot móvil.\n- ✅ Implementar la cartografía y localización del entorno utilizando ROS 2.\n- ✅ Integrar el simulador CoppeliaSim para pruebas y validación.\n- ✅ Crear un sistema de teleoperación para el control manual del robot.\n- ✅ Desarrollar un sistema de planificación de rutas y ejecución de órdenes.\n\n## 🧰 Requisitos\n\n- 🐢 ROS 2 Humble\n- 🖥️ CoppeliaSim Edu V4.9.0\n- 🤖 TurtleBot3\n- 🐧 Ubuntu 22.04\n\n### 🛠️ Instalación de CoppeliaSim\n\nPara instalar CoppeliaSim, sigue estos pasos:\n\n```bash\ncd ~\nwget https://downloads.coppeliarobotics.com/V4_9_0_rev6/CoppeliaSim_Edu_V4_9_0_rev6_Ubuntu22_04.tar.xz\ntar -xvf CoppeliaSim_Edu_V4_9_0_rev6_Ubuntu22_04.tar.xz\nrm CoppeliaSim_Edu_V4_9_0_rev6_Ubuntu22_04.tar.xz\necho \"export PATH=$PATH:~/CoppeliaSim_Edu_V4_9_0_rev6_Ubuntu22_04\" \u003e\u003e ~/.bashrc\n```\n\n### ⚙️ Configuración del entorno de ROS 2\n\nPara configurar el entorno de ROS 2, añade las siguientes líneas a tu archivo `~/.bashrc` desde la terminal:\n\n```bash\necho \"export ROS_DOMAIN_ID=0\" \u003e\u003e ~/.bashrc\necho \"source /opt/ros/humble/setup.bash\" \u003e\u003e ~/.bashrc\necho \"export TURTLEBOT3_MODEL=burger\" \u003e\u003e ~/.bashrc\necho \"export LDS_MODEL=LDS-02\" \u003e\u003e ~/.bashrc\n```\n\n### 👩‍💻 Clonar repositorio y compilar el paquete\n\nPara clonar el repositorio y compilar el paquete, sigue estos pasos:\n\n1. Clona el repositorio en una carpeta conocida:\n\n    ```bash\n    cd ~\n    git clone https://github.com/zuecopio/ROM_2425\n    ```\n\n2. Compila el paquete:\n\n    ```bash\n    cd ROM_2425/ros2_ws\n    colcon build\n    ```\n\n3. Configura el entorno para el paquete compilado, para hacer este valor permanente lo ponemos en el `.bashrc`:\n\n    ```bash\n    echo \"source ~/ROM_2425/ros2_ws/install/setup.bash\" \u003e\u003e ~/.bashrc\n    ```\n\n## 🚀 Ejecución del programa\n\n### 🔍 Paso 1. Cartografiar en escenario\n\n#### 🧭 Terminal 1 - Lanzar escenario de cartografia con CoppeliaSim:\n\n```bash\nros2 launch little_warehouse cartographer.launch.py resolution:=0.001\n```\n\n#### 🎮 Terminal 2 - Lanzar nodo teleoperador para moverse por el entorno:\n\n```bash\nros2 run turtlebot3_teleop teleop_keyboard\n```\n\n![A la derecha: escenario en CoppeliaSim; abajo a la izquierda: interfaz en RViz2; arriba a la izquierda: nodo de teleoperación.](media/cartographer.png)\n\n\u003e A la derecha: escenario en CoppeliaSim; abajo a la izquierda: interfaz en RViz2; arriba a la izquierda: nodo de teleoperación.\n\n#### 🗺️ Terminal 3 - Guardar el mapa (.pgm):\n\nUna vez ya se ha realizado una exploración del escenario, se ejecuta el siguiente comando para guardar un mapa.\n\n```bash\nros2 run nav2_map_server map_saver_cli -f ~/ROM_2425/ros2_ws/src/little_warehouse/maps/coppeliasim_map\n```\n\nEsto genera en la carpeta de `maps` un fichero `coppeliasim_map.yaml` y una imagen `coppeliasim_map.pgm`.\n\nEs posible que el mapa no se genere de la manera esperada, pero se puede ajustar utilizando una aplicación como GIMP.\n\n|   Imagen original del mapa   |    Imagen del mapa retocado con GIMP   |\n|------------------------------|----------------------------------------|\n| ![Imagen original del mapa](./media/coppeliasim_map.png) | ![Imagen del mapa retocado con GIMP](./media/coppeliasim_map_improved.png) |\n\nAdemás, se pueden agregar zonas de limitación de velocidad pintando áreas con diferentes tonalidades de gris. Cuanto más oscuro sea el color, menor será la velocidad permitida; en cambio, cuanto más claro sea, la limitación de velocidad será menos estricta.\n\n|   Imagen del mapa con las limitaciones de velocidad   |\n|------------------------------|\n| ![Imagen del mapa con las limitaciones de velocidad](./media/speed_mask_coppeliasim_map.png) |\n\n### 🧠 Paso 2. Ejecutar programa principal\n\nAsegúrate de cerrar todos los procesos anteriores.\n\n#### 🧪 Terminal 1 - Lanzar simulador:\n\n```bash\nros2 launch little_warehouse coppeliasim_no_rviz2.launch.py\n```\n\n![Escenario en CoppeliaSim.](media/coppeliasim_scene.png)\n\n\u003e Escenario en CoppeliaSim.\n\n\n#### 🛑 Terminal 2 - Limitador de velocidad:\n\nEsta terminal permanecerá a la espera de que se inicie el navegador con la [Terminal 3](#-terminal-3---navegación). Luego, finalizará su ejecución.\n\n```bash\ncd ~/ROM_2425/ros2_ws/src/little_warehouse  # importante situarse en esta carpeta\nros2 launch little_warehouse speed_limit.launch.py params_file:=./params/speed_params.yaml mask:=./maps/speed_mask_coppeliasim_map.yaml\n```\n\n#### 🧭 Terminal 3 - Navegación:\n\n```bash\ncd ~/ROM_2425/ros2_ws/src/little_warehouse # importante situarse en esta carpeta\nros2 launch little_warehouse navigation_with_speed_limit.launch.py map:=./maps/coppeliasim_map.yaml params_file:=./params/nav2_params_speed_limit.yaml\n```\n\n![Interfaz en RViz2 para la navegación.](media/rviz2_navegation.png)\n\n\u003e Interfaz en RViz2 para la navegación.\n\n#### 📦 Terminal 4 - Enviar orden de envío:\n\nPara iniciar la orden de un pedido, se ejecuta el nodo `navigation_node`. Si no se indica qué orden se desea lanzar, se utilizará, por defecto, la del lunes.\n\n```bash\nros2 run little_warehouse navigation_node\n```\n\nTambién es posible lanzar este nodo especificando la orden que se quiere realizar:\n\n```bash\nros2 run little_warehouse navigation_node --ros-args -p order:=\"friday\"\n```\n\n🗓️ El argumento `order` puede ser uno de los siguientes: `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday` o `sunday`.\n\n![Publicación de las posiciones para completar el pedido.](media/navigation_node.png)\n\n\u003e Publicación de las posiciones para completar el pedido.\n\nEl contenido de las órdenes incluye diversos elementos que están distribuidos en las estanterías. Cada orden tiene una lista de componentes que se puede consultar en el archivo `orders.yaml`. El robot puede localizar los elementos gracias al fichero `positions.yaml`, que define para cada elemento una posición de pick para el robot.\n\nPor ejemplo, la orden `monday` contiene los siguientes elementos:\n\n```yaml\nmonday:\n  - apple\n  - blueberry\n  - cherry\n  - mango\n  - melon\n  - nectarine\n  - papaya\n  - peach\n  - raspberry\n  - watermelon\n```\n\n#### 🏁 Resultados finales\n\n| Escenario en CoppeliaSim | Interfaz en RViz2 para la navegación |\n|------------------------------|------------------------------|\n| ![Escenario en CoppeliaSim.](media/coppeliasim_scene_final.png) | ![Interfaz en RViz2 para la navegación.](media/rviz2_navegation_final.png) |\n\n## 📌 Conclusiones\n\n- ✅ Se ha logrado implementar un sistema completo de navegación autónoma en un entorno simulado, integrando ROS 2 y CoppeliaSim.\n- ✅ Ha sido posible cartografiar el entorno y guardar el mapa generado para su posterior uso.\n- ✅ Se ha desarrollado un sistema de planificación y ejecución de órdenes de navegación con restricciones de velocidad.\n- ✅ Se ha incorporado un sistema de teleoperación útil para exploración y depuración, principalmente para cartografiar el entorno.\n- ✅ El proyecto nos ha permitido aplicar los conocimientos de percepción, control y planificación en un entorno de simulación realista aprendidos durante el desarrollo de la asignatura de Robótica Móvil.\n\n## 🌱 Trabajo a futuro\n\n- 🔧 Simular el proceso de recogida de los productos de las estanterías.\n- 🧭 Ajustar y optimizar los parámetros del archivo `nav2_params_speed_limit.yaml` para mejorar la eficiencia, permitiendo la eliminación de los puntos de navegación auxiliares en los extremos de las estanterías que facilitaban el movimiento del robot entre ellas.\n- 🏗️ Revisar la configuración del escenario para mejorar la navegabilidad: esto puede implicar aumentar la separación entre estanterías en la simulación o, alternativamente, migrar a un simulador más avanzado que permita una mejor generalización a entornos reales donde se busca optimizar el espacio sin necesidad de grandes separaciones.\n\n## 📄 Licencia\n\nEste proyecto está licenciado bajo la Licencia MIT. \nConsulta el archivo `LICENSE` 📜 para más información.\n\n## 🙏 Agradecimientos\n\nAgradecemos a nuestros profesores de Robótica Móvil: 👨‍🏫 Leopoldo Armesto y 👨‍🏫 Ricardo Nuñez, por su guía y apoyo en el desarrollo de este proyecto.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzuecopio%2From_2425","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzuecopio%2From_2425","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzuecopio%2From_2425/lists"}