1.0.0
Teach your coding agent robotics — 22 versioned, battle-tested skills for ROS 2, Gazebo, Nav2, LeRobot, Isaac Sim, MuJoCo and more. npx robium-ai install
npx -y skills add robium-ai/robium-plugin --skill 1.0.0Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 19 days oldThe repository was created 19 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Modern Gazebo (gz — Harmonic/Ionic line) simulation: SDF worlds and models, sensors (lidar, camera, IMU, contact), the ros_gz bridge, spawning robots, and headless/server operation. Use when: 'gazebo', 'gz sim', 'ros_gz', 'simulate the robot', 'add a lidar to the sim', simulating mobile robots or sensors in the ROS ecosystem. Pairs with ros2 and nav2; simulator SELECTION lives in the simulation skill. Gazebo Classic (11) is EOL — this skill covers modern gz only and must never recommend Classic. Not for: Isaac Sim (isaac-sim) or non-ROS simulation.
SKILL.md
14.4 KB, ~3.7k tokens by cl100k_base, as published. Nobody here has run it
gazebo
The sim half of the robium nav-vertical trial run: modern Gazebo (the gz
tools — Gazebo Classic/gazebo11 is a separate, EOL project and out of scope
everywhere in this skill) for building SDF worlds and models, attaching
sensors, bridging topics to ROS 2 via ros_gz, spawning robots, and running
headless. As of this session, Gazebo's current named releases are Jetty
(LTS, Sep 2025 – May 2031), Ionic (standard support, Sep 2024 – Dec 2026),
and Harmonic (LTS, Sep 2023 – May 2029) — verified by direct curl of
gazebosim.org/docs/all/releases/ this session, which also lists the older
Fortress LTS (Sep 2021 – May 2027) still inside its support window. Jetty is
now the newest LTS, one release past the Harmonic/Ionic line named in this
skill's description; re-verify the release list before trusting any of this
paragraph in a future session; see references/worlds-and-models.md's
sourcing note. The robium nav vertical (nav2 skill) targets ROS 2 Jazzy
Jalisco, whose paired Gazebo release is Harmonic — the ros_gz
jazzy branch ships prebuilt binaries for that pairing from
packages.ros.org, confirmed by direct fetch of the ros_gz README this
session (see References). This skill's nav-facing snippets and examples
target Jazzy + Harmonic for that reason; Ionic (paired with Kilted) is
nearing its Dec 2026 EOL, and Jetty (the newest LTS) pairs with Lyrical or
Rolling, not Jazzy — don't pick either for a new Jazzy-based project without
re-checking the table first.
When to use this skill
- Building or editing an SDF world or model, adding a sensor (lidar, camera,
IMU, contact) to a robot, wiring a
ros_gzbridge, spawning a robot into a running simulation, or running Gazebo headless/server-only. - The trigger phrases in the description: 'gazebo', 'gz sim', 'ros_gz', 'simulate the robot', 'add a lidar to the sim'.
- Someone mentions Gazebo Classic tutorials,
gazebo11, or the oldlibgazebo_ros_*plugin names — flag that they don't apply here (Classic is EOL) and redirect to this skill's moderngz/ros_gzequivalents. - Cross-references — go to the sibling skill instead when the question is:
- Which simulator to use at all (Gazebo vs. Isaac Sim vs. something
else) → the
simulationskill. This skill assumes Gazebo has already been chosen. - Generic ROS 2 mechanics the bridge or a spawned robot's launch file rides
on (workspaces, colcon, launch files, TF2 concepts, QoS) →
ros2. This skill's only TF content is what theros_gzbridge or a sim plugin itself publishes. - Navigation behavior once sensor data is flowing (costmaps, AMCL,
behavior trees) →
nav2. This skill stops at "sensor topics are bridged and correctly framed"; what Nav2 does with them isnav2's territory. - Isaac Sim specifically →
isaac-sim. - Running
gz/ros_gzinside Docker, GPU passthrough for the container, or macOS/remote-server environment strategy →environments. This skill's Platform gotchas section only notes where Docker changes gz's own behavior (rendering, display), not how to set the container up. - The whole-stack decision this feeds into →
architect(routes here).
- Which simulator to use at all (Gazebo vs. Isaac Sim vs. something
else) → the
Key directives
- Delegation posture: embed + links. SDF anatomy, sensor tags, and the
ros_gzbridge's CLI/YAML syntax live in this skill's references in depth — no single upstream page walks through all three as one coherent unit for a new project — but every tag, default value, and parameter table links back togazebosim.org, thesdformatspec, or thegazebosim/ros_gzGitHub repo rather than being retyped from memory. See References. - Never recommend Gazebo Classic (
gazebo11). It reached end-of-life; its plugin names (libgazebo_ros_*), world format quirks, and tutorials do not carry over to moderngz. If a search result or an old tutorial mentions Classic, say so explicitly and translate to the modern equivalent rather than silently using Classic syntax. - Bridge every topic explicitly, via a config file, not ad-hoc CLI
bridges. A one-off
ros2 run ros_gz_bridge parameter_bridge /topic@ros_type@gz_typeper topic is fine for a five-minute test, but a real project's bridge set (clock, cmd_vel, odom, tf, every sensor) belongs in one YAML config file passed via theconfig_fileparameter — it's the single reviewable place that states exactly what's bridged, in which direction, and at what QoS, and it survives a robot rename without hunting down scatteredros2 runinvocations. Seeexamples/ros-gz-bridge-config.yamlandreferences/ros2-bridge.md. - Sensor rates and frames must match the real target robot, not simulator
defaults. A lidar simulated at the tutorial's default rate/FOV, or a
camera with the wrong resolution, produces a stack that "works in sim" and
then behaves differently the moment it meets real sensor data or a
downstream consumer (Nav2's costmap update rate, a perception model's
expected input size) tuned for the real hardware's datasheet. Pull the
real sensor's rate/FOV/range/frame from its datasheet before simulating it
— this is the
simulationskill's correctness-checklist territory; this skill only supplies the SDF tags to encode whatever numbers that check produces. - Never write gz release numbers, EOL dates, or ROS 2/Gazebo pairings from
memory. They change with every named release (Jetty's arrival moved
Harmonic and Ionic down a rung since this skill's description was
written). Verify against
gazebosim.org/docs/all/releases/and thegazebosim/ros_gzREADME's compatibility table before repeating a claim in a real project — every example in this skill is markedstatus: unverifiedfor exactly this reason, and each reference states how its claims were checked this session.
Quick start
1. Confirm the gz release paired with your ROS 2 distro. Check the
compatibility table in references/ros2-bridge.md (sourced from the
gazebosim/ros_gz README) before installing anything — for the Jazzy-based
nav vertical this skill targets, that's Gazebo Harmonic:
sudo apt-get install ros-jazzy-ros-gz
2. Write or copy a world. Start from
examples/diffdrive-world-snippet.sdf (a minimal differential-drive robot
with lidar and IMU sensors) and see references/worlds-and-models.md for
SDF anatomy.
3. Run it headless and bridge topics. See the two usage patterns below —
"Run a world headless" and "Bridge sensor topics to ROS 2" — using
examples/ros-gz-bridge-config.yaml as the bridge's config_file.
4. Verify data is flowing with ros2 topic echo /scan (or /imu,
/odom) before wiring anything downstream (Nav2, a perception node) to it.
Usage patterns
Run a world headless. gz sim -s -r <world>.sdf starts the simulation
server only (-s, "headless mode" — overrides -g if present) with the
simulation already playing (-r, "run simulation on start"); add
--headless-rendering (requires OGRE2, the default render engine) when the
world has camera or lidar sensors and there's no X server — see Platform
gotchas. This is the mode a CI job or a remote/cloud run should use; source
verified from the gz-sim CLI's own help text
(src/cmd/cmdsim.rb.in, fetched directly this session). See
references/worlds-and-models.md.
Spawn a robot from SDF/URDF. Launch Gazebo, then use ros_gz_sim's
create executable rather than hand-rolling a Gazebo Transport service call:
ros2 run ros_gz_sim create -world <world_name> -file <path/to/model.sdf> -name <robot_name> -x 0 -y 0 -z 0.1 for a file on disk (or a Fuel URL), or
-topic <topic> to spawn from a latched std_msgs/msg/String publisher —
the pattern for spawning a URDF that a robot_state_publisher node already
published to /robot_description. See references/worlds-and-models.md.
Bridge sensor topics to ROS 2. Pass a single YAML file to
parameter_bridge rather than one CLI arg per topic (see Key directives):
ros2 run ros_gz_bridge parameter_bridge \
--ros-args -p config_file:=examples/ros-gz-bridge-config.yaml
examples/ros-gz-bridge-config.yaml bridges /clock, /cmd_vel, /odom,
/tf, /scan, and /imu for the robot in
examples/diffdrive-world-snippet.sdf — the gz-side topic names in that
world and the gz_topic_names in the bridge config are kept in sync
deliberately; renaming one without the other silently breaks the bridge for
that topic. See references/ros2-bridge.md.
Add sensor noise. Every SDF sensor type accepts a <noise> element
(type="gaussian", with <mean>/<stddev>, plus <bias_mean>/
<bias_stddev> for slowly-varying sensor bias) — for a lidar it sits inside
<lidar> alongside <scan>/<range>, for IMU/camera it sits inside the
relevant axis/noise block. A sensor with zero noise is a common source of a
perception or localization stack that "works perfectly in sim" and then
struggles on the real sensor's actual noise floor — pull real numbers from
the target sensor's datasheet, per the sensor-rates-and-frames key directive
above. See references/sensors.md.
Platform gotchas
- GPU vs. software rendering. Camera and
gpu_lidarsensors go through Gazebo's render engine (OGRE2 by default); with a GPU and a display, this just works. Headless or GPU-less, use--headless-rendering(EGL-backed, OGRE2-only) rather than trying to get X11 forwarding working for a render-heavy sim — and if there's no GPU at all, OGRE2 falls back to software rendering, which works but is markedly slower for camera/lidar- heavy worlds. Source:gazebosim.org's Headless Rendering page, fetched directly this session. Seereferences/sensors.md. - Running
gzin Docker. A ROS 2 + Gazebo +ros_gzstack in a container needs the same GPU-passthrough and headless-rendering considerations as any other GPU-using container workload — that setup (--gpus all, the NVIDIA Container Toolkit, choosing headless vs. a forwarded display) is theenvironmentsskill's territory, not duplicated here; see that skill's Docker and GPU/remote guidance, including its example ROS 2 Dockerfile, before building a gz-in-Docker image from scratch. - macOS status.
gz simitself ships native Jetty binaries for macOS via Homebrew (brew install gz-jetty, Ventura/Sonoma — verified via direct fetch ofgazebosim.org's macOS binary-install page this session), so Gazebo alone is not Docker-only the way ROS 2 is. But theros_gzbridge links against ROS 2, and ROS 2 has no native macOS install (see theros2skill's Platform gotchas) — so the full ROS 2 +gz+ bridge stack this skill assumes still needs Docker on a Mac dev machine, even though a gz-only world with no ROS integration could run natively there.
Customization
- Different gz release / ROS 2 distro pairing: swap the install command
and the world/plugin filenames' implicit release assumptions (plugin
filenames like
gz-sim-diff-drive-systemare stable across releases, but package names and binary availability are not) — re-checkreferences/ros2-bridge.md's pairing table against the liveros_gzREADME first; don't assume the Jazzy/Harmonic pairing this skill defaults to still applies once the project moves to a different ROS 2 distro. - Different robot / sensor set: start from
examples/diffdrive-world-snippet.sdf, keep theDiffDriveplugin's<frame_id>/<child_frame_id>(odom/base_link) and the sensors'<topic>names in sync with whatever bridge config you copy alongside it — seereferences/worlds-and-models.mdandreferences/sensors.md. - Different bridge topic set: add or remove entries in
examples/ros-gz-bridge-config.yaml; each entry is independent, but a removedgz_topic_namemust also be removed (or renamed together with) the SDF side that publishes it, per the Usage patterns note above.
References
references/worlds-and-models.md— SDF world/model/link/joint anatomy, default world plugins,<include>/Fuel model references, theDiffDriveplugin's parameters, and spawning withros_gz_sim'screateexecutable.references/sensors.md— IMU, contact, lidar (<lidar>, the current preferred tag over the legacy<ray>alias), and camera sensor tags, the render-engine-backedSensorssystem, and the shared<noise>element.references/ros2-bridge.md—parameter_bridgeCLI syntax, the YAML config-file format (every field), the ROS↔gz message-type table,/clockbridging, andframe_id/override_frame_idoverrides.examples/diffdrive-world-snippet.sdf— a minimal differential-drive robot world with lidar and IMU sensors (status: unverified — file header states the exact upstream sources and the deviations made).examples/ros-gz-bridge-config.yaml— the matching bridge config for the world above; topic names are kept in sync between the two files deliberately (status: unverified — file header states sourcing).- Upstream: Gazebo documentation and
Gazebo releases (both reached
via direct fetch this session), gazebosim/ros_gz
repo (bridge source and
compatibility table, fetched directly this session),
gazebosim/gz-sim (world examples
and system-plugin sources), sdformat
spec (sensor/noise element
definitions). Sibling skills:
ros2(foundation, load alongside),nav2(consumes this skill's bridged topics),simulation(simulator selection),isaac-sim(GPU photorealistic alternative),environments(Docker/GPU/remote setup),architect(routes here).