Skip to main content
Use Isaac Lab jobs when your workload needs a custom task package instead of the default simulation submit path.

What Changes Versus A Standard Simulation Job

Standard simulation submit is enough when you are sending a robot asset, a scene asset, and control/task configuration that the platform already understands. Use Isaac Lab jobs when you need to provide your own workload logic:
  • custom task code
  • custom rollout behavior
  • custom artifact production
  • Isaac Lab-specific task packaging
The submit path stays the same, but the payload adds:
  • runtime_profile="isaac_lab_rollout"
  • an isaac_lab block
  • a task package asset uploaded with asset_kind="isaac_lab_task_package"

Required Fields

An Isaac Lab submit must include:
  • runtime_profile="isaac_lab_rollout"
  • isaac_lab.task_module
  • isaac_lab.task_class_or_name
  • isaac_lab.task_package_asset_id or another staged task package reference
Your task package is responsible for writing the expected artifacts for the job.

Minimal SDK Example

import json
from pathlib import Path

import hardsim as hs

client = hs.HardsimClient.from_env()

robot_asset_id = client.upload_input_asset("./assets/franka.usdz", asset_kind="robot")
scene_asset_id = client.upload_input_asset("./assets/table_scene.usdz", asset_kind="scene")
task_package_asset_id = client.upload_input_asset(
    "./dist/my-isaac-lab-task.zip",
    asset_kind="isaac_lab_task_package",
)

job = client.submit_assets(
    robot_asset_id=robot_asset_id,
    scene_asset_id=scene_asset_id,
    robot_asset_type="usd",
    num_envs=1,
    steps=1024,
    physics_dt=0.005,
    substeps=2,
    runtime_profile="isaac_lab_rollout",
    isaac_lab={
        "task_module": "my_workloads.pick_and_lift",
        "task_class_or_name": "TabletopPickTask",
        "task_package_asset_id": task_package_asset_id,
        "task_args": {
            "force_video": True,
            "attach_distance_m": 0.08,
        },
    },
)

result = client.wait(job.job_id, poll_interval_s=2.0, timeout_s=1800.0, raise_on_error=False)
print(job.job_id, result["status"])

Artifact Expectations

For successful Isaac Lab jobs, the task package should produce:
  • rollout.zarr
  • render.mp4 when outputs.video=true
  • any task-specific logs you want customers to inspect
The worker also preserves structured diagnostics artifacts for failed jobs. See Artifacts and Diagnostics for the exact behavior.

What Customers Should Own

Hardsim runs the workload, stages assets, and returns artifacts. The workload author still owns:
  • task logic
  • robot and scene pairing
  • spawn pose and target selection
  • controller behavior
  • success criteria
If an Isaac Lab workload fails because the robot never reaches or grasps the target, that is typically a workload-definition issue, not a platform submit/runtime issue.

Recommendations

  • Start with a minimal task package and a simple workcell first.
  • Add outputs.video=true during bring-up so you can inspect behavior quickly.
  • Download runner.log, user_job.log, and command.stderr.log on failed jobs.
  • Move to complex warehouse scenes only after a simple tabletop workload behaves correctly.