ioailab.tasks is an explicit IsaacLab-style registry of Galbot task IDs. It
does not hide IsaacLab env construction, managers, sensors, or env.step(...).
| Task ID | Purpose |
|---|---|
GalbotG1-Reach-v0 |
Left-arm reaching |
GalbotG1-PickCube-v0 |
Left-arm pick-cube motion-planning task |
GalbotG1-PickCube-Teleop-v0 |
GP001 left-wrist/front-head RGB collection |
GalbotG1-PickCube-Mimic-v0 |
Mimic augmentation env for PickCube |
GalbotG1-StackCube-v0 |
Left-arm stack-cube |
GalbotG1-BaseNav-v0 |
Mobile-base navigation |
GalbotG1-PickToShelf-v0 |
Coherent pick -> nav -> place task |
GalbotG1-PickToShelf-Pick-v0 |
PickToShelf pick component task |
GalbotG1-PickToShelf-Nav-v0 |
PickToShelf nav component task |
GalbotG1-PickToShelf-Place-v0 |
PickToShelf place component task |
GalbotG1-SortToShelf-v0 |
Coherent object sorting task |
GalbotG1-SortToShelf-Pick-v0 |
SortToShelf pick component task |
GalbotG1-SortToShelf-Nav-v0 |
SortToShelf nav component task |
GalbotG1-SortToShelf-Place-v0 |
SortToShelf place component task |
GalbotG1-IOAISimScene-v0 |
Coherent one-shot IOAI Pick → Nav → Place task for nine non-cocoa products |
GalbotG1-IOAISimScene-Pick-v0 |
IOAI supermarket Pick phase with fixed A zones and sampled B zones |
GalbotG1-IOAISimScene-Nav-v0 |
Scenario-backed IOAI navigation to the runtime Place base and leg posture |
GalbotG1-IOAISimScene-Place-v0 |
IOAI Place phase; standalone hard-coded grasp reset is disabled |
Create any registered task with make_env(...):
from ioailab.envs import make_env
env = make_env("GalbotG1-PickCube-v0", num_envs=1)PickToShelf, SortToShelf, and the coherent IOAI task use the same structure:
component tasks -> independent Pick/Nav/Place task IDs
coherent task -> one continuous full-task env
agent -> TaskFlowAgent dispatches phase agents by row phase
The coherent task does not rebuild envs, load external scene-state files, or
reset between phases. IOAI additionally preserves the selected-product runtime
state, product root pose, and gripper joints across Pick→Nav→Place. It runs the
full episode continuously. Component tasks are for standalone collection,
debugging, training, and evaluation.
The IOAI scene resolves its active table through the stable
assets/ioai_assets/table/folding_table asset path; the current asset is the
white plastic folding table, while the previous black table is retained at the
adjacent folding_table_backup path for local recovery. The active white table
uses a z-only scale of 1.156 so its 0.778 m source height matches the previous
tabletop height of 0.899368 m without changing its footprint.
The IOAI carpet visual and collision floor is one 100 m x 100 m global asset,
which leaves ample margin for at least 32 environments at the task's 4 m spacing.
Half-open booth walls remain under each environment namespace, so multi-env runs
do not clone overlapping floor collision meshes or coplanar visuals. Its carpet
texture repeats every 4 m instead of every 1 m, keeping the distant floor from
looking excessively dense.
The booth's four perimeter walls preserve their inner collision boundary and
extend 5 cm outward, so the thicker visual enclosure does not reduce usable
space inside each environment. Their outer faces and top caps overlap at the
corners to close the enclosure without lengthening the inner wall faces.
The exposed thickness surfaces use the texture's dominant teal background
color as a texture-free material, so white artwork cannot appear on them.
The multi-product policy baseline keeps its cycle in
examples/policy_baseline/04_eval_ioai_policy_pipeline.py, not in
TaskFlowAgent. examples/generate_ioai_table_layout.py first writes an
explicit five-slot table-layout YAML. The root task uses that file to fix B1/B2
identity while retaining within-slot pose randomization, then saves the usual
immutable runtime snapshot. For each non-cocoa product, the policy-baseline
evaluator provides YAML-routed Pick and Place phase_agents to
TaskFlowAgent; Nav remains task-owned. An outer sequence handles Return and product activation.
Root task option defer_success_termination=True keeps the same physical
episode alive after each Place success. Product attempts are monitored
independently: sustained drops and phase-budget timeouts end only the current
product, then the same physical Return sequence continues the remaining work
order. The baseline reports a 5/5/5 phase matrix plus a 5-point completion bonus
per product (100 points for all five items).
Cocoa completes its product attempt after it was held, released, and satisfies
the strict black-tray geometry; the outer Return sequence then restores the
robot posture.
The final B2 Pepsichips Pick uses the standalone Pick task's post_cocoa
context for data collection and evaluation, matching the physical pipeline
state where Cocoa remains upright in the black tray.
Override phase agents without changing the task:
from ioailab.agents import TaskFlowAgent
env = make_env("GalbotG1-PickToShelf-v0", num_envs=4)
agent = TaskFlowAgent.from_env(env, agents={"nav": custom_nav_agent})Nav and Place component starts use task-owned scenario YAML files under
config/g1/scenarios/. Capture a final state with
examples/06_collect_component_task.py --save-end-scenario ..., then load it
with --init-scenario ... when intentionally replaying a standalone start.
Standalone IOAI Nav requires a successful Pick terminal Scenario and the same
non-cocoa pick_product. Standalone IOAI Place requires the Nav→Place Scenario
saved by examples/policy_baseline/03_collect_ioai_sim_scene.py; it restores the real robot,
gripper, and product state instead of reconstructing a calibrated grasp. Each
reset then perturbs only the selected product by +/-5 mm along the active
gripper local z-axis, preserving its Scenario orientation and the gripper state.
The Place task option record_rgb=False, exposed by
examples/policy_baseline/02_collect_ioai_place.py --no-rgb, removes front_head_rgb from
recorded HDF5 observations without changing the default RGB-enabled task.
The Pick task supports the same option through
examples/policy_baseline/01_collect_ioai_pick.py --no-rgb; use a distinct dataset path such
as <product>_no_rgb.hdf5 because repeated collection appends to an existing
HDF5 file.
SortToShelf selects the object through task_options={"sorting_object": ...} or
the example flag --sorting-object. Valid values are:
red_cube
blue_cuboid
yellow_cylinder
green_cylinder
Each task package owns its task IDs, scene cfg, config/<robot>/env_cfg.py, MDP
terms, registration metadata, optional task agents, and optional motion plans.
Shared world geometry can live in task-local scene.py; robot-specific
bindings, sensors, reset posture, and actions live under config/<robot>/.
Robot-specific agent recipes live under
ioailab.tasks.<task>.config.g1.agent_cfg.
There are no top-level scene modules or make_*_cfg scene factories. To author
a task, copy an existing package such as ioailab.tasks.pick_cube and follow
the Tutorial.