Skip to content

Latest commit

 

History

History
143 lines (121 loc) · 7.17 KB

File metadata and controls

143 lines (121 loc) · 7.17 KB

Tasks

ioailab.tasks is an explicit IsaacLab-style registry of Galbot task IDs. It does not hide IsaacLab env construction, managers, sensors, or env.step(...).

Registered IDs

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)

Component And Coherent Tasks

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})

Scenarios And Options

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

Package Layout

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.