Skip to content

Conversation

robotpilot
Copy link
Member

No description provided.

@Copilot Copilot AI review requested due to automatic review settings June 9, 2025 06:59
@robotpilot robotpilot self-assigned this Jun 9, 2025
@robotpilot robotpilot added the bump Increase the version number to release label Jun 9, 2025
@github-project-automation github-project-automation bot moved this to 🌱 Todo in Platform Jun 9, 2025
@robotpilot robotpilot moved this from 🌱 Todo to 📝 Pull Request in Platform Jun 9, 2025
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 @robotpilot, 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-code-assist here to provide a summary of this pull request. This PR primarily focuses on bumping the version of the turtlebot3_simulations package and its sub-packages (turtlebot3_fake_node, turtlebot3_gazebo) to version 2.3.5. The main functional addition in this version bump is the inclusion of a new turtlebot3_machine_learning world and associated plugins within the turtlebot3_gazebo package. This involves adding new world and model files, implementing new Gazebo Garden system plugins for dynamic obstacles, and updating the build configuration to support these new components and dependencies.

Highlights

  • Version Bump: The version number across the turtlebot3_simulations, turtlebot3_fake_node, and turtlebot3_gazebo packages has been updated from 2.3.3 to 2.3.5.
  • New Machine Learning World and Plugins: A new simulation environment (turtlebot3_machine_learning) designed for machine learning tasks has been added to the turtlebot3_gazebo package. This includes new world files (turtlebot3_dqn_stage*.world), static and dynamic obstacle models, and custom Gazebo Garden system plugins (ObstaclesPlugin, Obstacle1Plugin, Obstacle2Plugin) to control the movement of dynamic obstacles.
  • Gazebo Garden Migration/Updates: The new obstacle plugins are implemented as Gazebo Garden Systems. Existing SDF model files (turtlebot3_burger, turtlebot3_burger_cam, turtlebot3_waffle, turtlebot3_waffle_pi) have been updated to SDF version 1.8. The build system (CMakeLists.txt) has been updated to require CMake 3.8 and find/link against necessary Gazebo Garden libraries (gz-math, gz-sim, gz-plugin). The world files now include models from Gazebo Fuel and use the updated SDF format and plugin inclusion syntax.

Changelog

