# Executing Held Object Motion

> Executes an ordered, collision-aware pose sequence for an already-grasped rigid object without releasing it - the escape from support, clear-space rotation, fixture transit and orientation-locked local legs of a carry plan, or only the free-space approach waypoint of a placement plan. Use when a held object must be carried or reoriented before insertion, mating, packing, or sorting, and use executing-feature-mating afterwards for the engagement and release.

- Skill: `graph-robots/executing-held-object-motion` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add graph-robots/executing-held-object-motion`
- Raw SKILL.md: https://api.skillmd.com/api/skills/graph-robots/executing-held-object-motion/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: graph-robots (https://skillmd.com/u/graph-robots)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/graph-robots/executing-held-object-motion

---


# executing-held-object-motion

Execute motion for a rigid object that is already held. The skill preserves the
grasp: it does not open or close the gripper. Its input is an ordered
`PoseSequence` containing clearance, transit, and orientation poses.

## When to use

- Stand an elongated object upright before putting it through an opening.
- Turn a tool from a table grasp into a hanging or fixture-mating orientation.
- Align a keyed object before insertion.
- Reorient an item before constrained packing or sorting.
- Reach only the approach pose of a placement plan so the held object can be
  re-observed (wrist re-registration) before a tight engagement.

Do not use it for an ordinary bin drop when `transporting-objects` can lift,
translate, descend, and release directly.

## Recommended subgraphs

```text
execute_reorientation -> reoriented
execute_approach_only -> reached
```

`execute_reorientation` runs the canonical script with
`reorientation_plan = Ref("in.reorientation_plan")`. Each waypoint is a
typed record `{pose, mode, use_attachment?, max_attempts?, allow_start_contact?,
allow_goal_contact?, contact_margin?}`. It forwards the plan's `world_config`
and `attached_object` to every planned leg and never replaces a rejected
collision-aware plan with an unchecked move. Use `contact_transition` only for
the initial support escape (a plain Cartesian move); use `planned_joint` for
clear-space rotation/transit and `planned_linear` for an orientation-locked
straight leg. A plan-level `time_scale > 1` slows execution by resampling the
joint path; every planned leg is executed with a 60-step-per-waypoint budget
so a stuck waypoint does not stall the graph. Output: `final_pose: Se3Pose`,
the last waypoint's end-effector pose.

`execute_approach_only` takes `placement_plan: PoseSequence` (the plan that
`executing-feature-mating` will finish) and executes only its first waypoint
as a collision-aware `motion.plan_to_pose` leg with the plan's world and
attachment, retrying the sampled planner up to three times and tracking the
trajectory to 2 mm. It raises when the planner refuses (route to `blocked`).
Output: `approach_pose: Se3Pose`, the waypoint it reached, so the graph can
re-register the held object there and recompute the engagement.

## Boundaries

- Upstream geometry or perception determines the desired object orientation
  and sufficient clearance. This skill executes that typed request.
- The sequence must describe end-effector poses, not object poses.
- The skill never releases the object and never queries cameras, simulation
  state, task goals, evaluators, or reward.
- Full 3-DOF orientation changes require a robot IK backend that honors wrist
  roll. A position/approach-axis-only backend cannot reliably stand a syringe
  or long tool upright.

