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 basics
Section titled “Goal basics”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).
Extended Goal example
Section titled “Extended Goal example”Example extended goal:
obj1_uid:- 'bread4'obj2_uid:- 'beef'position:- topfixed_position: truefixed_position_config: translation: [0.0, 0.02, -0.01] orientation: [0.924, -0.383, 0.0, 0.0]force_fixed_grasp: truefixed_grasp_config: translation: [0.0, 0.0, -0.03]allow_fixed_grasp: truemesh_top_only: trueignored_uid:- 'plate'- 'bread2'arm: automotion_config: pre_grasp_distance: 0.08 post_grasp_distance: 0.16 pre_place_distance: null post_place_distance: 0.08Trajectory primitives
Section titled “Trajectory primitives”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.
Fixed grasp / fixed placement
Section titled “Fixed grasp / fixed placement”-
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 translationorientation: [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 translationorientation: [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).
Other generation options
Section titled “Other generation options”arm:"auto" | "left" | "right"— choose arm for dual-arm setups;autopicks the closest arm to the grasp pose.motion_config: controlspre_grasp_distance,post_grasp_distance,pre_place_distance,post_place_distance.nullvalues 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.08Action Path & Planner
Section titled “Action Path & Planner”- Action Path: usually
mode: autoandrobot: 0, GenManip infers the action sequence from the goal. - planner: currently
curobois the default (previouslymplibexisted but curobo yields better results experimentally). Best to leave planner as default.