ROS 2 Jazzy · ros2_control · bimanual hardware

Dual-Arm UR3 / UR3e + Allegro Hand Drivers

The workspace that brings up a bimanual torso: two Universal Robots arms, two 16-DoF Allegro Hand V4 over PCAN, three RealSense cameras, a calibrated URDF with collision geometry, and bridge nodes so any program (a learned policy, a grasp planner, teleoperation) can drive the cell with joint-position topics.

Real cell, URDF twin and overlay

Left to right: the real cell, its URDF twin from the same calibrated camera pose, and the overlay (red = real table edge, cyan = twin).

2 armsUR3 (right) + UR3e (left) in one ros2_control controller manager
2 × 16 DoFAllegro Hand V4, customised driver over PCAN-USB
44 jointsmerged into one /joint_states at 100 Hz
3 camerasRealSense D415 with calibrated intrinsics and extrinsics

What one launch file brings up

armsUR driver + ros2_controlBoth arms' hardware interfaces, forward-position / trajectory / velocity controllers, dashboard and safety stopper per arm.
handsAllegro V4 driverPID joint-position control over CAN, with a PWM ceiling that keeps the thumb motor from overheating.
camerasRealSense, patchedColour + depth per camera. Calibrated intrinsics load from YAML via camera_info_url, and extrinsics are published as static TFs to world.
bridgesTopic-level controlMerged joint states, arm streaming with damping, and hand streaming that releases when its input topic goes silent.

Robot description: visual and collision

The URDF is generated by xacro at launch: world, T-shaped stand and table, a UR3e and a UR3 with their factory kinematic calibrations, and an Allegro hand on each flange (prefixes la_ / ra_). The same model is exported to Isaac Lab for sim-to-real work.

Visual model
Visual meshes, home pose
Collision model
Collision geometry: right arm blue, left arm orange, stand and table grey
Visual model front
Front view
Collision model front
Front view, collision
Rendered digital twin
The same cell rendered in Isaac Sim
Right camera overlay
Second camera: real, twin, overlay

On the real robot

Pick-and-place over 10 objects, driven through these drivers (right arm + right Allegro), with FoundationPose perception and BODex grasp synthesis.

From dexterous-pick-and-place (94/100 hardware trials), 3× speed.

Hardware

componentmodelconnectionprefix
right armUR3Ethernet 192.168.0.120, External Controlra_
left armUR3eEthernet 192.168.0.121, External Controlla_
right handAllegro Hand V4 (P231)PCAN-USB, channel 33ra_
left handAllegro Hand V4 (P249)PCAN-USB, channel 32la_
camerasRealSense D415 ×3USB 3front_right, extra, front_left

Try it

git clone https://github.com/ismael-esp/dual-arm-allegro-ros2.git && cd dual-arm-allegro-ros2
bash scripts/install_pcan_host.sh      # host: PEAK pcan kernel module
bash docker/build.sh                   # ROS 2 Jazzy + ros2_control + UR + MoveIt + librealsense + PCAN libs
bash docker/run.sh                     # repo mounted at /home/dev/ros2_ws
bash scripts/setup_workspace.sh        # pinned upstream drivers + RealSense patch + colcon build
source install/setup.bash
ros2 launch my_dual_robot_cell_control start_system_drivers.launch.py      # real robot
ros2 launch my_dual_robot_cell_control start_robots.launch.py \
    la_use_mock_hardware:=true ra_use_mock_hardware:=true                  # no hardware

The README covers robot-side setup, commanding the cell, configuration, calibration and troubleshooting.