Skip to content

Conversation

chan-1207
Copy link
Contributor

@chan-1207 chan-1207 commented Jun 2, 2025

Pull Request Summary

This PR to humble branch adds Gazebo simulation maps and TurtleBot3 Manipulation Gazebo simulation from turtlebot3_manipulation, turtlebot3_home_service_challenge package:

  1. Added turtlebot3_manipulation Gazebo Simulation

  2. Added turtlebot3_home_service_challenge map

Validation

Verified successful colcon build and ros2 launch on a Humble development environment

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello @chan-1207, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

Summary of Changes

Hello team, Gemini here to provide a summary of this pull request by @chan-1207.

This PR introduces Gazebo simulation support for the TurtleBot3 Waffle Pi equipped with the OpenManipulator-X arm. The core changes involve creating a new ROS 2 package, turtlebot3_manipulation_gazebo, which houses the necessary URDF descriptions, Gazebo-specific configurations and plugins, ros2_control setup, and launch files to simulate the robot.

Additionally, a new Gazebo world specifically designed for a "home service challenge" is added to the turtlebot3_gazebo package, complete with models for various AR markers used within that environment. The existing simulation packages (turtlebot3_fake_node, turtlebot3_gazebo, turtlebot3_simulations) have their versions updated and changelogs modified to reflect the inclusion of the new manipulation simulation package and the new world.

Highlights

  • New Simulation Package: A new ROS 2 package, turtlebot3_manipulation_gazebo, is added to encapsulate all the necessary files for simulating the TurtleBot3 with the OpenManipulator-X arm in Gazebo.
  • Manipulation Robot Description: URDF/XACRO files for the combined TurtleBot3 Waffle Pi base and OpenManipulator-X arm are added, including Gazebo-specific properties and ros2_control configurations supporting both simulation and fake hardware.
  • New Gazebo World: A new Gazebo world file, turtlebot3_home_service_challenge.world, is added to the turtlebot3_gazebo package, providing a specific environment for manipulation tasks.
  • AR Marker Models: Models and meshes for AR markers (Marker0 through Marker9) are included within the new turtlebot3_home_service_challenge world directory.
  • Launch Files: New launch files are provided in turtlebot3_manipulation_gazebo for launching the robot with fake hardware (fake.launch.py) or in a default Gazebo world (gazebo.launch.py), and a base launch file (base.launch.py) handles common setup. A launch file for the new home service challenge world is added to turtlebot3_gazebo.

Changelog

Click here to see the changelog
  • turtlebot3_fake_node/CHANGELOG.rst
    • Added version 2.3.1 entry with 'Node'
  • turtlebot3_fake_node/package.xml
    • Updated version from 2.3.0 to 2.3.1
  • turtlebot3_gazebo/CHANGELOG.rst
    • Added version 2.3.1 entry with 'Node'
  • turtlebot3_gazebo/launch/turtlebot3_home_service_challenge.launch.py
    • Added new launch file for the home service challenge world
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker0/meshes/Marker0.dae
    • Added mesh file for Marker0
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker0/model-1_4.sdf
    • Added SDF model (v1.4) for Marker0
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker0/model-1_5.sdf
    • Added SDF model (v1.5) for Marker0
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker0/model.config
    • Added model config for Marker0
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker0/model.sdf
    • Added SDF model (v1.6) for Marker0
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker1/meshes/Marker1.dae
    • Added mesh file for Marker1
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker1/model-1_4.sdf
    • Added SDF model (v1.4) for Marker1
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker1/model-1_5.sdf
    • Added SDF model (v1.5) for Marker1
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker1/model.config
    • Added model config for Marker1
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker1/model.sdf
    • Added SDF model (v1.6) for Marker1
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker2/meshes/Marker2.dae
    • Added mesh file for Marker2
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker2/model-1_4.sdf
    • Added SDF model (v1.4) for Marker2
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker2/model-1_5.sdf
    • Added SDF model (v1.5) for Marker2
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker2/model.config
    • Added model config for Marker2
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker2/model.sdf
    • Added SDF model (v1.6) for Marker2
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker3/meshes/Marker3.dae
    • Added mesh file for Marker3
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker3/model-1_4.sdf
    • Added SDF model (v1.4) for Marker3
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker3/model-1_5.sdf
    • Added SDF model (v1.5) for Marker3
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker3/model.config
    • Added model config for Marker3
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker3/model.sdf
    • Added SDF model (v1.6) for Marker3
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker4/meshes/Marker4.dae
    • Added mesh file for Marker4
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker4/model-1_4.sdf
    • Added SDF model (v1.4) for Marker4
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker4/model-1_5.sdf
    • Added SDF model (v1.5) for Marker4
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker4/model.config
    • Added model config for Marker4
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker4/model.sdf
    • Added SDF model (v1.6) for Marker4
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker5/meshes/Marker5.dae
    • Added mesh file for Marker5
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker5/model-1_4.sdf
    • Added SDF model (v1.4) for Marker5
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker5/model-1_5.sdf
    • Added SDF model (v1.5) for Marker5
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker5/model.config
    • Added model config for Marker5
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker5/model.sdf
    • Added SDF model (v1.6) for Marker5
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker6/meshes/Marker6.dae
    • Added mesh file for Marker6
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker6/model-1_4.sdf
    • Added SDF model (v1.4) for Marker6
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker6/model-1_5.sdf
    • Added SDF model (v1.5) for Marker6
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker6/model.config
    • Added model config for Marker6
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker6/model.sdf
    • Added SDF model (v1.6) for Marker6
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker7/meshes/Marker7.dae
    • Added mesh file for Marker7
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker7/model-1_4.sdf
    • Added SDF model (v1.4) for Marker7
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker7/model-1_5.sdf
    • Added SDF model (v1.5) for Marker7
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker7/model.config
    • Added model config for Marker7
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker7/model.sdf
    • Added SDF model (v1.6) for Marker7
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker8/meshes/Marker8.dae
    • Added mesh file for Marker8
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker8/model-1_4.sdf
    • Added SDF model (v1.4) for Marker8
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker8/model-1_5.sdf
    • Added SDF model (v1.5) for Marker8
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker8/model.config
    • Added model config for Marker8
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker8/model.sdf
    • Added SDF model (v1.6) for Marker8
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker9/meshes/Marker9.dae
    • Added mesh file for Marker9
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker9/model-1_4.sdf
    • Added SDF model (v1.4) for Marker9
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker9/model-1_5.sdf
    • Added SDF model (v1.5) for Marker9
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker9/model.config
    • Added model config for Marker9
  • turtlebot3_gazebo/models/turtlebot3_home_service_challenge/marker9/model.sdf
    • Added SDF model (v1.6) for Marker9
  • turtlebot3_gazebo/package.xml
    • Updated version from 2.3.0 to 2.3.1
  • turtlebot3_gazebo/worlds/turtlebot3_home_service_challenge.world
    • Added new Gazebo world file for the home service challenge
  • turtlebot3_manipulation_gazebo/CHANGELOG.rst
    • Added new changelog file
    • Moved the TurtleBot3 Manipulation Gazebo simulation from the turtlebot3_manipulation_bringup package
  • turtlebot3_manipulation_gazebo/CMakeLists.txt
    • Added new CMakeLists file for the package
  • turtlebot3_manipulation_gazebo/config/gazebo_controller_manager.yaml
    • Added new Gazebo controller manager configuration file
  • turtlebot3_manipulation_gazebo/config/hardware_controller_manager.yaml
    • Added new hardware controller manager configuration file
  • turtlebot3_manipulation_gazebo/gazebo/materials.xacro
    • Added new xacro file defining materials
  • turtlebot3_manipulation_gazebo/gazebo/open_manipulator_x.gazebo.xacro
    • Added new Gazebo xacro file for the OpenManipulator-X arm
  • turtlebot3_manipulation_gazebo/gazebo/turtlebot3_waffle_pi.gazebo.xacro
    • Added new Gazebo xacro file for the TurtleBot3 Waffle Pi base
  • turtlebot3_manipulation_gazebo/launch/base.launch.py
    • Added new base launch file for the manipulation robot
  • turtlebot3_manipulation_gazebo/launch/fake.launch.py
    • Added new launch file for fake hardware simulation
  • turtlebot3_manipulation_gazebo/launch/gazebo.launch.py
    • Added new launch file for Gazebo simulation in a default world
  • turtlebot3_manipulation_gazebo/package.xml
    • Added new package definition file
  • turtlebot3_manipulation_gazebo/ros2_control/turtlebot3_manipulation_system.ros2_control.xacro
    • Added new ros2_control xacro file for the combined system
  • turtlebot3_manipulation_gazebo/rviz/turtlebot3_manipulation.rviz
    • Added new Rviz configuration file
  • turtlebot3_manipulation_gazebo/urdf/open_manipulator_x.urdf.xacro
    • Added new URDF xacro file for the OpenManipulator-X arm
  • turtlebot3_manipulation_gazebo/urdf/turtlebot3_manipulation.urdf.xacro
    • Added new combined URDF xacro file for the TurtleBot3 Manipulation robot
  • turtlebot3_manipulation_gazebo/urdf/turtlebot3_waffle_pi.urdf.xacro
    • Added new URDF xacro file for the TurtleBot3 Waffle Pi base
  • turtlebot3_simulations/CHANGELOG.rst
    • Added version 2.3.1 entry
    • Moved the TurtleBot3 Manipulation Gazebo simulation from the turtlebot3_manipulation_bringup package
  • turtlebot3_simulations/package.xml
    • Updated version from 2.3.0 to 2.3.1
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.


