本文へ移動
cccskills
無料GitHub で公開

add-functor

Use when adding a new observation, event, reward, action, dataset, or randomization functor to an EmbodiChain environment

日本語の概要は準備中です。原文の説明を表示しています。

DexForce/EmbodiChainスター 236(GitHub 236 + cccskills 0)

実行スコア 未検証

インストール方法を見る

含まれるファイル(2)

  • SKILL.md6.1 KB
  • agents/openai.yaml93 B

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Add Functor

Scaffold a new functor following EmbodiChain's Functor/FunctorCfg pattern.

When to Use

  • User asks to add an observation term, reward function, event handler, action term, dataset functor, or randomizer
  • User says "add a reward", "new observation", "create a randomizer", "add event functor"
  • Any new function needs to be registered in a manager config

Determine Functor Type

Functor TypeConfig ClassModule FileManagerSignature
ObservationObservationCfg (extends FunctorCfg)managers/observations.pyObservationManager(env, obs, entity_cfg, ...) -> Tensor
RewardRewardCfg (extends FunctorCfg)managers/rewards.pyRewardManager(env, obs, action, info, ...) -> Tensor
EventEventCfg (extends FunctorCfg)managers/events.pyEventManager(env, env_ids, ...) -> None
ActionActionTermCfg (extends FunctorCfg)managers/actions.pyActionManagerVaries
DatasetDatasetFunctorCfg (extends FunctorCfg)managers/datasets.pyDatasetManager(env, ...) -> dict
RandomizationEventCfg (randomizations ARE events)managers/randomization/<type>.pyEventManager(env, env_ids, entity_cfg, ...) -> None

Two Functor Styles

Function-style (Preferred for Simple Functors)

A plain function with the right signature. Registered via FunctorCfg(func=my_function, params={...}).

def my_reward(
    env: EmbodiedEnv,
    obs: dict,
    action: EnvAction,
    info: dict,
    my_param: float = 1.0,       # params become keyword args
) -> torch.Tensor:
    """Short one-line summary.

    Longer description if needed.

    Args:
        env: The environment instance.
        obs: The observation dictionary.
        action: The action taken.
        info: The info dictionary.
        my_param: Description of this parameter.

    Returns:
        Reward tensor of shape (num_envs,).
    """
    # implementation
    return result

Class-style (Required When Functor Has State)

A class inheriting Functor, with __init__(cfg, env) and __call__(env, ...). Registered via FunctorCfg(func=MyClass, params={...}).

class my_randomizer(Functor):
    """One-line summary."""

    def __init__(self, cfg: FunctorCfg, env: EmbodiedEnv):
        super().__init__(cfg, env)
        # Extract params and initialize state
        self.entity_cfg: SceneEntityCfg = cfg.params["entity_cfg"]

    def __call__(self, env: EmbodiedEnv, env_ids: torch.Tensor, **kwargs):
        """Apply the randomization.

        Args:
            env: The environment instance.
            env_ids: Target environment IDs.
        """
        # implementation

Steps

1. Identify Functor Type and Style

Ask the user:

  1. Which manager? (observation / reward / event / action / dataset / randomization)
  2. Function or class style? (function for stateless, class for stateful)
  3. What does it do? (brief description for naming + docstring)

2. Choose the Right Module File

Place the functor in the existing module for its type:

TypeFile
Observationembodichain/lab/gym/envs/managers/observations.py
Rewardembodichain/lab/gym/envs/managers/rewards.py
Eventembodichain/lab/gym/envs/managers/events.py
Actionembodichain/lab/gym/envs/managers/actions.py
Datasetembodichain/lab/gym/envs/managers/datasets.py
Physics randomizationembodichain/lab/gym/envs/managers/randomization/physics.py
Visual randomizationembodichain/lab/gym/envs/managers/randomization/visual.py
Spatial randomizationembodichain/lab/gym/envs/managers/randomization/spatial.py
Geometry randomizationembodichain/lab/gym/envs/managers/randomization/geometry.py

3. Write the Functor

Follow the template for function-style or class-style (see above).

Key rules:

  • First argument is always env: EmbodiedEnv (use TYPE_CHECKING guard for the import)
  • Use from __future__ import annotations at the top
  • Use SceneEntityCfg for entity references, not raw strings
  • For observation functors: add shape key to FunctorCfg.extra dict
  • For randomization functors: second arg is env_ids: torch.Tensor | list[int]
  • For reward functors: return shape must be (num_envs,)

4. Update __all__

Add the new functor to the module's __all__ list. If no __all__ exists, create one.

5. Write a Test

Place at tests/gym/envs/managers/test_<functor_type>.py (append to existing file if present).

For functors that don't need a live simulation, use mock objects (MockEnv, MockSim, etc.) following the pattern in tests/gym/envs/managers/test_reward_functors.py.

6. Run black

black embodichain/lab/gym/envs/managers/<module>.py
black tests/gym/envs/managers/test_<functor_type>.py

Common Mistakes

MistakeFix
Wrong first argument signatureObservation: (env, obs, ...), Reward: (env, obs, action, info, ...), Event/Randomization: (env, env_ids, ...)
Importing EmbodiedEnv at module levelUse TYPE_CHECKING guard to avoid circular imports
Forgetting SceneEntityCfg for entity refsAlways use SceneEntityCfg(uid="...") not bare strings
Returning wrong tensor shapeRewards must return (num_envs,), observations must match declared shape
Missing from __future__ import annotationsRequired in every file
Class-style functor not calling super().__init__Always call super().__init__(cfg, env)
Adding randomizer as standaloneRandomizations ARE events — they go in randomization/ but use EventCfg

Quick Reference

StepAction
1Identify manager type + function vs class style
2Write functor in the correct module file
3Update __all__ in that module
4Write test with mocks (no sim needed for most)
5Run black on changed files

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

Add a new simulation atomic action or motion primitive to EmbodiChain's typed planning and execution framework. Use when implementing a new skill, goal contract, action planner, symbolic effect, registration entry, documentation, and tests for AtomicActionEngine.

日本語の概要は準備中です。原文の説明を表示しています。

DexForce/EmbodiChain2362026年10月26日 更新

Claude adapter for the canonical EmbodiChain add-atomic-action skill.

日本語の概要は準備中です。原文の説明を表示しています。

DexForce/EmbodiChain2362026年10月26日 更新

Claude adapter for the canonical EmbodiChain add-embodiment-component skill.

日本語の概要は準備中です。原文の説明を表示しています。

DexForce/EmbodiChain2362026年10月26日 更新

Add or update a reusable EmbodiChain embodiment YAML component that owns one simulation robot, its sensor suite, and an optional Task Program skill_profile. Use for configs/components/embodiments, new Task Program-compatible robots, or multi-embodiment task deployment.

日本語の概要は準備中です。原文の説明を表示しています。

DexForce/EmbodiChain2362026年10月26日 更新

Claude adapter for the canonical EmbodiChain add-functor skill.

日本語の概要は準備中です。原文の説明を表示しています。

DexForce/EmbodiChain2362026年10月26日 更新

add-robot

無料

Claude adapter for the canonical EmbodiChain add-robot skill.

日本語の概要は準備中です。原文の説明を表示しています。

DexForce/EmbodiChain2362026年10月26日 更新

DexForce のスキルをすべて見る

このスキルの問題を報告する