{"id":2572,"date":"2025-07-11T11:28:47","date_gmt":"2025-07-11T11:28:47","guid":{"rendered":"https:\/\/learnbydoing.dev\/?p=2572"},"modified":"2026-01-10T22:23:48","modified_gmt":"2026-01-10T22:23:48","slug":"how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo","status":"publish","type":"post","link":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/","title":{"rendered":"How to Integrate ROS Control into a Simulated Robot in Gazebo"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"2572\" class=\"elementor elementor-2572\" 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\">Linux<\/span>, <span class=\"elementor-post-info__terms-list-item\">ROS<\/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-206a001 elementor-widget elementor-widget-image\" data-id=\"206a001\" 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=\"1920\" height=\"1080\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp\" class=\"attachment-full size-full wp-image-2579\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp 1920w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7-300x169.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7-1024x576.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7-768x432.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7-1536x864.webp 1536w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7-18x10.webp 18w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/>\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<p>Controlling a simulated robot as if it were real \u2014 that\u2019s the power of ROS Control. In this guide, we\u2019ll see how to properly configure the URDF model so ROS can &#8220;command&#8221; the simulated motors of our BumperBot.<\/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=\"1857\" data-end=\"1885\"><strong>\ud83d\ude80 Introduction: What Is ROS Control and Why Use It?<\/strong><\/h3><p data-start=\"1014\" data-end=\"1155\">Imagine building a robot with real motors, sensors, and joints. You wouldn\u2019t want to manually write low-level code to drive every motor or calculate PID loops, right? That\u2019s exactly where <strong data-start=\"782\" data-end=\"797\">ROS Control<\/strong> comes in.<\/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-c983314 elementor-widget elementor-widget-text-editor\" data-id=\"c983314\" 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=\"1857\" data-end=\"1885\"><strong>\ud83d\udd27 What is ROS Control?<\/strong><\/h3><p data-start=\"838\" data-end=\"1005\"><strong data-start=\"838\" data-end=\"853\">ROS Control<\/strong> is a framework in ROS (Robot Operating System) that separates your robot\u2019s <strong data-start=\"929\" data-end=\"949\">high-level logic<\/strong> from the <strong data-start=\"959\" data-end=\"992\">low-level hardware interfaces<\/strong>. It enables:<br \/><br \/><\/p><ul data-start=\"1007\" data-end=\"1168\"><li data-start=\"1007\" data-end=\"1065\"><p data-start=\"1009\" data-end=\"1065\">Real-time controllers (e.g., velocity, position, effort)<br \/><br \/><\/p><\/li><li data-start=\"1066\" data-end=\"1114\"><p data-start=\"1068\" data-end=\"1114\">Modular configuration of actuators and sensors<br \/><br \/><\/p><\/li><li data-start=\"1115\" data-end=\"1168\"><p data-start=\"1117\" data-end=\"1168\">Easy switching between simulation and real hardware<br \/><br \/><\/p><\/li><\/ul>\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-ea5fb22 elementor-widget elementor-widget-text-editor\" data-id=\"ea5fb22\" 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=\"1170\" data-end=\"1199\">\ud83c\udfaf<strong> Why Should You Use It?<\/strong><\/h3><p data-start=\"1201\" data-end=\"1302\">Whether you&#8217;re simulating a robot in Gazebo or controlling a physical machine, ROS Control gives you:<br \/><br \/><\/p><ul data-start=\"1304\" data-end=\"1480\"><li data-start=\"1304\" data-end=\"1351\"><p data-start=\"1306\" data-end=\"1351\">\u00a0A unified interface to interact with joints<br \/><br \/><\/p><\/li><li data-start=\"1352\" data-end=\"1394\"><p data-start=\"1354\" data-end=\"1394\">\u00a0A standardized way to load controllers<br \/><br \/><\/p><\/li><li data-start=\"1395\" data-end=\"1480\"><p data-start=\"1397\" data-end=\"1480\">\u00a0The ability to use the same code in both <strong data-start=\"1440\" data-end=\"1454\">simulation<\/strong> and <strong data-start=\"1459\" data-end=\"1480\">real-world robots<br \/><br \/><\/strong><\/p><\/li><\/ul><p data-start=\"1482\" data-end=\"1646\">In this tutorial, you\u2019ll learn how to enable <strong data-start=\"1527\" data-end=\"1542\">ROS Control<\/strong> in <strong data-start=\"1546\" data-end=\"1556\">Gazebo<\/strong> by modifying your robot\u2019s <strong data-start=\"1583\" data-end=\"1603\">URDF\/Xacro model<\/strong> and linking it to Gazebo\u2019s physics engine.<\/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-324d52d elementor-widget elementor-widget-text-editor\" data-id=\"324d52d\" 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=\"1653\" data-end=\"1670\">\ud83c\udfaf <strong>Lesson Goal<\/strong><\/h3><p data-start=\"1672\" data-end=\"1831\">Use <strong data-start=\"1676\" data-end=\"1691\">ROS Control<\/strong> to drive the motors of the <em data-start=\"1719\" data-end=\"1730\">BumperBot<\/em> robot simulated in <strong data-start=\"1750\" data-end=\"1760\">Gazebo<\/strong>, by modifying the <strong data-start=\"1779\" data-end=\"1793\">URDF\/Xacro<\/strong> file and adding the necessary plugin.<\/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-e1ef5c9 elementor-widget elementor-widget-text-editor\" data-id=\"e1ef5c9\" 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=\"1838\" data-end=\"1857\"><strong>\ud83e\uddf0 Prerequisites<\/strong><\/h3><ul data-start=\"1859\" data-end=\"1959\"><li data-start=\"1859\" data-end=\"1898\"><p data-start=\"1861\" data-end=\"1898\">ROS installed (ROS Noetic or Melodic)<br \/><br \/><\/p><\/li><li data-start=\"1899\" data-end=\"1913\"><p data-start=\"1901\" data-end=\"1913\">Ubuntu 20.04<br \/><br \/><\/p><\/li><li data-start=\"1914\" data-end=\"1940\"><p data-start=\"1916\" data-end=\"1940\">BumperBot project set up<br \/><br \/><\/p><\/li><li data-start=\"1941\" data-end=\"1959\"><p data-start=\"1943\" data-end=\"1959\">Gazebo installed<br \/><br \/><\/p><\/li><\/ul>\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-16ff055 elementor-widget elementor-widget-image\" data-id=\"16ff055\" 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 decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-8-1024x576.webp\" class=\"attachment-large size-large wp-image-2575\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-8-1024x576.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-8-300x169.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-8-768x432.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-8-1536x864.webp 1536w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-8-18x10.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-8.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-547217d elementor-widget elementor-widget-text-editor\" data-id=\"547217d\" 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=\"2113\" data-end=\"2158\"><strong>\ud83e\uddea A Bit of Theory: Velocity Joint Control<\/strong><\/h3><p data-start=\"2160\" data-end=\"2358\">For mobile robots, controlling wheel velocity is key. In ROS Control, this is done using the <code data-start=\"2253\" data-end=\"2277\">VelocityJointInterface<\/code>, which allows us to send <strong data-start=\"2303\" data-end=\"2320\">target speeds<\/strong> (in radians\/sec) to each wheel joint.<\/p><p data-start=\"2160\" data-end=\"2358\">\u00a0<\/p><p data-start=\"2360\" data-end=\"2523\">\ud83d\udccc A <strong data-start=\"2365\" data-end=\"2379\">controller<\/strong> sends velocity commands \u2192 <strong data-start=\"2406\" data-end=\"2428\">hardware interface<\/strong> processes it \u2192 <strong data-start=\"2444\" data-end=\"2464\">actuator (motor)<\/strong> executes it \u2192 <strong data-start=\"2479\" data-end=\"2488\">joint<\/strong> moves in simulation or real world.<\/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-9e94631 elementor-widget elementor-widget-text-editor\" data-id=\"9e94631\" 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><strong>\ud83d\udcdd Editing the URDF Model (Xacro)<\/strong><\/h3><p data-start=\"2568\" data-end=\"2633\">Open the file <code data-start=\"2582\" data-end=\"2606\">bumperbot_gazebo.xacro<\/code> in <strong data-start=\"2610\" data-end=\"2632\">Visual Studio Code<\/strong>.<\/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-096e1c0 elementor-widget elementor-widget-image\" data-id=\"096e1c0\" 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 decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-6-1024x576.webp\" class=\"attachment-large size-large wp-image-2574\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-6-1024x576.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-6-300x169.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-6-768x432.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-6-1536x864.webp 1536w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-6-18x10.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-6.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-d5228f1 elementor-widget elementor-widget-text-editor\" data-id=\"d5228f1\" 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=\"2732\" data-end=\"2772\"><strong>\ud83d\udd29 Adding Transmissions to the Joints<\/strong><\/h3><p data-start=\"2774\" data-end=\"2875\">To control a joint with ROS, you need to define a <strong data-start=\"2824\" data-end=\"2840\">transmission<\/strong>. Let\u2019s start with the right wheel.<\/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-84ee93f elementor-widget elementor-widget-code-highlight\" data-id=\"84ee93f\" 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-xml line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-xml\">\n\t\t\t\t\t<xmp><transmission name=\"wheel_right_transmission\">\r\n  <type>transmission_interface\/SimpleTransmission<\/type>\r\n  <joint name=\"wheel_right_joint\">\r\n    <hardwareInterface>hardware_interface\/VelocityJointInterface<\/hardwareInterface>\r\n  <\/joint>\r\n  <actuator name=\"wheel_right_motor\">\r\n    <hardwareInterface>hardware_interface\/VelocityJointInterface<\/hardwareInterface>\r\n    <mechanicalReduction>1.0<\/mechanicalReduction>\r\n  <\/actuator>\r\n<\/transmission>\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-bd44cb2 elementor-widget elementor-widget-text-editor\" data-id=\"bd44cb2\" 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=\"3328\" data-end=\"3346\"><strong>\ud83d\udccc Explanation<\/strong><\/h4><ul data-start=\"3348\" data-end=\"3654\"><li data-start=\"3348\" data-end=\"3415\"><p data-start=\"3350\" data-end=\"3415\"><code data-start=\"3350\" data-end=\"3356\">type<\/code>: Transmission type (SimpleTransmission is the most common)<\/p><\/li><li data-start=\"3416\" data-end=\"3455\"><p data-start=\"3418\" data-end=\"3455\"><code data-start=\"3418\" data-end=\"3425\">joint<\/code>: Name of the joint to control<\/p><\/li><li data-start=\"3456\" data-end=\"3501\"><p data-start=\"3458\" data-end=\"3501\"><code data-start=\"3458\" data-end=\"3468\">actuator<\/code>: Motor associated with the joint<\/p><\/li><li data-start=\"3502\" data-end=\"3578\"><p data-start=\"3504\" data-end=\"3578\"><code data-start=\"3504\" data-end=\"3523\">hardwareInterface<\/code>: Defines the control mode (velocity, position, effort)<\/p><\/li><li data-start=\"3579\" data-end=\"3654\"><p data-start=\"3581\" data-end=\"3654\"><code data-start=\"3581\" data-end=\"3602\">mechanicalReduction<\/code>: Ratio between motor shaft and wheel (1.0 = direct)<\/p><\/li><\/ul>\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-a11e24e elementor-widget elementor-widget-text-editor\" data-id=\"a11e24e\" 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=\"3744\" data-end=\"3774\"><strong>\ud83d\udd01 Copy for the Left Wheel<\/strong><\/h3><p data-start=\"3776\" data-end=\"3807\">Just copy and change the names:<\/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-e127889 elementor-widget elementor-widget-code-highlight\" data-id=\"e127889\" 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-xml line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-xml\">\n\t\t\t\t\t<xmp><transmission name=\"wheel_left_transmission\">\r\n  <type>transmission_interface\/SimpleTransmission<\/type>\r\n  <joint name=\"wheel_left_joint\">\r\n    <hardwareInterface>hardware_interface\/VelocityJointInterface<\/hardwareInterface>\r\n  <\/joint>\r\n  <actuator name=\"wheel_left_motor\">\r\n    <hardwareInterface>hardware_interface\/VelocityJointInterface<\/hardwareInterface>\r\n    <mechanicalReduction>1.0<\/mechanicalReduction>\r\n  <\/actuator>\r\n<\/transmission>\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-aa3c1a5 elementor-widget elementor-widget-text-editor\" data-id=\"aa3c1a5\" 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=\"4262\" data-end=\"4304\"><strong>\ud83e\udde9 Adding the gazebo_ros_control Plugin<\/strong><\/h3><p data-start=\"4306\" data-end=\"4406\">To allow Gazebo to simulate the motor behavior, we must include the <strong data-start=\"4374\" data-end=\"4398\"><code data-start=\"4376\" data-end=\"4396\">gazebo_ros_control<\/code><\/strong> plugin:<\/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-8b9b9ba elementor-widget elementor-widget-code-highlight\" data-id=\"8b9b9ba\" 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-xml line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-xml\">\n\t\t\t\t\t<xmp><gazebo>\r\n  <plugin name=\"gazebo_ros_control\" filename=\"libgazebo_ros_control.so\">\r\n    <robotSimType>gazebo_ros_control\/DefaultRobotHWSim<\/robotSimType>\r\n    <legacyModeNS>true<\/legacyModeNS>\r\n  <\/plugin>\r\n<\/gazebo>\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-b2c6315 elementor-widget elementor-widget-text-editor\" data-id=\"b2c6315\" 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=\"4632\" data-end=\"4646\"><strong>\ud83d\udd0d Details<\/strong><\/h4><ul data-start=\"4648\" data-end=\"4832\"><li data-start=\"4648\" data-end=\"4695\"><p data-start=\"4650\" data-end=\"4695\"><code data-start=\"4650\" data-end=\"4660\">filename<\/code>: Shared library file of the plugin<br \/><br \/><\/p><\/li><li data-start=\"4696\" data-end=\"4760\"><p data-start=\"4698\" data-end=\"4760\"><code data-start=\"4698\" data-end=\"4712\">robotSimType<\/code>: Interface Gazebo uses to simulate the hardware<br \/><br \/><\/p><\/li><li data-start=\"4761\" data-end=\"4832\"><p data-start=\"4763\" data-end=\"4832\"><code data-start=\"4763\" data-end=\"4777\">legacyModeNS<\/code>: Enables compatibility with legacy namespace structure<\/p><p data-start=\"4763\" data-end=\"4832\">\u00a0<\/p><\/li><\/ul>\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-3f6b876 elementor-widget elementor-widget-text-editor\" data-id=\"3f6b876\" 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=\"4929\" data-end=\"4949\"><strong>\ud83d\udcbe Save and Test!<\/strong><\/h3><ol data-start=\"4951\" data-end=\"5020\"><li data-start=\"4951\" data-end=\"4996\"><p data-start=\"4954\" data-end=\"4996\"><strong data-start=\"4954\" data-end=\"4996\">Save the <code data-start=\"4965\" data-end=\"4989\">bumperbot_gazebo.xacro<\/code> file<br \/><br \/><\/strong><\/p><\/li><li data-start=\"4997\" data-end=\"5020\"><p data-start=\"5000\" data-end=\"5020\">Open a new terminal:<\/p><\/li><\/ol>\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-57e54a6 elementor-widget elementor-widget-code-highlight\" data-id=\"57e54a6\" 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>cd ~\/bumperbot_ws\r\nsource devel\/setup.bash\r\nroslaunch bumperbot_description gazebo.launch\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-2197426 elementor-widget elementor-widget-text-editor\" data-id=\"2197426\" 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=\"5552\" data-end=\"5567\"><strong>\u2705 Conclusion<\/strong><\/h3><p data-start=\"5569\" data-end=\"5769\">We have successfully configured ROS Control for the simulated BumperBot robot. Now we can use standard ROS controllers to send <strong data-start=\"5696\" data-end=\"5717\">velocity commands<\/strong> to the wheels \u2014 just like controlling a real robot!<\/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-0741169 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=\"0741169\" 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\/odometry-control-ros.webp);\" role=\"img\" aria-label=\"odometry control ros\"><\/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\tYou can find a detailed explaination of gazebo in  the \"Self Driving and ROS - 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 class=\"elementor-element elementor-element-180426a elementor-widget elementor-widget-spacer\" data-id=\"180426a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/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<\/div>","protected":false},"excerpt":{"rendered":"<p>Controlling a simulated robot as if it were real \u2014 that\u2019s the power of ROS Control. In this guide, we\u2019ll see how to properly configure the URDF model so ROS can &#8220;command&#8221; the simulated motors of our BumperBot. \ud83d\ude80 Introduction: What Is ROS Control and Why Use It? Imagine building a robot with real motors, [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":2579,"comment_status":"closed","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[47,176,43],"tags":[126,133,66,74,131,132,141,98,100,75,71,107,72,130],"class_list":["post-2572","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-ros","category-tutorials","tag-base","tag-chatter","tag-learn-by-doing","tag-linux","tag-node","tag-publisher","tag-py","tag-python","tag-robot","tag-robotics","tag-ros","tag-ros-2","tag-ros2","tag-topic"],"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 Integrate ROS Control into a Simulated Robot in Gazebo - Learn by Doing!<\/title>\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-integrate-ros-control-into-a-simulated-robot-in-gazebo\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Installing ROS 2 Jazzy on Ubuntu 24.04: Step-by-Step Tutorial\" \/>\n<meta property=\"og:description\" content=\"Controlling a simulated robot as if it were real \u2014 that\u2019s the power of ROS Control. In this guide, we\u2019ll see how to properly configure the URDF model so ROS can &#8220;command&#8221; the simulated motors of our BumperBot. \ud83d\ude80 Introduction: What Is ROS Control and Why Use It? Imagine building a robot with real motors, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/learnbydoing.dev\/es\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/\" \/>\n<meta property=\"og:site_name\" content=\"Learn by Doing!\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-11T11:28:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-10T22:23:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/Progetto-senza-titolo-14.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=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"How to Integrate ROS Control into a Simulated Robot in Gazebo\",\"datePublished\":\"2025-07-11T11:28:47+00:00\",\"dateModified\":\"2026-01-10T22:23:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/\"},\"wordCount\":508,\"publisher\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp\",\"keywords\":[\"Base\",\"chatter\",\"learn by doing\",\"Linux\",\"node\",\"publisher\",\"py\",\"python\",\"robot\",\"Robotics\",\"ROS\",\"ROS 2\",\"ROS2\",\"topic\"],\"articleSection\":[\"Linux\",\"ROS\",\"Tutorials\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/\",\"url\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/\",\"name\":\"How to Integrate ROS Control into a Simulated Robot in Gazebo - Learn by Doing!\",\"isPartOf\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp\",\"datePublished\":\"2025-07-11T11:28:47+00:00\",\"dateModified\":\"2026-01-10T22:23:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#primaryimage\",\"url\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp\",\"contentUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/learnbydoing.dev\/es\/learn-by-doing-es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Integrate ROS Control into a Simulated Robot in Gazebo\"}]},{\"@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 Integrate ROS Control into a Simulated Robot in Gazebo - Learn by Doing!","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-integrate-ros-control-into-a-simulated-robot-in-gazebo\/","og_locale":"es_ES","og_type":"article","og_title":"Installing ROS 2 Jazzy on Ubuntu 24.04: Step-by-Step Tutorial","og_description":"Controlling a simulated robot as if it were real \u2014 that\u2019s the power of ROS Control. In this guide, we\u2019ll see how to properly configure the URDF model so ROS can &#8220;command&#8221; the simulated motors of our BumperBot. \ud83d\ude80 Introduction: What Is ROS Control and Why Use It? Imagine building a robot with real motors, [&hellip;]","og_url":"https:\/\/learnbydoing.dev\/es\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/","og_site_name":"Learn by Doing!","article_published_time":"2025-07-11T11:28:47+00:00","article_modified_time":"2026-01-10T22:23:48+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/Progetto-senza-titolo-14.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#article","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/"},"author":{"name":"","@id":""},"headline":"How to Integrate ROS Control into a Simulated Robot in Gazebo","datePublished":"2025-07-11T11:28:47+00:00","dateModified":"2026-01-10T22:23:48+00:00","mainEntityOfPage":{"@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/"},"wordCount":508,"publisher":{"@id":"https:\/\/learnbydoing.dev\/es\/#organization"},"image":{"@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp","keywords":["Base","chatter","learn by doing","Linux","node","publisher","py","python","robot","Robotics","ROS","ROS 2","ROS2","topic"],"articleSection":["Linux","ROS","Tutorials"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/","url":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/","name":"How to Integrate ROS Control into a Simulated Robot in Gazebo - Learn by Doing!","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#primaryimage"},"image":{"@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp","datePublished":"2025-07-11T11:28:47+00:00","dateModified":"2026-01-10T22:23:48+00:00","breadcrumb":{"@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#primaryimage","url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp","contentUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/Workspace-7.webp","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/learnbydoing.dev\/how-to-integrate-ros-control-into-a-simulated-robot-in-gazebo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/learnbydoing.dev\/es\/learn-by-doing-es\/"},{"@type":"ListItem","position":2,"name":"How to Integrate ROS Control into a Simulated Robot in Gazebo"}]},{"@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\/2572","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\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/comments?post=2572"}],"version-history":[{"count":19,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/2572\/revisions"}],"predecessor-version":[{"id":5559,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/2572\/revisions\/5559"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media\/2579"}],"wp:attachment":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media?parent=2572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/categories?post=2572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/tags?post=2572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}