Place an object
Placing is the mirror image of picking, but with a different failure mode: releasing the object is the moment you lose control of it. A placement that lets go too early drops the object; one that descends too far jams it into the surface. This guide walks through a four-step placement that controls those two failure modes: move to a pre-place pose, descend to the placement surface, release, and retreat straight up so you do not disturb what you just set down.
Prerequisites
- Object already grasped (see Pick an Object)
- Placement location known in world coordinates
Steps
1. Move to pre-place position
# Pre-place: above the target location
pre_place = PoseInFrame(
reference_frame="world",
pose=Pose(
x=500, y=0, z=200,
o_x=0, o_y=0, o_z=-1, theta=0
)
)
await motion_service.move(
component_name="my-arm",
destination=pre_place,
world_state=world_state
)
2. Descend to the placement surface
The descent pose puts the object where you want it to end up.
SURFACE_HEIGHT is the world-frame z of the placement surface plus half the
object’s height (roughly: you want the bottom of the object touching the
surface at release). For a known surface, measure once and hard-code it. For
a detected surface, set it from the vision result.
# Place: at the surface.
# Set z to the height of the placement surface in your workspace.
# For example, if you detected the target location, use its z coordinate.
SURFACE_HEIGHT = 50 # mm, adjust for your setup
place_pose = PoseInFrame(
reference_frame="world",
pose=Pose(
x=500, y=0, z=SURFACE_HEIGHT,
o_x=0, o_y=0, o_z=-1, theta=0
)
)
await motion_service.move(
component_name="my-arm",
destination=place_pose,
world_state=world_state
)
3. Release and retreat
# Open gripper to release
await gripper.open()
print("Object placed")
# Retreat: lift straight up
retreat_pose = PoseInFrame(
reference_frame="world",
pose=Pose(
x=500, y=0, z=200,
o_x=0, o_y=0, o_z=-1, theta=0
)
)
await motion_service.move(
component_name="my-arm",
destination=retreat_pose,
world_state=world_state
)
print("Retreated from placement")
Tips
- Keep the object level on the way down. A carried object with an open
top (a cup, an open box) spills if the gripper tilts during descent. Add an
OrientationConstraintwith a tight tolerance (3-5 degrees) for the descent segment; remove it for the retreat. - Retreat straight up. Any lateral motion during retreat can catch the object the gripper just released. Plan the retreat pose with the same x and y as the place pose and only the z raised.
- Update
WorldStateafter release. The placed object is now a static obstacle. If the next motion passes near the placement location, add the object’s footprint toWorldState.obstaclesso the planner routes around it.
What’s next
- Pick an Object: the pick half of the pick-and-place workflow.
- Monitor a running plan: track plan status during execution.
Was this page helpful?
Glad to hear it! If you have any other feedback please let us know:
We're sorry about that. To help us improve, please tell us what we can do better:
Thank you!