接入ai
This commit is contained in:
@@ -34,6 +34,7 @@ from src.joint_module.reducer_adapters import (
|
||||
SUPPORTED_JOINT_FAMILIES,
|
||||
get_reducer_joint_adapter,
|
||||
)
|
||||
from src.joint_module.reference_assembly import infer_reference_placements
|
||||
from src.kinematics import solve_instance
|
||||
from src.models import ValidationReport, read_json
|
||||
from src.parameter_solver import load_requirement, solve_parameters
|
||||
@@ -49,6 +50,11 @@ REDUCER_REQ = ROOT / "input" / "requirements" / "reducers" / "simple_2k_h" / "si
|
||||
TEMPLATE = ROOT / "src" / "configurations" / "simple_2k_h" / "topology.template.json"
|
||||
CASCADE_JOINT_REQ = ROOT / "input" / "requirements" / "joint_modules" / "3500_motor_housing_cascade.json"
|
||||
CASCADE_REDUCER_REQ = ROOT / "input" / "requirements" / "reducers" / "simple_2k_h_cascade" / "simple_2kh_cascade_ratio_9_spur.json"
|
||||
STANDARD_MOTOR_STEP = ROOT / "input" / "assets" / "motors" / "3500_motor_part2_standard.step"
|
||||
ACTUATOR_HOUSING_STEP = ROOT / "input" / "assets" / "housings" / "actuator_v2_knee_abd_main_case_2.step"
|
||||
CHIP_STEP = ROOT / "input" / "assets" / "chip" / "chip.step"
|
||||
REFERENCE_ASSEMBLY_STEP = ROOT / "input" / "assets" / "references" / "actuator_v2_knee_abd_reference.step"
|
||||
FIXED_PLATFORM_PROFILE = ROOT / "input" / "assets" / "platforms" / "actuator_v2_fixed_platform.json"
|
||||
FERGUSON_REDUCER_REQ = ROOT / "input" / "requirements" / "reducers" / "ferguson_wolfrom" / "ferguson_wolfrom_ratio_531p25_spur.json"
|
||||
CASCADE_TEMPLATE = ROOT / "src" / "configurations" / "simple_2k_h_cascade" / "topology.template.json"
|
||||
FERGUSON_TEMPLATE = ROOT / "src" / "configurations" / "ferguson_wolfrom" / "topology.template.json"
|
||||
@@ -95,11 +101,9 @@ def _generated_housing_step(tmp_path: Path) -> Path:
|
||||
|
||||
|
||||
def _runtime_joint_requirement(tmp_path: Path) -> Path:
|
||||
housing_step = _generated_housing_step(tmp_path)
|
||||
payload = {
|
||||
"module_type": "planetary_joint_module",
|
||||
"motor_step": str(MOTOR_STEP.resolve()),
|
||||
"housing_step": str(housing_step.resolve()),
|
||||
"platform_profile": str(FIXED_PLATFORM_PROFILE.resolve()),
|
||||
"reducer_requirement": str(REDUCER_REQ.resolve()),
|
||||
"placement_policy": "infer_then_write_editable_json",
|
||||
"motor_to_reducer_relation": "motor_output_to_sun_keyed_input",
|
||||
@@ -215,6 +219,12 @@ def _passing_reducer_report(run_id: str) -> ValidationReport:
|
||||
def test_joint_requirement_loads() -> None:
|
||||
requirement = load_joint_requirement(JOINT_REQ)
|
||||
assert requirement.module_type == "planetary_joint_module"
|
||||
assert requirement.platform_id == "actuator_v2_fixed_platform"
|
||||
assert Path(requirement.motor_step) == STANDARD_MOTOR_STEP
|
||||
assert Path(requirement.housing_step) == ACTUATOR_HOUSING_STEP
|
||||
assert requirement.chip_step is None
|
||||
assert Path(requirement.reference_assembly_step or "") == REFERENCE_ASSEMBLY_STEP
|
||||
assert requirement.motor_placement_policy == "external_flush_input_end"
|
||||
assert requirement.motor_to_reducer_relation == "motor_output_to_sun_keyed_input"
|
||||
assert requirement.housing_relation == "ring_fixed_to_housing"
|
||||
|
||||
@@ -237,11 +247,30 @@ def test_cascade_joint_requirement_loads_and_ports_resolve() -> None:
|
||||
template=load_template(CASCADE_TEMPLATE),
|
||||
)[0]
|
||||
assert requirement.joint_output == "s2_carrier_output"
|
||||
assert requirement.platform_id == "actuator_v2_fixed_platform"
|
||||
assert requirement.chip_step is None
|
||||
assert Path(requirement.reference_assembly_step or "") == REFERENCE_ASSEMBLY_STEP
|
||||
assert requirement.motor_placement_policy == "external_flush_input_end"
|
||||
assert instance.boundary.input == "s1_sun"
|
||||
assert instance.boundary.output == "s2_carrier"
|
||||
assert instance.boundary.fixed_members == ["s1_ring", "s2_ring"]
|
||||
|
||||
|
||||
def test_reference_assembly_recovers_motor_placement() -> None:
|
||||
_ocp_or_skip()
|
||||
placements = infer_reference_placements(
|
||||
reference_step=REFERENCE_ASSEMBLY_STEP,
|
||||
component_steps={
|
||||
"housing": ACTUATOR_HOUSING_STEP,
|
||||
"motor": STANDARD_MOTOR_STEP,
|
||||
},
|
||||
)
|
||||
|
||||
assert placements["housing"].translation_mm == (0.0, 0.0, 0.0)
|
||||
assert placements["motor"].translation_mm[0] == pytest.approx(2.0, abs=1e-6)
|
||||
assert placements["motor"].source == "inferred_from_reference_assembly_occurrence"
|
||||
|
||||
|
||||
def test_joint_requirements_reference_supported_reducer_families() -> None:
|
||||
for requirement_path in (ROOT / "input" / "requirements" / "joint_modules").glob("*.json"):
|
||||
requirement = load_joint_requirement(requirement_path)
|
||||
@@ -250,6 +279,14 @@ def test_joint_requirements_reference_supported_reducer_families() -> None:
|
||||
assert reducer_requirement.topology_family in SUPPORTED_JOINT_FAMILIES
|
||||
|
||||
|
||||
def test_all_joint_requirements_use_the_fixed_platform_profile() -> None:
|
||||
platform_ids = {
|
||||
load_joint_requirement(requirement_path).platform_id
|
||||
for requirement_path in (ROOT / "input" / "requirements" / "joint_modules").glob("*.json")
|
||||
}
|
||||
assert platform_ids == {"actuator_v2_fixed_platform"}
|
||||
|
||||
|
||||
def test_ferguson_reducer_ports_remain_available_for_reducer_exports() -> None:
|
||||
instance = solve_parameters(
|
||||
requirement=load_requirement(FERGUSON_REDUCER_REQ),
|
||||
|
||||
Reference in New Issue
Block a user