Franka Panda#
FrankaPandaCfg configures the Franka Panda manipulator together with its
parallel-jaw hand. The bundled model contains the seven-joint arm and two
finger joints in one URDF.
Franka Panda with parallel-jaw hand
Key Features#
Seven-axis manipulator with the two-joint Panda hand.
Ready-to-use robot configuration for the URDF, control parts, joint drives, and initial joint positions.
Numerical forward and inverse kinematics through
PytorchSolverCfgandpytorch-kinematics.Multi-environment simulation support through
SimulationManager.Dual-arm composition support through the
"franka"base-robot key.
Usage#
from embodichain.lab.sim import SimulationManager, SimulationManagerCfg
from embodichain.lab.sim.robots import FrankaPandaCfg
sim = SimulationManager(SimulationManagerCfg(headless=True, num_envs=4))
cfg = FrankaPandaCfg.from_dict({"robot_type": "panda"})
robot = sim.add_robot(cfg=cfg)
from_dict also accepts standard RobotCfg overrides. For example, the base
pose and initial joint positions can be changed when the configuration is
created:
cfg = FrankaPandaCfg.from_dict(
{
"robot_type": "panda",
"init_pos": [0.5, 0.0, 0.0],
"init_qpos": [0.0, -0.5, 0.0, -2.5, 0.0, 2.8, 0.7, 0.04, 0.04],
}
)
Robot Configuration#
Item |
Default |
|---|---|
Configuration class |
|
|
|
UID |
|
URDF |
|
Arm joints |
|
Hand joints |
|
Kinematics root / end link |
|
Solver |
|
The configuration exposes two independently addressable control parts:
arm_joint_ids = robot.get_joint_ids("arm")
hand_joint_ids = robot.get_joint_ids("hand")
The hand’s second finger joint is a mimic of the first in the bundled URDF.
Default Joint State#
The default state places the arm in a neutral ready pose and opens both fingers:
Joint |
Position (rad) |
|---|---|
|
0.000 |
|
-0.569 |
|
0.000 |
|
-2.810 |
|
0.000 |
|
3.037 |
|
0.741 |
|
0.040 |
|
0.040 |
Dual-Arm Composition#
Use DualArmRobotCfg with base_robot="franka" to create a pair of Panda
arms. The dual-arm builder prefixes the generated joints, control parts, and
solver links with left_ and right_.
from embodichain.lab.sim.robots import DualArmRobotCfg
cfg = DualArmRobotCfg.from_dict(
{
"base_robot": "franka",
"mount": {"preset": "side_by_side", "separation": 0.6},
}
)
robot = sim.add_robot(cfg=cfg)
See :doc:dual_arm for the available mount presets and configuration options.
See Also#
:doc:
/overview/sim/solvers/index- IK solver reference:doc:
/guides/add_robot- Adding a new robot (quick reference)