{"id":7389,"date":"2023-02-22T07:12:21","date_gmt":"2023-02-22T07:12:21","guid":{"rendered":"https:\/\/robotica-facil-con-ros2.es\/?p=7389"},"modified":"2023-02-23T18:07:25","modified_gmt":"2023-02-23T18:07:25","slug":"usando-parametros-en-nuestros-nodos","status":"publish","type":"post","link":"https:\/\/robotica-facil-con-ros2.es\/?p=7389","title":{"rendered":"Usando par\u00e1metros en nuestros nodos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"7389\" class=\"elementor elementor-7389\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9df1541 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9df1541\" 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-59f5767\" data-id=\"59f5767\" 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-f993bd7 elementor-widget elementor-widget-text-editor\" data-id=\"f993bd7\" 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>Introducci\u00f3n<\/h3>\n<p>Un <b><i>par\u00e1metro<\/i><\/b> es un valor de configuraci\u00f3n de un nodo. Se puede pensar en los par\u00e1metros como configuraciones de nodo.&nbsp;<span style=\"font-style: inherit; font-weight: inherit; background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\">Los par\u00e1metros admiten los siguientes tipos de valores:<\/span><\/p>\n<p><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul style=\"font-size: 15px; font-style: normal; font-weight: 400;\">\n<li style=\"font-size: 15px;\">Booleano.<\/li>\n<li style=\"font-size: 15px;\">N\u00famero entero.<\/li>\n<li style=\"font-size: 15px;\">N\u00famero en coma flotante.<\/li>\n<li style=\"font-size: 15px;\">Cadena de texto.<\/li>\n<li style=\"font-size: 15px;\">Un array de los tipos anteriores.<\/li>\n<li style=\"font-size: 15px;\">Un array de bytes.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>En ROS2 no hay un servidor de par\u00e1metros como en ROS1, por lo que los par\u00e1metros son espec\u00edficos de cada nodo. Esto implica que si un nodo finaliza la ejecuci\u00f3n sus par\u00e1metros dejar\u00e1n de estar disponibles.&nbsp;<span style=\"background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\">Hay que destacar que, como norma general,&nbsp; es obligatorio declarar los par\u00e1metros dentro del c\u00f3digo del nodo.<\/span><span style=\"background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\">&nbsp;<\/span><\/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-c9ee0fc elementor-widget elementor-widget-text-editor\" data-id=\"c9ee0fc\" 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>Hay dos formas de pasar los valores de los distintos par\u00e1metros a un nodo:<\/p><ul><li style=\"list-style-type: none;\"><ul><li>Desde la propia l\u00ednea de comando al ejecutar el nodo.<\/li><li>Desde un archivo launch.<\/li><\/ul><\/li><\/ul><p>De ambas formas podemos pasar los par\u00e1metros indic\u00e1ndolos uno a uno o carg\u00e1ndolos desde un archivo YAML.<\/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-bfe62c0 elementor-widget elementor-widget-text-editor\" data-id=\"bfe62c0\" 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>Trabajando con par\u00e1metros desde la l\u00ednea de comando<\/h3>\n<p>Para trabajar con par\u00e1metros desde el terminal se emplea el comando <span style=\"background-color: white; border: 1px solid blue; color: blue; font-size: 100%; padding: 0px 5px 0px 5px;\"><strong>ros2 param<\/strong> &lt;subcommand&gt; [arguments]<\/span>. A continuaci\u00f3n se muestran cuales son los distintos subcomandos disponibles y los argumentos que admiten.<\/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-61b0a12 elementor-widget elementor-widget-text-editor\" data-id=\"61b0a12\" 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<h4>Listar los par\u00e1metros de uno o todos los nodos<\/h4>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-91b94e1 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"91b94e1\" 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-91b94e1\"\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 param list<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_91b94e1 = 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_91b94e1();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_91b94e1 );\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-110a421 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"110a421\" 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-110a421\"\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 param list \/&lt;node_name&gt;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_110a421 = 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_110a421();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_110a421 );\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-9603b81 elementor-widget elementor-widget-text-editor\" data-id=\"9603b81\" 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<h4>Obtener la descripci\u00f3n de un par\u00e1metro<\/h4>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d57270d elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"d57270d\" 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-d57270d\"\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 param describe \/&lt;node_name&gt; &lt;parameter_name&gt;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_d57270d = 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_d57270d();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_d57270d );\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-fdcaf38 elementor-widget elementor-widget-text-editor\" data-id=\"fdcaf38\" 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<h4>Obtener el valor de un par\u00e1metro<\/h4>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1dc7a2a elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"1dc7a2a\" 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-1dc7a2a\"\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 param get \/&lt;node_name&gt; &lt;parameter_name&gt;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_1dc7a2a = 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_1dc7a2a();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_1dc7a2a );\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-b91b219 elementor-widget elementor-widget-text-editor\" data-id=\"b91b219\" 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<h4>Establecer el valor de un par\u00e1metro<\/h4>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0e74254 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"0e74254\" 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-0e74254\"\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 param set \/&lt;node_name&gt; &lt;parameter_name&gt; &lt;parameter_value&gt;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_0e74254 = 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_0e74254();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_0e74254 );\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-b1bd516 elementor-alert-warning elementor-widget elementor-widget-alert\" data-id=\"b1bd516\" data-element_type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">IMPORTANTE <\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">Si no se declara el par\u00e1metro en el c\u00f3digo del nodo, ocurrir\u00e1 un error si intentamos establecer su valor y se interrumpir\u00e1 su ejecuci\u00f3n. <\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f8c70c elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"7f8c70c\" data-element_type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">NOTA<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">El valor indicado en la l\u00ednea de comando prevalece sobre el que se pudiera haber indicado como valor por defecto al declarar el par\u00e1metro dentro del c\u00f3digo del nodo.<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c682a9 elementor-widget elementor-widget-text-editor\" data-id=\"6c682a9\" 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<h4>Eliminar un par\u00e1metro<\/h4>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e15115c elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"e15115c\" 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-e15115c\"\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 param delete \/&lt;node_name&gt; &lt;parameter_name&gt;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_e15115c = 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_e15115c();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_e15115c );\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-f54c276 elementor-widget elementor-widget-text-editor\" data-id=\"f54c276\" 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<h4>Pasar par\u00e1metros a un nodo al ejecutarlo<\/h4>\nEn la misma l\u00ednea en la que ejecutamos un nodo podemos incluir los par\u00e1metros que queremos pasarle. Para ello usamos la etiqueta\u00a0<span style=\"background-color: white; border: 1px solid blue; color: blue; font-size: 100%; padding: 0px 5px;\">&#8211;ros-args<\/span>\u00a0para indicar que seguidamente se van a pasar argumentos de ROS y luego se van incluyendo los par\u00e1metros mediante\u00a0<span style=\"background-color: white; border: 1px solid blue; color: blue; font-size: 100%; padding: 0px 5px 0px 5px;\">-p &lt;parametro&gt;:=&lt;valor&gt;<\/span><strong>.<\/strong>\n\n<strong>\u00a0<\/strong>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-895ac51 elementor-widget elementor-widget-text-editor\" data-id=\"895ac51\" 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>A continuaci\u00f3n se muestra como pasar al nodo tres par\u00e1metros, uno de tipo string, otro de tipo entero y un array.<\/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-946d6b5 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"946d6b5\" 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-946d6b5\"\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 run &lt;my_package&gt; &lt;my_node&gt; [my_args...] --ros-args -p my_str_param:=&quot;Hello&quot; -p my_int_param:=4 -p my_array_param:=&quot;[3.1, 5.7, 6.2]&quot;\n<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_946d6b5 = 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_946d6b5();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_946d6b5 );\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-216f215 elementor-widget elementor-widget-text-editor\" data-id=\"216f215\" 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<h4>Cargar los par\u00e1metros desde un archivo YAML<\/h4><p>Mediante el subcomando <span style=\"background-color: white; border: 1px solid blue; color: blue; font-size: 100%; padding: 0px 5px;\">load<\/span>\u00a0podemos cargar todos los par\u00e1metros pertenecientes a un nodo que se encuentren almacenados en un archivo YAML.<\/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-8c09822 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"8c09822\" 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-8c09822\"\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 param load &lt;node_name&gt; &lt;yaml_file&gt;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_8c09822 = 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_8c09822();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_8c09822 );\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-5645b16 elementor-widget elementor-widget-text-editor\" data-id=\"5645b16\" 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<h4>Volcar los par\u00e1metros a un archivo YAML<\/h4><p>El subcomando <span style=\"background-color: white; border: 1px solid blue; color: blue; font-size: 100%; padding: 0px 5px;\">dump<\/span>\u00a0permite guardar todos los par\u00e1metros en un archivo YAML.<\/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-435917f elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"435917f\" 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-435917f\"\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 param dump<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_435917f = 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_435917f();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_435917f );\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-74c5f57 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"74c5f57\" 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-74c5f57\"\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 param dump \/&lt;node_name&gt; <\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_74c5f57 = 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_74c5f57();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_74c5f57 );\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-9f5d044 elementor-widget elementor-widget-text-editor\" data-id=\"9f5d044\" 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>Trabajando con par\u00e1metros desde el c\u00f3digo del nodo en Python<\/h3>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27d5a46 elementor-widget elementor-widget-text-editor\" data-id=\"27d5a46\" 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<h4>Declarar los par\u00e1metros<\/h4><p>Para acceder desde el c\u00f3digo de nuestro nodo a los par\u00e1metros lo primero que debemos hacer es declararlos mediante la funci\u00f3n<i style=\"font-weight: bold;\">\u00a0<\/i><span style=\"background-color: white; border: 1px solid blue; color: blue; font-size: 100%; padding: 0px 5px;\">declare_parameter( )<\/span> si lo hacemos para un solo par\u00e1metro o usando<i style=\"font-weight: bold;\">\u00a0<\/i><span style=\"background-color: white; border: 1px solid blue; color: blue; font-size: 100%; padding: 0px 5px;\">declare_parameters( )<\/span> si queremos declarar varios al mismo tiempo. En dicha declaraci\u00f3n indicaremos el nombre del par\u00e1metro y opcionalmente el valor por defecto y un descriptor, que es un objeto del tipo\u00a0<em><strong>ParameterDescriptor<\/strong><\/em> que permite indicar un texto de descripci\u00f3n del par\u00e1metro as\u00ed como restricciones tales como hacerlo de solo lectura o especificar un rango.<\/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-5af6888 elementor-widget elementor-widget-text-editor\" data-id=\"5af6888\" 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>A continuaci\u00f3n se recoge de forma m\u00e1s detallada cada funci\u00f3n y los par\u00e1metro que admiten.<\/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-6fd95f2 elementor-widget elementor-widget-text-editor\" data-id=\"6fd95f2\" 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><b><i>declare_parameter\u00a0<\/i><\/b>(name, value=None, descriptor, ignore_override=False)<\/p><p>Parametros:<\/p><ul class=\"simple\"><li><p><strong>name<\/strong>\u00a0(str): nombre del par\u00e1metro, incluyendo su espacio de nombres (<i>namespace.param_name<\/i>).<\/p><\/li><li><p><strong>value<\/strong>\u00a0(opcional,\u00a0[Any]): valor del par\u00e1metro.<\/p><\/li><li><p><strong>descriptor<\/strong>\u00a0(opcional,\u00a0ParameterDescriptor): objeto con la descripci\u00f3n del par\u00e1metro.<\/p><\/li><li><p><strong>ignore_override<\/strong>\u00a0(opcional,\u00a0<code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">bool<\/span><\/code>): si es <i>True<\/i> ignora el par\u00e1metro <i>parameter_overrides<\/i> del constructor del nodo.<\/p><\/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-b20421d elementor-widget elementor-widget-text-editor\" data-id=\"b20421d\" 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<dl><dt><i>declare_parameters\u00a0<\/i><span style=\"font-weight: normal;\">(namespace,\u00a0parameters,\u00a0ignore_override=False)<\/span><\/dt><dt><p><span style=\"font-weight: normal;\">Parametros:<\/span><\/p><ul style=\"font-size: 15px; font-style: normal;\"><li style=\"font-weight: 400; font-size: 15px;\"><p style=\"font-size: 15px;\"><span style=\"font-weight: bold;\">namespace<\/span>\u00a0(<code>str<\/code>): indica el espacio de nombres.<\/p><\/li><li style=\"font-size: 15px;\"><p style=\"font-size: 15px;\">parameters<span style=\"font-weight: 400;\"> (<\/span><span style=\"font-weight: 400;\">[<span style=\"font-family: Monaco, Consolas, Andale Mono, DejaVu Sans Mono, monospace;\">\u00a0<\/span><\/span><span style=\"font-weight: 400;\">]): lista que contiene una tupla por cada par\u00e1metro, donde cada una una contiene el nombre y opcionalmente el valor y el descriptor.<\/span><\/p><\/li><li style=\"font-weight: 400; font-size: 15px;\"><p style=\"font-size: 15px;\"><span style=\"font-weight: bold;\">descriptor<\/span>\u00a0(<code>ParameterDescriptor<\/code>): objeto con la descripci\u00f3n del par\u00e1metro. Cada tupla debe contener el nombre del par\u00e1metro y opcionalmente el valor y el descriptor.<\/p><\/li><li style=\"font-weight: 400; font-size: 15px;\"><p style=\"font-size: 15px;\"><span style=\"font-weight: bold;\">ignore_override<\/span>\u00a0(<code>bool<\/code>): si es\u00a0<i>True<\/i>\u00a0ignora el par\u00e1metro\u00a0<i>parameter_overrides<\/i>\u00a0del constructor del nodo.<\/p><\/li><\/ul><\/dt><\/dl>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b00c861 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"b00c861\" 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-b00c861\"\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># Describe el par&aacute;metro. No es obligatorio pero si conveniente.\nfrom rcl_interfaces.msg import ParameterDescriptor\n\nparam_descriptor = ParameterDescriptor(\n    description=&#039;Sets the velocity (in m\/s) of the robot.&#039;)\n\n# Declara un par&aacute;metro, asign&aacute;ndole un valor por defecto y la descripci&oacute;n.\nself.declare_parameter(&#039;velocity&#039;, 0.0, param_descriptor)\n\n# Declara varios par&aacute;metros al mismo tiempo\nself.declare_parameters(\n    namespace=&#039;&#039;,\n    parameters=[\n        (&#039;my_str&#039;, &#039;Hello&#039;),\n        (&#039;my_int&#039;, 3),\n        (&#039;my_double_array&#039;, [2.4, 5.1])\n    ]\n)\n<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_b00c861 = 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_b00c861();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_b00c861 );\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-6a7b68b elementor-widget elementor-widget-text-editor\" data-id=\"6a7b68b\" 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>EL siguiente c\u00f3digo es un ejemplo de c\u00f3mo se realiza la declaraci\u00f3n de par\u00e1metros.<\/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-3f4d77d elementor-widget elementor-widget-text-editor\" data-id=\"3f4d77d\" 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<h4>Obtener los valores de los par\u00e1metros<\/h4><p>Una vez declarados los par\u00e1metros podemos obtener sus valores como se indica en el siguiente c\u00f3digo, accediendo a los mismos de forma individual o a varios al mismo tiempo.<\/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-2cb57a7 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"2cb57a7\" 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-2cb57a7\"\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># Obtiene el valor del par&aacute;metro\nself.get_parameter(&#039;param_name&#039;).value\n\n# Obtiene el valor de varios par&aacute;metros\n(param_str, param_int, param_double_array) = self.get_parameters(\n            [&#039;my_str&#039;, &#039;my_int&#039;, &#039;my_double_array&#039;])\n\n<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_2cb57a7 = 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_2cb57a7();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_2cb57a7 );\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-dff736a elementor-widget elementor-widget-text-editor\" data-id=\"dff736a\" 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<h4>Modificar el valor de los par\u00e1metros<\/h4><p>El valor de un par\u00e1metro ser\u00e1 el que le hallamos asignado desde la l\u00ednea de comando o el valor por defecto que se haya indicado en su declaraci\u00f3n. No obstante es posible modificar dicho valor desde el propio c\u00f3digo del nodo.<\/p><p>Para ello es necesario crear un objeto <b><i>Parameter<\/i><\/b> pasando a su constructor el nombre del par\u00e1metro, su tipo y el valor que deseamos asignarle. Luego pasaremos dicho objeto a la funci\u00f3n <b><i>set_parameters( )<\/i><\/b> para cambiar el valor. Esta funci\u00f3n recibe un array de objetos <i>Parameter<\/i>, por lo que podemos modificar el valor de varios par\u00e1metros a la vez.\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-974fe5a elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"974fe5a\" 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-974fe5a\"\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>from rclpy.parameter import Parameter\n\n# Creamos objetos de tipo Parameter con los nuevos valores\nparam_str = Parameter(&#039;my_str&#039;, Parameter.Type.STRING, &#039;Set from code&#039;)\nparam_int = Parameter(&#039;my_int&#039;, Parameter.Type.INTEGER, 12)\nparam_double_array = Parameter(&#039;my_double_array&#039;, Parameter.Type.DOUBLE_ARRAY, [1.1, 2.2])\n\n# Modificamos los valores de los par&aacute;metros\nself.set_parameters([param_str, param_int, param_double_array])\n\n# Los tipos posibles son los siguientes:\n&quot;&quot;&quot;\nParameter.Type.BOOL\nParameter.Type.BOOL_ARRAY\nParameter.Type.BYTE_ARRAY\nParameter.Type.DOUBLE\nParameter.Type.DOUBLE_ARRAY\nParameter.Type.INTEGER\nParameter.Type.INTEGER_ARRAY\nParameter.Type.NOT_SET\nParameter.Type.STRING\nParameter.Type.STRING_ARRAY\n&quot;&quot;&quot;<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_974fe5a = 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_974fe5a();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_974fe5a );\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-1be1310 elementor-widget elementor-widget-text-editor\" data-id=\"1be1310\" 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<h4>Eliminar par\u00e1metros<\/h4><p>Desde c\u00f3digo tambi\u00e9n podemos eliminar par\u00e1metros. Para ello usamos la funci\u00f3n <b><i>undeclare_parameter( )<\/i><\/b> pas\u00e1ndole el nombre del par\u00e1metro.<\/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-90efd07 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"90efd07\" 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-90efd07\"\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>self.undeclare_parameter(&#039;param_name&#039;)\n<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_90efd07 = 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_90efd07();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_90efd07 );\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-3b28adf elementor-widget elementor-widget-text-editor\" data-id=\"3b28adf\" 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<h4>Usando una funci\u00f3n de callback<\/h4><p>Es posible definir una funci\u00f3n de <i>callback<\/i> que se ejecute cada vez que un par\u00e1metro es modificado, lo cual nos permite reconfigurar de forma din\u00e1mica nuestro nodo. Para ello, tal como se muestra en el siguiente ejemplo, usamos la funci\u00f3n\u00a0<span style=\"background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\"><b><i>add_on_set_parameters_callback( )<\/i><\/b><\/span><span style=\"font-style: inherit; font-weight: inherit; background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\">\u00a0pas\u00e1ndole como par\u00e1metro la funci\u00f3n que queremos que se ejecute.\u00a0<\/span><\/p><p><span style=\"font-style: inherit; font-weight: inherit; background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\">La funci\u00f3n de <\/span><span style=\"font-weight: inherit; background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\"><i>callback<\/i><\/span><span style=\"font-style: inherit; font-weight: inherit; background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\"> que definamos recibe como par\u00e1metro <\/span><span style=\"background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\"><b><i>params<\/i><\/b><\/span><span style=\"font-style: inherit; font-weight: inherit; background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\">, que es un objeto iterable con los par\u00e1metros que han cambiado y debe devolver un objeto <\/span><span style=\"background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\"><b><i>SetParameterResult<\/i><\/b><\/span><span style=\"font-style: inherit; font-weight: inherit; background-color: var(--ast-global-color-5); color: var(--ast-global-color-3);\">.<\/span><\/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-c0d0d4a elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"c0d0d4a\" 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-c0d0d4a\"\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>from rclpy.parameter import Parameter\nfrom rcl_interfaces.msg import SetParametersResult\n\n# Indica la funci&oacute;n que se ejecuta cuando se modifica un par&aacute;metro\nself.add_on_set_parameters_callback(self.parameter_callback)\n\n# Funci&oacute;n de callback\ndef parameter_callback(self, params):\n    for param in params:\n        if param.name == &#039;max_speed&#039; and param.type_ == Parameter.Type.INTEGER:\n            self.max_speed = param.value\n    return SetParametersResult(successful=True)<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_c0d0d4a = 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_c0d0d4a();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_c0d0d4a );\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-492ff42 elementor-widget elementor-widget-text-editor\" data-id=\"492ff42\" 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>Guardando la configuraci\u00f3n de nuestro nodo en un archivo YAML<\/h3><p>A medida que nuestra aplicaci\u00f3n se vaya complicando nos encontraremos con la situaci\u00f3n de tener que manejar un n\u00famero elevado de par\u00e1metros. Lo cual hace inviable declararlos uno a uno desde la l\u00ednea de comando.<\/p><p>La soluci\u00f3n a esto es guardar los par\u00e1metros en un archivo YAML ejecutando desde la l\u00ednea de comando <b><i>ros2 param dump \/&lt;node_name&gt; &lt;yaml_file&gt;<\/i><\/b>, de forma que luego podamos cargarlos todos a la vez usando <b><i>ros2 param load \/&lt;node_name&gt; &lt;yaml_file&gt;<\/i><\/b>\u00a0o desde un archivo <b><i>launch<\/i><\/b>.<\/p><p>Estos archivos de configuraci\u00f3n es habitual guardarlos en una carpeta <b><i>\/config<\/i><\/b> dentro de nuestro paquete.<\/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-f23fc89 elementor-widget elementor-widget-text-editor\" data-id=\"f23fc89\" 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<h4>Estructura del archivo YAML<\/h4><p>En el mismo archivo podemos almacenar los par\u00e1metros de configuraci\u00f3n de distintos nodos y es posible definir par\u00e1metros anidados.<\/p><p>La estructura b\u00e1sica que debe tener el archivo YAML es la siguiente:<\/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-8cfaa84 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"8cfaa84\" 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-8cfaa84\"\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>&lt;node_name&gt;:\n  ros__parameters:\n    &lt;param_name_1&gt;: &lt;value&gt;\n    &lt;param_name_n&gt;: &lt;value&gt;\n<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_8cfaa84 = 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_8cfaa84();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_8cfaa84 );\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-812f9d0 elementor-widget elementor-widget-text-editor\" data-id=\"812f9d0\" 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>A continuaci\u00f3n se muestra un ejemplo de archivo de configuraci\u00f3n YAML.<\/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-aa2efbb elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"aa2efbb\" 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-aa2efbb\"\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>my_node_name_1:\n  ros__parameters:\n    bool_value: True\n    int_number: 5\n    float_number: 3.14\n    str_text: &quot;My text&quot;\n    bool_array: [True, False, False]\n    int_array: [1, 82, 15, 43]\n    float_array: [72.5, 30.6]\n    str_array: [&#039;Hello&#039;, &#039;World&#039;]\n    bytes_array: [0x03, 0xA1, 0xFF]\n    nested_param:\n      another_int: 3\n\nmy_node_name_2:\n  ros__parameters:\n    bool_value: True\n    int_number: 5<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_aa2efbb = 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_aa2efbb();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_aa2efbb );\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-933b4eb elementor-widget elementor-widget-text-editor\" data-id=\"933b4eb\" 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>Cargando los par\u00e1metros desde un archivo LAUNCH<\/h3><p>Al crear en nuestro archivo launch la acci\u00f3n correspondiente para cargar un nodo tambi\u00e9n podemos indicar sus par\u00e1metros de configuraci\u00f3n, bien indic\u00e1ndolos uno a uno o carg\u00e1ndolos desde un archivo YAML.<\/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-6d0bcc5 elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"6d0bcc5\" 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-6d0bcc5\"\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 ament_index_python.packages import get_package_share_directory\nfrom launch import LaunchDescription\nfrom launch_ros.actions import Node\n\ndef generate_launch_description():\n\n    config = os.path.join(\n        get_package_share_directory(&#039;my_package_name&#039;),\n        &#039;config&#039;,\n        &#039;params.yaml&#039;\n        )\n\n    return LaunchDescription(\n        Node(\n        package = &#039;my_package_name&#039;,\n        name = &#039;my_node1_name&#039;,\n        executable = &#039;my_node1_name&#039;,\n        parameters = [config]\n        ),\n\n        Node(\n        package = &#039;my_package_name&#039;,\n        name = &#039;my_node2_name&#039;,\n        executable = &#039;my_node2_name&#039;,\n        parameters = [config]\n        ),\n    )<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_6d0bcc5 = 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_6d0bcc5();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_6d0bcc5 );\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-8f11248 elementor-widget elementor-widget-text-editor\" data-id=\"8f11248\" 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>Para que funcione correctamente no debemos olvidar modificar nuestro archivo <b><i>setup.py<\/i><\/b>&nbsp; para incluir&nbsp; los directorios&nbsp;<b><i>\/config<\/i><\/b>&nbsp;y <b><i>\/launch<\/i><\/b> en la instalaci\u00f3n del paquete. Para ello a\u00f1adimos a <b><i>data_files<\/i><\/b> las dos \u00faltimas l\u00edneas que se muestran a continuaci\u00f3n y compilamos el paquete.<\/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-963616f elementor-widget elementor-widget-mdp-coder-elementor\" data-id=\"963616f\" 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-963616f\"\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>    data_files=[\n        (&#039;share\/ament_index\/resource_index\/packages&#039;,\n            [&#039;resource\/&#039; + package_name]),\n        (&#039;share\/&#039; + package_name, [&#039;package.xml&#039;]),\n        (os.path.join(&#039;share&#039;, package_name, &#039;launch&#039;), glob(&#039;launch\/*.launch.py&#039;)),\n        (os.path.join(&#039;share&#039;, package_name, &#039;config&#039;), glob(&#039;config\/*.yaml&#039;))\n    ],\n<\/code><\/pre>\n                    <\/div>\n                <script>\n            \"use strict\";\n\n            \/** Handler when the DOM is fully loaded. *\/\n            let callback_963616f = 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_963616f();\n            } else {\n                document.addEventListener( \"DOMContentLoaded\", callback_963616f );\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\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>Introducci\u00f3n Un par\u00e1metro es un valor de configuraci\u00f3n de un nodo. Se puede pensar en los par\u00e1metros como configuraciones de nodo.&nbsp;Los par\u00e1metros admiten los siguientes tipos de valores: Booleano. N\u00famero entero. N\u00famero en coma flotante. Cadena de texto. Un array de los tipos anteriores. Un array de bytes. En ROS2 no hay un servidor de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"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":[1],"tags":[],"class_list":["post-7389","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"aioseo_notices":[],"rttpg_featured_image_url":null,"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=1\" rel=\"category\">Sin categor\u00eda<\/a>","rttpg_excerpt":"Introducci\u00f3n Un par\u00e1metro es un valor de configuraci\u00f3n de un nodo. Se puede pensar en los par\u00e1metros como configuraciones de nodo.&nbsp;Los par\u00e1metros admiten los siguientes tipos de valores: Booleano. N\u00famero entero. N\u00famero en coma flotante. Cadena de texto. Un array de los tipos anteriores. Un array de bytes. En ROS2 no hay un servidor de&hellip;","_links":{"self":[{"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/posts\/7389","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=7389"}],"version-history":[{"count":271,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/posts\/7389\/revisions"}],"predecessor-version":[{"id":7673,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=\/wp\/v2\/posts\/7389\/revisions\/7673"}],"wp:attachment":[{"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/robotica-facil-con-ros2.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}