Skip to content

Guarded move down for surface placement #111

@siddhss5

Description

@siddhss5

Problem

Surface placement (robot.place("worktop"), robot.place("cracker_box")) plans to a pose 5mm above the destination surface, then releases. In physics mode the object drops and settles. In kinematic mode the object floats 5mm above the surface.

Solution

After reaching the clearance pose, execute a guarded move downward before releasing:

Physics mode: Move down until F/T sensor detects contact, then release. The wrist F/T sensors (added in #94) can detect when the held object touches the surface.

Kinematic mode: Move down by the clearance distance (5mm) directly, since there's no F/T feedback. Alternatively, snap the object to the surface pose after release.

Design

The place BT subtree (mj_manipulator/bt/subtrees.py:place()) currently does:

plan_to_tsr → sync → release → sync

For surface placement, it should be:

plan_to_tsr → sync → guarded_move_down → sync → release → sync

This requires GeneratePlaceTSRs to signal whether the placement is a container drop (no guarded move needed) or a surface placement (guarded move needed). Options:

  • Blackboard flag: {ns}/placement_type = "container" or "surface"
  • Geodude-specific place subtree that inserts the guarded move step

The guarded move itself could live in mj_manipulator as a generic GuardedMoveZ BT node that moves the end-effector along -Z until F/T threshold or distance limit.

Follows from

#109 (generalized place)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions