{"id":2889,"date":"2022-07-22T17:55:44","date_gmt":"2022-07-22T17:55:44","guid":{"rendered":"https:\/\/robotica-facil-con-ros2.es\/?p=2889"},"modified":"2022-08-19T19:00:16","modified_gmt":"2022-08-19T19:00:16","slug":"gazebo-como-cargar-un-archivo-world-en-ros2","status":"publish","type":"post","link":"https:\/\/robotica-facil-con-ros2.es\/?p=2889","title":{"rendered":"GAZEBO. Como cargar un archivo world"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2889\" class=\"elementor elementor-2889\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8f2973c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8f2973c\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9f4ba2e\" data-id=\"9f4ba2e\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7aa1974 elementor-widget elementor-widget-text-editor\" data-id=\"7aa1974\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>En este art\u00edculo vamos a ver como cargar en Gazebo un archivo world. Para ello vamos a usar los archivos world que Gazebo incluye como ejemplos en su instalaci\u00f3n, los cuales se encuentran en la siguiente ruta <b><span style=\"color: #0170b9;\">usr\/share\/gazebo-\/worlds<\/span>.<\/b><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-beee0b1 elementor-widget elementor-widget-image\" data-id=\"beee0b1\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889-gazebo-world-examples.png\" data-elementor-open-lightbox=\"no\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"786\" height=\"533\" src=\"https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889-gazebo-world-examples.png\" class=\"attachment-large size-large wp-image-2905\" alt=\"Ejemplos de archivos world incluidos en Gazebo\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-04b79af elementor-widget elementor-widget-text-editor\" data-id=\"04b79af\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Tambi\u00e9n podemos ver en este <a href=\"https:\/\/github.com\/osrf\/gazebo\/tree\/gazebo11\/worlds\">repositorio de GitHub<\/a> la lista con todos los archivos <em>world<\/em> incluidos con Gazebo.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dabc3ee elementor-widget elementor-widget-text-editor\" data-id=\"dabc3ee\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Los modelos de los objetos utilizados en estos ejemplos se encuentran almacenados en la siguiente ruta <b><span style=\"color: #0170b9;\">~\/.gazebo\/models<\/span>.<\/b><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-08fe012 elementor-widget elementor-widget-text-editor\" data-id=\"08fe012\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>Desde la l\u00ednea de comando de un terminal<\/h3><p>Desde el terminal podemos cargar un archivo <em>world<\/em> de la siguiente forma:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a43666 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"3a43666\" data-element_type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-3a43666\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-tomorrow\"\n            data-dark-theme=\"mdp-theme-tomorrow\"\n        >\n            \n                <pre class=\"language-shell-session copy-to-clipboard\"data-previewers=\"\"><code>gazebo &lt;archivo_world&gt;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_3a43666 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/robotica-facil-con-ros2.es\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_3a43666();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_3a43666 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-026fc03 elementor-widget elementor-widget-text-editor\" data-id=\"026fc03\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Donde <span style=\"color: #000000;\">&lt;archivo_world&gt;<\/span> es la ruta al archivo world, pudiendo ser:<\/p><ul><li style=\"list-style-type: none;\"><ul><li style=\"list-style-type: none;\"><ul><li>Relativa al directorio actual.<\/li><li>Absoluta.<\/li><li>Relativa a una ruta que se encuentre en la variable de entorno <span style=\"color: #0170b9;\"><strong>GAZEBO_RESOURCE_PATH<\/strong><\/span>.<\/li><li><span style=\"color: #0170b9;\"><strong><em>worlds\/&lt;archivo.world&gt;<\/em><\/strong><\/span> siendo en este caso uno de los archivos world que Gazebo incluye.<\/li><\/ul><\/li><\/ul><\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c9afb99 elementor-widget elementor-widget-text-editor\" data-id=\"c9afb99\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Por ejemplo, el siguiente comando ejecutar\u00e1 Gazebo (tanto el servidor como el cliente) y cargar\u00e1 el archivo <em>cafe.world<\/em>.\u00a0<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ceeb84f elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"ceeb84f\" data-element_type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-ceeb84f\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-tomorrow\"\n            data-dark-theme=\"mdp-theme-tomorrow\"\n        >\n            \n                <pre class=\"language-shell-session copy-to-clipboard\"data-previewers=\"\"><code>gazebo worlds\/cafe.world<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_ceeb84f = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/robotica-facil-con-ros2.es\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_ceeb84f();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_ceeb84f );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f3e30e elementor-widget elementor-widget-image\" data-id=\"3f3e30e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889-gazebo-cafe-world.png\" data-elementor-open-lightbox=\"no\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"622\" src=\"https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889-gazebo-cafe-world-1024x622.png\" class=\"attachment-large size-large wp-image-2936\" alt=\"gazebo cafe.world\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7844072 elementor-widget elementor-widget-text-editor\" data-id=\"7844072\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Si solo queremos ejecutar el servidor pero no el cliente (interfaz gr\u00e1fico), simplemente sustituimos <em>gazebo<\/em> por <span style=\"color: #0170b9;\"><strong><em>gzserver<\/em><\/strong><\/span> en la l\u00ednea de comando.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8ff9b30 elementor-widget elementor-widget-text-editor\" data-id=\"8ff9b30\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>Desde un archivo launch usando ROS2<\/h3><p>Para lanzar Gazebo y cargar un archivo <i>world<\/i> desde ROS2 tendremos que realizar los siguientes pasos:<\/p><ol><li style=\"list-style-type: none;\"><ol><li style=\"list-style-type: none;\"><ol><li>Crear un paquete Python (o usar uno que ya tengamos).<\/li><li>A\u00f1adir una carpeta <span style=\"color: #0170b9;\"><i><b>launch<\/b><\/i><\/span> y crear en su interior un archivo <strong><span style=\"color: #0170b9;\"><i>.launch.py<\/i><\/span><\/strong><\/li><li>A\u00f1adir una carpeta <span style=\"color: #0170b9;\"><i><b>worlds<\/b><\/i><\/span> donde ubicaremos el archivo <i>world<\/i> que queramos cargar.<\/li><li>A\u00f1adir una carpeta <span style=\"color: #0170b9;\"><i><b>models<\/b><\/i><\/span> donde ubicaremos los archivos de los modelos que use el archivo <i>world<\/i>.<\/li><li>Modificar el archivo <span style=\"color: #0170b9;\"><i><b>setup.py<\/b><\/i><\/span> del paquete para incorporar a <span style=\"color: #0170b9;\"><i><b>data_files<\/b><\/i><\/span> las rutas de los archivos que queremos que se copien en la instalaci\u00f3n del paquete.<\/li><\/ol><\/li><\/ol><\/li><\/ol><p>Si necesitas m\u00e1s informaci\u00f3n sobre como realizar estos pasos puedes ver los siguientes art\u00edculos:<\/p><ul><li style=\"list-style-type: none;\"><ul><li style=\"list-style-type: none;\"><ul><li><a href=\"https:\/\/robotica-facil-con-ros2.es\/?p=3078\">ROS2. C\u00f3mo crear un paquete Python.<\/a><\/li><li><a href=\"https:\/\/robotica-facil-con-ros2.es\/?p=3186\">ROS2. A\u00f1adiendo carpetas adicionales a nuestro paquete Python.<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-54e9d6f elementor-widget elementor-widget-text-editor\" data-id=\"54e9d6f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Vamos a usar un paquete de ejemplo, al que he llamado <em>gazebo_world_launch<\/em>, que podemos descargar desde <a href=\"https:\/\/github.com\/joseecm-github\/gazebo_world_launch\">GitHub<\/a> o clonarlo ejecutando el siguiente comando desde un teminal:\u00a0<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d1d10f5 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"d1d10f5\" data-element_type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-d1d10f5\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-tomorrow\"\n            data-dark-theme=\"mdp-theme-tomorrow\"\n        >\n            \n                <pre class=\"language-shell-session copy-to-clipboard\"data-previewers=\"\"><code>git clone https:\/\/github.com\/joseecm-github\/gazebo_world_launch\n<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_d1d10f5 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/robotica-facil-con-ros2.es\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_d1d10f5();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_d1d10f5 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dae683f elementor-widget elementor-widget-text-editor\" data-id=\"dae683f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Como puede verse en la siguiente imagen el paquete ya incluye las carpetas <i>launch<\/i>, <i>worlds<\/i> y <i>models<\/i>. En la carpeta <i>worlds<\/i> hemos ubicado el archivo <i>table.worl<\/i>d y dentro de la carpeta <i>models<\/i> se encuentra la informaci\u00f3n de los modelos que usa: <i>ground_plane<\/i>, <i>sun<\/i> y <i>table<\/i>.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d48af7 elementor-widget elementor-widget-image\" data-id=\"3d48af7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889-gazebo-world-package.png\" data-elementor-open-lightbox=\"no\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/elementor\/thumbs\/id2889-gazebo-world-package-ps8tx87at1q9fqqzcg7ykkis9halqx541f4jba5dvg.png\" title=\"id2889 &#8211; gazebo world package\" alt=\"Estructura del paquete gazebo_world_launch\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b8cdb09 elementor-widget elementor-widget-text-editor\" data-id=\"b8cdb09\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Si abrimos el archivo <strong><em>gazebo_world.launch.py<\/em><\/strong> podemos ve el c\u00f3digo empleado para lanzar Gazebo y cargar el archivo <em>table.world<\/em>.\u00a0 En los comentarios a\u00f1adidos se explica para que sirven las diferentes l\u00edneas.\u00a0<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bafe710 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"bafe710\" data-element_type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-bafe710\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-xonokai\"\n            data-dark-theme=\"mdp-theme-xonokai\"\n        >\n            \n                <pre class=\"language-python copy-to-clipboard\"data-previewers=\"\"><code>import os\nfrom launch import LaunchDescription\nfrom launch.actions import IncludeLaunchDescription\nfrom launch.launch_description_sources import PythonLaunchDescriptionSource\nfrom launch_ros.substitutions import FindPackageShare\n \ndef generate_launch_description():\n \n  # Obtenemos la ruta del paquete Gazebo ROS.\n  pkg_gazebo_ros = FindPackageShare(package=&#039;gazebo_ros&#039;).find(&#039;gazebo_ros&#039;)   \n  \n  # Obtenemos la ruta de instalaci&oacute;n de nuestro paquete.\n  pkg_install_path = FindPackageShare(package=&#039;gazebo_world_launch&#039;).find(&#039;gazebo_world_launch&#039;)\n \n  # Obtenemos la ruta del archivo world, que est&aacute; almacenado en la\n  # carpeta worlds del paquete.\n  world_file = &#039;table.world&#039;\n  world_path = os.path.join(pkg_install_path, &#039;worlds&#039;, world_file)\n   \n  # Obtenemos la ruta de la capeta models que es donde se encuentra\n  # la informaci&oacute;n del modelo que es empleado en nuestro archivo world\n  # y la guardamos en la variable de entorno GAZEBO_MODEL_PATH, que\n  # contiene las rutas donde busca Gazebo. \n  gazebo_models_path = os.path.join(pkg_install_path, &#039;models&#039;)\n  os.environ[&quot;GAZEBO_MODEL_PATH&quot;] = gazebo_models_path\n   \n  # Creamos una acci&oacute;n para ejecutar el archivo gzserver.launch.py,\n  # que se encuentra dentro de la carpeta launch del paquete\n  # Gazebo Ros. Lo que hace es arrancar el servidor de Gazebo\n  # cargando el archivo world que pasamos como argumento.\n  start_gazebo_server_cmd = IncludeLaunchDescription(\n    PythonLaunchDescriptionSource(os.path.join(pkg_gazebo_ros, &#039;launch&#039;, &#039;gzserver.launch.py&#039;)),\n    launch_arguments={&#039;world&#039;: world_path}.items())\n \n  # Creamos una acci&oacute;n para ejecutar el archivo gzclient.launch.py,\n  # que se encuentra dentro de la carpeta launch del paquete\n  # Gazebo Ros. Lo que hace es arrancar el cliente de Gazebo, que  \n  # es la interfaz gr&aacute;fica.\n  start_gazebo_client_cmd = IncludeLaunchDescription(\n    PythonLaunchDescriptionSource(os.path.join(pkg_gazebo_ros, &#039;launch&#039;, &#039;gzclient.launch.py&#039;)),\n    )\n \n  # Devolvemos un objeto LaunchDescription con las acciones que queremos \n  # realizar.\n  return LaunchDescription([\n    start_gazebo_server_cmd,\n    start_gazebo_client_cmd\n    ])<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_bafe710 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/robotica-facil-con-ros2.es\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_bafe710();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_bafe710 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1f7fb2f elementor-widget elementor-widget-text-editor\" data-id=\"1f7fb2f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Antes de usar el paquete tenemos que compilarlo. Para ello ejecutamos colcon build desde el directorio ra\u00edz de nuestro espacio de trabajo.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3075b63 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"3075b63\" data-element_type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-3075b63\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-tomorrow\"\n            data-dark-theme=\"mdp-theme-tomorrow\"\n        >\n            \n                <pre class=\"language-shell-session copy-to-clipboard\"data-previewers=\"\"><code>colcon build --packages-select gazebo_world_launch<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_3075b63 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/robotica-facil-con-ros2.es\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_3075b63();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_3075b63 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-88def6c elementor-widget elementor-widget-text-editor\" data-id=\"88def6c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Y por \u00faltimo ejecutamos el archivo launch.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9d2cf78 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"9d2cf78\" data-element_type=\"widget\" data-widget_type=\"mdp-coder-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t        <!-- Start Coder for Elementor WordPress Plugin -->\n        <div\n            id=\"mdp-coder-9d2cf78\"\n            class=\"mdp-coder-elementor-box\"\n            data-theme=\"mdp-theme-tomorrow\"\n            data-dark-theme=\"mdp-theme-tomorrow\"\n        >\n            \n                <pre class=\"language-shell-session copy-to-clipboard\"data-previewers=\"\"><code>ros2 launch gazebo_world_launch gazebo_world.launch.py<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_9d2cf78 = function() {\n\n                \/** Set theme for coder widget. *\/\n                function setTheme() {\n\n                    \/** Foreach Code Widget. *\/\n                    let coderBoxes = document.querySelectorAll( '.mdp-coder-elementor-box' );\n\n                    for ( let coderBox of coderBoxes ) {\n\n                        let lightTheme = coderBox.dataset.theme;\n                        let darkTheme = coderBox.dataset.darkTheme;\n\n                        coderBox.className = '';\n                        if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + darkTheme;\n\n                        } else {\n\n                            coderBox.className = 'mdp-coder-elementor-box ' + lightTheme;\n\n                        }\n\n                    }\n\n                }\n                setTheme();\n\n\n                \/** Watch for changes color-scheme. *\/\n                window.matchMedia(\"(prefers-color-scheme: dark)\").addListener( function() {\n                    setTheme();\n                } );\n\n                \n                if ( typeof Prism !== 'undefined' ) {\n\n                    Prism.plugins.autoloader.languages_path = 'https:\/\/robotica-facil-con-ros2.es\/wp-content\/plugins\/coder-elementor\/js\/prism\/components\/';\n                    Prism.highlightAll();\n                    Prism.fileHighlight();\n\n                }\n\n                \n            };\n\n            if (\n                document.readyState === \"complete\" ||\n                ( document.readyState !== \"loading\" && !document.documentElement.doScroll )\n            ) {\n                callback_9d2cf78();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_9d2cf78 );\n            }\n\n        <\/script>\n                <!-- End Coder for Elementor WordPress Plugin -->\n\n        \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f744ccc elementor-widget elementor-widget-image\" data-id=\"f744ccc\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889-gazebo-table-world.png\" data-elementor-open-lightbox=\"no\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"519\" src=\"https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889-gazebo-table-world-1024x519.png\" class=\"attachment-large size-large wp-image-3046\" alt=\"Ejemplo de archivo world de Gazebo\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo vamos a ver como cargar en Gazebo un archivo world. Para ello vamos a usar los archivos world que Gazebo incluye como ejemplos en su instalaci\u00f3n, los cuales se encuentran en la siguiente ruta usr\/share\/gazebo-\/worlds. Tambi\u00e9n podemos ver en este repositorio de GitHub la lista con todos los archivos world incluidos con [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3065,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[5,10],"tags":[12,16,7,20],"class_list":["post-2889","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ros2","category-simulacion","tag-gazebo","tag-launch","tag-ros2","tag-world"],"aioseo_notices":[],"rttpg_featured_image_url":{"full":["https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889p-gazebo-load-world.png",1280,720,false],"landscape":["https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889p-gazebo-load-world.png",1280,720,false],"portraits":["https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889p-gazebo-load-world.png",1280,720,false],"thumbnail":["https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889p-gazebo-load-world-150x150.png",150,150,true],"medium":["https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889p-gazebo-load-world-300x169.png",300,169,true],"large":["https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889p-gazebo-load-world-1024x576.png",1024,576,true],"1536x1536":["https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889p-gazebo-load-world.png",1280,720,false],"2048x2048":["https:\/\/robotica-facil-con-ros2.es\/wp-content\/uploads\/2022\/07\/id2889p-gazebo-load-world.png",1280,720,false]},"rttpg_author":{"display_name":"Jose Enrique Cabrera","author_link":"https:\/\/robotica-facil-con-ros2.es\/?author=1"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/robotica-facil-con-ros2.es\/?cat=5\" rel=\"category\">ROS2<\/a> <a href=\"https:\/\/robotica-facil-con-ros2.es\/?cat=10\" rel=\"category\">SIMULACI\u00d3N<\/a>","rttpg_excerpt":"En este art\u00edculo vamos a ver como cargar en Gazebo un archivo world. Para ello vamos a usar los archivos world que Gazebo incluye como ejemplos en su instalaci\u00f3n, los cuales se encuentran en la siguiente ruta usr\/share\/gazebo-\/worlds. Tambi\u00e9n podemos ver en este repositorio de GitHub la lista con todos los archivos world incluidos con&hellip;","_links":{"self":[{"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/posts\/2889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2889"}],"version-history":[{"count":164,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/posts\/2889\/revisions"}],"predecessor-version":[{"id":4145,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/posts\/2889\/revisions\/4145"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/media\/3065"}],"wp:attachment":[{"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}