From 708518e229f62cc9763c8b29abe1e770071c6a5e Mon Sep 17 00:00:00 2001
From: Alejandro Lopez Gestoso <alopez@iti.upc.edu>
Date: Thu, 8 Jul 2021 19:33:56 +0200
Subject: [PATCH] Add rplidar to simulation

---
 launch/includes/kobuki.launch.xml     | 23 +++++++++++++++
 launch/sim.launch                     | 29 +++++++++++++------
 urdf/kobuki_hexagons_laser.urdf.xacro | 20 ++++++++++++++
 urdf/laser.gazebo                     | 40 +++++++++++++++++++++++++++
 urdf/laser.urdf.xacro                 | 40 +++++++++++++++++++++++++++
 5 files changed, 144 insertions(+), 8 deletions(-)
 create mode 100644 launch/includes/kobuki.launch.xml
 create mode 100644 urdf/kobuki_hexagons_laser.urdf.xacro
 create mode 100644 urdf/laser.gazebo
 create mode 100644 urdf/laser.urdf.xacro

diff --git a/launch/includes/kobuki.launch.xml b/launch/includes/kobuki.launch.xml
new file mode 100644
index 0000000..7872206
--- /dev/null
+++ b/launch/includes/kobuki.launch.xml
@@ -0,0 +1,23 @@
+<launch>
+  <arg name="base"/>
+  <arg name="stacks"/>
+  <arg name="3d_sensor"/>
+
+  <arg name="urdf_file" default="$(find xacro)/xacro '$(find iri_turtlebot_launch)/urdf/$(arg base)_$(arg stacks)_$(arg 3d_sensor).urdf.xacro'"/>
+  <param name="robot_description" command="$(arg urdf_file)"/>
+
+  <!-- Gazebo model spawner -->
+  <node name="spawn_turtlebot_model" pkg="gazebo_ros" type="spawn_model"
+        args="$(optenv ROBOT_INITIAL_POSE) -unpause -urdf -param robot_description -model mobile_base"/>
+
+  <!-- Velocity muxer -->
+  <node pkg="nodelet" type="nodelet" name="mobile_base_nodelet_manager" args="manager"/>
+  <node pkg="nodelet" type="nodelet" name="cmd_vel_mux"
+        args="load yocs_cmd_vel_mux/CmdVelMuxNodelet mobile_base_nodelet_manager">
+    <param name="yaml_cfg_file" value="$(find turtlebot_bringup)/param/mux.yaml"/>
+    <remap from="cmd_vel_mux/output" to="mobile_base/commands/velocity"/>
+  </node>
+
+  <!-- Bumper/cliff to pointcloud (not working, as it needs sensors/core messages) -->
+  <include file="$(find turtlebot_bringup)/launch/includes/kobuki/bumper2pc.launch.xml"/>
+</launch>
diff --git a/launch/sim.launch b/launch/sim.launch
index 1607479..4976c0e 100644
--- a/launch/sim.launch
+++ b/launch/sim.launch
@@ -6,6 +6,7 @@
   <arg name="world_description" default="true"/>
   <arg name="rviz"  default="false"/>
   <arg name="gui"   default="true"/>
+  <arg name="rplidar"  default="true"/>
 
   <arg name="base"       value="$(optenv TURTLEBOT_BASE kobuki)"/> <!-- create, roomba -->
   <arg name="battery"    value="$(optenv TURTLEBOT_BATTERY /proc/acpi/battery/BAT0)"/>  <!-- /proc/acpi/battery/BAT0 -->
@@ -20,15 +21,22 @@
     <arg name="rviz"        value="false"/> 
   </include>
 
-  <include file="$(find turtlebot_gazebo)/launch/includes/$(arg base).launch.xml">
-    <arg name="base" value="$(arg base)"/>
-    <arg name="stacks" value="$(arg stacks)"/>
-    <arg name="3d_sensor" value="$(arg 3d_sensor)"/>
-  </include>
+  <group if="$(arg rplidar)">
+    <include file="$(find iri_turtlebot_launch)/launch/includes/kobuki.launch.xml">
+      <arg name="base" value="kobuki"/>
+      <arg name="stacks" value="hexagons"/>
+      <arg name="3d_sensor" value="laser"/>
+    </include>
+
+  </group>
+
+  <group unless="$(arg rplidar)">
+    <include file="$(find turtlebot_gazebo)/launch/includes/$(arg base).launch.xml">
+      <arg name="base" value="$(arg base)"/>
+      <arg name="stacks" value="$(arg stacks)"/>
+      <arg name="3d_sensor" value="$(arg 3d_sensor)"/>
+    </include>
 
