Skip to content

Generation Config

generation_config controls the generation process. GenManip primarily supports pick-and-place tasks; earlier descriptions apply here as well. Below are more advanced options.

goal is a nested list:

  • Outer list = logical OR
  • Inner list = logical AND

Examples:

  • [[{banana → left of plate}], [{banana → right of plate}]] → banana can be left or right.
  • [[{banana → left of plate}, {cup → right of plate}]] → banana and cup must be placed.

Each goal entry includes obj1_uid, obj2_uid, and position. Grasp poses normally come from AnyGrasp.

goal also supports a three-level list for sampling between entirely separate task definitions (useful when you want multiple distinct tasks in the same config). This is not equivalent to placing multiple goals in one inner list (AND vs separate tasks).

Example extended goal:

obj1_uid:
- 'bread4'
obj2_uid:
- 'beef'
position:
- top
fixed_position: true
fixed_position_config:
translation: [0.0, 0.02, -0.01]
orientation: [0.924, -0.383, 0.0, 0.0]
force_fixed_grasp: true
fixed_grasp_config:
translation: [0.0, 0.0, -0.03]
allow_fixed_grasp: true
mesh_top_only: true
ignored_uid:
- 'plate'
- 'bread2'
arm: auto
motion_config:
pre_grasp_distance: 0.08
post_grasp_distance: 0.16
pre_place_distance: null
post_place_distance: 0.08

GenManip generates pick-and-place trajectories by computing grasp/place poses and deriving four auxiliary poses: pre_grasp, post_grasp, pre_place, post_place. Those are obtained by translating the grasp/place poses along the gripper approach vector. Default distances: pre_grasp=0.08, post_grasp=0.16, pre_place=0.16, post_place=0.08 meters. Interpolation between these poses yields the executed motion.

  • allow_fixed_grasp (bool): allow using a fixed (computed) grasp pose if AnyGrasp is unavailable.

  • force_fixed_grasp (bool): always use fixed grasp pose. The fixed grasp is computed from the mesh top and gripper orientation.

  • fixed_grasp_config: dict to specify relative translation/orientation for the fixed grasp:

    fixed_grasp_config:
    translation: [0.0, 0.0, -0.03] # relative translation
    orientation: [0.924, -0.383, 0.0, 0.0] # absolute orientation, quaternion wxyz
  • fixed_position (bool): fix the placement position (default: center of container, object bottom aligned with container rim).

  • fixed_position_config: override translation/orientation for the fixed placement:

    fixed_position_config:
    translation: [0.0, 0.02, -0.01] # relative translation
    orientation: [0.924, -0.383, 0.0, 0.0] # absolute orientation, quaternion wxyz
  • ignored_uid: list of UIDs to ignore when computing collisions for placement (useful for stacking scenarios).

  • mesh_top_only: if true, only use the mesh top points to compute grasp pose; otherwise use the cropped mesh of the placement region (default uses entire crop).

  • arm: "auto" | "left" | "right" — choose arm for dual-arm setups; auto picks the closest arm to the grasp pose.
  • motion_config: controls pre_grasp_distance, post_grasp_distance, pre_place_distance, post_place_distance. null values skip the corresponding motion primitive.

Example:

motion_config:
pre_grasp_distance: 0.08
post_grasp_distance: 0.16
pre_place_distance: null
post_place_distance: 0.08
  • Action Path: usually mode: auto and robot: 0, GenManip infers the action sequence from the goal.
  • planner: currently curobo is the default (previously mplib existed but curobo yields better results experimentally). Best to leave planner as default.