# ASLA 스마트공장 설계·운영 — 구현 및 검수 규격

2026-11-01 구현. 기존 `/factory.html`의 도로/공동학습/작업셀은 보존하고 `/smart-factory.html`에 별도 도메인 작업공간을 추가했다. 이 문서의 '생산'은 내부 시뮬레이션이다. 고객 시스템·실기체 연결 실적은 없다.

## 실행 경로

1. 새 프로젝트 → 요구 분석(치수·재질 규칙) → 치수 확인 → 설계안 생성.
2. 공장 가로·세로와 기둥 입력 → 배치 후보 생성 → Sandbox 비교 → 설계 승인.
3. ERP 견적 → 주문 확정 → SCM 자재 예약. 부족하면 발주 → 입고 확정 → 예약.
4. MES 작업지시 릴리스 → 3D 작업셀에서 생산 실행. 비상정지/해제 및 재생 일시정지 지원.
5. 완료 후 운영자가 모의 실측 폭 입력 → 공차 판정 → 출고·청구 내부 기록.
6. 동의된 출고 결과를 배치 결과 정책에 학습 → 동일 조건의 다음 프로젝트 배치 추천에 반영. 정책 복구는 업무 거래·물리 동작을 되돌리지 않는다.

## 모듈 구조

| 도메인 | 코드 | 실행 책임과 범위 |
|---|---|---|
| 제품/설계 | `smart/cad.mjs`, `smart/geometry.mjs` | 3개 형상 파라미터, 질량, 정확한 STEP, DXF, CadQuery 소스, GLB |
| 공간/공정 | `smart/engine.mjs` | 직선/반전/여유 배치, 경계·기둥·설치 간격·UR 도달·하중·치구 검증 |
| 오케스트레이션 | 기존 `workcell-engine.mjs` | 4개 UR 팔, 2개 AMR, 10개 작업 의존성, 그립·인계·도킹·소유권·유한 버퍼 |
| 시각화 | `smart/scene.mjs` | 기존 UR 공식 시각 메시/운동학과 Blender 설비 재사용, 실제 프로젝트 배치와 제품 메시 표시 |
| ERP/SCM/MES | `smart/engine.mjs` | 내부 견적·주문·발주·입고·LOT·예약·소비·작업지시·검사·출고·예시 분개 |
| 결과 정책 | `smart/engine.mjs` | 동일 조건 컨텍스트별 배치 보상 평균 갱신/추천/복구 |
| API/저장 | `lib/cloud-runtime.mjs`, `lib/store.mjs` | 기존 계정 경계·서명 세션·역할·CAS·중복 키·감사 체인; R2 스냅샷, D1 버전/감사 |
| 브라우저 | `smart/ui.mjs`, `smart/worker.mjs` | UI, 독립 IndexedDB, 백그라운드 도메인 계산, 카탈로그 입력/내보내기 |

## CAD 생성 원리와 검증

지원 제품: 4홀 플레이트, 6홀 플레이트, 4홀 L형 브래킷. 단위 mm. 재질 밀도: AL6061-T6 2700kg/m³, S235 7850kg/m³(설계 계산 상수). 임의 자유형상·생성형 CAD·구조 해석은 구현 범위가 아니다.

`compile_templates.py`가 CadQuery/Open CASCADE로 평면·원통 기반 AP214 BREP를 만든다. 2D PCURVE 없이 내보낸 정확한 3D 토폴로지에 치수별 아핀 좌표 바인딩을 추출한다. 브라우저는 지원 형상의 정점·3D 원·원통 반지름을 갱신한다. STEP은 삼각 메시를 CAD라고 이름 붙인 파일이 아니다. L형은 CAD에서 실제 union/cut으로 한 솔리드다. 브라우저 GLB는 시각 메시이며 L형 접합면 중첩이 있으므로 수밀 제조 STL 대체품이 아니다.

`python scripts/cad/verify_exports.py`: 세 형상 × 세 치수 = 9개 런타임 STEP를 OCCT로 재수입해 `isValid`, 솔리드 1개, 이론 체적 오차 <0.001mm³, 외곽 치수 오차 <0.0001mm를 검사한다. 결과 `/smart/cad/verification.json`. 구조 강도·설계 공차·조립성·가공 가능성을 입증하는 시험은 아니다.

DXF는 mm 상면 투상(브래킷은 추가 정면 투상). CAD 소스는 실제 STEP/STL 재생성 Python이다. CAM 파일은 좌표를 포함한 검토 초안이며 실행 절삭 사이클이 없다. 툴·속도·고정구·포스트프로세서 검증 없이 CNC에 보내지 않는다.

## 공간 및 장비 제약

공장 입력 8~60m 범위와 기둥 최대 20개. 현재 배치 모듈은 최소 18×10m 직선 또는 14×12m 절곡 배치; 회전 배치도 지원한다. 임의 공장의 최적 레이아웃을 보장하지 않는다. 후보 3개는 제약 템플릿이다.