-  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
-    <param name="publish_frequency" type="double" value="30.0" />
-  </node>
 
   <!-- Fake laser -->
   <node pkg="nodelet" type="nodelet" name="laserscan_nodelet_manager" args="manager"/>
@@ -41,4 +49,9 @@
     <remap from="scan" to="/scan"/>
   </node>
 
+  </group>
+
+  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
+    <param name="publish_frequency" type="double" value="30.0" />
+  </node>
 </launch>
diff --git a/urdf/kobuki_hexagons_laser.urdf.xacro b/urdf/kobuki_hexagons_laser.urdf.xacro
new file mode 100644
index 0000000..e73ac3f
--- /dev/null
+++ b/urdf/kobuki_hexagons_laser.urdf.xacro
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+    - Base      : kobuki
+    - Stacks    : hexagons
+    - 3d Sensor : laser
+-->    
+<robot name="turtlebot" xmlns:xacro="http://ros.org/wiki/xacro">
+
+  <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_common_library.urdf.xacro" />
+  <xacro:include filename="$(find kobuki_description)/urdf/kobuki.urdf.xacro" />
+  <xacro:include filename="$(find turtlebot_description)/urdf/stacks/hexagons.urdf.xacro"/>
+  <!--<xacro:include filename="$(find turtlebot_description)/urdf/sensors/kinect.urdf.xacro"/>-->
+  
+  <xacro:include filename="$(find iri_turtlebot_launch)/urdf/laser.urdf.xacro"/>
+  
+  <kobuki/>
+  <stack_hexagons parent="base_link"/>
+  <!--<sensor_kinect  parent="base_link"/>-->
+  <sensor_laser parent="plate_middle_link"/>
+</robot>
diff --git a/urdf/laser.gazebo b/urdf/laser.gazebo
new file mode 100644
index 0000000..d7810be
--- /dev/null
+++ b/urdf/laser.gazebo
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<robot name="sensor_laser" xmlns:xacro="http://ros.org/wiki/xacro">
+  <xacro:macro name="laser">
+  <gazebo reference="laser">
+    <sensor type="ray" name="laser_sensor">
+      <pose>0 0 0 0 0 0</pose>
+      <visualize>false</visualize>
+      <update_rate>10</update_rate>
+      <ray>
+        <scan>
+          <horizontal>
+            <samples>400</samples>
+            <resolution>0.25</resolution>
+            <min_angle>-3.141592654</min_angle>
+            <max_angle>3.141592654</max_angle>
+          </horizontal>
+        </scan>
+        <range>
+          <min>0.10</min>
+          <max>6.0</max>
+          <resolution>0.01</resolution>
+        </range>
+        <noise>
+          <type>gaussian</type>
+          <!-- Noise parameters based on published spec for laser laser
+               achieving "+-30mm" accuracy at range < 10m.  A mean of 0.0m and
+               stddev of 0.01m will put 99.7% of samples within 0.03m of the true
+               reading. -->
+          <mean>0.0</mean>
+          <stddev>0.005</stddev>
+        </noise>
+      </ray>
+      <plugin name="gazebo_laser_controller" filename="libgazebo_ros_laser.so">
+        <topicName>scan</topicName>
+        <frameName>laser</frameName>
+      </plugin>
+    </sensor>
+  </gazebo>
+  </xacro:macro>
+</robot>
diff --git a/urdf/laser.urdf.xacro b/urdf/laser.urdf.xacro
new file mode 100644
index 0000000..c85b598
--- /dev/null
+++ b/urdf/laser.urdf.xacro
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<robot name="sensor_laser" xmlns:xacro="http://ros.org/wiki/xacro">
+  <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_gazebo.urdf.xacro"/>
+  <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_properties.urdf.xacro"/>
+  
+  <xacro:include filename="$(find iri_turtlebot_launch)/urdf/laser.gazebo"/>
+
+  <xacro:property name="size" value="0.05"/>
+
+  <xacro:macro name="sensor_laser" params="parent">
+    <link name="laser">
+      <collision>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <box size="${size} ${size} ${size}"/>
+        </geometry>
+      </collision>
+      <visual>
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <geometry>
+          <box size="${size} ${size} ${size}"/>
+        </geometry>
+      </visual>
+      <inertial>
+        <mass value="1e-5" />
+        <origin xyz="0 0 0" rpy="0 0 0"/>
+        <inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" />
+      </inertial>
+    </link>
+    <joint name="laser_joint" type="fixed">
+      <!--<axis xyz="0 0 1" />-->
+      <origin xyz="0 0 0.03" rpy="0 0 0"/>
+      <parent link="${parent}"/>
+      <child link="laser"/>
+     </joint>
+     <!-- Laser sensor for simulation -->
+     <laser/>
+  </xacro:macro>
+</robot>
+
-- 
GitLab