REPOSITORY
metafarmers/visual-servo-manipulation Private
[참조 MVP] 비주얼 서보 매니퓰레이션 — 선택한 작업대상의 위치 오차를 로봇팔 정렬 명령으로 변환하는 참조 MVP입니다.
https://git.agrithing.ai/metafarmers/visual-servo-manipulation.git 1df47d4 feat: 비주얼 서보 매니퓰레이션 구체 MVP 구현
ab79649 ci: add static dynamic and evidence gates
b9c473b feat: add executable institution reference MVP
8e07b3f docs: define product role and interface contract
2 items · feat/concrete-mvp-v2
·/ asw_component/component.py
python · 1.2 KB · 321018b Download
from __future__ import annotationsfrom math import sqrtdef execute(payload: dict) -> dict: error = payload.get("positionErrorMm") if not isinstance(error, list) or len(error) != 3: raise ValueError("positionErrorMm must contain x, y, z") max_step = float(payload.get("maxStepMm", 10)) tolerance = float(payload.get("toleranceMm", 2)) if max_step <= 0 or tolerance < 0: raise ValueError("motion limits must be positive") vector = [float(value) for value in error] step = [max(-max_step, min(max_step, value)) for value in vector] residual_vector = [value - motion for value, motion in zip(vector, step)] residual = sqrt(sum(value * value for value in residual_vector)) converged = sqrt(sum(value * value for value in vector)) <= tolerance if converged: step = [0.0, 0.0, 0.0] residual = 0.0 return {"component": "metafarmers/visual-servo-manipulation", "accepted": True, "status": "ALIGNED" if converged else "ALIGNING", "target": "acu", "targetId": str(payload.get("targetId", "unknown")), "stepMm": step, "residualMm": round(residual, 3), "converged": converged}