Skip to content

Add coordinated pickment atomic action#323

Open
skywhite1024 wants to merge 6 commits into
mainfrom
ljd/coordinated_pickment_atomic_actions
Open

Add coordinated pickment atomic action#323
skywhite1024 wants to merge 6 commits into
mainfrom
ljd/coordinated_pickment_atomic_actions

Conversation

@skywhite1024

@skywhite1024 skywhite1024 commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add the CoordinatedPickment dual-arm atomic action for pinching one shared object with two grippers, lifting it, and moving it to an object-centric target pose.
  • Add CoordinatedPickmentTarget and CoordinatedHeldObjectState, public API exports, API docs, and focused tests for the world-state contract.
  • Add a UR5 tutorial demo with selectable pencil / pot objects plus pencil.glb, pot.glb, and table.glb assets.
  • Add the coordinated pickment documentation GIF at docs/source/_static/atomic_actions/coordinated_pickment.gif.

Validation

  • git diff --check origin/main...HEAD
  • python3 -m py_compile embodichain/lab/sim/atomic_actions/core.py embodichain/lab/sim/atomic_actions/actions.py embodichain/lab/sim/atomic_actions/__init__.py tests/sim/atomic_actions/test_core.py tests/sim/atomic_actions/test_actions.py scripts/tutorials/atomic_action/coordinated_pickment.py
  • conda run -n embodichain040 python -m black --check --diff --color ./
  • conda run -n embodichain040 pytest tests/sim/atomic_actions/test_actions.py tests/sim/atomic_actions/test_core.py (42 passed)
  • conda run -n embodichain040 pytest tests/sim/atomic_actions/test_engine.py (13 passed)
  • conda run -n embodichain040 python scripts/tutorials/atomic_action/coordinated_pickment.py --object pot --diagnose_plan --headless_play

Notes

  • CoordinatedPlacement code, docs, tests, demo, and placement-only assets were removed from this PR because that action is handled by a separate PR.
  • PR branch is based on main.

@yuecideng yuecideng self-requested a review June 23, 2026 13:56
@skywhite1024 skywhite1024 force-pushed the ljd/coordinated_pickment_atomic_actions branch from ef6bde1 to d5eb97c Compare June 24, 2026 05:34
Base automatically changed from refactor/atomic-actions-redesign to main June 25, 2026 06:08
@skywhite1024 skywhite1024 force-pushed the ljd/coordinated_pickment_atomic_actions branch from d5eb97c to ac5d406 Compare June 26, 2026 07:49
@skywhite1024 skywhite1024 added docs Improvements or additions to documentation enhancement New feature or request motion gen Things related to motion generation for robot robot Module related to robot visualization Features or functions for visualization with the simulation labels Jun 26, 2026
Copilot AI review requested due to automatic review settings July 1, 2026 09:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends EmbodiChain’s simulation atomic-action system with dual-arm, coordinated motion primitives (“CoordinatedPickment” and “CoordinatedPlacement”), including new typed target/state dataclasses, exports, docs/API reference updates, tutorial demos, and accompanying unit tests.

Changes:

  • Added dual-arm coordinated atomic actions and supporting typed targets/state (CoordinatedPickment*, CoordinatedPlacement*, CoordinatedHeldObjectState), threading the new state through existing actions via WorldState.
  • Added tutorial/demo scripts for coordinated pickment and coordinated placement.
  • Updated Sphinx API reference + built-in actions docs and added focused tests for the new target/state/action behavior.

Reviewed changes

Copilot reviewed 9 out of 15 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
embodichain/lab/sim/atomic_actions/core.py Introduces new coordinated target/state dataclasses and extends WorldState/Target union.
embodichain/lab/sim/atomic_actions/actions.py Implements CoordinatedPickment and CoordinatedPlacement, plus shared dual-arm helpers and state threading.
embodichain/lab/sim/atomic_actions/__init__.py Re-exports coordinated actions/targets/state through the atomic_actions package API.
tests/sim/atomic_actions/test_core.py Adds unit tests for the new coordinated target/state dataclasses and WorldState carriage.
tests/sim/atomic_actions/test_actions.py Adds execution-shape/state tests for coordinated actions using dual-arm mocks.
scripts/tutorials/atomic_action/coordinated_pickment.py Adds an end-to-end demo script for dual-arm coordinated pickment.
scripts/tutorials/atomic_action/coordinated_placement.py Adds an end-to-end demo script for dual-arm coordinated placement.
docs/source/overview/sim/atomic_actions/builtin_actions.md Documents the new coordinated actions in the “built-in actions” overview.
docs/source/api_reference/embodichain/embodichain.lab.sim.atomic_actions.rst Exposes the new actions/targets/state in the generated API reference.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1696 to +1700
return (
True,
self._interpolate_qpos_keyframes(left_traj, keyframe_indices, n_waypoints),
self._interpolate_qpos_keyframes(right_traj, keyframe_indices, n_waypoints),
)
Comment on lines +158 to +162
Dual-arm placement motion for two already-held objects. The placing arm moves its
held object to the upper target and releases it; the support arm moves its held
object to the support target and keeps holding. On success, `WorldState.held_object`
is the support object and `coordinated_held_object` is cleared.

@skywhite1024 skywhite1024 force-pushed the ljd/coordinated_pickment_atomic_actions branch from 2f069c3 to 07e1a00 Compare July 1, 2026 10:10
Copilot AI review requested due to automatic review settings July 1, 2026 10:50

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 15 changed files in this pull request and generated 2 comments.

Comment on lines +1896 to +1897
left_grasp_xpos=left_target_xpos,
right_grasp_xpos=right_target_xpos,
"right_hand_close_qpos",
):
if getattr(self.cfg, name) is None:
logger.log_error(f"{name} must be specified in CoordinatedPickmentCfg")
@skywhite1024 skywhite1024 changed the title Add coordinated dual-arm atomic actions Add coordinated pickment atomic action Jul 1, 2026
Comment thread scripts/tutorials/atomic_action/pan.glb Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove the assets

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove asset files

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Improvements or additions to documentation enhancement New feature or request motion gen Things related to motion generation for robot robot Module related to robot visualization Features or functions for visualization with the simulation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants