Goal
Enable real-to-sim-to-real workflows where the interface between real and sim is the high-level parameterized-skill language (ParameterizedSkillReference), with sim and real each having their own skill implementations under shared names (e.g., sim Pick uses waypoints, real Pick uses visual servoing).
What already exists
KinDERParameterizedSkillEnv (kinder-models/src/kinder_models/utils.py) — wraps an ObjectCentricKinDEREnv so the action space is ParameterizedSkillReference(name, objects, params). Tested.
LiftedParameterizedController / GroundParameterizedController / ParameterizedController in bilevel_planning.structs — the controller interface skill implementations satisfy.
- Concrete sim skill implementations per env in
kinder-models (e.g., GroundPickController in dynamic2d/dyn_obstruction2d/parameterized_skills.py).
What's missing for the vision
-
Backend-agnostic SkillEnv. KinDERParameterizedSkillEnv hardcodes sim: ObjectCentricKinDEREnv. The wrapper body only uses reset / step / render / observation_space, so loosening to gymnasium.Env (or extracting a base class) unlocks using the same wrapper around a real env.
-
One skill name, multiple implementations. Pattern: LiftedParameterizedController(name="Pick", controller_cls=SimPickController, ...) and LiftedParameterizedController(name="Pick", controller_cls=RealPickController, ...). The agent emits ParameterizedSkillReference("Pick", ...); the surrounding SkillEnv is constructed with whichever implementation set matches its backend. A Skill registry (name -> {backend: controller_cls}) is a nice-to-have but not required day-one.
-
At least one real implementation of a skill (e.g., a visual-servoing Pick) that operates on TidyBotObservation and emits real actions. This is the actual research work; the rest is scaffolding.
Concrete tasks
Depends on
Out of scope
- Perceiver in the agent loop (only needed if the agent reasons over
ObjectCentricState between skill calls — additive, defer).
Goal
Enable real-to-sim-to-real workflows where the interface between real and sim is the high-level parameterized-skill language (
ParameterizedSkillReference), with sim and real each having their own skill implementations under shared names (e.g., simPickuses waypoints, realPickuses visual servoing).What already exists
KinDERParameterizedSkillEnv(kinder-models/src/kinder_models/utils.py) — wraps anObjectCentricKinDEREnvso the action space isParameterizedSkillReference(name, objects, params). Tested.LiftedParameterizedController/GroundParameterizedController/ParameterizedControllerinbilevel_planning.structs— the controller interface skill implementations satisfy.kinder-models(e.g.,GroundPickControllerindynamic2d/dyn_obstruction2d/parameterized_skills.py).What's missing for the vision
Backend-agnostic SkillEnv.
KinDERParameterizedSkillEnvhardcodessim: ObjectCentricKinDEREnv. The wrapper body only usesreset/step/render/observation_space, so loosening togymnasium.Env(or extracting a base class) unlocks using the same wrapper around a real env.One skill name, multiple implementations. Pattern:
LiftedParameterizedController(name="Pick", controller_cls=SimPickController, ...)andLiftedParameterizedController(name="Pick", controller_cls=RealPickController, ...). The agent emitsParameterizedSkillReference("Pick", ...); the surroundingSkillEnvis constructed with whichever implementation set matches its backend. ASkillregistry (name -> {backend: controller_cls}) is a nice-to-have but not required day-one.At least one real implementation of a skill (e.g., a visual-servoing
Pick) that operates onTidyBotObservationand emits real actions. This is the actual research work; the rest is scaffolding.Concrete tasks
SkillEnvlives. Candidates:bilevel-planning/src/bilevel_planning/skill_env.py(natural home for skill machinery; depends onprpl_utilsalready), or keep it inkinder-modelsand just drop the type bound. Leaning towardbilevel-planning.ParameterizedSkillEnv(parent ofKinDERParameterizedSkillEnvor replacement).Pickcontroller as the first concrete real skill (or whatever skill is most useful to start with).ParameterizedSkillEnv(real_tidybot_env, real_skills)and run aParameterizedSkillReference("Pick", ...)on hardware.Depends on
Out of scope
ObjectCentricStatebetween skill calls — additive, defer).