Skip to content

feat(robot): add FrankaPandaCfg and dual-arm coordinated placement tutorial#362

Open
yuecideng wants to merge 1 commit into
mainfrom
feat/franka-panda-dual-arm
Open

feat(robot): add FrankaPandaCfg and dual-arm coordinated placement tutorial#362
yuecideng wants to merge 1 commit into
mainfrom
feat/franka-panda-dual-arm

Conversation

@yuecideng

Copy link
Copy Markdown
Contributor

Description

This PR adds Franka Emika Panda robot support to the dual-arm framework and a coordinated placement tutorial demonstrating dual-arm Franka operation with PytorchSolver.

Changes

  • FrankaPandaCfg (embodichain/lab/sim/robots/franka_panda.py): Single-arm Franka config with PandaWithHand URDF (7-DOF arm Joint1–Joint7 + 2 finger joints), using PytorchSolverCfg with Franka TCP (45° Z-rotation, 0.1034m Z-offset). Default init_qpos from Isaac Lab reference.

  • Dual-arm registry (embodichain/lab/sim/robots/dual_arm.py): Register "franka" in _BASE_ROBOT_REGISTRY so DualArmRobotCfg.from_dict({"base_robot": "franka", ...}) works.

  • Coordinated placement tutorial (scripts/tutorials/atomic_action/coordinated_placement_franka.py): Demonstrates dual-arm Franka coordinated placement with bread/pan meshes, following the same structure as the existing UR5 version.

  • Exports (embodichain/lab/sim/robots/__init__.py): Export FrankaPandaCfg.

Type of change

  • New feature (non-breaking change which adds functionality)

Checklist

  • I have run the black . command to format the code base.
  • I have made corresponding changes to the documentation
  • I have added tests that prove my fix is effective or that my feature works
  • Dependencies have been updated, if applicable.

…torial

Add FrankaPandaCfg for Franka Emika Panda with PandaWithHand URDF,
register it in the dual-arm framework, and create a coordinated
placement tutorial script demonstrating dual-arm Franka operation
with PytorchSolver.

- Add FrankaPandaCfg: 7-DOF arm + 2 finger joints, PytorchSolverCfg
  with Franka TCP (45 deg Z-rotation, 0.1034m Z-offset)
- Register 'franka' in DualArmRobotCfg._BASE_ROBOT_REGISTRY
- Add coordinated_placement_franka.py tutorial script
- Export FrankaPandaCfg from robots __init__.py
Copilot AI review requested due to automatic review settings July 5, 2026 15:44
@yuecideng yuecideng added robot Module related to robot solver Robot kinematics solver atomic action atomic action related functionality labels Jul 5, 2026

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 adds Franka Emika Panda support to EmbodiChain’s dual-arm robot composition framework and introduces a new dual-arm coordinated placement tutorial that mirrors the existing UR5 demo structure.

Changes:

  • Added a new single-arm FrankaPandaCfg robot configuration using a Panda-with-hand URDF and PytorchSolverCfg.
  • Extended the dual-arm base robot registry to support base_robot="franka" via DualArmRobotCfg.from_dict(...).
  • Added a new tutorial script demonstrating dual-arm coordinated placement with Franka arms and bread/pan meshes, and exported FrankaPandaCfg from the robots package.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
scripts/tutorials/atomic_action/coordinated_placement_franka.py New tutorial/demo for dual-arm Franka coordinated placement planning/execution.
embodichain/lab/sim/robots/franka_panda.py Introduces FrankaPandaCfg (URDF wiring, control parts, solver cfg, defaults).
embodichain/lab/sim/robots/dual_arm.py Registers "franka" in _BASE_ROBOT_REGISTRY so dual-arm composition can resolve Franka.
embodichain/lab/sim/robots/init.py Exports FrankaPandaCfg from the robots package.

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

Comment on lines +25 to +30
from embodichain.lab.sim.cfg import (
JointDrivePropertiesCfg,
RigidBodyAttributesCfg,
RobotCfg,
URDFCfg,
)
Comment on lines 76 to 81
#: Registry mapping a ``base_robot`` key to ``(single-arm cfg class, init dict)``.
#: Adding a new single-arm robot here is all that is needed to make it
#: dual-arm-able: e.g. ``"franka": (FrankaRobotCfg, {})``.
#: dual-arm-able: e.g. ``"franka": (FrankaPandaCfg, {"robot_type": "panda"})``.
_BASE_ROBOT_REGISTRY: Dict[str, tuple] = {
"franka": (FrankaPandaCfg, {"robot_type": "panda"}),
"ur3": (URRobotCfg, {"robot_type": "ur3"}),
Comment on lines +76 to +90
@configclass
class FrankaPandaCfg(RobotCfg):
"""Configuration for the Franka Emika Panda robot with Panda hand.

The PandaWithHand URDF includes both the 7-DOF arm and the parallel-jaw
gripper in a single file. The solver defaults to
:class:`~embodichain.lab.sim.solvers.PytorchSolverCfg`.

Example:

cfg = FrankaPandaCfg.from_dict({"robot_type": "panda"})
robot = sim.add_robot(cfg=cfg)
"""

robot_type: str = "panda"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

atomic action atomic action related functionality robot Module related to robot solver Robot kinematics solver

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants