Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 37 additions & 30 deletions CustomRobots/Turtlebot2/launch/turtlebot2.launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,16 @@ def launch_setup(context):
P = LaunchConfiguration("P")
Y = LaunchConfiguration("Y")
gz_sensor = LaunchConfiguration("sensor")
gz_namespace = LaunchConfiguration("namespace")
gz_entity = LaunchConfiguration("entity")

package_dir = get_package_share_directory("custom_robots")

nodes_to_start = []

sensor = gz_sensor.perform(context)

bridge_yaml = os.path.join(package_dir, "params", f"turtlebot2_{sensor}.yaml")
namespace = gz_namespace.perform(context)
entity = gz_entity.perform(context)

# =========================
# ROBOT DESCRIPTION (URDF)
Expand All @@ -42,6 +44,7 @@ def launch_setup(context):
mappings={
"camera": "true" if sensor == "camera" else "false",
"stereo": "true" if sensor == "stereo" else "false",
"namespace": namespace,
},
).toxml()

Expand All @@ -51,18 +54,20 @@ def launch_setup(context):
package="robot_state_publisher",
executable="robot_state_publisher",
name="robot_state_publisher",
namespace=gz_namespace,
output="screen",
parameters=[robot_description, {"use_sim_time": True}],
)

gz_spawn_entity = Node(
package="ros_gz_sim",
executable="create",
namespace=gz_namespace,
arguments=[
"-topic",
"/robot_description",
f"/{namespace}/robot_description",
"-name",
"turtlebot2",
entity,
"-allow_renaming",
"true",
"-x",
Expand All @@ -84,7 +89,12 @@ def launch_setup(context):
gz_ros2_bridge = Node(
package="ros_gz_bridge",
executable="parameter_bridge",
arguments=["--ros-args", "-p", f"config_file:={bridge_yaml}"],
namespace=gz_namespace,
arguments=[
f"/{namespace}/odom@nav_msgs/msg/Odometry[gz.msgs.Odometry",
f"/{namespace}/cmd_vel@geometry_msgs/msg/Twist@gz.msgs.Twist",
f"/{namespace}/laser/scan@sensor_msgs/msg/LaserScan[gz.msgs.LaserScan",
],
output="screen",
)

Expand All @@ -94,27 +104,25 @@ def launch_setup(context):

# Sensor deppending on sensor arguments
if sensor == "stereo":
gz_ros2_image_left_bridge = Node(
gz_ros2_image_bridge = Node(
package="ros_gz_image",
executable="image_bridge",
arguments=["/cam_turtlebot_left/image_raw"],
namespace=gz_namespace,
arguments=[
f"/{namespace}/camera_left/image_raw",
f"/{namespace}/camera_right/image_raw",
],
output="screen",
)

gz_ros2_image_right_bridge = Node(
package="ros_gz_image",
executable="image_bridge",
arguments=["/cam_turtlebot_right/image_raw"],
output="screen",
)
nodes_to_start.append(gz_ros2_image_bridge)

nodes_to_start.append(gz_ros2_image_left_bridge)
nodes_to_start.append(gz_ros2_image_right_bridge)
elif sensor == "":
elif sensor == "camera":
gz_ros2_image_bridge = Node(
package="ros_gz_image",
executable="image_bridge",
arguments=["/depth_camera/image_raw"],
namespace=gz_namespace,
arguments=[f"/{namespace}/camera/image_raw"],
output="screen",
)

Expand All @@ -124,19 +132,18 @@ def launch_setup(context):


def generate_launch_description():
declared_arguments = []

# Add any entry parameter
declared_arguments.append(
DeclareLaunchArgument("use_sim_time", default_value="true")
)
declared_arguments.append(DeclareLaunchArgument("x", default_value="0"))
declared_arguments.append(DeclareLaunchArgument("y", default_value="0"))
declared_arguments.append(DeclareLaunchArgument("z", default_value="0"))
declared_arguments.append(DeclareLaunchArgument("R", default_value="0"))
declared_arguments.append(DeclareLaunchArgument("P", default_value="0"))
declared_arguments.append(DeclareLaunchArgument("Y", default_value="0"))
declared_arguments.append(DeclareLaunchArgument("sensor", default_value="stereo"))
declared_arguments = [
DeclareLaunchArgument("use_sim_time", default_value="true"),
DeclareLaunchArgument("x", default_value="0"),
DeclareLaunchArgument("y", default_value="0"),
DeclareLaunchArgument("z", default_value="0"),
DeclareLaunchArgument("R", default_value="0"),
DeclareLaunchArgument("P", default_value="0"),
DeclareLaunchArgument("Y", default_value="0"),
DeclareLaunchArgument("sensor", default_value="stereo"),
DeclareLaunchArgument("namespace", default_value="turtlebot2"),
DeclareLaunchArgument("entity", default_value="turtlebot2"),
]

return LaunchDescription(
declared_arguments + [OpaqueFunction(function=launch_setup)]
Expand Down
12 changes: 7 additions & 5 deletions CustomRobots/Turtlebot2/model/turtlebot2/turtlebot2.urdf.xacro
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,23 @@

<xacro:arg name="camera" default="true"/>
<xacro:arg name="stereo" default="false"/>
<xacro:arg name="namespace" default="turtlebot2"/>
<xacro:property name="namespace" value="$(arg namespace)"/>

<xacro:include filename="$(find custom_robots)/model/turtlebot2/turtlebot2_gz.urdf.xacro"/>
<xacro:include filename="$(find custom_robots)/model/turtlebot2/turtlebot2_common.urdf.xacro"/>

<xacro:turtlebot2/>
<xacro:turtlebot2 namespace="${namespace}"/>

<xacro:if value="$(arg camera)">
<xacro:camera xyz="-0.118 0 0.2812" rpy="0 0 0" name="depth_camera" parent="base_link"/>
<xacro:laser xyz="0 0 0.44" rpy="0 0 0" name="laser" parent="base_link" topic="scan"/>
<xacro:camera xyz="-0.118 0 0.2812" rpy="0 0 0" name="camera" parent="base_link" namespace="${namespace}"/>
<xacro:laser xyz="0 0 0.44" rpy="0 0 0" name="laser" parent="base_link" namespace="${namespace}"/>
</xacro:if>

<xacro:if value="$(arg stereo)">
<xacro:fake_camera xyz="-0.118 0 0.23" rpy="0 0 0" name="depth_camera" parent="base_link"/>
<xacro:stereo_camera xyz="-0.05 0.076 0.2424" rpy="0 0 0" name="cam_turtlebot_left" parent="base_link"/>
<xacro:stereo_camera xyz="-0.05 -0.076 0.2424" rpy="0 0 0" name="cam_turtlebot_right" parent="base_link"/>
<xacro:stereo_camera xyz="-0.05 0.076 0.2424" rpy="0 0 0" name="camera_left" parent="base_link" namespace="${namespace}"/>
<xacro:stereo_camera xyz="-0.05 -0.076 0.2424" rpy="0 0 0" name="camera_right" parent="base_link" namespace="${namespace}"/>
</xacro:if>

</robot>
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
</xacro:macro>

<!-- Kobuki -->
<xacro:macro name="turtlebot2">
<xacro:macro name="turtlebot2" params="namespace">
<link name="base_footprint"/>
<!--
Base link is set at the bottom of the base mould.
Expand Down Expand Up @@ -275,9 +275,9 @@
</link>

<!-- Kobuki Gazebo simulation details -->
<xacro:odom topic="odom" freq="20"/>
<xacro:velocity topic="cmd_vel"/>
<xacro:imu topic="imu"/>
<xacro:odom namespace="${namespace}" freq="20"/>
<xacro:velocity namespace="${namespace}"/>
<xacro:imu namespace="${namespace}"/>
<xacro:extra/>

</xacro:macro>
Expand Down
32 changes: 16 additions & 16 deletions CustomRobots/Turtlebot2/model/turtlebot2/turtlebot2_gz.urdf.xacro
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<robot name="vacuum_cleaner_gz"
xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:macro name="camera" params="xyz rpy name parent">
<xacro:macro name="camera" params="xyz rpy name parent namespace">

<link name="${name}_link">
<visual>
Expand All @@ -24,9 +24,9 @@
<always_on>true</always_on>
<visualize>false</visualize>
<update_rate>5</update_rate>
<topic>/${name}/image_raw</topic>
<topic>/${namespace}/${name}/image_raw</topic>
<camera name="camera">
<camera_info_topic>/${name}/camera_info</camera_info_topic>
<camera_info_topic>/${namespace}/${name}/camera_info</camera_info_topic>
<horizontal_fov>1.0472</horizontal_fov>
<image>
<width>640</width>
Expand Down Expand Up @@ -61,7 +61,7 @@
</joint>
</xacro:macro>

<xacro:macro name="stereo_camera" params="xyz rpy name parent">
<xacro:macro name="stereo_camera" params="xyz rpy name parent namespace">

<link name="${name}_link">
</link>
Expand All @@ -78,9 +78,9 @@
<always_on>true</always_on>
<visualize>false</visualize>
<update_rate>5</update_rate>
<topic>/${name}/image_raw</topic>
<topic>/${namespace}/${name}/image_raw</topic>
<camera name="camera">
<camera_info_topic>/${name}/camera_info</camera_info_topic>
<camera_info_topic>/${namespace}/${name}/camera_info</camera_info_topic>
<horizontal_fov>1.570000</horizontal_fov>
<image>
<width>640</width>
Expand All @@ -101,7 +101,7 @@
</gazebo>
</xacro:macro>

<xacro:macro name="laser" params="xyz rpy name parent topic">
<xacro:macro name="laser" params="xyz rpy name parent namespace">
<link name="${name}_link">
<visual>
<geometry>
Expand All @@ -121,7 +121,7 @@
<always_on>1</always_on>
<visualize>1</visualize>
<update_rate>5</update_rate>
<topic>${topic}</topic>
<topic>/${namespace}/${name}/scan</topic>
<gz_frame_id>laser</gz_frame_id>
<lidar>
<scan>
Expand All @@ -142,20 +142,20 @@
</gazebo>
</xacro:macro>

<xacro:macro name="bumper" params="topic name">
<xacro:macro name="bumper" params="topic name namespace">
<gz>
<sensor name='${name}' type='contact'>
<always_on>true</always_on>
<update_rate>20</update_rate>
<contact>
<collision>${name}_collision</collision>
<topic>${topic}</topic>
<topic>/${namespace}/${topic}</topic>
</contact>
</sensor>
</gz>
</xacro:macro>

<xacro:macro name="imu" params="topic">
<xacro:macro name="imu" params="namespace">
<gazebo>
<plugin filename="gz-sim-imu-system" name="gz::sim::systems::Imu">
</plugin>
Expand All @@ -164,7 +164,7 @@
<sensor name='imu' type='imu'>
<always_on>1</always_on>
<update_rate>50</update_rate>
<topic>${topic}</topic>
<topic>/${namespace}/imu</topic>
<imu>
<noise>
<type>gaussian</type>
Expand Down Expand Up @@ -225,26 +225,26 @@
</gazebo>
</xacro:macro>

<xacro:macro name="velocity" params="topic">
<xacro:macro name="velocity" params="namespace">
<gazebo>
<plugin filename="gz-sim-diff-drive-system" name="gz::sim::systems::DiffDrive">
<publish_tf>1</publish_tf>
<left_joint>wheel_left_joint</left_joint>
<right_joint>wheel_right_joint</right_joint>
<wheel_separation>.230</wheel_separation>
<wheel_diameter>0.070</wheel_diameter>
<topic>${topic}</topic>
<topic>/${namespace}/cmd_vel</topic>
</plugin>
</gazebo>
</xacro:macro>

<xacro:macro name="odom" params="topic freq">
<xacro:macro name="odom" params="namespace freq">
<gazebo>
<plugin filename="gz-sim-odometry-publisher-system" name="gz::sim::systems::OdometryPublisher">
<odom_frame>odom</odom_frame>
<robot_base_frame>base_footprint</robot_base_frame>
<odom_publish_frequency>${freq}</odom_publish_frequency>
<odom_topic>${topic}</odom_topic>
<odom_topic>/${namespace}/odom</odom_topic>
<dimensions>3</dimensions>
</plugin>
</gazebo>
Expand Down
12 changes: 0 additions & 12 deletions CustomRobots/Turtlebot2/params/turtlebot2_camera.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,6 @@
gz_type_name: "gz.msgs.Image"
direction: GZ_TO_ROS

- ros_topic_name: "/depth_camera/depth_image"
gz_topic_name: "/depth_camera/depth_image"
ros_type_name: "sensor_msgs/msg/Image"
gz_type_name: "gz.msgs.Image"
direction: GZ_TO_ROS

- ros_topic_name: "/depth_camera/points"
gz_topic_name: "/depth_camera/points"
ros_type_name: "sensor_msgs/msg/PointCloud2"
gz_type_name: "gz.msgs.PointCloudPacked"
direction: GZ_TO_ROS

- ros_topic_name: "/person/cmd_vel"
gz_topic_name: "/person/cmd_vel"
ros_type_name: "geometry_msgs/msg/Twist"
Expand Down
Loading
Loading