Robot descriptions of the XTac-UMI G1 tactile data-collection gripper, in URDF, Xacro, MJCF and USD:
- Master (handheld, the leader), left and right.
- Slave (arm-mounted, the follower): bare, or with the Asm_link adapter for the arm flange.
Packaged for ROS 2 (Humble/Jazzy) and as a Python wheel that needs no ROS.
| Item | Value |
|---|---|
| Slave finger motor | RobStride EL05, maximum output torque 1.1 N·m (hardware-limited for continuous stall) |
| Finger opening | 0 to 28.92° (0.5047 rad); the right finger drives, the left mirrors it |
| Adapter interface | 4 × Ø6.5 mm through holes on Ø50 mm PCD, Ø26 mm centre bore, 12 mm thick |
| Mounting | +Z along the tool axis; attach to a Z-out arm frame (e.g. tool0) with rpy="0 0 θ" |
| EEF (closed fingertip centre) | [0.036575, 0, 0.2009217] m from the slave mounting face (+12 mm with the adapter) |
| Master ↔ slave | <side>_follower_link matches the slave taccap_base_link; EEF, fingertips and camera agree within 0.1 mm |
Full frame and naming specification: docs/TACCAP_FLANGE_FRAMES.md.
| Package | Content |
|---|---|
taccap_description |
Slave: URDF (bare / with adapter), Xacro macro, MJCF, USD, RViz launch |
taccap_master_description |
Master (left/right): URDF, Xacro macro, MuJoCo preview, USD with open/close animation, RViz launch |
ROS 2:
cd ~/ws/src && git clone https://github.com/XenseRobotics-AI/XTac-UMI-Description.git
cd ~/ws && colcon build && source install/setup.bash
ros2 launch taccap_description display.launch.py with_mount:=true
ros2 launch taccap_master_description display.launch.py side:=leftAttach the slave to your arm:
<xacro:include filename="$(find taccap_description)/urdf/taccap_g1_slave_macro.xacro"/>
<xacro:taccap_g1_slave prefix="right_" with_mount="false"/>
<joint name="arm_to_gripper" type="fixed">
<parent link="tool0"/><child link="right_taccap_base_link"/>
<origin xyz="0 0 0" rpy="0 0 0"/> <!-- clocking about Z per installation -->
</joint>Python (no ROS needed):
pip install git+https://github.com/XenseRobotics-AI/XTac-UMI-Description.gitfrom taccap_description import get_urdf_path, get_mjcf_path, get_usd_path
from taccap_master_description import get_master_urdf_path
get_urdf_path(with_mount=True)
get_master_urdf_path(side="left")Plain .urdf files use relative mesh paths and open directly in URDF viewers.
- XTac-UMI G1 documentation
- TacCap-Gripper SDK: motor control, IMU/encoder readout and per-device camera intrinsics
pip install -e '.[dev]'
python scripts/import_slave.py # locked upstream snapshot -> Xacro + meshes
python scripts/generate_models.py # slave URDF + MJCF from the Xacro
python scripts/generate_usd.py # slave USD
python scripts/generate_master_models.py # master Xacro/MJCF/USD from the URDFs
python -m pytest -qThe slave is imported from a locked slave-v2026.10.23 upstream snapshot;
local adaptations live in scripts/import_slave.py. See the
upstream update workflow. Edit the master URDFs in
ros/taccap_master_description/urdf/ for master changes. --check verifies
imported and generated files.
MIT, see LICENSE. Source and third-party notices: slave, master.
Questions: open a GitHub issue or contact dylan@xenserobotics.com.
