{"id":5068,"date":"2025-12-05T16:44:02","date_gmt":"2025-12-05T16:44:02","guid":{"rendered":"https:\/\/learnbydoing.dev\/?p=5068"},"modified":"2026-01-10T21:50:54","modified_gmt":"2026-01-10T21:50:54","slug":"how-to-manage-parameters-in-ros-2-using-cpp","status":"publish","type":"post","link":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/","title":{"rendered":"How to Manage Parameters in ROS 2 Using C++"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"5068\" class=\"elementor elementor-5068\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e28ab35 e-flex e-con-boxed e-con e-parent\" data-id=\"e28ab35\" data-element_type=\"container\" data-e-type=\"container\" id=\"content\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-62ab6e3 e-con-full e-flex e-con e-child\" data-id=\"62ab6e3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-62ab203 elementor-align-center elementor-widget elementor-widget-post-info\" data-id=\"62ab203\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"post-info.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-inline-items elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-2c98363 elementor-inline-item\" itemprop=\"about\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-terms\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-post-info__terms-list\">\n\t\t\t\t<span class=\"elementor-post-info__terms-list-item\">ROS 2<\/span>, <span class=\"elementor-post-info__terms-list-item\">Tutoriales<\/span>\t\t\t\t<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0650e10 e-con-full e-flex e-con e-child\" data-id=\"0650e10\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ac19582 elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"ac19582\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"75\" height=\"75\" viewbox=\"0 0 75 75\" fill=\"none\"><path d=\"M74.9999 75H13.1889V73.0002H71.5859L0.460938 1.87521L1.87515 0.460999L73.0001 71.586V13.1889H74.9999V75Z\" fill=\"white\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-47aa245d e-flex e-con-boxed e-con e-parent\" data-id=\"47aa245d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c16836 elementor-widget elementor-widget-image\" data-id=\"0c16836\" data-element_type=\"widget\" data-e-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\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2-1024x576.webp\" class=\"attachment-large size-large wp-image-5077\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2-1024x576.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2-300x169.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2-768x432.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2-1536x864.webp 1536w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2-18x10.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp 1920w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\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-4bc31ca3 elementor-widget elementor-widget-text-editor\" data-id=\"4bc31ca3\" data-element_type=\"widget\" data-e-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\t\t<h3>\ud83d\udc69\ud83c\udffb\u200d\ud83d\udcbb <strong>Core Concepts, Practical Implementation, and CLI Tools<\/strong><\/h3><p data-start=\"223\" data-end=\"589\">In ROS 2 development, parameter management is a fundamental capability for building flexible, configurable, and adaptive robotic systems. Any autonomous robot must be able to modify its behavior without recompilation: sensor frequencies, maximum speed, module activation, safety limits, and numerous other factors depend on values that must be adjustable at runtime.<br \/><br \/><\/p><p data-start=\"591\" data-end=\"840\">ROS 2 provides a powerful distributed parameter server integrated directly inside each node. This design replaces the centralized approach of ROS 1, offering improved safety, predictability, and modularity\u2014exactly what modern robotic systems demand.<br \/><br \/><\/p><p data-start=\"842\" data-end=\"872\">In this article, we explore:<\/p><ul data-start=\"873\" data-end=\"1075\"><li data-start=\"873\" data-end=\"917\"><p data-start=\"875\" data-end=\"917\">what parameters are and why they matter,<\/p><\/li><li data-start=\"918\" data-end=\"951\"><p data-start=\"920\" data-end=\"951\">how to implement them in C++,<\/p><\/li><li data-start=\"952\" data-end=\"1006\"><p data-start=\"954\" data-end=\"1006\">how to interact with them through ROS 2 CLI tools,<\/p><\/li><li data-start=\"1007\" data-end=\"1075\"><p data-start=\"1009\" data-end=\"1075\">how to verify everything through a hands-on laboratory exercise.<br \/><br \/><\/p><\/li><\/ul><p data-start=\"1077\" data-end=\"1227\">Some theoretical concepts overlap with the earlier article <em data-start=\"1136\" data-end=\"1167\">\u201cROS 2 Lifecycle Node in C++\u201d<\/em>, but here the focus is exclusively on parameter management.<\/p>\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-12a4ca0 elementor-widget elementor-widget-text-editor\" data-id=\"12a4ca0\" data-element_type=\"widget\" data-e-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\t\t<h3 data-start=\"1234\" data-end=\"1282\">\ud83e\udd14 <strong data-start=\"1236\" data-end=\"1282\">What Parameters Are and Why They Matter<\/strong><\/h3><p data-start=\"1284\" data-end=\"1457\">A parameter is simply a value associated with a node, and it may represent numbers, booleans, strings, arrays, or structured data. Unlike internal variables, parameters are:<br \/><br \/><\/p><ul data-start=\"1459\" data-end=\"1603\"><li data-start=\"1459\" data-end=\"1482\"><p data-start=\"1461\" data-end=\"1482\">externally visible,<\/p><\/li><li data-start=\"1483\" data-end=\"1506\"><p data-start=\"1485\" data-end=\"1506\">runtime-modifiable,<\/p><\/li><li data-start=\"1507\" data-end=\"1538\"><p data-start=\"1509\" data-end=\"1538\">persistent within the node,<\/p><\/li><li data-start=\"1539\" data-end=\"1580\"><p data-start=\"1541\" data-end=\"1580\">managed through validation callbacks,<\/p><\/li><li data-start=\"1581\" data-end=\"1603\"><p data-start=\"1583\" data-end=\"1603\">declared explicitly.<br \/><br \/><\/p><\/li><\/ul><p data-start=\"1605\" data-end=\"1846\">This makes them ideal for configuring a robot without touching the source code.<br data-start=\"1684\" data-end=\"1687\" \/>In ROS 2, each node has its own parameter infrastructure, responsible for declaration, updates, and validation\u2014removing the need for a global parameter server.<br \/><br \/><\/p><p data-start=\"1848\" data-end=\"1929\">Compared to ROS 1, this approach increases isolation, predictability, and safety.<\/p>\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-4229593 elementor-widget elementor-widget-text-editor\" data-id=\"4229593\" data-element_type=\"widget\" data-e-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\t\t<h3 data-start=\"2521\" data-end=\"2572\"><strong data-start=\"2524\" data-end=\"2572\">\ud83c\udfd7\ufe0f <\/strong><strong data-start=\"1938\" data-end=\"1975\">Implementing Parameters in C++<\/strong><\/h3><p data-start=\"2122\" data-end=\"2195\">Below is the <strong data-start=\"2135\" data-end=\"2152\">complete code<\/strong>, followed by a block-by-block explanation.<\/p><p data-start=\"1530\" data-end=\"1656\"><code data-start=\"1690\" data-end=\"1695\"><\/code><\/p><p data-start=\"1530\" data-end=\"1656\"><code data-start=\"1690\" data-end=\"1695\"><\/code><\/p>\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-3ca20e2 elementor-widget elementor-widget-text-editor\" data-id=\"3ca20e2\" data-element_type=\"widget\" data-e-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\t\t<h3 data-start=\"2521\" data-end=\"2572\"><strong data-start=\"2207\" data-end=\"2224\">&lt;\/&gt; Complete Code<\/strong><\/h3><p data-start=\"1530\" data-end=\"1656\"><code data-start=\"1690\" data-end=\"1695\"><\/code><\/p><p data-start=\"1530\" data-end=\"1656\"><code data-start=\"1690\" data-end=\"1695\"><\/code><\/p>\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-c39e8e2 elementor-widget elementor-widget-code-highlight\" data-id=\"c39e8e2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>#include \"rclcpp\/rclcpp.hpp\"\r\n\r\nclass SimpleParam : public rclcpp::Node\r\n{\r\npublic:\r\n  SimpleParam() : Node(\"simple_param_node\")\r\n  {\r\n    this->declare_parameter<std::string>(\"my_param\", \"world\");\r\n    timer_ = this->create_wall_timer(\r\n      std::chrono::seconds(1),\r\n      std::bind(&SimpleParam::timer_callback, this));\r\n  }\r\n\r\nprivate:\r\n  void timer_callback()\r\n  {\r\n    std::string my_param = this->get_parameter(\"my_param\").as_string();\r\n    RCLCPP_INFO(this->get_logger(), \"Hello %s\", my_param.c_str());\r\n  }\r\n\r\n  rclcpp::TimerBase::SharedPtr timer_;\r\n};\r\n\r\nint main(int argc, char *argv[])\r\n{\r\n  rclcpp::init(argc, argv);\r\n  rclcpp::spin(std::make_shared<SimpleParam>());\r\n  rclcpp::shutdown();\r\n  return 0;\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-961c2f7 elementor-widget elementor-widget-text-editor\" data-id=\"961c2f7\" data-element_type=\"widget\" data-e-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\t\t<h3 data-start=\"2586\" data-end=\"2639\"><strong>\ud83e\udde9\u00a0Breaking Down the Code<\/strong><\/h3><p data-start=\"1530\" data-end=\"1656\"><code data-start=\"1690\" data-end=\"1695\"><\/code><\/p>\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-79cee2d elementor-widget elementor-widget-text-editor\" data-id=\"79cee2d\" data-element_type=\"widget\" data-e-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\t\t<h4 data-start=\"2586\" data-end=\"2639\"><strong>Library inclusion<\/strong><\/h4><p data-start=\"1530\" data-end=\"1656\"><code data-start=\"1690\" data-end=\"1695\"><\/code><\/p>\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-635f0ee elementor-widget elementor-widget-code-highlight\" data-id=\"635f0ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>#include \"rclcpp\/rclcpp.hpp\"\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-424d237 elementor-widget elementor-widget-text-editor\" data-id=\"424d237\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"4742\" data-end=\"4808\">This imports the full ROS 2 C++ API, including tools for creating nodes, parameters, timers, and logging.<\/p>\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-8840d89 elementor-widget elementor-widget-text-editor\" data-id=\"8840d89\" data-element_type=\"widget\" data-e-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\t\t<h4 data-start=\"4742\" data-end=\"4808\"><strong>Node class definition<\/strong><\/h4>\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-34e2893 elementor-widget elementor-widget-code-highlight\" data-id=\"34e2893\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>class SimpleParam : public rclcpp::Node\r\n{\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0ed0bb9 elementor-widget elementor-widget-text-editor\" data-id=\"0ed0bb9\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"3271\" data-end=\"3402\">We define a class inheriting from <code data-start=\"3305\" data-end=\"3319\">rclcpp::Node<\/code>, enabling access to all node-level features such as timers and parameter handling.<\/p>\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-9f13b34 elementor-widget elementor-widget-text-editor\" data-id=\"9f13b34\" data-element_type=\"widget\" data-e-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\t\t<h4 data-start=\"3907\" data-end=\"4070\"><strong>Node constructor<\/strong><\/h4>\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-fbbfe30 elementor-widget elementor-widget-code-highlight\" data-id=\"fbbfe30\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>SimpleParam() : Node(\"simple_param_node\")\r\n{\r\n    this->declare_parameter<std::string>(\"my_param\", \"world\");\r\n    timer_ = this->create_wall_timer(\r\n      std::chrono::seconds(1),\r\n      std::bind(&SimpleParam::timer_callback, this));\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc28add elementor-widget elementor-widget-text-editor\" data-id=\"dc28add\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"4153\" data-end=\"4283\">Two essential operations occur here:<\/p>\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-cea4b67 elementor-widget elementor-widget-text-editor\" data-id=\"cea4b67\" data-element_type=\"widget\" data-e-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\t\t<h4 data-start=\"4153\" data-end=\"4283\"><strong>Parameter declaration<\/strong><\/h4>\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-7da3562 elementor-widget elementor-widget-code-highlight\" data-id=\"7da3562\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>this->declare_parameter<std::string>(\"my_param\", \"world\");\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a73b77a elementor-widget elementor-widget-text-editor\" data-id=\"a73b77a\" data-element_type=\"widget\" data-e-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\t\t<p>ROS 2 requires all parameters to be declared explicitly.<br data-start=\"3895\" data-end=\"3898\" \/>Here we declare <code data-start=\"3917\" data-end=\"3929\">\"my_param\"<\/code> as a string with default value <code data-start=\"3961\" data-end=\"3970\">\"world\"<\/code>.<\/p>\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-4528eab elementor-widget elementor-widget-text-editor\" data-id=\"4528eab\" data-element_type=\"widget\" data-e-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\t\t<h4><strong>Timer creation<\/strong><\/h4>\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-9790003 elementor-widget elementor-widget-code-highlight\" data-id=\"9790003\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>create_wall_timer(...)\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09ad431 elementor-widget elementor-widget-text-editor\" data-id=\"09ad431\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"1569\" data-end=\"1754\">The node will execute <code data-start=\"4065\" data-end=\"4083\">timer_callback()<\/code> every second, allowing us to print the updated value of the parameter.<\/p>\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-37d278a elementor-widget elementor-widget-text-editor\" data-id=\"37d278a\" data-element_type=\"widget\" data-e-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\t\t<h4 data-start=\"3122\" data-end=\"3161\"><strong>Timer callback<\/strong><\/h4>\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-2a92f84 elementor-widget elementor-widget-code-highlight\" data-id=\"2a92f84\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>void timer_callback()\r\n{\r\n    std::string my_param = this->get_parameter(\"my_param\").as_string();\r\n    RCLCPP_INFO(this->get_logger(), \"Hello %s\", my_param.c_str());\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a993aad elementor-widget elementor-widget-text-editor\" data-id=\"a993aad\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"4371\" data-end=\"4384\">The callback:<\/p><ol data-start=\"4386\" data-end=\"4514\"><li data-start=\"4386\" data-end=\"4471\"><p data-start=\"4389\" data-end=\"4471\">retrieves the current value of <code data-start=\"4420\" data-end=\"4432\">\"my_param\"<\/code>\u2014even if updated dynamically via CLI;<\/p><\/li><li data-start=\"4472\" data-end=\"4514\"><p data-start=\"4475\" data-end=\"4514\">prints the value using the node logger.<\/p><\/li><\/ol><p data-start=\"4516\" data-end=\"4584\">Every time the parameter changes, the message updates automatically.<\/p>\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-24e226b elementor-widget elementor-widget-text-editor\" data-id=\"24e226b\" data-element_type=\"widget\" data-e-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\t\t<h4 data-start=\"1569\" data-end=\"1754\"><strong>Main function<\/strong><\/h4>\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-77d11f3 elementor-widget elementor-widget-code-highlight\" data-id=\"77d11f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>int main(int argc, char *argv[])\r\n{\r\n  rclcpp::init(argc, argv);\r\n  rclcpp::spin(std::make_shared<SimpleParam>());\r\n  rclcpp::shutdown();\r\n  return 0;\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-049d352 elementor-widget elementor-widget-text-editor\" data-id=\"049d352\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"1569\" data-end=\"1754\">ROS 2 is initialized, the node is launched, and <code data-start=\"4831\" data-end=\"4839\">spin()<\/code> keeps it active while listening for parameter updates and timer events.<\/p>\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-16e426a elementor-widget elementor-widget-text-editor\" data-id=\"16e426a\" data-element_type=\"widget\" data-e-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\t\t<h3 data-start=\"4918\" data-end=\"4976\">\ud83e\udd16 <strong data-start=\"4920\" data-end=\"4976\">Laboratory: Working with Parameters via ROS 2 CLI<\/strong><\/h3><p data-start=\"5088\" data-end=\"5103\">Start the node:<\/p>\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-bc70a6a elementor-widget elementor-widget-code-highlight\" data-id=\"bc70a6a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>ros2 run my_pkg simple_param_node\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d5a147 elementor-widget elementor-widget-text-editor\" data-id=\"6d5a147\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"1569\" data-end=\"1754\">List available parameters:<\/p>\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-ed33290 elementor-widget elementor-widget-code-highlight\" data-id=\"ed33290\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>ros2 param list\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76f6a8b elementor-widget elementor-widget-text-editor\" data-id=\"76f6a8b\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"1569\" data-end=\"1754\">Read a parameter:<\/p>\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-ca6dc74 elementor-widget elementor-widget-code-highlight\" data-id=\"ca6dc74\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>ros2 param get \/simple_param_node my_param\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d4d05e7 elementor-widget elementor-widget-text-editor\" data-id=\"d4d05e7\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"1569\" data-end=\"1754\">Update it dynamically:<\/p>\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-83cfd7f elementor-widget elementor-widget-code-highlight\" data-id=\"83cfd7f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>ros2 param set \/simple_param_node my_param \"ROS 2\"\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-371ee39 elementor-widget elementor-widget-text-editor\" data-id=\"371ee39\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"1569\" data-end=\"1754\">The node will now output:<\/p>\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-a4df2b3 elementor-widget elementor-widget-code-highlight\" data-id=\"a4df2b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>Hello ROS 2\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b5be1b elementor-widget elementor-widget-text-editor\" data-id=\"4b5be1b\" data-element_type=\"widget\" data-e-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\t\t<p data-start=\"5420\" data-end=\"5471\">all without recompiling or restarting the program.<br \/><br \/><\/p><p data-start=\"5473\" data-end=\"5591\">This workflow shows how essential dynamic parameters are for real robots, where behavior must often change at runtime.<\/p>\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-078e0ac elementor-widget elementor-widget-text-editor\" data-id=\"078e0ac\" data-element_type=\"widget\" data-e-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\t\t<h3 data-start=\"8212\" data-end=\"8228\"><strong>\ud83c\udfaf Conclusion<\/strong><\/h3><p data-start=\"5619\" data-end=\"5850\">Parameters are one of the most powerful and flexible tools available in ROS 2. They allow nodes to be reconfigured at runtime, ensure predictable interactions, and enable both simple prototypes and full-scale robotic architectures.<br \/><br \/><\/p><p data-start=\"5852\" data-end=\"6015\">In this article, you learned how parameters work, how to declare them, how to retrieve and update them in C++, and how to interact with them from the command line.<br \/><br \/><\/p><p>But this is only the beginning.<br data-start=\"6048\" data-end=\"6051\" \/>In real robot architectures, parameters become hierarchical, loaded from YAML files, and integrated into complex systems such as navigation, perception, motion planning, and controller tuning.<\/p><p data-start=\"6468\" data-end=\"6576\">\u00a0<\/p><p data-start=\"4547\" data-end=\"4653\">\u00a0<\/p>\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\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c5d20e7 e-con-full e-flex e-con e-parent\" data-id=\"c5d20e7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e8bdddd elementor-bg-transform elementor-bg-transform-move-left elementor-cta--layout-image-left elementor-cta--mobile-layout-image-above elementor-cta--skin-classic elementor-animated-content elementor-widget elementor-widget-call-to-action\" data-id=\"e8bdddd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/plan_navigation.webp);\" role=\"img\" aria-label=\"plan_navigation\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h2 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item\">\n\t\t\t\t\t\tWant to learn more?\t\t\t\t\t<\/h2>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-cta__description elementor-cta__content-item elementor-content-item\">\n\t\t\t\t\t\tIf you want to learn how to design and build professional robotic systems, check out our \"Self Driving and ROS 2 - Learn by doing! Odometry &amp; Control\" course\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item\">\n\t\t\t\t\t<a class=\"elementor-cta__button elementor-button elementor-size-\" href=\"\" target=\"_blank\">\n\t\t\t\t\t\tEnroll Now\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-ribbon elementor-ribbon-right\">\n\t\t\t\t<div class=\"elementor-ribbon-inner\">\n\t\t\t\t\tDISCOUNT\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc69\ud83c\udffb\u200d\ud83d\udcbb Core Concepts, Practical Implementation, and CLI Tools In ROS 2 development, parameter management is a fundamental capability for building flexible, configurable, and adaptive robotic systems. Any autonomous robot must be able to modify its behavior without recompilation: sensor frequencies, maximum speed, module activation, safety limits, and numerous other factors depend on values that must [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":5077,"comment_status":"closed","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[45,43],"tags":[328,347,381,349,179,66,74,96,110,343,348,296,371,379,71,107,383,382,386,374,377,376,385,378,384,375,373,365,362,370,372,72,380,342,76,73],"class_list":["post-5068","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ros-2","category-tutorials","tag-antonio-brandi","tag-brandi","tag-c-robotics","tag-costmaps","tag-lbd","tag-learn-by-doing","tag-linux","tag-nav2","tag-navigation","tag-obstacle","tag-pc","tag-raspberry","tag-robot-modeling-ros-2","tag-robotics-programming","tag-ros","tag-ros-2","tag-ros-2-advanced-tutorial","tag-ros-2-beginner-tutorial","tag-ros-2-best-practices","tag-ros-2-c-tutorial","tag-ros-2-cli-tools","tag-ros-2-dynamic-configuration","tag-ros-2-engineering","tag-ros-2-node-development","tag-ros-2-parameter-callback","tag-ros-2-parameter-server","tag-ros-2-parameters","tag-ros-2-robot-description","tag-ros-2-robot-model","tag-ros-2-simulation","tag-ros-2-step-by-step-tutorial","tag-ros2","tag-ros2-guide","tag-static","tag-step-by-step","tag-ubuntu"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Manage Parameters in ROS 2 Using C++ - Learn by Doing!<\/title>\n<meta name=\"description\" content=\"Learn how to manage ROS 2 parameters in C++ with a full guide to declaration, runtime updates, CLI tools, and practical lab examples for real robotics.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/learnbydoing.dev\/es\/how-to-manage-parameters-in-ros-2-using-cpp\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Manage Parameters in ROS 2 Using C++\" \/>\n<meta property=\"og:description\" content=\"Learn by Doing!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/learnbydoing.dev\/es\/how-to-manage-parameters-in-ros-2-using-cpp\/\" \/>\n<meta property=\"og:site_name\" content=\"Learn by Doing!\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-05T16:44:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-10T21:50:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"How to Manage Parameters in ROS 2 Using C++\",\"datePublished\":\"2025-12-05T16:44:02+00:00\",\"dateModified\":\"2026-01-10T21:50:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/\"},\"wordCount\":583,\"publisher\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp\",\"keywords\":[\"antonio brandi\",\"brandi\",\"C++ robotics\",\"costmaps\",\"lbd\",\"learn by doing\",\"Linux\",\"nav2\",\"navigation\",\"obstacle\",\"pc\",\"Raspberry\",\"Robot modeling ROS 2\",\"robotics programming\",\"ROS\",\"ROS 2\",\"ROS 2 advanced tutorial\",\"ROS 2 beginner tutorial\",\"ROS 2 best practices\",\"ROS 2 C++ tutorial\",\"ROS 2 CLI tools\",\"ROS 2 dynamic configuration\",\"ROS 2 engineering\",\"ROS 2 node development\",\"ROS 2 parameter callback\",\"ROS 2 parameter server\",\"ROS 2 parameters\",\"ROS 2 robot description\",\"ROS 2 robot model\",\"ROS 2 simulation\",\"ROS 2 step-by-step tutorial\",\"ROS2\",\"ROS2 guide\",\"static\",\"step by step\",\"Ubuntu\"],\"articleSection\":[\"ROS 2\",\"Tutorials\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/\",\"url\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/\",\"name\":\"How to Manage Parameters in ROS 2 Using C++ - Learn by Doing!\",\"isPartOf\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp\",\"datePublished\":\"2025-12-05T16:44:02+00:00\",\"dateModified\":\"2026-01-10T21:50:54+00:00\",\"description\":\"Learn how to manage ROS 2 parameters in C++ with a full guide to declaration, runtime updates, CLI tools, and practical lab examples for real robotics.\",\"breadcrumb\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#primaryimage\",\"url\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp\",\"contentUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/learnbydoing.dev\/es\/learn-by-doing-es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Manage Parameters in ROS 2 Using C++\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/learnbydoing.dev\/es\/#website\",\"url\":\"https:\/\/learnbydoing.dev\/es\/\",\"name\":\"Learn by Doing!\",\"description\":\"Learn Robotics the fun way\",\"publisher\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/learnbydoing.dev\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/learnbydoing.dev\/es\/#organization\",\"name\":\"Learn by Doing!\",\"url\":\"https:\/\/learnbydoing.dev\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/learnbydoing.dev\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/cropped-cropped-cropped-Progetto-senza-titolo-6-1.png\",\"contentUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/cropped-cropped-cropped-Progetto-senza-titolo-6-1.png\",\"width\":512,\"height\":512,\"caption\":\"Learn by Doing!\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/antonio-brandi-512166bb\/\"]},{\"@type\":\"Person\",\"@id\":\"\",\"url\":\"https:\/\/learnbydoing.dev\/es\/author\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Manage Parameters in ROS 2 Using C++ - Learn by Doing!","description":"Learn how to manage ROS 2 parameters in C++ with a full guide to declaration, runtime updates, CLI tools, and practical lab examples for real robotics.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/learnbydoing.dev\/es\/how-to-manage-parameters-in-ros-2-using-cpp\/","og_locale":"es_ES","og_type":"article","og_title":"How to Manage Parameters in ROS 2 Using C++","og_description":"Learn by Doing!","og_url":"https:\/\/learnbydoing.dev\/es\/how-to-manage-parameters-in-ros-2-using-cpp\/","og_site_name":"Learn by Doing!","article_published_time":"2025-12-05T16:44:02+00:00","article_modified_time":"2026-01-10T21:50:54+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#article","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/"},"author":{"name":"","@id":""},"headline":"How to Manage Parameters in ROS 2 Using C++","datePublished":"2025-12-05T16:44:02+00:00","dateModified":"2026-01-10T21:50:54+00:00","mainEntityOfPage":{"@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/"},"wordCount":583,"publisher":{"@id":"https:\/\/learnbydoing.dev\/es\/#organization"},"image":{"@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp","keywords":["antonio brandi","brandi","C++ robotics","costmaps","lbd","learn by doing","Linux","nav2","navigation","obstacle","pc","Raspberry","Robot modeling ROS 2","robotics programming","ROS","ROS 2","ROS 2 advanced tutorial","ROS 2 beginner tutorial","ROS 2 best practices","ROS 2 C++ tutorial","ROS 2 CLI tools","ROS 2 dynamic configuration","ROS 2 engineering","ROS 2 node development","ROS 2 parameter callback","ROS 2 parameter server","ROS 2 parameters","ROS 2 robot description","ROS 2 robot model","ROS 2 simulation","ROS 2 step-by-step tutorial","ROS2","ROS2 guide","static","step by step","Ubuntu"],"articleSection":["ROS 2","Tutorials"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/","url":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/","name":"How to Manage Parameters in ROS 2 Using C++ - Learn by Doing!","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#primaryimage"},"image":{"@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp","datePublished":"2025-12-05T16:44:02+00:00","dateModified":"2026-01-10T21:50:54+00:00","description":"Learn how to manage ROS 2 parameters in C++ with a full guide to declaration, runtime updates, CLI tools, and practical lab examples for real robotics.","breadcrumb":{"@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#primaryimage","url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp","contentUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/12\/Titolo-2.webp","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/learnbydoing.dev\/how-to-manage-parameters-in-ros-2-using-cpp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/learnbydoing.dev\/es\/learn-by-doing-es\/"},{"@type":"ListItem","position":2,"name":"How to Manage Parameters in ROS 2 Using C++"}]},{"@type":"WebSite","@id":"https:\/\/learnbydoing.dev\/es\/#website","url":"https:\/\/learnbydoing.dev\/es\/","name":"Learn by Doing!","description":"Learn Robotics the fun way","publisher":{"@id":"https:\/\/learnbydoing.dev\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/learnbydoing.dev\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/learnbydoing.dev\/es\/#organization","name":"Learn by Doing!","url":"https:\/\/learnbydoing.dev\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/learnbydoing.dev\/es\/#\/schema\/logo\/image\/","url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/cropped-cropped-cropped-Progetto-senza-titolo-6-1.png","contentUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/cropped-cropped-cropped-Progetto-senza-titolo-6-1.png","width":512,"height":512,"caption":"Learn by Doing!"},"image":{"@id":"https:\/\/learnbydoing.dev\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/antonio-brandi-512166bb\/"]},{"@type":"Person","@id":"","url":"https:\/\/learnbydoing.dev\/es\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/5068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/comments?post=5068"}],"version-history":[{"count":15,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/5068\/revisions"}],"predecessor-version":[{"id":5478,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/5068\/revisions\/5478"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media\/5077"}],"wp:attachment":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media?parent=5068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/categories?post=5068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/tags?post=5068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}