Click here to see the changelog
  • turtlebot3_fake_node/CHANGELOG.rst
    • Added entry for version 2.3.5.
  • turtlebot3_fake_node/package.xml
    • Updated package version from 2.3.3 to 2.3.5.
  • turtlebot3_gazebo/CHANGELOG.rst
    • Added entry for version 2.3.5, noting the addition of the turtlebot3_machine_learning world and plugin.
  • turtlebot3_gazebo/CMakeLists.txt
    • Increased minimum required CMake version from 3.5 to 3.8.
    • Added find_package calls for gz_math_vendor, gz-math, gz_sim_vendor, gz-sim, gz_plugin_vendor, and gz-plugin.
    • Added GZ_SIM_LIBRARY_DIRS and GZ_SIM_INCLUDE_DIRS to link_directories and include_directories respectively.
    • Defined OBSTACLE_LIBS variable for the new obstacle plugins.
    • Added build and linking configuration for the obstacles, obstacle1, and obstacle2 shared libraries using gz-sim and gz-math.
    • Added installation targets for the new obstacle plugins.
  • turtlebot3_gazebo/include/turtlebot3_gazebo/obstacle1.hpp
    • New header file for the Obstacle1 Gazebo Garden plugin.
    • Defines Obstacle1Plugin class inheriting from gz::sim::System, ISystemConfigure, and ISystemPreUpdate.
    • Includes necessary Gazebo Garden headers (gz/sim/System.hh, gz/sim/Model.hh, gz/math/Vector3.hh).
    • Adds member variables for model entity, start time, waypoints, segment distances, total distance, and speed.
    • Declares Configure and PreUpdate methods.
  • turtlebot3_gazebo/include/turtlebot3_gazebo/obstacle2.hpp
    • New header file for the Obstacle2 Gazebo Garden plugin.
    • Defines Obstacle2Plugin class inheriting from gz::sim::System, ISystemConfigure, and ISystemPreUpdate.
    • Includes necessary Gazebo Garden headers.
    • Adds member variables for model entity, start time, waypoints, segment distances, total distance, and speed.
    • Declares Configure and PreUpdate methods.
  • turtlebot3_gazebo/include/turtlebot3_gazebo/obstacles.hpp
    • New header file for the Obstacles Gazebo Garden plugin.
    • Defines ObstaclesPlugin class inheriting from gz::sim::System, ISystemConfigure, and ISystemPreUpdate.
    • Includes necessary Gazebo Garden headers.
    • Adds member variables for model entity and start time.
    • Declares Configure and PreUpdate methods.
  • turtlebot3_gazebo/launch/turtlebot3_dqn_stage1.launch.py
    • New launch file for the turtlebot3_dqn_stage1 world using ros_gz_sim.
    • Sets GZ_SIM_RESOURCE_PATH to include local models.
    • Includes gz_sim.launch.py for both server and client.
    • Includes robot_state_publisher.launch.py and spawn_turtlebot3.launch.py.
  • turtlebot3_gazebo/launch/turtlebot3_dqn_stage2.launch.py
    • New launch file for the turtlebot3_dqn_stage2 world using ros_gz_sim.
    • Similar structure to stage1 launch file, includes obstacles model.
  • turtlebot3_gazebo/launch/turtlebot3_dqn_stage3.launch.py
    • New launch file for the turtlebot3_dqn_stage3 world using ros_gz_sim.
    • Similar structure to stage1 launch file, includes obstacles model with plugin.
  • turtlebot3_gazebo/launch/turtlebot3_dqn_stage4.launch.py
    • New launch file for the turtlebot3_dqn_stage4 world using ros_gz_sim.
    • Similar structure to stage1 launch file, includes inner_walls, obstacle1, and obstacle2 models with plugins.
  • turtlebot3_gazebo/models/turtlebot3_burger/model.sdf
    • Adjusted indentation for plugin parameters.
  • turtlebot3_gazebo/models/turtlebot3_burger_cam/model.config
    • Updated SDF version reference from 1.6 to 1.8.
  • turtlebot3_gazebo/models/turtlebot3_burger_cam/model.sdf
    • Updated SDF version from 1.6 to 1.8.
    • Adjusted indentation for plugin parameters.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/goal_box/model.config
    • New model config file for the goal_box model.
    • Specifies SDF version 1.8.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/goal_box/model.sdf
    • New SDF model file for a static goal box (red cylinder).
    • Uses SDF version 1.8.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/inner_walls/model.config
    • New model config file for the inner_walls model.
    • Specifies SDF version 1.8.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/inner_walls/model.sdf
    • New SDF model file for static inner walls.
    • Uses SDF version 1.8.
    • Defines multiple links for different wall segments with collision and visual properties.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/model.config
    • New model config file for the turtlebot3_dqn_world model.
    • Specifies SDF version 1.8.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/model.sdf
    • New SDF model file for the main square world structure (outer walls).
    • Uses SDF version 1.8.
    • Defines multiple links for the outer wall segments.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/obstacle1/model.config
    • New model config file for the obstacle1 model.
    • Specifies SDF version 1.8.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/obstacle1/model.sdf
    • New SDF model file for a dynamic obstacle (cylinder).
    • Uses SDF version 1.8.
    • Sets static to false to allow movement.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/obstacle2/model.config
    • New model config file for the obstacle2 model.
    • Specifies SDF version 1.8.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/obstacle2/model.sdf
    • New SDF model file for a dynamic obstacle (cylinder).
    • Uses SDF version 1.8.
    • Sets static to false to allow movement.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/obstacles/model.config
    • New model config file for the obstacles model.
    • Specifies SDF version 1.8.
  • turtlebot3_gazebo/models/turtlebot3_dqn_world/obstacles/model.sdf
    • New SDF model file for a set of static obstacles (four cylinders).
    • Uses SDF version 1.8.
    • Sets static to false, likely intended for the plugin to control their collective movement/rotation.
  • turtlebot3_gazebo/models/turtlebot3_waffle/model.config
    • Updated SDF version reference from 1.5 to 1.8.
  • turtlebot3_gazebo/models/turtlebot3_waffle/model.sdf
    • Adjusted indentation for plugin parameters.
  • turtlebot3_gazebo/models/turtlebot3_waffle_pi/model.config
    • Updated SDF version reference from 1.5 to 1.8.
  • turtlebot3_gazebo/models/turtlebot3_waffle_pi/model.sdf
    • Updated SDF version from 1.5 to 1.8.
    • Changed <lidar> tag to <ray> within the sensor definition, which is the correct tag for lidar sensors in recent SDF versions.
    • Adjusted indentation for plugin parameters.
  • turtlebot3_gazebo/package.xml
    • Updated package version from 2.3.3 to 2.3.5.
    • Added dependencies on gz_sim_vendor, gz_plugin_vendor, and gz_math_vendor.
  • turtlebot3_gazebo/src/obstacle1.cpp
    • New source file for the Obstacle1 Gazebo Garden plugin.
    • Implements Configure to initialize the model entity, start time, and define a set of waypoints for linear movement.
    • Implements PreUpdate to calculate the current position along the defined waypoints based on elapsed time and speed, and set the model's pose.
    • Registers the plugin using GZ_ADD_PLUGIN and GZ_ADD_PLUGIN_ALIAS.
  • turtlebot3_gazebo/src/obstacle2.cpp
    • New source file for the Obstacle2 Gazebo Garden plugin.
    • Implements Configure to initialize the model entity, start time, and define a different set of waypoints for linear movement.
    • Implements PreUpdate to calculate the current position along the defined waypoints based on elapsed time and speed, and set the model's pose.
    • Registers the plugin.
  • turtlebot3_gazebo/src/obstacles.cpp
    • New source file for the Obstacles Gazebo Garden plugin.
    • Implements Configure to initialize the model entity and start time.
    • Implements PreUpdate to calculate a rotation angle based on elapsed time and set the model's pose, causing the group of obstacles to rotate.
    • Registers the plugin.
  • turtlebot3_gazebo/worlds/turtlebot3_dqn_stage1.world
    • Updated SDF version from 1.6 to 1.8.
    • Changed world name from 'default' to 'dqn'.
    • Replaced explicit include for ground_plane and sun with standard Gazebo Garden system plugins and a Fuel model include for the ground plane.
    • Added gz-sim-physics-system, gz-sim-user-commands-system, gz-sim-scene-broadcaster-system, and gz-sim-sensors-system plugins.
    • Updated the turtlebot3_dqn_world model inclusion to use static>true instead of static>1.
  • turtlebot3_gazebo/worlds/turtlebot3_dqn_stage2.world
    • Updated SDF version from 1.6 to 1.8.
    • Changed world name from 'default' to 'dqn'.
    • Added standard Gazebo Garden system plugins, including gz-sim-imu-system.
    • Included Ground Plane and Sun via standard methods.
    • Updated the turtlebot3_dqn_world model inclusion.
    • Updated the turtlebot3_dqn_world/obstacles model inclusion.
  • turtlebot3_gazebo/worlds/turtlebot3_dqn_stage3.world
    • Updated SDF version from 1.6 to 1.8.
    • Changed world name from 'default' to 'dqn'.
    • Added standard Gazebo Garden system plugins, including gz-sim-imu-system.
    • Included Ground Plane and Sun via standard methods.
    • Updated the turtlebot3_dqn_world model inclusion.
    • Updated the turtlebot3_dqn_world/obstacles model inclusion to include the turtlebot3_gazebo::ObstaclesPlugin.
  • turtlebot3_gazebo/worlds/turtlebot3_dqn_stage4.world
    • Updated SDF version from 1.6 to 1.8.
    • Changed world name from 'default' to 'dqn'.
    • Added standard Gazebo Garden system plugins, including gz-sim-imu-system.
    • Included Ground Plane and Sun via standard methods.
    • Updated the turtlebot3_dqn_world model inclusion.
    • Included the turtlebot3_dqn_world/inner_walls model.
    • Included the turtlebot3_dqn_world/obstacle1 model and associated turtlebot3_gazebo::Obstacle1Plugin.
    • Included the turtlebot3_dqn_world/obstacle2 model and associated turtlebot3_gazebo::Obstacle2Plugin.
  • turtlebot3_simulations/CHANGELOG.rst
    • Added entry for version 2.3.5, noting the addition of the turtlebot3_machine_learning world and plugin.
  • turtlebot3_simulations/package.xml
    • Updated package version from 2.3.3 to 2.3.5.
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.

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 successfully bumps the version to 2.3.5 across the relevant packages and introduces new Gazebo Sim worlds and moving obstacles for machine learning stages. The migration from classic Gazebo plugins to Gazebo Sim systems is a significant and positive change. The new obstacle plugins implement waypoint following and rotation logic, which adds dynamic elements to the simulation environments. The new SDF models and Python launch files are well-structured and follow standard practices. Overall, this is a valuable addition to the repository.

