Source code for embodichain.lab.sim.motion.workspace.configs.sampling_config

# ----------------------------------------------------------------------------
# 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 enum import Enum
from dataclasses import dataclass
from typing import Callable


[docs] class SamplingStrategy(Enum): """Sampling strategy for joint space.""" UNIFORM = "uniform" # Uniform grid sampling RANDOM = "random" # Random sampling HALTON = "halton" # Quasi-random Halton sequence SOBOL = "sobol" # Quasi-random Sobol sequence LATIN_HYPERCUBE = "lhs" # Latin Hypercube Sampling IMPORTANCE = "importance" # Importance sampling (requires weight function) GAUSSIAN = "gaussian" # Gaussian (normal) distribution sampling SPHERE = "sphere" # Sphere-constrained uniform sampling
[docs] @dataclass class SamplingConfig: """Configuration for sampling strategies in workspace analysis.""" strategy: SamplingStrategy = None """Sampling strategy to use.""" num_samples: int = 1000 """Number of samples to generate.""" grid_resolution: int = 10 """Resolution for grid sampling (used with UNIFORM strategy).""" batch_size: int = 1000 """Number of samples to process in each batch.""" seed: int = 42 """Random seed for reproducibility.""" importance_weight_func: Callable | None = None """Weight function for importance sampling (used with IMPORTANCE strategy).""" gaussian_mean: float | None = None """Mean for Gaussian sampling (used with GAUSSIAN strategy). If None, uses center of bounds.""" gaussian_std: float | None = None """Standard deviation for Gaussian sampling (used with GAUSSIAN strategy). If None, uses 1/6 of range.""" # Sphere sampling parameters sphere_center_mode: str = "bounds_center" """How to determine sphere center for SPHERE strategy. Options: 'bounds_center', 'custom', 'auto'.""" sphere_radius_mode: str = "inscribed" """How to determine sphere radius for SPHERE strategy. Options: 'inscribed', 'circumscribed', 'custom'.""" sphere_boundary_handling: str = "reject" """How to handle boundary violations for SPHERE strategy. Options: 'clip', 'reject', 'extend'.""" sphere_center: list | None = None """Custom sphere center for SPHERE strategy (used when sphere_center_mode='custom').""" sphere_radius: float | None = None """Custom sphere radius for SPHERE strategy (used when sphere_radius_mode='custom').""" def __post_init__(self): """Set default strategy after initialization.""" if self.strategy is None: self.strategy = SamplingStrategy.UNIFORM