Hand pose retargeting for dexterous robot hand.
Project description
Dex Retargeting
Various retargeting optimizers to translate human hand motion to robot hand motion.
This repo originates from AnyTeleop Project
Installation
pip install dex_retargeting
To run the example, you may need additional dependencies for rendering and hand pose detection.
git clone https://github.com/dexsuite/dex-retargeting
cd dex-retargeting
pip install -e ".[example]"
Changelog
v0.5.0
-
Numpy Support Update: Starting from this version,
dex-retargetingsupportsnumpy >= 2.0.0. If you need to usenumpy < 2.0.0, you can install an earlier version ofdex-retargetingusing:pip install "dex-retargeting<0.5.0"
-
Mediapipe Compatibility: Although
mediapipelistsnumpy 1.xas a dependency, it is compatible withnumpy >= 2.0.0. You can safely ignore any warnings related to this and continue usingnumpy 2.0.0or higher. -
Dependency Cleanup: Removed
trimeshas a dependency to simplify installation and reduce potential conflicts. The core functionality ofdex-retargetingno longer requires mesh processing capabilities.
Examples
Retargeting from human hand video
This type of retargeting can be used for applications like teleoperation, e.g. AnyTeleop.
Tutorial on retargeting from human hand video
Retarget from hand object pose dataset
This type of retargeting can be used post-process human data for robot imitation, e.g. DexMV.
Tutorial on retargeting from hand-object pose dataset
FAQ and Troubleshooting
Joint Orders for Retargeting
URDF parsers, such as ROS, physical simulators, real robot driver, and this repository, may parse URDF files with
different joint orders. To use dex-retargeting results with other libraries, handle joint ordering explicitly using
joint names, which are unique within a URDF file.
Example: Using dex-retargeting with the SAPIEN simulator
from dex_retargeting.seq_retarget import SeqRetargeting
retargeting: SeqRetargeting
sapien_joint_names = [joint.get_name() for joint in robot.get_active_joints()]
retargeting_joint_names = retargeting.joint_names
retargeting_to_sapien = np.array([retargeting_joint_names.index(name) for name in sapien_joint_names]).astype(int)
# Use the index map to handle joint order differences
sapien_robot.set_qpos(retarget_qpos[retargeting_to_sapien])
This example retrieves joint names from the SAPIEN robot and SeqRetargeting object, creates a mapping
array (retargeting_to_sapien) to map joint indices, and sets the SAPIEN robot's joint positions using the retargeted
joint positions.
Citation
This repository is derived from the AnyTeleop Project and is subject to ongoing enhancements. If you utilize this work, please cite it as follows:
@inproceedings{qin2023anyteleop,
title = {AnyTeleop: A General Vision-Based Dexterous Robot Arm-Hand Teleoperation System},
author = {Qin, Yuzhe and Yang, Wei and Huang, Binghao and Van Wyk, Karl and Su, Hao and Wang, Xiaolong and Chao, Yu-Wei and Fox, Dieter},
booktitle = {Robotics: Science and Systems},
year = {2023}
}
Acknowledgments
The robot hand models in this repository are sourced directly from dex-urdf. The robot kinematics in this repo are based on pinocchio. Examples use SAPIEN for rendering and visualization.
The PositionOptimizer leverages methodologies from our earlier
project, From One Hand to Multiple Hands.
Additionally, the DexPilotOptimizeris crafted using insights from DexPilot.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dex_retargeting-0.5.0-py3-none-any.whl.
File metadata
- Download URL: dex_retargeting-0.5.0-py3-none-any.whl
- Upload date:
- Size: 52.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
347ce785181e7c7dff2c2ca1a55955f6b33b711d33a7171cb4ef89dc19bd66d3
|
|
| MD5 |
1efaeebdbb7251ad7fe4ba05ae8efd43
|
|
| BLAKE2b-256 |
26c12ed904c6adb9ef20eabc1ae1cd18acc7a20d1347c58c30a985987dd6b83f
|
Provenance
The following attestation bundles were made for dex_retargeting-0.5.0-py3-none-any.whl:
Publisher:
build_stable.yml on dexsuite/dex-retargeting
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dex_retargeting-0.5.0-py3-none-any.whl -
Subject digest:
347ce785181e7c7dff2c2ca1a55955f6b33b711d33a7171cb4ef89dc19bd66d3 - Sigstore transparency entry: 192650460
- Sigstore integration time:
-
Permalink:
dexsuite/dex-retargeting@3f56141bc8bd2760d5e452e382937269554ebb21 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/dexsuite
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build_stable.yml@3f56141bc8bd2760d5e452e382937269554ebb21 -
Trigger Event:
push
-
Statement type: