Source code for embodichain.data.assets.robot_assets

# ----------------------------------------------------------------------------
# Copyright (c) 2021-2026 DexForce Technology Co., Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ----------------------------------------------------------------------------

from __future__ import annotations

import os
import open3d as o3d
from embodichain.data.dataset import EmbodiChainDataset
from embodichain.data.constants import (
    EMBODICHAIN_DOWNLOAD_PREFIX,
    EMBODICHAIN_DEFAULT_DATA_ROOT,
)

robot_assets = "robot_assets"

__all__ = [
    "CobotMagicArm",
    "RidgeBack",
    "UnitreeH1",
    "UnitreeH1Usd",
    "ABB",
    "Motoman",
    "KUKA",
    "Fanuc",
    "UniversalRobots",
    "Rokae",
    "Franka",
    "Agile",
    "Hans",
    "Aubo",
    "RainbowY1",
    "CartPole",
    "ARX5",
    "AlohaMini",
    "TianjiMarvin",
    "FlexivRizon4S",
]


[docs] class RidgeBack(EmbodiChainDataset): """Dataset class for the RidgeBack wheeled robot. Reference: https://clearpathrobotics.com/ridgeback-indoor-robot-platform/ Directory structure: RidgeBack/ RidgeBack.urdf Example usage: >>> from embodichain.data.robot_dataset import RidgeBack >>> dataset = RidgeBack() or >>> from embodichain.data import get_data_path >>> print(get_data_path("RidgeBack/RidgeBack.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "RidgeBack.zip"), "f03e1a6f4c781ad8957a88bdb010e9b6", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class UnitreeH1(EmbodiChainDataset): """Dataset class for the Unitree H1 robot. Reference: https://www.unitree.com/h1/ Directory structure: UnitreeH1/ UnitreeH1.urdf UnitreeH1WithWrist.urdf Example usage: >>> from embodichain.data.robot_dataset import UnitreeH1 >>> dataset = UnitreeH1() or >>> from embodichain.data import get_data_path >>> print(get_data_path("UnitreeH1/UnitreeH1.urdf")) >>> print(get_data_path("UnitreeH1/UnitreeH1WithWrist.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "UnitreeH1.zip"), "339417cef5051a912693f3c64d29dddc", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class UnitreeH1Usd(EmbodiChainDataset): """Dataset class for the Unitree H1 robot USD version. Directory structure: UnitreeH1Usd/H1_usd h1.usd h1.usda Example usage: >>> from embodichain.data.robot_dataset import UnitreeH1Usd >>> dataset = UnitreeH1Usd() or >>> from embodichain.data import get_data_path >>> print(get_data_path("UnitreeH1Usd/H1_usd/h1.usd")) >>> print(get_data_path("UnitreeH1Usd/H1_usd/h1.usda")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "H1_usd.zip"), "9fc19f8c8b4a49398ec661e6ea9877ee", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class ABB(EmbodiChainDataset): """Dataset class for the ABB robot. Reference: https://global.abb/ Directory structure: ABB/ IRB1200_5_90/IRB1200_5_90.urdf IRB2600_12_165/IRB2600_12_165.urdf Example usage: >>> from embodichain.data.robot_dataset import ABB >>> dataset = ABB() or >>> from embodichain.data import get_data_path >>> print(get_data_path("ABB/IRB1200_5_90/IRB1200_5_90.urdf")) >>> print(get_data_path("ABB/IRB2600_12_165/IRB2600_12_165.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "ABB.zip"), "ea6df4983982606c43387783e5fb8c05", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class Motoman(EmbodiChainDataset): """Dataset class for the Motoman robot. Reference: https://www.motoman.com/en-us Directory structure: Motoman/ GP7/GP7.urdf GP12/GP12.urdf Example usage: >>> from embodichain.data.robot_dataset import Motoman >>> dataset = Motoman() or >>> from embodichain.data import get_data_path >>> print(get_data_path("Motoman/GP7/GP7.urdf")) >>> print(get_data_path("Motoman/GP12/GP12.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "Motoman.zip"), "ee5f16cfce34d8e2cb996fcff8a25986", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class KUKA(EmbodiChainDataset): """Dataset class for the KUKA robot. Reference: https://www.kuka.com/ Directory structure: KUKA/ KUKA/KR6_R700_sixx/KR6_R700_sixx.urdf KUKA/KR6_R900_sixx/KR6_R900_sixx.urdf Example usage: >>> from embodichain.data.robot_dataset import ABB >>> dataset = ABB() or >>> from embodichain.data import get_data_path >>> print(get_data_path("KUKA/KR6_R700_sixx/KR6_R700_sixx.urdf")) >>> print(get_data_path("KUKA/KR6_R900_sixx/KR6_R900_sixx.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "KUKA.zip"), "da7a2dfd0db3f486e407f038d25c7537", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class Fanuc(EmbodiChainDataset): """Dataset class for the Fanuc robot. Reference: https://www.fanuc.com/ Directory structure: Fanuc/ M_20iA/M_20iA.urdf R_2000iC_165F/R_2000iC_165F.urdf Example usage: >>> from embodichain.data.robot_dataset import Fanuc >>> dataset = Fanuc() or >>> from embodichain.data import get_data_path >>> print(get_data_path("Fanuc/KR6_R700_sixx/KR6_R700_sixx.urdf")) >>> print(get_data_path("Fanuc/KR6_R900_sixx/KR6_R900_sixx.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "Fanuc.zip"), "0a1c562f4719f7cdc1b24545fec4a301", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class Rokae(EmbodiChainDataset): """Dataset class for the Rokae robots. Reference: https://www.rokae.com/en/product/show/349/SR-Cobots.html Directory structure: Rokae/ SR3/SR3.urdf SR5/SR5.urdf Example usage: >>> from embodichain.data.robot_dataset import Rokae >>> dataset = Rokae() or >>> from embodichain.data import get_data_path >>> print(get_data_path("Rokae/SR3/SR3.urdf")) >>> print(get_data_path("Rokae/SR5/SR5.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "Rokae.zip"), "fbfb852d6139e94b7c422771542f988f", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class Agile(EmbodiChainDataset): """Dataset class for the Agile robots. Reference: https://www.agile-robots.com/en/solutions/diana-7/ Directory structure: Agile/ Diana7/Diana7.urdf Example usage: >>> from embodichain.data.robot_dataset import Agile >>> dataset = Agile() or >>> from embodichain.data import get_data_path >>> print(get_data_path("Agile/Diana7/Diana7.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "Agile.zip"), "fd47d7ab8a4d13960fd76e59544ba836", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class Hans(EmbodiChainDataset): """Dataset class for the Hans robots. Reference: https://www.huayan-robotics.com/elfin Directory structure: Hans/ E05/E05.urdf E10/E10.urdf Example usage: >>> from embodichain.data.robot_dataset import Hans >>> dataset = Hans() or >>> from embodichain.data import get_data_path >>> print(get_data_path("Hans/E05/E05.urdf")) >>> print(get_data_path("Hans/E10/E10.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "Hans.zip"), "c867c406e3dffd6982fd0a15e7dc7e29", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class Aubo(EmbodiChainDataset): """Dataset class for the Aubo robots. Reference: https://www.aubo-robotics.cn/ Directory structure: Aubo/ i5/i5.urdf Example usage: >>> from embodichain.data.robot_dataset import Aubo >>> dataset = Aubo() or >>> from embodichain.data import get_data_path >>> print(get_data_path("Aubo/i5/i5.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "Aubo.zip"), "2574649cd199c11267cc0f4aeac65557", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class RainbowY1(EmbodiChainDataset): """Dataset class for the Aubo robots. Reference: https://www.rainbow-robotics.com/en_rby1 Directory structure: RainbowY1/ RainbowY1.urdf Example usage: >>> from embodichain.data.robot_dataset import RainbowY1 >>> dataset = RainbowY1() or >>> from embodichain.data import get_data_path >>> print(get_data_path("RainbowY1/RainbowY1.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "RainbowY1.zip"), "5979a3aaadb5de6488b13765d523564f", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
[docs] class CartPole(EmbodiChainDataset): """Dataset class for the CartPole. Directory structure: cart_pole/ cart_pole.urdf cart.mtl cart.obj pole.mtl pole.obj slide_bar.mtl slide_bar.obj Example usage: >>> from embodichain.data.robot_dataset import CartPole >>> dataset = CartPole() or >>> from embodichain.data import get_data_path >>> print(get_data_path("CartPole/cart_pole.urdf")) """
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, robot_assets, "cart_pole.zip"), "9d185eb18b19f9c95153e01943c5b0a2", ) prefix = type(self).__name__ path = EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root super().__init__(prefix, data_descriptor, path)
from importlib import import_module _ASSET_EXPORTS = { "CobotMagicArm": "embodichain_robots.agilex.cobotmagic.assets", "ARX5": "embodichain_robots.arx.arx5.assets", "AlohaMini": "embodichain_robots.alohamini.aloha_mini.assets", "TianjiMarvin": "embodichain_robots.tianji.marvin.assets", "FlexivRizon4S": "embodichain_robots.flexiv.rizon4s.assets", "Franka": "embodichain_robots.franka.assets", "UniversalRobots": "embodichain_robots.universal_robots.assets", } def __getattr__(name: str) -> type: if name not in _ASSET_EXPORTS: raise AttributeError(f"module {__name__!r} has no attribute {name!r}") value = getattr(import_module(_ASSET_EXPORTS[name]), name) globals()[name] = value return value def __dir__() -> list[str]: return sorted(set(globals()) | set(__all__))