UR5e 2대가 검사셀 인계, UR10e 2대가 가공/팔레트 작업을 한다. UR 운동학으로 모든 목표의 IK와 동작 중 TCP를 계산한다. UR5e 공구 0.6kg + 이송 치구 0.8kg + 제품 ≤5kg. 현재 이송 치구는 제품 240×240×120mm까지다. 가공 기계의 체류는 6초 모의값이다. AMR은 일반 100kg 설계 모델이며 실기종 인증이 아니다. 로봇 충돌은 단순화되어 있고 손가락 접촉/토크/절삭/마찰/유연체를 실제 정밀 물리로 풀지 않는다.

설비 바닥면 설치 간섭 및 기둥은 사전 검사한다. AMR은 실제 상태에서 격자 경로 탐색과 근접 차단을 적용한다. 컨베이어는 도킹 이송 시각화이며 벨트 동역학은 계산하지 않는다. 실제 제품은 규격화 이송 치구 위에 놓인 것으로 표시한다.

## 단계별 소프트웨어 시험·검수

| 단계 | 입력/시험 | 통과 | 차단/보류 |
|---|---|---|---|
| 설계 | 형상 3종의 9개 STEP 재수입 | 유효 단일 솔리드, 체적·외곽 기준 충족 | 구멍/두께/벽 간섭, 치수 범위 초과 |
| 배치 | 후보별 속도 계수 .9/1/1.1 총 9회 | 선택 후보 3/3, 각 10개 작업 완료, 1200초 내 | IK/공간/하중/치구 오류, 경로 차단·공정 오류·시간 초과 |
| 승인 | 설계 식별자·배치 식별자 일치 | 동일 설계/배치의 시험 통과 | 설계 변경 시 승인 무효, 주문 뒤 변경 금지 |
| 업무 | 주문/재고/자재 예약 | 예약 가능한 미보류 LOT, 중복 거래 없음 | 부족·중복 입고·중복 출고·미승인 작업지시 |
| 생산 | FK/IK·그립·인계·AMR 실제 상태 계산 | 수량 완료, 10×수량 작업, 소비 1회/제품 | 비상정지·LOT 보류·공정 오류 |
| 품질 | 운영자 폭 입력과 공차 비교 | 절대 폭 오차 ≤ 입력 공차 | 불합격 시 출고 불가; 센서 기반 검사는 미연결 |
| 학습 | 동의+검사통과+출고 결과 | 단일 결과 1회 갱신, 저장/복구, 동일 조건 추천 | 무동의·미출고·중복 학습 거부 |
| API | 계정·역할·CAS·Idempotency-Key | R2 재조회 동일, 버전 충돌 409, 감사 체인 유효 | 타 계정 세션·viewer 쓰기 금지 |

속도 계수 시험은 공칭 모델의 민감도 반복이다. 독립 랜덤 시드의 통계적 성능 우월성·실기체 재현성을 입증하지 않는다. 실패한 후보는 승인할 수 없다. 실제 단독/공동/연합학습 비교 실험은 기존 학습 메뉴를 그대로 유지한다.

## 결과 정책 알고리즘

컨텍스트 = 제품군·재질·폭·길이·두께·높이·구멍·수량·공장 가로/세로·기둥 배열 식별자. 후보 a의 실행 시간 T, 보상 r = −T/1000, 표본 수 N[a]를 사용한다.

`N[a] ← N[a]+1; Q[a] ← Q[a] + (r−Q[a])/N[a]`

같은 컨텍스트에서 기록이 있는 Q를 배치 추천 순위에 사용한다. 신규 설계에도 3회 Sandbox 통과를 다시 요구한다. 품질 불합격/미출고/무동의 결과는 학습하지 않는다. ASLA 1.0의 선택·검증·적용 흐름을 참고한 별도 공장 배치 결과 정책이며 ASLA 정본 알고리즘, 강화학습 자율주행 완성, 선택적 연합학습 또는 ASLA 2.0/3.0 구현으로 표시하지 않는다. 기존 도로 DQN 및 기존 ASLA 연합 실험 가중치는 수정하지 않는다.

## API·데이터 계약

GET `/v1/smart/state`: 로그인 계정의 작업공간 또는 null.
POST `/v1/smart/{action}`: `Authorization: Bearer <서명 세션>`, 매 요청 `Idempotency-Key`, `expected_version` 필수(첫 init 제외). 역할 block/lud/daton 허용, viewer 읽기만. 요청 JSON 최대 기존 런타임 제한을 따른다.

- `create`: `{name,requirements,spec,factory}`
- `design`: `{spec,factory,requirements}`; `plan`, `sandbox`, `approve`, `quote`, `order`
- `purchase`: `{kg?}`, `receive`: `{id:PO_ID}`, `reserve`, `release`
- `advance`: `{steps:1..300}`, `estop`, `resume`, `lot-hold`: `{id,blocked}`
- `quality`: `{width,by?}`, `ship`, `learn`, `rollback`, `learning-consent`: `{allow}`
- `switch`: `{id}`

응답은 전체 신규 스냅샷. schema=`asla-smart-factory-v1`, revision 증가, projects[]에 설계/배치/시험/ERP/SCM/MES/cell이 연결된다. 숫자 치수 mm, 공장 위치 m, 자재 kg, 원가 KRW. FNV 설계/배치 식별자는 비교용이며 암호학적 서명이 아니다. 서버 별도 감사 이벤트만 SHA-256 체인이다.

기기 모드는 독립 IndexedDB 스냅샷과 이벤트 순서만 제공하며 서명·변조 방지를 주장하지 않는다. 서버 복원은 서버 상태 읽기이며 기기 복사본을 자동으로 서버에 덮어쓰지 않는다. 백업 JSON 가져오기는 기기 모드에 한정한다.

내장 제품 카탈로그는 작성 샘플이다. 카탈로그 JSON 배열의 각 항목은 spec 필드와 id/source를 가질 수 있다. 외부 공급사 검색·가격·실재 품목 데이터가 아니다.

## 실제 공장 전환에 필요한 입력과 개발

| 구간 | 필요한 현장 입력/검수 | 현재 상태 |
|---|---|---|
| 설계 | 고객 승인 도면, 제품 규격/하중/공차, DFM, 가공 도구/고정구 | 3종 파라미터 초안만 구현 |
| 공장 | 실측 CAD/IFC, 전기·배관·소방·안전 구획, 로봇 TCP/베이스 교정 | 가로·세로·기둥 입력, 제약 모듈 |
| ERP/SCM | 품목/BOM/공급사/재고/원가/세무/승인 매핑 | 내부 테스트 원장·주문·자재 엔진 |
| MES | 공정 라우팅·작업지시·실적·불량·LOT/시리얼 매핑 | 내부 MES 상태; 신규 공간 외부 어댑터 미연결 |
| 장비 | PLC/OPC UA, UR RTDE/드라이버, AMR fleet API, 인터록/안전 검수 | 기존 별도 작업셀 게이트웨이 코드는 유지; 신규 배치의 실기체 연결 없음 |
| 학습 | 수집 항목·목적·보유 기간·장소·반출·학습/연합/재배포 동의 | 사용자 체크는 모의 결과 학습만 허용 |

현장 데이터 동의에는 촬영 범위·작업자 식별정보 처리·제품 도면 IP·고객 간 공유 금지/허용 범위·재학습과 업데이트 재배포 권한·철회 및 보유 정책을 별도 계약으로 고정해야 한다. 현재 체크박스는 그 계약을 대체하지 않는다.

개발 책임 제안(계약 확정 아님): 루드다이나믹스—로봇/센서/좌표 교정/현장 안전·시험; 데이톤—엣지/서버/게이트웨이/계정·저장·운영; 블록오디세이—스키마·온톨로지·선택/검증/정책·학습 증적. ERP/MES/SCM 업체 및 CAD/제조 엔지니어의 인터페이스·제조 검수가 별도로 필요하다.

## 2026-11-02 실행 흐름 수정

초기 화면의 생산 버튼이 선행 조건을 설명 없이 요구하던 문제를 수정했다. ‘N개 생산 준비·모의 실행’은 배치 → Sandbox → 모의 승인 → 견적 → 모의 주문 → 필요 시 모의 발주/입고 → 자재 예약 → MES 릴리스를 저장한 뒤 기존 실제 시뮬레이터를 진행한다. 단계 실패 시 중단하고 이유를 상단에 남긴다. 이미 완료한 거래를 다시 만들지 않고 재개한다. 품질검사와 출고·학습은 자동으로 합격 처리하지 않는다.

요구사항을 수정한 뒤 설계/준비 버튼을 누르면 해석 가능한 치수·재질·수량을 반영한다. 이후 입력폼을 수정한 경우 마지막 폼 입력을 우선한다. 반영된 사양과 요구문 차이를 상단에 표시하며 메시/자산 로딩 완료 콜백은 편집 중인 폼을 다시 채우지 않는다. 모바일 보기 버튼과 터치 기기 간편 배치를 추가했다.

검증: 강재 L형 브래킷 4개(초기 강재 5kg로 부족) 시나리오의 준비 단계, 18.09kg 입고, 실제 이송 40개 작업 완료를 도메인 시험으로 확인했다. 서버 API도 발주/입고/예약/작업지시/advance 후 로봇 상태 변화 및 R2 재조회 일치를 별도 확인했다. 이는 공개 인터넷 실계정 로그인이나 실기체 가동 검증을 의미하지 않는다.
