Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,8 @@ embodichain/agents/policy/runs/*
*.pth
outputs
test_configs/*
embodichain_data/
scripts/tutorials/atomic_action/*.glb

wandb/
*.mp4
Expand All @@ -200,4 +202,4 @@ wandb/
embodichain/VERSION

# benchmark results
scripts/benchmark/rl/reports/*
scripts/benchmark/rl/reports/*
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ embodichain.lab.sim.atomic_actions
NamedJointPositionTarget
GraspTarget
HeldObjectPoseTarget
CoordinatedPickmentTarget
Target
HeldObjectState
CoordinatedHeldObjectState
WorldState
ActionResult
ActionCfg
Expand All @@ -35,6 +37,8 @@ embodichain.lab.sim.atomic_actions
Place
PressCfg
Press
CoordinatedPickmentCfg
CoordinatedPickment
AtomicActionEngine

.. currentmodule:: embodichain.lab.sim.atomic_actions
Expand Down Expand Up @@ -78,12 +82,20 @@ Core
:members:
:show-inheritance:

.. autoclass:: CoordinatedPickmentTarget
:members:
:show-inheritance:

.. autodata:: Target

.. autoclass:: HeldObjectState
:members:
:show-inheritance:

.. autoclass:: CoordinatedHeldObjectState
:members:
:show-inheritance:

.. autoclass:: WorldState
:members:
:show-inheritance:
Expand Down Expand Up @@ -164,6 +176,15 @@ Actions
:members:
:show-inheritance:

.. autoclass:: CoordinatedPickmentCfg
:members:
:exclude-members: __init__, copy, replace, to_dict
:show-inheritance:

.. autoclass:: CoordinatedPickment
:members:
:show-inheritance:

Engine & Registry
-----------------

Expand Down
26 changes: 26 additions & 0 deletions docs/source/overview/sim/atomic_actions/builtin_actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ The following actions are available out of the box:
| `MoveHeldObject` | Single | `HeldObjectPoseTarget` — held-object pose | Move held object while keeping gripper closed | <img src="../../../_static/atomic_actions/move_held_object.gif" alt="MoveHeldObject" width="480" style="max-width: 100%;" /> |
| `Place` | Single | `EndEffectorPoseTarget` — EEF release pose | Lower → open gripper → retract | <img src="../../../_static/atomic_actions/place.gif" alt="Place" width="480" style="max-width: 100%;" /> |
| `Press` | Single | `EndEffectorPoseTarget` — EEF press pose | Close gripper → press down → return | <img src="../../../_static/atomic_actions/press.gif" alt="Press" width="480" style="max-width: 100%;" /> |
| `CoordinatedPickment` | Dual | `CoordinatedPickmentTarget` — shared-object pose | Approach both ends → close both grippers → lift → move object | <img src="../../../_static/atomic_actions/coordinated_pickment.gif" alt="CoordinatedPickment" width="480" style="max-width: 100%;" /> |

---

Expand Down Expand Up @@ -145,3 +146,28 @@ threaded into it.
of shape `(4, 4)` or `(n_envs, 4, 4)`.

![Press demo](../../../_static/atomic_actions/press.gif)

---

## `CoordinatedPickment`

Dual-arm grasp motion for one shared object. Both arms move to object-relative
grasp poses, close both grippers, lift the object, and move it to an object pose
while keeping both grippers closed. On success, the returned `WorldState` carries
`coordinated_held_object` (`CoordinatedHeldObjectState`) and leaves
`held_object` as `None`.

| Config field | Default | Description |
|---|---|---|
| `control_part` | `"dual_arm"` | Combined arm control part |
| `left_arm_control_part` / `right_arm_control_part` | `"left_arm"` / `"right_arm"` | Arm control parts for each grasp |
| `left_hand_control_part` / `right_hand_control_part` | `"left_hand"` / `"right_hand"` | Hand control parts for each gripper |
| `pre_grasp_distance` | `0.10` | Distance to back away from each grasp TCP |
| `lift_height` | `0.08` | World-Z lift distance before moving to the target pose |
| `object_motion_keyframes` | `6` | Sparse object-pose IK keyframes for synchronized motion |
| `sample_interval` | `120` | Total waypoints across all phases |

**Target:** `CoordinatedPickmentTarget(...)` with a target object pose, object
semantics, and left/right object-to-EEF transforms.

![CoordinatedPickment demo](../../../_static/atomic_actions/coordinated_pickment.gif)
19 changes: 19 additions & 0 deletions embodichain/data/assets/demo_assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
# limitations under the License.
# ----------------------------------------------------------------------------

from __future__ import annotations

import open3d as o3d
import os

Expand Down Expand Up @@ -49,3 +51,20 @@ def __init__(self, data_root: str = None):
prefix = type(self).__name__
path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root
super().__init__(prefix, data_descriptor, path)


class CoordinatedPlacementAndPickment(EmbodiChainDataset):
"""Dataset class for coordinated placement and pickment tutorial meshes."""

def __init__(self, data_root: str = None):
data_descriptor = o3d.data.DataDescriptor(
os.path.join(
EMBODICHAIN_DOWNLOAD_PREFIX,
demo_assets,
"coordinated_placement_and_pickment.zip",
),
"297c10b386a4d7a8ccb68926d69425e9",
)
prefix = type(self).__name__
path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root
super().__init__(prefix, data_descriptor, path)
8 changes: 8 additions & 0 deletions embodichain/lab/sim/atomic_actions/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
ActionCfg,
ActionResult,
AtomicAction,
CoordinatedHeldObjectState,
CoordinatedPickmentTarget,
GraspTarget,
HeldObjectState,
HeldObjectPoseTarget,
Expand All @@ -42,6 +44,8 @@
WorldState,
)
from .actions import (
CoordinatedPickment,
CoordinatedPickmentCfg,
MoveEndEffector,
MoveJoints,
MoveHeldObject,
Expand Down Expand Up @@ -69,6 +73,8 @@
"AntipodalAffordance",
"InteractionPoints",
"ObjectSemantics",
"CoordinatedHeldObjectState",
"CoordinatedPickmentTarget",
"HeldObjectState",
"HeldObjectPoseTarget",
"JointPositionTarget",
Expand All @@ -81,12 +87,14 @@
"ActionCfg",
"AtomicAction",
# Action implementations
"CoordinatedPickment",
"MoveEndEffector",
"MoveJoints",
"MoveHeldObject",
"PickUp",
"Place",
"Press",
"CoordinatedPickmentCfg",
"MoveEndEffectorCfg",
"MoveJointsCfg",
"MoveHeldObjectCfg",
Expand Down
Loading
Loading