Summary of Findings

  • Obstacle plugin movement logic: The current logic for calculating the obstacle position based on elapsed time and total distance might cause the obstacle to momentarily stop at the end of the path due to floating-point precision before wrapping around. Explicitly handling the wrap-around might be more robust.
  • Plugin placement in world SDF: System plugins in world SDF files are typically defined directly under the <world> tag, not nested within <include> tags for models. This improves clarity and adherence to standard SDF structure.
  • Empty author fields in model.config: The author name and email fields are empty in turtlebot3_gazebo/models/turtlebot3_dqn_world/goal_box/model.config. While minor, filling these out provides proper attribution.
  • Inconsistent indentation in SDF files: Minor indentation changes were made in the <plugin> sections of the TurtleBot3 model SDF files (turtlebot3_burger, turtlebot3_waffle, turtlebot3_waffle_pi). While not critical, maintaining consistent indentation (e.g., 2 spaces or 3 spaces) throughout the file and repository improves readability.

Merge Readiness

The pull request introduces significant and valuable changes, including migrating to Gazebo Sim systems and adding new simulation environments. However, there are a few medium-severity issues related to the obstacle movement logic and plugin placement in world files that should be addressed to ensure correctness and maintainability. I recommend addressing these issues before merging. I am unable to approve this pull request; please have other reviewers approve it.

Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR prepares the 2.3.5 release by adding a new TurtleBot3 DQN world with SDF 1.8 models and configs, four stage-specific DQN launch scripts, and migrating obstacle plugins to the Gazebo/gz-sim System API. It also bumps package versions, updates changelogs, adjusts CMakeLists to link new dependencies, and refines the CI matrix.

Reviewed Changes

Copilot reviewed 43 out of 43 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
turtlebot3_gazebo/models/turtlebot3_dqn_world/model.config Added DQN world model config
turtlebot3_gazebo/models/turtlebot3_dqn_world/inner_walls/model.sdf New inner walls SDF (static obstacles)
turtlebot3_gazebo/models/turtlebot3_dqn_world/inner_walls/model.config Inner walls model config
turtlebot3_gazebo/models/turtlebot3_dqn_world/goal_box/model.sdf New goal marker SDF
turtlebot3_gazebo/models/turtlebot3_dqn_world/goal_box/model.config Goal box model config (author/description blank)
turtlebot3_gazebo/models/turtlebot3_burger_cam/model.sdf Updated SDF version to 1.8
turtlebot3_gazebo/models/turtlebot3_burger_cam/model.config Switched model.config to reference SDF 1.8
turtlebot3_gazebo/launch/turtlebot3_dqn_stage{1..4}.launch.py Added four stage-specific DQN launch files
turtlebot3_gazebo/include/turtlebot3_gazebo/{obstacles,obstacle1,obstacle2}.hpp Migrated plugins to gz-sim System API (removed old ModelPlugin)
turtlebot3_gazebo/CMakeLists.txt Bumped CMake version, added gz-sim and gz-math deps, refactored plugin builds
turtlebot3_gazebo/CHANGELOG.rst Added 2.3.5 entry (name mismatch)
turtlebot3_fake_node/package.xml & CHANGELOG.rst Bumped to 2.3.5, updated fake_node changelog
.github/workflows/ros-ci.yml Adjusted ROS distro matrix (commented out Humble)
Comments suppressed due to low confidence (2)

turtlebot3_gazebo/models/turtlebot3_dqn_world/goal_box/model.config:7

  • The author name and email fields are left empty; fill them or remove the empty tags to avoid confusion.
<name></name>

turtlebot3_gazebo/CHANGELOG.rst:7

  • The changelog entry references 'turtlebot3_machine_learning', but the directory is named 'turtlebot3_dqn_world'. Update this to match the actual world name.
* Added turtlebot3_machine_learning world and plugin

@robotpilot robotpilot merged commit 0f833fc into jazzy Jun 9, 2025
12 checks passed
@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

bump Increase the version number to release

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

3 participants