Source code for embodichain.data.assets.obj_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,
)

__all__ = [
    "ShopTableSimple",
    "CircleTableSimple",
    "PlasticBin",
    "Chair",
    "ContainerMetal",
    "SimpleBoxDrawer",
    "AdrianoTable",
    "CoffeeCup",
    "SlidingBoxDrawer",
    "AluminumTable",
    "ToyDuck",
    "PaperCup",
    "ChainRainSec",
    "TableWare",
    "ScannedBottle",
    "SugarBox",
    "SodaCan",
    "MicrowaveOven",
    "Microwave",
    "PlasticTray",
    "WaterBasin",
    "Drawer",
    "Cow",
    "BakeTextureObj",
    "DrawerUSD",
    "PourWaterAssets",
]

obj_assets = "obj_assets"


[docs] class ShopTableSimple(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join( EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "shop_table_simple.zip" ), "e3061ee024de7840f773b70140dcd43f", ) 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 CircleTableSimple(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join( EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "circle_table_simple.zip" ), "42ad2be8cd0caddcf9bfbf106b7783f3", ) 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 PlasticBin(o3d.data.DownloadDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "plastic_bin.zip"), "21e00083689a4a3c4e4ae3fd89c61e55", ) 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 Chair(o3d.data.DownloadDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "chair.zip"), "2a971a92e0956e72f262308a1054dc73", ) 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 ContainerMetal(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join( EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "container_metal.zip" ), "ceafb87f8177609f87aaa6779fcbb9a3", ) 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 SimpleBoxDrawer(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join( EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "simple_box_drawer.zip" ), "966b648bca16823ee91525847c183973", ) 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 AdrianoTable(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "adriano_table.zip"), "8453583a9a1a9d04d50268f8a3da554f", ) 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 CoffeeCup(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "CoffeeCup.zip"), "f05fce385826414c15e19df3b75dc886", ) 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 SlidingBoxDrawer(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join( EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "SlidingBoxDrawer.zip" ), "b03d9006503d27b75ddeb06d31b2c7a5", ) 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 AluminumTable(o3d.data.DownloadDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "AluminumTable.glb"), "02991d36ca9b70f019ed330a61143aa9", ) 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 ToyDuck(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "ToyDuck.zip"), "2f5c00ba487edf34ad668f7257c0264e", ) 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 PaperCup(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "PaperCup.zip"), "359d13af8c5f31ad3226d8994a1a7198", ) 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 ChainRainSec(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "lianguijie.zip"), "2387589040a4d3f2676b622362452242", ) 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 TableWare(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "tableware.zip"), "403e340fc0e4996c002ee774f89cd236", ) 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 ScannedBottle(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "ScannedBottle.zip"), "d2b2d4deb7b463a734af099f7624b4af", ) 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 SugarBox(EmbodiChainDataset):
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "sugar_box_usd.zip"), "a1bc5075512cedecd08af4f9c3e8f636", ) 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 SodaCan(EmbodiChainDataset): """get_data_path("SodaCan/simple_cola_can.obj")"""
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "ColaCan.zip"), "24e0bc165dac129a8c2f287ce85b644a", ) 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 MicrowaveOven(EmbodiChainDataset): """get_data_path("MicrowaveOven/microwave_oven.urdf")"""
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "MicrowaveOven.zip"), "5672da2d5a888a12469d6277636646b0", ) 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 Microwave(EmbodiChainDataset): """get_data_path("Microwave/microwave.urdf")"""
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "Microwave.zip"), "9a5de27af5632ab6f5082b383c86acb4", ) 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 PlasticTray(EmbodiChainDataset): """get_data_path("PlasticTray/plastic_tray.glb")"""
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "PlasticTray.zip"), "66f1f8a507052f9e33be5433fa2a2667", ) 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 WaterBasin(EmbodiChainDataset): """get_data_path("WaterBasin/water_basin.glb")"""
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "WaterBasin.zip"), "9ae41630f6f52dccd7b95ab21b6ba989", ) 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 Drawer(EmbodiChainDataset): """get_data_path("Drawer/model_split_links_with_inertials.urdf")"""
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "Drawer.zip"), "3981636db1f4188146fce25d54084612", ) 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 Cow(EmbodiChainDataset): """get_data_path("COW/cow.obj")"""
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "Cow.zip"), "f93d371574187fdb74b26e9270ca52ff", ) 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 BakeTextureObj(EmbodiChainDataset): """get_data_path("BakeTextureObj/hdr_color_mesh.ply")"""
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "BakeTextureObj.zip"), "4f10d5ce1f4cd051a2dfb1c19445d5a9", ) 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 DrawerUSD(EmbodiChainDataset): """get_data_path("DrawerUSD/drawer_001.usdc")"""
[docs] def __init__(self, data_root: str = None): data_descriptor = o3d.data.DataDescriptor( os.path.join(EMBODICHAIN_DOWNLOAD_PREFIX, obj_assets, "DrawerUSD.zip"), "47ca77e3e87e7c891606a7cb56b44ea0", ) 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 PourWaterAssets(EmbodiChainDataset): """Open-neck bottle, cup and tabletop bundle used by PourWater. The archive retains upstream sources, attribution, licenses and a SHA-256 manifest. Model files live at its root, for example ``get_data_path("PourWaterAssets/bottle.glb")``. Args: data_root: Optional cache root; defaults to ``EMBODICHAIN_DATA_ROOT``. """
[docs] def __init__(self, data_root: str | None = None) -> None: filename = f"{obj_assets}/PourWaterAssets.zip" hub_prefix = ( "https://huggingface.co/datasets/DexForceAI/embodichain_data/resolve/main/" ) urls = [f"{EMBODICHAIN_DOWNLOAD_PREFIX}{filename}"] # Newly uploaded assets can precede mirror synchronization. if EMBODICHAIN_DOWNLOAD_PREFIX != hub_prefix: urls.append(f"{hub_prefix}{filename}") descriptor = o3d.data.DataDescriptor(urls, "7267053763ed8e1b84f3da3e49d39f01") super().__init__( type(self).__name__, descriptor, EMBODICHAIN_DEFAULT_DATA_ROOT if data_root is None else data_root, )