ros2
Skill1 starsChanged 16 days agoApache-2.0View on GitHub
Use for ROS 2 nodes, launch files, parameters, and message flow that drive or observe an Antioch simulation, including rclpy in the Isaac Sim engine, the Isaac ROS 2 bridge, simulation time, tf2, QoS and discovery, Nav2, MoveIt 2, and ros2_control, on Jazzy or another distro in a ROS service image. Service routes belong to antioch-platform and scene code to isaac-sim-6.
2 other projects use a version of this.
Adopted by
Most recently taken up by
- jewel-nath/agentic-roboticstheir own version, first seen Nov 1, 2026
- robium-ai/robiumtheir own version, first seen Aug 7, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- robium-ai/robium★ 93same name
- jewel-nath/agentic-robotics★ 3same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- agentic-simulationSkill
- antioch-platformSkill
- antioch-researchSkill
- isaac-lab-3Skill
- isaac-sim-6Skill
- scenario-designSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 0 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 65
Import rclpy and message modules inside functions, like simulator imports, so project modules import where no ROS is installed.
- Very specific: line 70
Never block the thread that steps the simulator: rclpy.spin() there stops physics, /clock, and every bridge publisher.
- Very specific: line 145
Use research for exact APIs and parameters.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ROS 2 on Antioch
Isaac Sim 6.0.1 bundles ROS 2 Jazzy (Ubuntu 24.04, Python 3.12), so
everything inside the simulator is Jazzy: the bridge, rclpy, and the
message packages. ROS service images next to it can run another
distribution; distributions covers what that costs. Load
Isaac Sim for scene code and
Antioch platform for services and sessions;
its ROS 2 guide owns discovery and
routes between services.
The references adapt community and NVIDIA guidance to this runtime; each names its upstream source. Concepts apply to every ROS 2 distribution; facts marked Jazzy are checked against Jazzy only.
Where ROS runs
| Place | What it has | Use it for |
| Engine service | In-process Jazzy Python bundled with Isaac, the Isaac bridge extensions, ROS_DISTRO=jazzy, RMW_IMPLEMENTATION=rmw_fastrtps_cpp | Bridge graphs, sim-side nodes, scenario checks that read or publish topics |
| ROS service image | FROM ros:jazzy (or another distro) pinned by digest, apt ros-<distro>-* packages, built workspaces, C++ | Nav2, MoveIt 2, ros2_control, robot_state_publisher, bags, custom interfaces |
The Jazzy engine carries rclpy, tf2_ros (Python), launch/launch_ros,
message_filters, nav2_simple_commander, sensor_msgs_py, and common
interfaces: std, geometry, sensor, nav, trajectory, tf2,
visualization, vision, diagnostic, ackermann, nav2_msgs, and
simulation_interfaces. Its ros2 command has the topic, node, pkg,
run, and doctor verbs but not service, param, action, interface,
launch, bag, or control. It has no moveit_msgs, control_msgs,
tf2_geometry_msgs, rosbag2, tf2_tools, colcon, or compiler: use those
from a ROS service image. A custom interface the engine must load needs type
support built for its bundled Jazzy and Python 3.12; otherwise keep the node
that uses it in the ROS image.
Exec and health checks skip image entrypoints, so source ROS in the command:
antioch service exec --service planner -- bash -lc 'source /opt/ros/$ROS_DISTRO/setup.bash && ros2 topic list'Distributions
Mixing distributions in one graph is officially unsupported. A Humble service talking to the Jazzy engine often works for common message types over Fast DDS, but test the exact topics, services, and actions in both directions before relying on it. Prefer Jazzy for new service images. Check an API against the documentation of the distribution the service image runs, and say which one you used.
| Humble | Jazzy | Kilted | |
| Support | LTS to May 2027 | LTS to May 2029 | Non-LTS |
Nav2 cmd_vel | Twist | Twist; TwistStamped with enable_stamped_cmd_vel | TwistStamped by default |
| Nav2 behavior trees | BehaviorTree.CPP 3 | BehaviorTree.CPP 4, BTCPP_format="4" | BehaviorTree.CPP 4 |
| MoveIt 2 documentation | Its own humble tree | Rolling tree only | Rolling tree only |
Python inside the engine
Import rclpy and message modules inside functions, like simulator imports,
so project modules import where no ROS is installed. The bridge keeps its
own context; initialize rclpy once per process and check rclpy.ok()
first, which matters in a Jupyter kernel that reruns a cell.
Never block the thread that steps the simulator: rclpy.spin() there stops
physics, /clock, and every bridge publisher. Spin once per step, or run an
executor on a daemon thread:
def wait_for_scan(steps: int = 600) -> int:
import antioch
import rclpy
from rclpy.qos import qos_profile_sensor_data
from sensor_msgs.msg import LaserScan
if not rclpy.ok():
rclpy.init()
node = rclpy.create_node("scan_check")
scans: list[LaserScan] = []
node.create_subscription(LaserScan, "scan", scans.append, qos_profile_sensor_data)
world = antioch.world()
try:
for _ in range(steps):
world.step(render=True)
# spin_once runs at most one ready callback; drain a few per step
for _ in range(4):
rclpy.spin_once(node, timeout_sec=0.0)
if scans:
break
finally:
node.destroy_node()
return len(scans)A client that waits on the ROS graph, such as BasicNavigator or a TF
lookup with a timeout, deadlocks or times out when its wait needs data the
same thread would produce by stepping. Give it its own thread, or poll
without waiting between steps. A scenario that hangs with simulation time
frozen usually has a blocked stepping thread; a daemon watchdog thread that
logs simulation time and message counts every few seconds shows it before
the run's timeout does.
Time, frames, and conventions
- Publish
/clockfrom simulation time and setuse_sim_time: trueon every node that consumes simulated data. Timers and durations on a sim-time node advance only while the simulation plays. - REP 103: meters, radians, SI units;
xforward,yleft,zup. REP 105:map→odom→base_link, and each transform has exactly one publisher. - Message quaternions are fields named
x, y, z, w. Isaac core APIs return WXYZ arrays, and OmniGraphquatdinputs are XYZW. Convert once at the boundary. - A ROS camera optical frame looks along
+Zwith+Ydown; a USD camera looks along-Zwith+Yup.
tf2 and time covers lookups, static and dynamic broadcasters, and the errors they raise.
Evidence
A topic in ros2 topic list is not data flow. Check the publisher and
subscriber QoS with ros2 topic info -v, the rate with ros2 topic hz, and a
message's frame, stamp, and values. Check that /clock advances and that the
TF chain the consumer needs resolves at the message stamp. For navigation or
manipulation, measure the robot's simulated motion against the goal; an
accepted goal or a SUCCEEDED result is not proof that the robot arrived.
Record these as scenario checks through
scenario design.
References
| Task | Guide |
| Bridge graphs, sensors, clock, TF, odometry, simulation-control services | Isaac ROS 2 bridge |
Frames, tf2 lookups, sim time, URDF and robot_state_publisher | tf2 and time |
| Nodes, executors, QoS, discovery failures, launch | Nodes and QoS |
| Nav2 bringup, costmaps, localization, the simple commander | Nav2 |
| MoveIt 2, ros2_control, topic-based hardware | MoveIt 2 and ros2_control |
Use research for exact APIs and parameters.
research_versions shows which ROS corpora are live: ros2-docs,
ros2-api, rclpy-source, nav2-docs, ros2-control-docs, and
moveit2-docs. The docs corpora are Jazzy except MoveIt's, which tracks
Rolling. rclpy-source holds rclpy 7.1.12's docstrings, because
docs.ros.org renders Jazzy's rclpy API pages for nodes, parameters, and
modules empty. For another distribution, or when a corpus is missing, read
that distribution's versioned page at docs.ros.org, docs.nav2.org, or
control.ros.org, and say which you used.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