A robot with an arm,
In Gazebo, safe from harm.
It grasps and it turns,
As the simulation learns,
Avoiding walls, a charming alarm.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a significant amount of new functionality by adding Gazebo simulation maps and TurtleBot3 Manipulation Gazebo simulation capabilities. The overall structure, including the new turtlebot3_manipulation_gazebo package, launch files, URDF/XACRO configurations, and world files, appears well-organized and adheres to ROS 2 conventions.

The changes are comprehensive and enable a new simulation scenario. The use of ros2_control for managing the robot's hardware interfaces in simulation is a good approach. The launch files are structured logically, using arguments and inclusions effectively.

I've identified a few areas for improvement, primarily related to changelog clarity and a specific detail in the URDF definition. Addressing these will enhance the maintainability and clarity of the codebase.

Summary of Findings

  • Changelog Clarity: Some changelog entries (e.g., in turtlebot3_fake_node/CHANGELOG.rst and turtlebot3_gazebo/CHANGELOG.rst) are too generic (e.g., "* Node"). They should be more descriptive of the actual changes made. (Commented)
  • URDF Mimic Joint Definition: The URDF for open_manipulator_x uses a dummy_mimic_fix joint pattern that might be overly complex or redundant given standard URDF mimic tags and ros2_control mimic capabilities. Clarification on its necessity is requested. (Commented)
  • Missing Newlines at End of XML/SDF Files: Many of the newly added XML-based files (SDF, model.config) are missing a final newline character. While not functionally critical, adding it is a common best practice for text files. (Not commented due to review settings)
  • Python Launch File Line Length: A multi-line string in turtlebot3_manipulation_gazebo/launch/base.launch.py (description for fake_sensor_commands) results in a very long line, which could be re-formatted for better readability according to PEP 8 guidelines. (Not commented due to review settings)
  • ROS 1 $(find) Syntax in XACRO for Gazebo Plugin: The turtlebot3_manipulation.urdf.xacro file uses $(find ...) syntax for specifying the controller manager YAML path for the gazebo_ros2_control plugin. While this is often supported by Gazebo plugins for backward compatibility or direct parsing, it's a ROS 1 pattern. (Not commented due to review settings)

Merge Readiness

This pull request adds valuable simulation capabilities for TurtleBot3 Manipulation. The overall implementation is solid. However, there are a few medium-severity items (changelog clarity and a URDF detail) that should be addressed to improve maintainability and clarity before merging. I am unable to approve pull requests, so please ensure these points are considered and the PR is reviewed by other maintainers. Addressing the medium-severity comments is recommended before merging.

@chan-1207 chan-1207 requested review from GyuH13 and yun-goon June 4, 2025 03:10
Copy link
Member

@GyuH13 GyuH13 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are many missing EOFs. Please fix it

@chan-1207 chan-1207 requested a review from GyuH13 June 5, 2025 06:59
Copy link
Member

@GyuH13 GyuH13 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work

@GyuH13
Copy link
Member

GyuH13 commented Jun 9, 2025

@yun-goon please review it.

@GyuH13 GyuH13 self-assigned this Jun 9, 2025
@GyuH13 GyuH13 added documentation Improvements or additions to documentation enhancement New feature or request and removed documentation Improvements or additions to documentation labels Jun 9, 2025
@GyuH13 GyuH13 added this to Platform Jun 9, 2025
@github-project-automation github-project-automation bot moved this to 🌱 Todo in Platform Jun 9, 2025
@GyuH13 GyuH13 moved this from 🌱 Todo to 📝 Pull Request in Platform Jun 9, 2025
Copy link
Member

@yun-goon yun-goon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good! I have one suggestion, though.

@GyuH13 GyuH13 requested a review from robotpilot June 9, 2025 02:36
Copy link
Member

@robotpilot robotpilot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is it version 2.3.5, did you skip the other PRs?

@GyuH13 GyuH13 assigned robotpilot and unassigned GyuH13 Jun 9, 2025
Copy link
Member

@robotpilot robotpilot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@robotpilot robotpilot merged commit 98d3e7a into humble Jun 9, 2025
9 checks passed
@robotpilot robotpilot deleted the feature-add-manipulation-sim branch June 9, 2025 06:32
@github-project-automation github-project-automation bot moved this from 📝 Pull Request to 🚩Done in Platform Jun 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

4 participants