Data Assets#
EmbodiChain provides a comprehensive set of pre-built data assets hosted on HuggingFace, covering robots, end-effectors, objects, scenes, materials, and more. Assets are automatically downloaded on first use, but you can also pre-download them using the built-in CLI tool.
Data Root Directory#
By default, assets are stored in ~/.cache/embodichain_data. You can override this by setting the EMBODICHAIN_DATA_ROOT environment variable:
export EMBODICHAIN_DATA_ROOT=/mnt/shared/embodichain_data
Similarly, the dataset recording root (used by LeRobotRecorder) defaults to ~/.cache/embodichain_datasets and can be overridden with:
export EMBODICHAIN_DATASET_ROOT=/mnt/shared/embodichain_datasets
Download CLI#
The embodichain.data module provides a command-line interface for managing assets.
List Available Assets#
# List all assets across every category
python -m embodichain.data list
# List assets in a specific category
python -m embodichain.data list --category robot
The output shows each asset name and whether it has already been downloaded (✓):
[robot] (18 assets)
[✓] ABB
[ ] ARX5
[ ] Agile
[✓] Aubo
...
Data root: /home/user/.cache/embodichain_data
Download Assets#
# Download a single asset by name
python -m embodichain.data download --name CobotMagicArm
# Download all assets in a category
python -m embodichain.data download --category robot
# Download everything
python -m embodichain.data download --all
Downloaded files are saved to <data_root>/download/ and automatically extracted to <data_root>/extract/. Non-zip assets (e.g. .glb files) are copied into the extract directory.
Asset Categories#
Category |
Description |
Examples |
|---|---|---|
|
Robot URDF models |
CobotMagicArm, Franka, UniversalRobots, UnitreeH1 |
|
End-effector / gripper models |
DH_PGC_140_50, Robotiq2F85, InspireHand |
|
Manipulable objects and furniture |
ShopTableSimple, CoffeeCup, TableWare |
|
Full scene environments |
SceneData, EmptyRoom |
|
Rendering materials, IBL, and backgrounds |
SimResources, CocoBackground |
|
DexForce W1 humanoid robot and components |
DexforceW1V021, DexforceW1ChassisV021 |
|
Demo scene data |
ScoopIceNewEnv, MultiW1Data |
Using Assets in Code#
Use get_data_path to resolve asset paths in your configuration. It accepts a relative path in the format <AssetClassName>/<subpath>:
from embodichain.data import get_data_path
# Resolves to the URDF file, downloading if necessary
urdf_path = get_data_path("CobotMagicArm/CobotMagicWithGripperV100.urdf")
get_data_path resolves paths in the following order:
Absolute path — returned as-is.
Local data root — if the file exists under
EMBODICHAIN_DATA_ROOT, it is returned immediately without triggering a download.Data-class download — falls back to the registered asset class, which downloads and extracts the asset from HuggingFace.
You can also instantiate asset classes directly:
from embodichain.data.assets import CobotMagicArm
dataset = CobotMagicArm()
print(dataset.extract_dir) # Path to extracted files
Adding Custom Assets#
To add a new asset:
Create a class in the appropriate file under
embodichain/data/assets/(e.g.,robot_assets.pyfor a robot):
class MyRobot(EmbodiChainDataset):
def __init__(self, data_root: str = None):
data_descriptor = o3d.data.DataDescriptor(
os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "MyRobot.zip"),
"<md5_checksum>",
)
prefix = type(self).__name__
path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root
super().__init__(prefix, data_descriptor, path)
The class is automatically discovered by the download CLI and
get_data_path— no additional registration is needed.