gazebo-ros-integration#21
Conversation
- Changed default Gazebo render engine reference from Jetty to Ionic in documentation. - Updated Dockerfile for ROS service to set default ROS_DISTRO to Kilted. - Modified DDS discovery configuration to reflect Kilted changes. - Adjusted simulator Dockerfile to set GZ_RELEASE to Ionic and added ROS_DISTRO as an argument. - Revised Copilot instructions and agent expectations to align with Kilted and Ionic. - Added new Business Requirements Document (BRD) for UbeROS Simulation and Visualization, outlining the need for a pluggable simulator framework and native web visualization for Gazebo.
There was a problem hiding this comment.
Pull request overview
This PR updates the repository’s ROS/Gazebo baseline and guidance from ROS 2 Lyrical + Gazebo Jetty to ROS 2 Kilted + Gazebo Ionic, aligning Docker build defaults, Compose args, and project documentation with the new target stack while adding a new BRD for future simulator/visualization improvements.
Changes:
- Switch default stack references and environment defaults to ROS 2 Kilted and Gazebo Ionic across docs and Copilot guidance.
- Update container build configuration (Compose + Dockerfiles) to reflect the new defaults and install
ros-${ROS_DISTRO}-ros-gzin the simulator image. - Add a Simulation and Visualization BRD describing a pluggable simulator framework, ROS integration, and Gazebo web visualization direction.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| workspace/src/AGENTS.md | Updates workspace agent expectations to Kilted/Ionic. |
| workspace/src/.github/copilot-instructions.md | Updates Copilot guidance header, assumptions, and references to Kilted/Ionic. |
| services/simulator/Dockerfile | Changes default GZ_RELEASE to ionic, introduces ROS_DISTRO, and installs ros-${ROS_DISTRO}-ros-gz. |
| services/ros/Dockerfile | Changes default ROS_DISTRO to kilted. |
| services/ros/config/dds_discovery.xml | Updates Fast DDS version comment to reflect Kilted baseline. |
| README.md | Updates .env defaults and stack note to Kilted/Ionic. |
| docs/specs/04-gazebo-gpu-wsl2-research.md | Updates references from Jetty to Ionic where applicable. |
| docs/specs/01-Init-research.md | Broadly updates research report wording from Lyrical/Jetty to Kilted/Ionic and related references. |
| docs/prds/uberos-init.md | Updates PRD dependency/risk wording to Kilted baseline. |
| docs/decisions/README.md | Updates ADR-001 implementation summary to Kilted/Ionic defaults. |
| docs/decisions/ADR-001-ros-distro.md | Updates ADR-001 decision and SPIKE-A results text for Kilted/Ionic. |
| docs/brds/uberos-simulation-visualization-brd.md | Adds new BRD for simulator/visualization roadmap (pluggability, ROS integration, web viz). |
| compose.yaml | Updates defaults to ROS_DISTRO=kilted, GZ_RELEASE=ionic, and passes ROS_DISTRO to simulator build. |
| .squad/decisions.md | Updates recorded decision summary to Kilted/Ionic. |
| .env.example | Updates committed example defaults to Kilted/Ionic. |
…tion - Introduced a comprehensive PRD outlining the goals, requirements, and architecture for the UbeROS simulation and visualization framework. - Defined the context, core opportunity, and user personas to clarify the project's objectives. - Detailed functional and non-functional requirements, including a pluggable simulator framework, launch menu, and ROS 2 integration. - Specified the solution architecture, including component models and discovery systems. - Included operational considerations, risks, and rollout phases to guide implementation.
All open questions resolved (gzweb spike, kilted/ionic pairing, configurable autostart, drop ros-gz from ros image). Status -> Approved.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated 4 comments.
Comments suppressed due to low confidence (12)
README.md:119
ionicis a Gazebo release, not a ROS 2 distro. The fallback here should point to a ROS distro (Jazzy) plus the Gazebo Harmonic release, matching the table above.
> If verification fails, set `ROS_DISTRO=ionic` and `GZ_RELEASE=harmonic`.
docs/decisions/ADR-001-ros-distro.md:28
- Fallback instructions set
ROS_DISTRO=ionic, butionicis a Gazebo release (and is already covered byGZ_RELEASE). The ROS fallback distro here should bejazzy.
`ROS_DISTRO=ionic` and `GZ_RELEASE=harmonic`.
docs/decisions/ADR-001-ros-distro.md:40
- This fallback references
ros:ionic-ros-base, butionicis not a ROS Docker tag (it’s a Gazebo release name). The ROS fallback should beros:jazzy-ros-base, and the Gazebo image should include theghcr.io/openrobotics/gazeboregistry prefix for consistency with the rest of the doc.
- Fallbacks `ros:ionic-ros-base` and `gazebo:harmonic-full` — EXIST.
docs/specs/01-Init-research.md:726
ros-ionic-rosbridge-suiteis not a valid ROS package name (Ionic is a Gazebo release). This should reference Jazzy as the fallback ROS distro, alongside Kilted.
- **Server package:** `ros-ionic-rosbridge-suite` or `ros-kilted-rosbridge-suite`; Kilted availability is a SPIKE-A gate.
docs/specs/01-Init-research.md:1668
- This ROS documentation URL uses
/en/ionic/, but Ionic is a Gazebo release, not a ROS distro. The path should match the ROS distro being referenced (e.g./en/kilted/).
| <https://docs.ros.org/en/ionic/Tutorials/Advanced/Improved-Dynamic-Discovery.html> | ROS 2 DDS discovery configuration | Verified |
docs/specs/01-Init-research.md:1716
- This domain ID reference URL points at
/en/ionic/(Gazebo). It should point at a ROS docs path (e.g./en/kilted/).
[^dds-domain]: ROS 2 domain ID guidance: <https://docs.ros.org/en/ionic/Concepts/Intermediate/About-Domain-ID.html>. IDs 0–101 and 215–232 avoid Linux ephemeral-port collisions; `42` is safe across the target platforms.
docs/specs/01-Init-research.md:1756
- This sentence claims
ros-ionic-rosbridge-suitewas verified, butionicis not a ROS distro. This should reference the verified Jazzy package (or whichever ROS distro was actually verified).
[^rosbridge]: rosbridge sources include `RobotWebTools/rosbridge_suite:QUALITY_DECLARATION.md` at Quality Level 3 and `ROSBRIDGE_PROTOCOL.md` v2.1.0. Humble, Jazzy, and Rolling support was confirmed; `ros-ionic-rosbridge-suite` was verified, while the Kilted package remained a SPIKE-A question.
docs/specs/01-Init-research.md:1540
osrf/ros:ionic-simulationis not a valid ROS image tag (Ionic is a Gazebo release). For a Jazzy + Harmonic fallback, this should referenceosrf/ros:jazzy-simulation.
> - **Mitigation:** Run SPIKE-A P3 and fall back to `osrf/ros:ionic-simulation` with Harmonic.
docs/specs/01-Init-research.md:1630
- This claims
osrf/ros:ionic-simulationexists, butionicis not a ROS distro/tag. The fallback image here should beosrf/ros:jazzy-simulation(or another real ROS distro tag).
- `osrf/ros:ionic-simulation` bundles Gazebo Harmonic and is a viable fallback image.[^ros-docker-hub]
docs/specs/01-Init-research.md:1692
- This footnote references
osrf/ros:ionic-simulation, which is not a valid ROS image tag. Replace with the actual fallback tag (e.g.osrf/ros:jazzy-simulation).
[^ros-docker-hub]: Official ROS Docker image guidance: <https://hub.docker.com/_/ros>, accessed 2026-07-17. It documents multi-stage builds, distinguishes `ros-base` from `ros-core`, and recommends a `/root/.ros/` volume. Research also recorded `osrf/ros:ionic-simulation` as a roughly 735 MB image bundling Gazebo Harmonic, last pushed 2026-07-17.
.env.example:7
- This comment mixes up ROS and Gazebo naming:
ionicis a Gazebo release, not a ROS 2 distribution. The example should use a ROS distro name (e.g.kilted -> jazzy).
# Switching the ROS 2 distribution (e.g. kilted -> ionic) is a one-line change.
README.md:118
- This note says the primary distro is still pending SPIKE-A verification, but ADR-001 in this PR is marked "SPIKE-A passed" and "Implemented". The README should reflect that SPIKE-A has already passed (or clarify what is still unverified).
> **Note:** The primary ROS distribution (Kilted) is pending SPIKE-A image and
> package verification. See [ADR-001](docs/decisions/ADR-001-ros-distro.md).
🤖 Automated PR reviewReviewed as part of the full open-PR sweep. This PR is the base of the simulation stack ( Findings
✅ Recommendation: Approve after fixing the two doc pairing errors. |
🤖 Automated PR reviewReviewed as part of the full open-PR sweep. This PR is the base of the simulation stack ( Findings
✅ Recommendation: Approve after fixing the two doc pairing errors. |
jmservera
left a comment
There was a problem hiding this comment.
🤖 Automated line-anchored review — see the summary comment for the full findings table.
…onfiguration and documentation
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (2)
docs/specs/01-Init-research.md:1756
- This footnote references
ros-ionic-rosbridge-suite, but “Ionic” is a Gazebo release name, not a ROS distro. The package name should use a ROS distro (e.g.ros-jazzy-rosbridge-suite/ros-kilted-rosbridge-suite).
[^rosbridge]: rosbridge sources include `RobotWebTools/rosbridge_suite:QUALITY_DECLARATION.md` at Quality Level 3 and `ROSBRIDGE_PROTOCOL.md` v2.1.0. Humble, Jazzy, and Rolling support was confirmed; `ros-ionic-rosbridge-suite` was verified, while the Kilted package remained a SPIKE-A question.
docs/specs/01-Init-research.md:1692
- This reference claims an
osrf/ros:ionic-simulationimage “bundling Gazebo Harmonic”. “Ionic” is a Gazebo release, not a ROS image tag, and the sentence contradicts itself (ionic vs harmonic). This likely meant the existingosrf/ros:jazzy-simulationimage that bundles Gazebo Harmonic.
[^ros-docker-hub]: Official ROS Docker image guidance: <https://hub.docker.com/_/ros>, accessed 2026-07-17. It documents multi-stage builds, distinguishes `ros-base` from `ros-core`, and recommends a `/root/.ros/` volume. Research also recorded `osrf/ros:ionic-simulation` as a roughly 735 MB image bundling Gazebo Harmonic, last pushed 2026-07-17.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (4)
docs/specs/01-Init-research.md:1692
- The ROS Docker Hub note references
osrf/ros:ionic-simulationbut describes it as bundling Gazebo Harmonic. Ionic is a Gazebo release name; the commonly referenced fallback image for Harmonic isosrf/ros:jazzy-simulation, so this citation looks like an incorrect tag and will mislead readers.
[^ros-docker-hub]: Official ROS Docker image guidance: <https://hub.docker.com/_/ros>, accessed 2026-07-17. It documents multi-stage builds, distinguishes `ros-base` from `ros-core`, and recommends a `/root/.ros/` volume. Research also recorded `osrf/ros:ionic-simulation` as a roughly 735 MB image bundling Gazebo Harmonic, last pushed 2026-07-17.
docs/specs/01-Init-research.md:1756
- This footnote cites
ros-ionic-rosbridge-suite, but "Ionic" is a Gazebo release and not a ROS distro, so the package name is incorrect. This should reference a real ROS distro package (e.g.,ros-jazzy-rosbridge-suite).
[^rosbridge]: rosbridge sources include `RobotWebTools/rosbridge_suite:QUALITY_DECLARATION.md` at Quality Level 3 and `ROSBRIDGE_PROTOCOL.md` v2.1.0. Humble, Jazzy, and Rolling support was confirmed; `ros-ionic-rosbridge-suite` was verified, while the Kilted package remained a SPIKE-A question.
README.md:119
- The README note says Kilted is "pending SPIKE-A" verification, but ADR-001 and other updated docs in this PR state SPIKE-A passed. This should be reconciled so users aren’t told verification is still outstanding.
> **Note:** The primary ROS distribution (Kilted) is pending SPIKE-A image and
> package verification. See [ADR-001](docs/decisions/ADR-001-ros-distro.md).
> If verification fails, set `ROS_DISTRO=jazzy` and `GZ_RELEASE=harmonic`.
docs/prds/uberos-simulation-visualization.md:385
- This PRD references the ROS "lyrical" Turtlesim tutorial URL, but the rest of the document/PR standardizes on ROS 2 Kilted. The link should match the selected distro to avoid sending readers to the wrong docs set.
| Turtlesim | https://docs.ros.org/en/kilted/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html | Turtlesim intro |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (3)
docs/specs/01-Init-research.md:68
- This sentence says Kilted has a support horizon of ~May 2031, but the cited ROS lifecycle footnote later in this document states Kilted ends in November 2026. These should be reconciled so decision guidance doesn’t contradict the referenced evidence.
- **Context:** The user-supplied Kilted Kaiju page signals possible intent to target Kilted. Research found an active Kilted base image and a support horizon of approximately May 2031, but its ecosystem package coverage remained unverified at the research date.[^kilted-base][^ros-eol]
docs/specs/01-Init-research.md:1692
- This footnote claims
osrf/ros:ionic-simulationbundles Gazebo Harmonic, but earlier the document already statesosrf/ros:jazzy-simulationbundles Harmonic.ionichere appears to be a mistaken tag name (ROS images are typically keyed by ROS distro, not Gazebo release) and creates an internal inconsistency.
[^ros-docker-hub]: Official ROS Docker image guidance: <https://hub.docker.com/_/ros>, accessed 2026-07-17. It documents multi-stage builds, distinguishes `ros-base` from `ros-core`, and recommends a `/root/.ros/` volume. Research also recorded `osrf/ros:ionic-simulation` as a roughly 735 MB image bundling Gazebo Harmonic, last pushed 2026-07-17.
docs/specs/01-Init-research.md:1756
ros-ionic-rosbridge-suitedoes not match ROS package naming (the prefix should be the ROS distro, e.g.ros-jazzy-*/ros-kilted-*). Given the preceding sentence says Humble/Jazzy/Rolling were confirmed and Kilted remained a SPIKE-A question, this should likely refer toros-jazzy-rosbridge-suite.
[^rosbridge]: rosbridge sources include `RobotWebTools/rosbridge_suite:QUALITY_DECLARATION.md` at Quality Level 3 and `ROSBRIDGE_PROTOCOL.md` v2.1.0. Humble, Jazzy, and Rolling support was confirmed; `ros-ionic-rosbridge-suite` was verified, while the Kilted package remained a SPIKE-A question.
…al Luth' in ADR-001 and Dockerfile
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (4)
docs/specs/01-Init-research.md:1686
- This citation line still says REP-2000 had no Lyrical section, but the surrounding citations were updated to Kilted and REP-2000 is referenced as missing Kilted. Update the distro name here to keep the citations consistent.
[^ros-eol]: ROS 2 lifecycle schedule: <https://endoflife.date/ros-2>, last updated 2026-06-01 and accessed 2026-07-17. It records Iron EOL in November 2024, Humble in May 2027, Jazzy in May 2029, Kilted in November 2026, and Lyrical ending in approximately May 2031. REP-2000 had no Lyrical section at the research date.
docs/specs/01-Init-research.md:1692
- This footnote references
osrf/ros:ionic-simulationbut then says it bundles Gazebo Harmonic. Elsewhere in this doc you referenceosrf/ros:jazzy-simulationas the Harmonic-bundled fallback; please align this footnote with that image/tag to avoid confusion.
[^ros-docker-hub]: Official ROS Docker image guidance: <https://hub.docker.com/_/ros>, accessed 2026-07-17. It documents multi-stage builds, distinguishes `ros-base` from `ros-core`, and recommends a `/root/.ros/` volume. Research also recorded `osrf/ros:ionic-simulation` as a roughly 735 MB image bundling Gazebo Harmonic, last pushed 2026-07-17.
docs/specs/01-Init-research.md:1756
ros-ionic-rosbridge-suiteis not a valid ROS package naming pattern (ROS packages are keyed by ROS distro, not Gazebo release). Replace it with the verified Kilted package name to avoid pointing readers at a non-existent package.
[^rosbridge]: rosbridge sources include `RobotWebTools/rosbridge_suite:QUALITY_DECLARATION.md` at Quality Level 3 and `ROSBRIDGE_PROTOCOL.md` v2.1.0. Humble, Jazzy, and Rolling support was confirmed; `ros-ionic-rosbridge-suite` was verified, while the Kilted package remained a SPIKE-A question.
services/simulator/Dockerfile:7
- The fallback note says changing only
GZ_RELEASE=harmonicrequires “no other edits”, but this Dockerfile also installsros-${ROS_DISTRO}-ros-gzand the README/ADR describe the fallback as Jazzy+Harmonic. Updating onlyGZ_RELEASEcould leave an incompatibleROS_DISTRO/Gazebo pairing.
# GZ_RELEASE is parameterized (default ionic). If SPIKE-A shows the Ionic image
# is unavailable, switch GZ_RELEASE=harmonic in .env with no other edits.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (4)
services/simulator/Dockerfile:27
- The ROS apt source is configured with an HTTP URL. Even though packages are signed, using HTTPS avoids downgrade/MITM risks and is the standard for apt sources.
&& curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
| gpg --dearmor -o /usr/share/keyrings/ros-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") main" \
> /etc/apt/sources.list.d/ros2.list \
docs/decisions/ADR-001-ros-distro.md:15
- This ADR’s Context section still describes Lyrical/Jetty as the primary candidate, but the Decision and Implementation sections are now Kilted/Ionic. Updating the Context keeps the ADR internally consistent.
UbeROS needs a ROS 2 baseline distribution. The candidates are Lyrical Luth
(Ubuntu 26.04, Gazebo Jetty, support to ~May 2031), Jazzy Jalisco (Ubuntu 24.04,
Gazebo Harmonic, proven ecosystem to ~May 2029), and Humble (nearing EOL).
Lyrical offers the longest runway but its ecosystem package coverage
(`rosbridge-suite`, `ros-gz`) was unverified at research time.
docs/decisions/ADR-001-ros-distro.md:17
- This paragraph references falling back from Lyrical/Jetty to Jazzy and claims Ionic is supported by Jazzy+Lyrical, which conflicts with the ADR’s current Kilted/Ionic decision. Consider rewriting it to explain why Kilted/Ionic is the chosen baseline and how the fallback works.
During development we found out that the Jetty image is using Ubuntu Noble, which is not supported by ROS 2 Lyrical, so we had to fall back to Jazzy Jalisco. The Gazebo Ionic image is supported by Jazzy and Lyrical, so it is the preferred Gazebo baseline.
docs/specs/01-Init-research.md:1688
- The
ros-eolfootnote still includes a Lyrical-specific REP-2000 note even though REP-2000 is now discussed in the separaterep2000footnote, and the list of lifecycle dates can drift from the values used earlier in the document. Consider making this footnote describe the source more generally to avoid internal inconsistencies.
[^ros-eol]: ROS 2 lifecycle schedule: <https://endoflife.date/ros-2>, last updated 2026-06-01 and accessed 2026-07-17. It records Iron EOL in November 2024, Humble in May 2027, Jazzy in May 2029, Kilted in November 2026, and Lyrical ending in approximately May 2031. REP-2000 had no Lyrical section at the research date.
[^rep2000]: REP-2000 live review on 2026-07-17: <https://www.ros.org/reps/rep-2000.html>. The page covered Humble, Iron, Jazzy, Kilted, and Rolling, then ended after Rolling Ridley. It must not be cited as authority for Kilted’s platform tier or LTS status.
…quirements in documentation
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 19 out of 19 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (3)
services/simulator/Dockerfile:26
- The ROS 2 apt source is configured over plain HTTP. Even though APT signatures help, using HTTPS prevents trivial MITM/tampering with repository metadata in transit and aligns with typical secure defaults.
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") main" \
docs/specs/01-Init-research.md:1756
- This footnote references
ros-ionic-rosbridge-suite, but ROS Debian packages are named by ROS distro (e.g.,ros-jazzy-*,ros-kilted-*), not by Gazebo release. As written, the package name is inconsistent with the rest of the document and likely invalid.
[^rosbridge]: rosbridge sources include `RobotWebTools/rosbridge_suite:QUALITY_DECLARATION.md` at Quality Level 3 and `ROSBRIDGE_PROTOCOL.md` v2.1.0. Humble, Jazzy, and Rolling support was confirmed; `ros-ionic-rosbridge-suite` was verified, while the Kilted package remained a SPIKE-A question.
docs/specs/01-Init-research.md:1692
- This reference mentions
osrf/ros:ionic-simulation, butionicis a Gazebo release name, not a ROS distro tag used byosrf/rosimages. If the intent is the Gazebo Harmonic fallback image that pairs with Jazzy, this should point at the Jazzy simulation tag.
[^ros-docker-hub]: Official ROS Docker image guidance: <https://hub.docker.com/_/ros>, accessed 2026-07-17. It documents multi-stage builds, distinguishes `ros-base` from `ros-core`, and recommends a `/root/.ros/` volume. Research also recorded `osrf/ros:ionic-simulation` as a roughly 735 MB image bundling Gazebo Harmonic, last pushed 2026-07-17.
No description provided.