Skill Library#
FGManip provides a curated library of reusable, composable skills that form the building blocks of fine-grained manipulation. Unlike monolithic policies trained for narrow tasks, these skills are designed as atomic primitives that can be combined and sequenced to accomplish complex, part-oriented manipulation across diverse objects and environments. Each skill is implemented to operate on parts—the functional components of objects—enabling transfer across object instances and supporting scalable robot learning. Below is the complete set of skills in the library.
Overview#
All skills in the library:
… The library is flexibly extensible.
Grasp Part#
Grasp Part
Skill Description: Grasp Part enables the robot to grasp a specified part of an object. The part must be pre-annotated in the object’s grasp_poses.json.
Environment: grasp_part (in FGManip/core/env.py)
Key Parameters:
object_name (str): Object to grasp. Must match a folder under
assets/. Examples:cabinet,bottle. Default:cabinetpart_name (str): Part to grasp. Must exist in
assets/{object_name}/grasp_poses.jsonundergrasp_parts. Examples: cabinet →up_handle,low_handle; bottle →cap. Supports fuzzy match. Default:handlerobot_uids (str): Robot model. Default:
panda_wristcamrobot_init_qpos_noise (float): Std of initial joint position noise. Default:
0.02
Data Requirements: Each object needs grasp_poses.json with grasp_parts (per-part grasp matrices). Optional model_data.json for scale and init pose.
Examples:
object_name=bottle, part_name=body
object_name=bottle, part_name=cap
Toggle Part#
Toggle Part
Skill Description: Toggle Part enables the robot to press or flip a toggle part (e.g. button, switch) on an object to change its state.
Environment: toggle_switch
Key Parameters:
object_name (str): Object with the toggle part. Default:
switchpart_name (str): The toggle part to press. Default:
buttonrobot_uids (str): Robot model. Default:
panda_wristcamrobot_init_qpos_noise (float): Std of initial joint position noise. Default:
0.02
Examples:
object_name=switch, part_name=button
object_name=switch, part_name=button
Press Part#
Press Part
Skill Description: Press Part enables the robot to press a specified part of an object to trigger an action or state change (e.g. buttons, keys).
Environment: press_part
Key Parameters:
object_name (str): Object with the pressable part. Default:
switchpart_name (str): The part to press. Default:
buttonrobot_uids (str): Robot model. Default:
panda_wristcamrobot_init_qpos_noise (float): Std of initial joint position noise. Default:
0.02
Examples:
object_name=switch, part_name=button
object_name=switch, part_name=button
Rotate along#
Rotate along
Skill Description: Rotate along enables the robot to rotate a specified part of an object about an axis (e.g. knobs, lids, valve handles).
Environment: rotate_along
Key Parameters:
object_name (str): Object with the rotatable part.
part_name (str): The part to rotate (e.g. lid, knob).
robot_uids (str): Robot model. Default:
panda_wristcamrobot_init_qpos_noise (float): Std of initial joint position noise. Default:
0.02
Examples:
object_name=coffee_machine, part_name=lid
object_name=coffee_machine, part_name=lid
Flip#
Flip
Skill Description: Flip enables the robot to flip or stand up an object or part (e.g. upright a fallen bottle).
Environment: flip
Key Parameters:
object_name (str): Object to flip. Default:
bottlepart_name (str): The part to flip. Default:
bodyrobot_uids (str): Robot model. Default:
panda_wristcamrobot_init_qpos_noise (float): Std of initial joint position noise. Default:
0.02
Examples:
object_name=bottle, part_name=body
Slide along#
Slide along
Skill Description: Slide along enables the robot to slide a specified part of an object along a trajectory or axis (e.g. drawers, cabinet doors).
Environment: slide_along
Key Parameters:
object_name (str): Object with the slidable part. Default:
cabinetpart_name (str): The part to slide (e.g. handle, drawer). Default:
handlerobot_uids (str): Robot model. Default:
panda_wristcamrobot_init_qpos_noise (float): Std of initial joint position noise. Default:
0.02
Examples:
object_name=cabinet, part_name=handle
object_name=cabinet, part_name=handle
Insert#
Insert
Skill Description: Insert enables the robot to insert a part into a receptacle (e.g. peg-in-hole, plug-in-socket). Different insertion tasks use task-specific environments that share the same skill abstraction.
Environments: insert_peg, insert_charger (and other task-specific variants)
Key Parameters:
object_name (str): Object or part to insert; varies by env.
part_name (str): Target receptacle or alignment part; varies by env.
robot_uids (str): Robot model. Default:
panda_wristcamrobot_init_qpos_noise (float): Std of initial joint position noise. Default:
0.02
Examples:
insert_charger
insert_peg
Open Hinge#
Open Hinge
Skill Description: Open Hinge enables the robot to open a hinged part of an object (e.g. lids, cabinet doors).
Environment: open_hinge
Key Parameters:
object_name (str): Object with the hinged part. Default:
cabinetpart_name (str): The hinged part to open (e.g. lid, door). Default:
lidrobot_uids (str): Robot model. Default:
panda_wristcamrobot_init_qpos_noise (float): Std of initial joint position noise. Default:
0.02
Examples:
object_name=cabinet, part_name=lid
Multi-Skill#
Multi-Skill
Skill Description: Multi-Skill composes multiple atomic skills (e.g. Grasp Part, Slide along) to accomplish complex tasks. Tasks are task-specific and need not map to a single fixed environment. Multi-skill tasks can be long-horizon, requiring sequential execution of several primitives.
Examples:
Stack cube
Grasp the handle of the pot and move to right