Simulation development framework

FastSim: build simulations without code

UniSim provides a unified abstraction across simulator backends. Define scenes and tasks with config files—iterate faster and reuse more.

Highlights

Multi-level development support

Submit a config file to define the scene and enabled modules; FastSim parses, builds, and validates.

No-code: config-driven simulation
Split into simulation, scene, task, and extension blocks—robots in scene, actions in task, optional HTTP server under extensions.
YAML
yaml
simulation
simulation:
  stereotype: isaaclab
  launch_config:
    device: cuda
    enable_cameras: true
    headless: false
    livestream: 0
  # physics / init knobs supported by the backend …
  dt: 1/120
  intiailize_steps: 30
scene
scene:
  name: lab_pick_place
  position: [0, 0, 0]
  rotation: [1, 0, 0, 0]
  base_config:
    name: ground
    stereotype: ground_plane
    source: primitive
    ground_size: [24, 24]
  object_cfg_dict:
    work_table:
      stereotype: rigid
      source: primitive
      primitive_type: cuboid
      primitive_size: [0.8, 1.2, 0.05]
      position: [0.5, 0.0, 0.4]
      mass: 5e3
    # … more objects / sensors as needed
  robot_cfg_dict:
    franka_panda:
      name: franka_panda
      stereotype: general_robot
      source: local
      asset_path: asset://Franka/franka_panda.usd
      position: [0, 0, 0]
      init_joint_position:
        panda_joint2: -0.52
        panda_joint4: -1.57
      actuator_cfg_dict:
        arm:
          joint_names_expr: ["panda_joint1", "panda_joint2", "…"]
          stiffness: 8000.0
          damping: 800.0
      use_planner: true
      planner_cfg:
        stereotype: curobo
        lazy_init: true
        # …
task
task:
  name: pick_and_place_demo
  description: Pick-and-place style task
  goal_config:
    stereotype: sequential_goals
    # …
  actions:
    - name: open_gripper
      stereotype: release
      robot_name: franka_panda
      ee_type: gripper
    - name: pick_object
      stereotype: pick
      robot_name: franka_panda
      target_name: target_box
      pick_up_distance: 0.05
      ee_type: gripper
      pose_source: local
      pose_data: ./grasp_pose.json
    - name: place_object
      stereotype: place
      robot_name: franka_panda
      target_name: work_table
      pose_frame: world
      ee_type: gripper
    # …
extension
extension:
  extension_cfg_dict:
    session_recorder:
      extension_type: record
      stereotype: record
      enable: true
      # … topics / output paths
    http_api:
      extension_type: server
      stereotype: server
      enable: true
      host: 0.0.0.0
      port: 5000
      debug: false

Unified configuration system

manage and validate simulation elements and features via UI / code / config files.

Management & validation

Manage elements and feature switches with structured validation for consistency and reproducibility.

Ways to use

Support UI, code, and config-file entry points for different workflows and teams.

Coverage & extensibility

From scenes and entities to tasks and extensions—with user-defined configs and registrations.

Global configuration

Project scanning, paths, and asset resolution rules—the foundation for every run.

Simulator configuration

Backend selection, key parameters, and compatibility fields to unify access across simulators.

Scene configuration

Maps/geometry/environment elements and reusable scene templates.

Task behaviors & goals configuration

Task flow, actions/goals, and validation rules for composability and replayability.

Generatable elements configuration

Typed configs generate entities and components (robots, sensors, objects), with extensions and registration.

Planner configuration

Module selection and parameter wiring for planning/control—easy to swap, reuse, and benchmark.

Advanced extension features configuration

Recording/replay, benchmarks, ROS integration, and serviceization—enabled and orchestrated on demand.

User custom configuration

Introduce custom fields and validation via extension points without breaking compatibility over time.

Highly extensible architecture

customize simulators, planners, generated elements, behavior goals and feature modules—with automatic registration.

Extensibility

Registration & automatic assembly

Capabilities register under a shared contract; runtime assembly is driven by configuration so modules evolve independently while staying decoupled from the core simulator and task orchestration.

Registration

Extension types are declared and indexed for discovery and validation. New implementations can coexist with existing ones—better collaboration, compatibility, and safer iteration.

Assembly

After configuration is loaded, instances and dependencies are bound by convention, wiring simulation pipelines, tasks, and extensions into one coherent runtime—with less repetitive manual wiring and integration code.

Extensible integration types

UniSimunisim · unified simulation layer
Basebase · scene base
Objectobject · rigid objects
Lightlight · lighting
Sensorsensor · sensors
Robotrobot · robots
Plannerplanner · motion / task planning
Actionaction · actions
Goalgoal · goals
Extensionextension · extension modules
Observerobserver · observations
Policypolicy · policies

Out-of-the-box advanced capabilities

task execution, Benchmark, data record/replay, ROS communication, visual builder and cloud service—plus RL and teleoperation.

Task execution & evaluation

Run task workflows automatically and evaluate success, performance, and stability.

  • Configurable task pipelines
  • Unified metrics and results
  • Batch benchmarking for comparison

Cross-simulator compatibility

UniSim’s unified abstraction lets the same config and code run across diverse simulation backends.

FastSim upper layer

Scenes, tasks, controllers, and extensions depend only on UniSim’s stable API—decoupled from concrete simulator implementations.

ConfigSceneControllerExtension
UniSim unified layer

Step / reset / spawn / lifecycle: a stable boundary between application logic and backends.

UniSim adapterEach backend implements the same interface via adapters and plugs into the UniSim core.

Simulator backends

Isaac LabNVIDIA
MuJoCoGoogle DeepMind
PyBulletBullet Physics
More backendsDevelopers & community

Get Started

Choose options and copy the install command to match your machine, then run demos or your own scenes.