occupancy-map

Generate ROS-compatible occupancy maps from USD scenes for robot navigation.

4.0k|530|Updated May 28, 2025
One-click install
npx skills add https://github.com/isaac-sim/IsaacSim --skill occupancy-map
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: occupancy-map
Source: https://github.com/isaac-sim/IsaacSim/tree/main/skills/occupancy-map
Command: npx skills add https://github.com/isaac-sim/IsaacSim --skill occupancy-map

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires numpy, scipy, pillow, pyyaml.

What problem does it solve?

Converting a USD warehouse or facility scene into a 2D occupancy grid that ROS navigation stacks can consume is error-prone: you must decide which prims count as obstacles, filter by height, apply robot-radius buffers, and export the correct PNG/YAML pair. This Skill codifies that entire pipeline.

Core Features & Use Cases

  • PhysX-based generation: Use the documented isaacsim.asset.gen.omap extension via GUI or Python bindings to raycast collision geometry into an occupancy grid.
  • Direct USD projection fallback: Traverse USD prims, project XY footprints onto a 2D grid with height filtering, apply dilation buffers with scipy, and export ROS-standard PNG/YAML maps.
  • Path planning integration: Load maps into the MobilityGen OccupancyMap class for A* planning, Nav2 setup, and AMR fleet validation.
  • Use Case: You have a 220x180m warehouse USD stage and need a 0.1m/px occupancy map with a 0.5m robot buffer to validate AMR routes in Nav2 before deployment.

Quick Start

Generate a ROS-compatible occupancy map from my USD warehouse scene at 0.1 meter resolution with a 0.5 meter robot buffer.

Frequently Asked Questions about occupancy-map

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I generate an occupancy map from a USD scene in Isaac Sim?

Use the isaacsim.asset.gen.omap extension via Tools > Robotics > Occupancy Map in the GUI, or call the _omap.Generator Python bindings with cell size, bounds, and origin settings. The simulation timeline must be playing for PhysX raycasts to work.

How to create a ROS occupancy map without physics colliders?

Use the direct USD projection fallback: traverse all Gprims with UsdGeom.BBoxCache, project XY footprints onto a numpy grid, filter by height band (0.05-2.0m), then export PNG and YAML in ROS map_server format.

What resolution should I use for robot navigation occupancy maps?

Use 0.5m/px for coarse planning, 0.1m/px for standard navigation, and 0.05m/px for fine perception tasks. A 220x180m facility at 0.1m/px produces a 2200x1800 grid.

Why is my occupancy map empty when using the Isaac Sim extension?

The omap extension relies on PhysX collision geometry, so every prim must have Collisions Enabled and the timeline must be playing. Also verify the Start origin point is not inside occupied space.

How do I add a robot radius buffer to an occupancy grid?

Apply scipy.ndimage.binary_dilation to the occupied cells with a circular kernel sized to the robot radius divided by map resolution. A 0.5m robot at 0.1m/px needs a 5-pixel radius kernel.

Can I use occupancy maps with Nav2 and A* path planning?

Yes, export the standard PNG plus YAML with resolution, origin, and thresholds, then load it in Nav2 or via isaacsim.replicator.mobility_gen OccupancyMap.from_ros_yaml for A* planning and spawn placement.