reconstructing-collision-worlds
Run once after perception and before grasping, with the same observation
the perception skills used. build_collision_world merges depth from the
selected views (camera_names, comma-separated; empty = all) into
alpha-shape meshes through geometry.build_world_config and returns a
WorldConfig plus the mesh names.
What is excluded
- The grasp target by its perceived
target_maskinmask_camera_name(defaultoverhead), and by segmentingtarget_descriptionin every other selected view so the object does not become a static obstacle where it later rotates in the hand. - The robot, by text segmentation per view and by
motion.get_robot_collision_sphereswhen the connector provides it (a connector without it falls back to the visual masks). - A perceived
fixture_maskfrom the mask camera, unless it is a full-frame placeholder that would erase the world.
What is carved
- An approach tube of 55 mm radius along
outward_sign * fixture_axisending 12 mm behindfixture_tip, when both are given. Useoutward_sign: -1for an axis that points into the fixture (an aperture's inward axis) and1for one that points toward its free side (a shaft). - A vertical corridor of
corridor_radiusthroughcorridor_centerbetweencorridor_rim_z - 35 mmand+180 mm, when the centre and a positive radius are given. The radius is the caller's measurement (for example a fraction of the perceived aperture radius); the script adds no margin.
Cleaning and packing
Sparse, nearly zero-thickness sheets under 15 cm are dropped; components
lying entirely below sheet_floor_z or spanning more than
sheet_max_extent_m are invalid-depth returns and are dropped too (0
disables either gate). voxel_size trades surface ripple for detail.
pack_meshes: true folds every component into one perceived_scene mesh
for planners whose scene cache admits few named obstacles.
Boundaries
- No simulator state, CAD model, or fixed world coordinate is read.
- The script raises when no mesh survives; the graph routes that to
failed.