{"id":3993,"date":"2025-09-16T13:10:27","date_gmt":"2025-09-16T13:10:27","guid":{"rendered":"https:\/\/learnbydoing.dev\/?p=3993"},"modified":"2026-01-10T21:29:34","modified_gmt":"2026-01-10T21:29:34","slug":"integrating-a-2d-lidar-into-your-ros-2-robot-model","status":"publish","type":"post","link":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/","title":{"rendered":"Integrating a 2D LiDAR into Your ROS 2 Robot Model"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"3993\" class=\"elementor elementor-3993\" 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-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<p data-start=\"490\" data-end=\"874\">One of the key elements that enables a mobile robot to navigate autonomously is its ability to perceive the surrounding environment.<br \/>Among the most widespread and reliable sensors used in robotics is the <strong data-start=\"694\" data-end=\"736\">2D LiDAR (Light Detection and Ranging)<\/strong>. <br \/>This device has revolutionized mobile robotics thanks to its accuracy and the ease with which it can be integrated into ROS 2 systems.<\/p><p data-start=\"876\" data-end=\"1024\">In this article, we will analyze how a LiDAR works, what information it provides to the robot, and how to add and simulate it in ROS 2 and Gazebo.<\/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-d5889a3 elementor-widget elementor-widget-text-editor\" data-id=\"d5889a3\" 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<h2 data-start=\"3173\" data-end=\"3210\"><strong><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f914.svg\" alt=\"\ud83e\udd14\" \/> <\/strong>How a 2D LiDAR Works<\/h2><p data-start=\"1061\" data-end=\"1336\">A 2D LiDAR operates by emitting laser beams and measuring the time it takes for the reflected light to return after hitting an object. From this measurement, the sensor computes the distance to obstacles in multiple directions, producing a <strong data-start=\"1301\" data-end=\"1314\">polar map<\/strong> of the environment.<\/p><p data-start=\"1338\" data-end=\"1515\">When repeated hundreds of times per second, these measurements create a <strong data-start=\"1410\" data-end=\"1441\">two-dimensional point cloud<\/strong> representing the outlines of walls, furniture, and any detected object.<\/p><p data-start=\"1517\" data-end=\"1765\">LiDARs provide high precision, often down to a few centimeters, and are capable of scanning up to 360\u00b0 depending on the model. However, they only capture data on a plane (2D) and can be less effective in outdoor environments with direct sunlight.<\/p><p data-start=\"1767\" data-end=\"1868\">In ROS 2, LiDAR data is published on the <code data-start=\"1808\" data-end=\"1815\">\/scan<\/code> topic as messages of type <code data-start=\"1842\" data-end=\"1865\">sensor_msgs\/LaserScan<\/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-fb32b9f elementor-widget elementor-widget-image\" data-id=\"fb32b9f\" 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\/09\/Maps-6-1024x576.webp\" class=\"attachment-large size-large wp-image-4005\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-6-1024x576.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-6-300x169.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-6-768x432.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-6-1536x864.webp 1536w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-6-18x10.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-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-d53eb9a elementor-widget elementor-widget-text-editor\" data-id=\"d53eb9a\" 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><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f4c4.svg\" alt=\"\ud83d\udcc4\" \/> <\/strong>Adding a LiDAR to the Robot Model<\/h3><p data-start=\"1918\" data-end=\"2123\">To integrate a LiDAR sensor into the robot\u2019s model, we need to extend the URDF (Unified Robot Description Format) by defining a new link that represents the sensor and a joint that attaches it to the robot\u2019s base.<br \/><br \/><\/p><p data-start=\"417\" data-end=\"702\">The <strong data-start=\"421\" data-end=\"429\">link<\/strong> describes both the visual appearance of the LiDAR (using its mesh file) and its physical properties, such as collision geometry and inertial parameters.<br \/><br \/><\/p><p>The <strong data-start=\"587\" data-end=\"596\">joint<\/strong>, in turn, establishes how this new link is positioned and connected to the main structure of the robot.<\/p><p data-start=\"704\" data-end=\"812\">Below is the complete URDF snippet that defines the LiDAR link and its fixed joint connection to the base:<\/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-47aed4d elementor-widget elementor-widget-code-highlight\" data-id=\"47aed4d\" 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><link name=\"lidar_link\">\r\n  <visual>\r\n    <geometry>\r\n      <mesh filename=\"package:\/\/arduinobot_description\/meshes\/hokuyo.dae\"\/>\r\n    <\/geometry>\r\n  <\/visual>\r\n  <collision>\r\n    <geometry>\r\n      <cylinder radius=\"0.05\" length=\"0.05\"\/>\r\n    <\/geometry>\r\n  <\/collision>\r\n  <inertial>\r\n    <mass value=\"0.1\"\/>\r\n    <origin xyz=\"0 0 0\" rpy=\"0 0 0\"\/>\r\n    <inertia ixx=\"0.001\" iyy=\"0.001\" izz=\"0.001\"\r\n             ixy=\"0.0\" ixz=\"0.0\" iyz=\"0.0\"\/>\r\n  <\/inertial>\r\n<\/link>\r\n\r\n<joint name=\"lidar_joint\" type=\"fixed\">\r\n  <parent link=\"base_link\"\/>\r\n  <child link=\"lidar_link\"\/>\r\n  <origin xyz=\"0 0 0.2\" rpy=\"0 0 0\"\/>\r\n<\/joint>\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-6a3f6da elementor-widget elementor-widget-text-editor\" data-id=\"6a3f6da\" 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=\"125\" data-end=\"161\"><strong><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f9e0.svg\" alt=\"\ud83e\udde0\" \/> <\/strong><strong>Let\u2019s break down the code<\/strong><\/h3>\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-7add6b7 elementor-widget elementor-widget-text-editor\" data-id=\"7add6b7\" 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<h5><strong>Defining the LiDAR link<\/strong><\/h5>\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-82f463c elementor-widget elementor-widget-code-highlight\" data-id=\"82f463c\" 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\">\n\t\t\t\t<code readonly=\"true\" class=\"language-xml\">\n\t\t\t\t\t<xmp><link name=\"lidar_link\">\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-643f85f elementor-widget elementor-widget-text-editor\" data-id=\"643f85f\" 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>This line defines a new link named <code data-start=\"2874\" data-end=\"2886\">lidar_link<\/code>, representing the physical body of the sensor inside the robot model.<\/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-0b4ce10 elementor-widget elementor-widget-text-editor\" data-id=\"0b4ce10\" 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<h5><strong>Visual representation<\/strong><\/h5>\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-878fdb2 elementor-widget elementor-widget-code-highlight\" data-id=\"878fdb2\" 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\">\n\t\t\t\t<code readonly=\"true\" class=\"language-xml\">\n\t\t\t\t\t<xmp><visual>\r\n  <geometry>\r\n    <mesh filename=\"package:\/\/arduinobot_description\/meshes\/hokuyo.dae\"\/>\r\n  <\/geometry>\r\n<\/visual>\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-cab90be elementor-widget elementor-widget-text-editor\" data-id=\"cab90be\" 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=\"2099\" data-end=\"2125\">The <code data-start=\"3095\" data-end=\"3105\">&lt;visual&gt;<\/code> block specifies the graphical appearance of the sensor, loading a 3D mesh of the Hokuyo LiDAR. This model is used in visualization tools like RViz and Gazebo but does not affect physics.<\/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-26435dd elementor-widget elementor-widget-text-editor\" data-id=\"26435dd\" 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<h5><strong>Collision geometry<\/strong><\/h5>\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-d64e289 elementor-widget elementor-widget-code-highlight\" data-id=\"d64e289\" 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\">\n\t\t\t\t<code readonly=\"true\" class=\"language-xml\">\n\t\t\t\t\t<xmp><collision>\r\n  <geometry>\r\n    <cylinder radius=\"0.05\" length=\"0.05\"\/>\r\n  <\/geometry>\r\n<\/collision>\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-858fb83 elementor-widget elementor-widget-text-editor\" data-id=\"858fb83\" 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=\"2417\" data-end=\"2438\">Here we define the simplified collision geometry. Instead of using the complex mesh, a cylinder with 5 cm radius and length is used. This reduces computational load while still approximating the sensor\u2019s shape.<\/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-a762258 elementor-widget elementor-widget-text-editor\" data-id=\"a762258\" 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<h5><strong>Inertial properties<\/strong><\/h5>\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-162fa78 elementor-widget elementor-widget-code-highlight\" data-id=\"162fa78\" 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\">\n\t\t\t\t<code readonly=\"true\" class=\"language-xml\">\n\t\t\t\t\t<xmp><inertial>\r\n  <mass value=\"0.1\"\/>\r\n  <origin xyz=\"0 0 0\" rpy=\"0 0 0\"\/>\r\n  <inertia ixx=\"0.001\" iyy=\"0.001\" izz=\"0.001\"\r\n           ixy=\"0.0\" ixz=\"0.0\" iyz=\"0.0\"\/>\r\n<\/inertial>\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-76eeeb3 elementor-widget elementor-widget-text-editor\" data-id=\"76eeeb3\" 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=\"2710\" data-end=\"2760\">The <code data-start=\"3803\" data-end=\"3815\">&lt;inertial&gt;<\/code> block assigns physical properties to the sensor. A mass of 0.1 kg is realistic for a small LiDAR. The origin is aligned with the geometry center, and the inertia matrix defines how the object responds to forces and rotations. Simplified values ensure stable simulation.<\/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-5357264 elementor-widget elementor-widget-text-editor\" data-id=\"5357264\" 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<h5><strong>Fixed joint connection<\/strong><\/h5>\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-366bee9 elementor-widget elementor-widget-code-highlight\" data-id=\"366bee9\" 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\">\n\t\t\t\t<code readonly=\"true\" class=\"language-xml\">\n\t\t\t\t\t<xmp><joint name=\"lidar_joint\" type=\"fixed\">\r\n  <parent link=\"base_link\"\/>\r\n  <child link=\"lidar_link\"\/>\r\n  <origin xyz=\"0 0 0.2\" rpy=\"0 0 0\"\/>\r\n<\/joint>\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-fa0427a elementor-widget elementor-widget-text-editor\" data-id=\"fa0427a\" 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=\"4245\" data-end=\"4431\">This section introduces a fixed joint connecting the LiDAR to the robot\u2019s <code data-start=\"4319\" data-end=\"4330\">base_link<\/code>. The <code data-start=\"4336\" data-end=\"4346\">&lt;origin&gt;<\/code> sets the position: the sensor is placed 20 cm above the base without any rotation.<\/p><p data-start=\"4433\" data-end=\"4508\">At this point, the LiDAR is fully integrated into the robot\u2019s URDF model.<\/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-911b45c elementor-widget elementor-widget-text-editor\" data-id=\"911b45c\" 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=\"4515\" data-end=\"4553\"><strong>\ud83d\udcca Simulating the LiDAR in Gazebo<\/strong><\/h3><p data-start=\"176\" data-end=\"466\">To replicate the behavior of the LiDAR in simulation and obtain data streams within ROS 2, we need to configure a dedicated Gazebo plugin. This plugin generates laser scan data based on the parameters we define, such as update rate, measurement range, angular resolution, and noise model.<br \/><br \/><\/p><p data-start=\"468\" data-end=\"844\">The configuration below specifies the ROS topic on which the simulated LiDAR publishes, the reference frame of the sensor, and the physical characteristics of the laser beam, including horizontal scanning limits and the number of samples per scan. By tuning these parameters, we can achieve a realistic simulation that closely matches the performance of the actual hardware.<br \/><br \/><\/p><p data-start=\"846\" data-end=\"886\">Here is the full plugin configuration:<\/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-55e6525 elementor-widget elementor-widget-code-highlight\" data-id=\"55e6525\" 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_laser\" filename=\"libgazebo_ros_laser.so\">\r\n    <ros>\r\n      <namespace>\/<\/namespace>\r\n      <argument>~\/scan:=\/scan<\/argument>\r\n    <\/ros>\r\n    <update_rate>30<\/update_rate>\r\n    <topicName>\/scan<\/topicName>\r\n    <frameName>lidar_link<\/frameName>\r\n    <range>\r\n      <min>0.12<\/min>\r\n      <max>3.5<\/max>\r\n      <resolution>0.01<\/resolution>\r\n    <\/range>\r\n    <ray>\r\n      <scan>\r\n        <horizontal>\r\n          <samples>720<\/samples>\r\n          <resolution>1<\/resolution>\r\n          <min_angle>-1.5708<\/min_angle>\r\n          <max_angle>1.5708<\/max_angle>\r\n        <\/horizontal>\r\n      <\/scan>\r\n      <noise>\r\n        <type>gaussian<\/type>\r\n        <mean>0.0<\/mean>\r\n        <stddev>0.01<\/stddev>\r\n      <\/noise>\r\n    <\/ray>\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-29c6520 elementor-widget elementor-widget-text-editor\" data-id=\"29c6520\" 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=\"125\" data-end=\"161\"><strong><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f9e0.svg\" alt=\"\ud83e\udde0\" \/> <\/strong><strong>Let\u2019s break down the code<\/strong><\/h3>\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-883a4c5 elementor-widget elementor-widget-text-editor\" data-id=\"883a4c5\" 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<h5><strong>Opening the Gazebo section<\/strong><\/h5>\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-7898d9d elementor-widget elementor-widget-code-highlight\" data-id=\"7898d9d\" 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<\/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-1b831dc elementor-widget elementor-widget-text-editor\" data-id=\"1b831dc\" 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>Opens the section with Gazebo-specific tags inside the URDF\/Xacro.<\/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-c469ccf elementor-widget elementor-widget-text-editor\" data-id=\"c469ccf\" 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<h5><strong>Loading the LiDAR plugin<\/strong><\/h5>\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-a1b5de5 elementor-widget elementor-widget-code-highlight\" data-id=\"a1b5de5\" 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>  <plugin name=\"gazebo_ros_laser\" filename=\"libgazebo_ros_laser.so\">\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-04fb8b9 elementor-widget elementor-widget-text-editor\" data-id=\"04fb8b9\" 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>Loads the ROS-Gazebo plugin for simulating a LiDAR sensor.<\/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-989e5cb elementor-widget elementor-widget-text-editor\" data-id=\"989e5cb\" 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<h5><strong>ROS integration setup<\/strong><\/h5>\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-913b8ed elementor-widget elementor-widget-code-highlight\" data-id=\"913b8ed\" 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>    <ros>\r\n      <namespace>\/<\/namespace>\r\n      <argument>~\/scan:=\/scan<\/argument>\r\n    <\/ros>\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-020ba83 elementor-widget elementor-widget-text-editor\" data-id=\"020ba83\" 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=\"3579\" data-end=\"3640\">Configures integration with ROS 2, publishing the scan on the <code data-start=\"5948\" data-end=\"5955\">\/scan<\/code> topic.<\/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-550b696 elementor-widget elementor-widget-text-editor\" data-id=\"550b696\" 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<h5><strong>Update rate<\/strong><\/h5>\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-48307b4 elementor-widget elementor-widget-code-highlight\" data-id=\"48307b4\" 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>    <update_rate>30<\/update_rate>\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-8ba4088 elementor-widget elementor-widget-text-editor\" data-id=\"8ba4088\" 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=\"400\" data-end=\"434\">Sets the update rate to 30 Hz, meaning thirty scans per second.<\/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-7aba3c4 elementor-widget elementor-widget-text-editor\" data-id=\"7aba3c4\" 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<h5><strong>Topic configuration<\/strong><\/h5>\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-3070780 elementor-widget elementor-widget-code-highlight\" data-id=\"3070780\" 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>    <topicName>\/scan<\/topicName>\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-11dd7cb elementor-widget elementor-widget-text-editor\" data-id=\"11dd7cb\" 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=\"172\" data-end=\"545\">Specifies the name of the published topic, ensuring compatibility with navigation stacks.<\/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-fe1108b elementor-widget elementor-widget-text-editor\" data-id=\"fe1108b\" 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<h5><strong>Reference frame<\/strong><\/h5>\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-dc348ba elementor-widget elementor-widget-code-highlight\" data-id=\"dc348ba\" 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>    <frameName>lidar_link<\/frameName>\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-56dcdfd elementor-widget elementor-widget-text-editor\" data-id=\"56dcdfd\" 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=\"172\" data-end=\"545\">Associates the scans with the <code data-start=\"6294\" data-end=\"6306\">lidar_link<\/code> frame defined in the URDF.<\/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-ea96d32 elementor-widget elementor-widget-text-editor\" data-id=\"ea96d32\" 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<h5><strong>Sensor range<\/strong><\/h5>\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-4cc11ac elementor-widget elementor-widget-code-highlight\" data-id=\"4cc11ac\" 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>    <range>\r\n      <min>0.12<\/min>\r\n      <max>3.5<\/max>\r\n      <resolution>0.01<\/resolution>\r\n    <\/range>\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-19f13f5 elementor-widget elementor-widget-text-editor\" data-id=\"19f13f5\" 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=\"172\" data-end=\"545\">Defines the sensor\u2019s range: minimum 12 cm, maximum 3.5 m, with 1 cm resolution.<\/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-f0ed467 elementor-widget elementor-widget-text-editor\" data-id=\"f0ed467\" 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<h5><strong>Scan geometry<\/strong><\/h5>\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-a638988 elementor-widget elementor-widget-code-highlight\" data-id=\"a638988\" 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>    <ray>\r\n      <scan>\r\n        <horizontal>\r\n          <samples>720<\/samples>\r\n          <resolution>1<\/resolution>\r\n          <min_angle>-1.5708<\/min_angle>\r\n          <max_angle>1.5708<\/max_angle>\r\n        <\/horizontal>\r\n      <\/scan>\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-926c359 elementor-widget elementor-widget-text-editor\" data-id=\"926c359\" 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=\"172\" data-end=\"545\">Describes the scan geometry: 720 beams across 180\u00b0 (from -1.5708 to +1.5708 radians), providing an angular resolution of ~0.25\u00b0.<\/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-ab7b314 elementor-widget elementor-widget-text-editor\" data-id=\"ab7b314\" 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<h5><strong>Noise model<\/strong><\/h5>\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-6081ef5 elementor-widget elementor-widget-code-highlight\" data-id=\"6081ef5\" 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>      <noise>\r\n        <type>gaussian<\/type>\r\n        <mean>0.0<\/mean>\r\n        <stddev>0.01<\/stddev>\r\n      <\/noise>\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-e239c05 elementor-widget elementor-widget-text-editor\" data-id=\"e239c05\" 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=\"172\" data-end=\"545\">Adds Gaussian noise with zero mean and 1 cm standard deviation to simulate real-world imperfections.<\/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-0d5a2a6 elementor-widget elementor-widget-text-editor\" data-id=\"0d5a2a6\" 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<h5><strong>Closing the plugin definition<\/strong><\/h5>\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-b5b72b1 elementor-widget elementor-widget-code-highlight\" data-id=\"b5b72b1\" 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>  <\/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-7e597e1 elementor-widget elementor-widget-text-editor\" data-id=\"7e597e1\" 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=\"172\" data-end=\"545\">Closes the plugin definition. Once loaded in Gazebo, the sensor publishes <code data-start=\"7245\" data-end=\"7268\">sensor_msgs\/LaserScan<\/code> messages at 30 Hz.<\/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-9e5b47e elementor-widget elementor-widget-text-editor\" data-id=\"9e5b47e\" 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=\"7296\" data-end=\"7326\">\ud83d\ude80 <strong>Testing the Simulation<\/strong><\/h3><p data-start=\"7328\" data-end=\"7415\">After updating the URDF and plugin configuration, you can launch the simulation with:<\/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-e35bb9e elementor-widget elementor-widget-code-highlight\" data-id=\"e35bb9e\" 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 line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>ros2 launch arduinobot_gazebo simulated_robot.launch.py\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-41d408a elementor-widget elementor-widget-text-editor\" data-id=\"41d408a\" 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=\"172\" data-end=\"545\">Then, in a new terminal, check the data being published:<\/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-0082417 elementor-widget elementor-widget-code-highlight\" data-id=\"0082417\" 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 line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>ros2 topic echo \/scan\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-f2e520d elementor-widget elementor-widget-text-editor\" data-id=\"f2e520d\" 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=\"172\" data-end=\"545\">You should see a stream of range values corresponding to the distances measured by the LiDAR\u2019s beams.<\/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-ac1b976 elementor-widget elementor-widget-text-editor\" data-id=\"ac1b976\" 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=\"7708\" data-end=\"8044\">In this article, we explored how a 2D LiDAR works, how to integrate it into the robot\u2019s URDF model, and how to simulate it in Gazebo to generate realistic scan data. This type of sensor is one of the most powerful and versatile tools for autonomous navigation, forming the foundation for mapping, localization, and obstacle avoidance.<\/p><p data-start=\"8046\" data-end=\"8273\">\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-6f5d4a8 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=\"6f5d4a8\" 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\/05\/map_localization.webp);\" role=\"img\" aria-label=\"map_localization\"><\/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\tDiscover how to design, build, and use maps in real robotic systems in the \"Self Driving and ROS 2 - Learn by doing! Map &amp; Localization\" 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>One of the key elements that enables a mobile robot to navigate autonomously is its ability to perceive the surrounding environment.Among the most widespread and reliable sensors used in robotics is the 2D LiDAR (Light Detection and Ranging). This device has revolutionized mobile robotics thanks to its accuracy and the ease with which it can [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":4009,"comment_status":"closed","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[45,43],"tags":[323,328,327,326,313,322,325,66,307,306,106,285,100,324,71,107,72,61,320,76,64,73],"class_list":["post-3993","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ros-2","category-tutorials","tag-2d","tag-antonio-brandi","tag-course","tag-diy","tag-environment","tag-gazeboo","tag-integrate","tag-learn-by-doing","tag-lidar","tag-map","tag-mapping","tag-model","tag-robot","tag-robot-model","tag-ros","tag-ros-2","tag-ros2","tag-sensor","tag-sensors","tag-step-by-step","tag-tutorial","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>Integrating a 2D LiDAR into Your ROS 2 Robot Model - Learn by Doing!<\/title>\n<meta name=\"description\" content=\"Learn how autonomous robots use maps and sensors in ROS 2. The complete guide to localization, from core concepts to practical use.\" \/>\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\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Integrating a 2D LiDAR into Your ROS 2 Robot Model\" \/>\n<meta property=\"og:description\" content=\"Learn by Doing!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/learnbydoing.dev\/es\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/\" \/>\n<meta property=\"og:site_name\" content=\"Learn by Doing!\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-16T13:10:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-10T21:29:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.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\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Integrating a 2D LiDAR into Your ROS 2 Robot Model\",\"datePublished\":\"2025-09-16T13:10:27+00:00\",\"dateModified\":\"2026-01-10T21:29:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/\"},\"wordCount\":923,\"publisher\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.webp\",\"keywords\":[\"2d\",\"antonio brandi\",\"course\",\"diy\",\"Environment\",\"gazeboo\",\"integrate\",\"learn by doing\",\"Lidar\",\"Map\",\"mapping\",\"model\",\"robot\",\"robot model\",\"ROS\",\"ROS 2\",\"ROS2\",\"sensor\",\"Sensors\",\"step by step\",\"tutorial\",\"Ubuntu\"],\"articleSection\":[\"ROS 2\",\"Tutorials\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/\",\"url\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/\",\"name\":\"Integrating a 2D LiDAR into Your ROS 2 Robot Model - Learn by Doing!\",\"isPartOf\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.webp\",\"datePublished\":\"2025-09-16T13:10:27+00:00\",\"dateModified\":\"2026-01-10T21:29:34+00:00\",\"description\":\"Learn how autonomous robots use maps and sensors in ROS 2. The complete guide to localization, from core concepts to practical use.\",\"breadcrumb\":{\"@id\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#primaryimage\",\"url\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.webp\",\"contentUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.webp\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/learnbydoing.dev\/es\/learn-by-doing-es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integrating a 2D LiDAR into Your ROS 2 Robot Model\"}]},{\"@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":"Integrating a 2D LiDAR into Your ROS 2 Robot Model - Learn by Doing!","description":"Learn how autonomous robots use maps and sensors in ROS 2. The complete guide to localization, from core concepts to practical use.","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\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/","og_locale":"es_ES","og_type":"article","og_title":"Integrating a 2D LiDAR into Your ROS 2 Robot Model","og_description":"Learn by Doing!","og_url":"https:\/\/learnbydoing.dev\/es\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/","og_site_name":"Learn by Doing!","article_published_time":"2025-09-16T13:10:27+00:00","article_modified_time":"2026-01-10T21:29:34+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.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\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#article","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/"},"author":{"name":"","@id":""},"headline":"Integrating a 2D LiDAR into Your ROS 2 Robot Model","datePublished":"2025-09-16T13:10:27+00:00","dateModified":"2026-01-10T21:29:34+00:00","mainEntityOfPage":{"@id":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/"},"wordCount":923,"publisher":{"@id":"https:\/\/learnbydoing.dev\/es\/#organization"},"image":{"@id":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.webp","keywords":["2d","antonio brandi","course","diy","Environment","gazeboo","integrate","learn by doing","Lidar","Map","mapping","model","robot","robot model","ROS","ROS 2","ROS2","sensor","Sensors","step by step","tutorial","Ubuntu"],"articleSection":["ROS 2","Tutorials"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/","url":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/","name":"Integrating a 2D LiDAR into Your ROS 2 Robot Model - Learn by Doing!","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#primaryimage"},"image":{"@id":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.webp","datePublished":"2025-09-16T13:10:27+00:00","dateModified":"2026-01-10T21:29:34+00:00","description":"Learn how autonomous robots use maps and sensors in ROS 2. The complete guide to localization, from core concepts to practical use.","breadcrumb":{"@id":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#primaryimage","url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.webp","contentUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/09\/Maps-7.webp","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/learnbydoing.dev\/integrating-a-2d-lidar-into-your-ros-2-robot-model\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/learnbydoing.dev\/es\/learn-by-doing-es\/"},{"@type":"ListItem","position":2,"name":"Integrating a 2D LiDAR into Your ROS 2 Robot Model"}]},{"@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\/3993","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=3993"}],"version-history":[{"count":13,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/3993\/revisions"}],"predecessor-version":[{"id":5438,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/3993\/revisions\/5438"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media\/4009"}],"wp:attachment":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media?parent=3993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/categories?post=3993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/tags?post=3993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}