플라잎
경력근거: 플라잎의 AI 양팔로봇 시스템을 기반으로, 각 현장과 작업에 맞춘 솔루션을 개발합니다.
※ 실제 산출물이 아닌 AI 예측 시안입니다.
플라잎은 AI 양팔로봇 솔루션 OASIS 를 제조사 생산라인에 공급하며, FDE 는 '각 고객사·현장·작업의 특성에 맞춰 요구사항 분석·문제 설정' 부터 실제 라인 적용까지 전 과정에 관여합니다. 이 도구는 그 첫 관문인 '현장 요구를 작업 명세로 정의하고 부품 자세로 파지 계획을 세워 실패 원인을 규칙으로 판정하는' 사슬을 그대로 만든 것이라, 플라잎이 실제로 다루는 현장 부품·그리퍼·작업 유형이 있어야 의미가 커집니다. 다만 이 포트폴리오가 보여주는 것은 그 요구 정의·파지 기하·규칙 판정 파이프라인 골조 기술이며, VLA·강화학습·실제 로봇 제어·모션 플래닝의 깊이는 주장하지 않습니다. 모르는 깊이는 면접에서 솔직히 모른다고 말하는 편이 낫습니다.
FDE 자격요건의 첫 항목이 '현장 작업의 요구사항·제약조건·실패 케이스를 분석해 기술적 문제로 정의' 하는 능력입니다. 자연어 요구를 구조화 작업 명세로 바꾸고 못 푸는 케이스를 사유로 분류하는 것이 이 역할의 핵심입니다.
플라잎은 AI 양팔로봇 솔루션 OASIS 를 제조사 생산라인에 공급합니다. FDE 는 각 현장·작업 특성에 맞춰 솔루션을 개발하고 실제 라인에 적용해 기술 이슈를 해결합니다. 파지 순서·실패 원인까지 담은 작업 계획이 그 출발점입니다.
우대사항에 Object Detection·Pose Estimation·PyTorch·VLA 가 있습니다. 부품의 6자유도 자세를 인식해 파지점을 정하는 것이 물리적 조작의 관문이라, 자세 추정과 파지 기하를 파이프라인으로 잇습니다.
고객사 현장의 '이 커넥터를 집어 지그에 꽂아 달라'는 말로 된 요구를 받아, 작업 종류·대상 부품·제약으로 구조화한 뒤 부품 자세를 보고 파지점·접근각·파지 순서를 계획합니다. 파지 가능/불가와 실패 원인(자세 결측·닿지 않음·충돌·그리퍼 불일치·미등록 부품)을 그리퍼 허용범위와 파지 영역 기하로 규칙 판정해 2.5D 씬 뷰어로 보여줍니다. 1주차만으로 완성품이고, 합성 카메라 이미지에서 실제 자세를 추정(2주차)하고 실패 원인으로 재파지·조립 순서를 최적화(3주차)하는 단계로 키웁니다. 근거는 채용공고 정렬이고, 데이터는 작성자가 만든 더미입니다.
플라잎 FDE. 고객사 현장에서 말로 들어오는 작업 요구를 매번 손으로 작업 명세와 파지 계획으로 옮기고, 안 되는 케이스의 원인을 일일이 찾아내던 상황을 한 화면에서 끝내고 싶은 사람입니다.
고객 자연어 요구를 작업 종류·대상·제약으로 구조화하고 부품 자세와 부품 마스터(파지 영역·그리퍼)를 붙이면, (a) 파지 순서와 파지점·접근각을 기하로 계산하고, (b) 파지 가능/불가와 실패 원인을 규칙으로 판정하며, (c) 자세를 메타 가정에서 실제 추정 모델로 바꿔도 같은 파이프라인이 그대로 돕니다.
자연어 요구를 받아 구조화 작업 명세로 바꾸고, 부품 자세를 메타데이터로 가정해 파지점·접근각·순서를 계획한 뒤 파지 가능/불가와 실패 원인을 기하 규칙으로 판정해 2.5D 뷰어로 보여주는 동작하는 도구입니다. 실제 카메라 이미지 기반 자세 추정은 2주차로 미루고, 1주차는 감지 결과(자세)를 주어진 메타데이터로 가정합니다.
렌더한 합성 카메라 이미지에서 PyTorch 로 Object Detection·Pose Estimation 을 미세조정해 부품 자세를 추정하고, 1주차의 가정 자세를 추정 자세로 교체합니다. 로봇 엔지니어 2명이 파지 계획이 타당한지 라벨링해 신뢰도를 보여주는 대시보드를 붙입니다.
실패 사유 분포로 대체 파지점·접근각을 재계산하고, 다부품 조립의 충돌·의존성을 고려한 순서 최적화를 붙인 뒤 두 번째 작업 유형으로 이식해 재사용 골조임을 시연하는 단계입니다.
'커넥터를 지그에 꽂아 달라' 같은 자연어 요구 10건을 넣으면, 구조화된 작업 명세와 부품별 파지 순서(파지점·접근각)가 몇 초 안에 나오는 걸 시연합니다
일부러 만든 가려짐(자세 결측)·미등록 부품·겹친 감지·경계 신뢰도 등 악성·결측 입력 30종을 넣어도 출력 형식(스키마)이 한 번도 깨지지 않고, 못 푸는 건 파지 불가 사유(pose_missing·unmapped_part 등)로 분류해 돌려줍니다. 파지 가능/불가 판정은 LLM 이 아니라 그리퍼 허용범위·파지 영역 기하로 결정론 재계산합니다
자연어 요구 30건을 구조화 작업 명세로 바꾼 결과가 제가 만든 기대 명세와 필드 단위(작업 종류·대상 부품·제약)로 일치한 게 25건(약 83%)입니다. 단, 정답과 데이터를 모두 제가 만든 합성 기준이라 성능 검증이 아니라 데모 조건에서의 동작임을 밝힙니다
위 수치는 전부 제가 만든 더미데이터 자가채점이고, 실제 파지 성공률은 플라잎 OASIS 양팔로봇과 실 카메라 캘리브레이션, 현장 부품이 있어야 측정됩니다. 이 도구는 그 검증을 바로 얹을 수 있는 상태까지 만듭니다
이건 고객·실로봇 없이 혼자 만든 포트폴리오입니다. 수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서 솔직히 '데모 조건 동작 + 실검증 준비 상태'로 설명합니다
정답을 제가 만들었으니 잘 맞는 게 당연합니다. 일부러 가려짐(자세 결측)·미등록 부품·겹친 감지·경계 신뢰도(0.0/1.0)를 더미에 섞어, 쉬운 문제만 푸는 게 아님을 보여줍니다
시뮬 자세와 실제 카메라는 다릅니다. 조명·캘리브레이션·부품 반짝임 때문에 실제 Pose Estimation 오차가 크고, 이 sim2real 격차 때문에 파지 성공률은 시뮬로 증명되지 않습니다. 또 대칭 부품(axial/planar)은 자세가 여러 해를 가져 접근각 정답이 하나가 아니라, 대칭군은 허용 접근각 집합으로 판정합니다
이 포트폴리오가 보여주는 것은 '현장 요구를 작업 명세로 정의하고 파지 계획을 기하로 판정하는 파이프라인 골조' 기술이며, VLA·강화학습·실제 로봇 제어·모션 플래닝의 깊이는 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다
실제 도입 시 달라지는 것을 명시합니다. 실 OASIS 양팔로봇·실 카메라 캘리브레이션·현장 부품 CAD 가 있어야 하고, 규칙 파지 판정을 실제 모션 플래너·힘제어로 교체하는 것은 도입 단계 과제로 분리합니다
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
고객 현장에서 말로 들어오는 작업 요구와 그에 대한 기대 작업 명세. LLM 변환의 자가채점 정답셋입니다. 모호한 요구·제약 누락·미지원 작업·별칭 표기를 일부러 섞어, 쉬운 요구만 푸는 게 아님을 보여줍니다.
| request_id | cell | body | expected_task_type | expected_targets | expected_constraints | ambiguous | unsupported |
|---|---|---|---|---|---|---|---|
| req_001 | 울산셀A | 울산셀A 트레이의 커넥터를 집어서 지그 홀에 꽂아 주세요. 삽입 깊이… | insert | ["p_connector"] | ["insert_depth_mm=5","pin_up"] | false | false |
| req_002 | 울산셀A | 브라켓 4개를 파렛트에 2x2로 쌓아 주세요. 무거우니 한 번에 하나… | stack | ["p_bracket"] | ["grid=2x2","one_at_a_time"] | false | false |
| req_003 | 울산셀B | 볼트 M6 두 개와 커넥터 하나를 한 트레이에 담아 주세요. | kitting | ["p_bolt_m6","p_connector"] | ["count:p_bolt_m6=2","count:p_connector=1"] | false | false |
| req_004 | 울산셀A | 여기 부품들 좀 정리해서 옆에 놔 주세요. | — | [] | [] | true | false |
| req_005 | 울산셀B | 유리 판넬을 옆 셀로 옮겨 주세요. | pick_place | ["p_glass_panel"] | ["missing:gripper_spec","fragile"] | false | false |
아래 JSON Schema 에 맞는 로봇 작업 셀 자연어 요구 40건을 JSON 배열로 생성해 주세요. body 는 한국 제조 현장에서 작업자가 말로 하는 요구처럼(커넥터·브라켓·볼트·샤프트·판넬 등 부품, pick_place/insert/stack/kitting 작업).
{"type":"object","properties":{"request_id":{"type":"string"},"cell":{"type":"string"},"body":{"type":"string"},"expected_task_type":{"type":["string","null"],"enum":["pick_place","insert","stack","kitting",null]},"expected_targets":{"type":"array","items":{"type":"string"}},"expected_constraints":{"type":"array","items":{"type":"string"}},"ambiguous":{"type":"boolean"},"unsupported":{"type":"boolean"}},"required":["request_id","body","ambiguous","unsupported"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어 주세요: (1) 대상·작업이 불명확한 모호한 요구(ambiguous=true, expected_task_type=null) 3~4건, (2) 파지 로봇 작업이 아닌 미지원 요구(용접·검사·조립 체결 등, unsupported=true) 2~3건, (3) 제약이 빠진 요구(그리퍼·파손 주의 미기재 → expected_constraints 에 'missing:*' 로 표시) 2건, (4) 같은 부품의 별칭 표기 혼입(커넥터/컨넥터, 브라켓/브래킷), (5) 대칭 부품(샤프트 등)으로 회전 자유 제약이 들어간 요구 1~2건. JSON 배열만.{"type":"object","properties":{"request_id":{"type":"string"},"cell":{"type":"string"},"body":{"type":"string"},"expected_task_type":{"type":["string","null"],"enum":["pick_place","insert","stack","kitting",null]},"expected_targets":{"type":"array","items":{"type":"string"}},"expected_constraints":{"type":"array","items":{"type":"string"}},"ambiguous":{"type":"boolean"},"unsupported":{"type":"boolean"}},"required":["request_id","body","ambiguous","unsupported"]}카메라 프레임에서 감지된 부품과 6자유도 자세. 파지 플래너가 소비하는 입력입니다. 가려짐으로 자세 결측, 마스터에 없는 미등록 부품(orphan), 경계 신뢰도(0.0/1.0), 겹친 감지, 별칭 표기를 일부러 섞어, 자세가 불완전할 때도 파이프라인이 안 깨지고 사유로 분류함을 보여줍니다.
| frame_id | cell | part_raw | part_id | bbox | pose_xyz_mm | pose_rpy_deg | detect_confidence | graspable |
|---|---|---|---|---|---|---|---|---|
| f001 | 울산셀A | 커넥터 | p_connector | [120,80,180,140] | [312.5,140.2,60] | [0,0,15.5] | 0.94 | true |
| f001 | 울산셀A | 브라켓 | p_bracket | [200,90,270,160] | [410,155,58] | [0,0,-8] | 0.88 | true |
| f001 | 울산셀A | 컨넥터 | p_connector | [130,300,190,360] | [318,360,61] | [0,0,90] | 0.81 | true |
| f002 | 울산셀B | 볼트 | p_bolt_m6 | [90,120,120,150] | [210,190,42] | [0,0,0] | 0.79 | true |
| f002 | 울산셀B | 브래킷 | p_bracket | [240,110,320,190] | — | — | 0.52 | false |
아래 JSON Schema 에 맞는 로봇 작업 셀 부품 감지 로그 40행을 JSON 배열로 생성해 주세요. 좌표는 mm, 회전은 도(deg) 단위이고 셀은 울산셀A/울산셀B, 부품은 커넥터·브라켓·볼트·샤프트·판넬 등입니다.
{"type":"object","properties":{"frame_id":{"type":"string"},"cell":{"type":"string"},"part_raw":{"type":"string"},"part_id":{"type":["string","null"]},"bbox":{"type":"array","items":{"type":"number"}},"pose_xyz_mm":{"type":["array","null"],"items":{"type":"number"}},"pose_rpy_deg":{"type":["array","null"],"items":{"type":["number","null"]}},"detect_confidence":{"type":"number"},"graspable":{"type":"boolean"}},"required":["frame_id","cell","part_raw","bbox","detect_confidence","graspable"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어 주세요: (1) 가려짐으로 자세 결측(pose_xyz_mm/pose_rpy_deg 가 null, graspable=false) 3~4행, (2) 마스터에 없는 미등록 부품(part_id=null, part_raw 는 신규 명칭) 2~3행, (3) 경계 신뢰도 detect_confidence 0.0 과 1.0 각 1행, (4) 같은 프레임에서 같은 부품이 겹쳐 두 번 감지된 행 2건(bbox 겹침), (5) 같은 부품의 별칭 표기 혼입(커넥터/컨넥터, 브라켓/브래킷 → 같은 part_id 로 정규화돼야 함), (6) 대칭 부품(샤프트)의 회전각 일부 결측(pose_rpy_deg 의 yaw 가 null). JSON 배열만.{"type":"object","properties":{"frame_id":{"type":"string"},"cell":{"type":"string"},"part_raw":{"type":"string"},"part_id":{"type":["string","null"]},"bbox":{"type":"array","items":{"type":"number"}},"pose_xyz_mm":{"type":["array","null"],"items":{"type":"number"}},"pose_rpy_deg":{"type":["array","null"],"items":{"type":["number","null"]}},"detect_confidence":{"type":"number"},"graspable":{"type":"boolean"}},"required":["frame_id","cell","part_raw","bbox","detect_confidence","graspable"]}| Python | 전체 파이프라인 언어입니다. 자연어 요구 파싱, 파지 기하 계산, 규칙 판정, 뷰어 서버까지 한 언어로 구현합니다. |
| PyTorch | 2주차부터 합성 카메라 이미지에서 부품 Object Detection·Pose Estimation 모델(사전학습 미세조정)을 돌려 부품 자세를 추정합니다. 1주차는 자세를 메타데이터로 가정합니다. |
| Jax | 파지점 후보 수백 개의 좌표 변환·충돌 판정을 배치로 벡터화 계산해 접근각 탐색을 빠르게 합니다. |
| Numpy | 6자유도 자세(위치 xyz·회전 rpy)의 회전행렬 변환과 파지점·그리퍼 허용범위 기하 계산을 담당합니다. |
| Pandas | 프레임별 감지 로그와 파지 성공·실패 결과를 집계해 실패 원인 분포와 재파지 후보를 뽑습니다. |
| Next.js | 파지점·접근 화살표·파지 순서를 2.5D 씬으로 그리는 뷰어와 실패 원인 대시보드를 렌더합니다. |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우고 싶으면 2주차(합성 이미지에서 실제 자세 추정 + 사람 검토 일치도)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(실패 원인 기반 재파지·조립 순서 최적화 + 다른 작업 이식)로 진행합니다.
1) 자연어 요구를 작업 종류·대상·제약으로 구조화한 작업 명세, 2) 부품별 파지 순서(파지점·접근각·예상 성공·실패 사유), 3) 계획을 규칙 판정 정답과 맞춰본 검증. 요구 하나가 파지 계획으로 도는 한 주기를 한 스키마에 담습니다.
{"type":"object","properties":{"request_id":{"type":"string"},"task_spec":{"type":"object","properties":{"task_type":{"type":["string","null"],"enum":["pick_place","insert","stack","kitting",null]},"targets":{"type":"array","items":{"type":"string"}},"constraints":{"type":"array","items":{"type":"string"}},"ambiguous":{"type":"boolean"},"unsupported":{"type":"boolean"}},"required":["targets","ambiguous","unsupported"]},"grasp_sequence":{"type":"array","items":{"type":"object","properties":{"step":{"type":"integer"},"part_id":{"type":["string","null"]},"grasp_point_mm":{"type":["array","null"],"items":{"type":"number"}},"approach_deg":{"type":["number","null"]},"feasible":{"type":"boolean"},"fail_reason":{"type":["string","null"],"enum":["ok","pose_missing","out_of_reach","collision","gripper_mismatch","unmapped_part",null]},"predicted_success":{"type":"number"}},"required":["step","feasible","fail_reason"]}},"verification":{"type":["object","null"],"properties":{"grasp_hit_rate":{"type":"number"},"checks":{"type":"array","items":{"type":"object","properties":{"part_id":{"type":["string","null"]},"feasible_predicted":{"type":"boolean"},"feasible_rule":{"type":"boolean"},"match":{"type":"boolean"}}}}}}},"required":["request_id","task_spec","grasp_sequence"]}[
{
"input_ref": "req_001 (커넥터 지그 삽입) + f001 감지",
"output": {
"request_id": "req_001",
"task_spec": {
"task_type": "insert",
"targets": [
"p_connector"
],
"constraints": [
"insert_depth_mm=5",
"pin_up"
],
"ambiguous": false,
"unsupported": false
},
"grasp_sequence": [
{
"step": 1,
"part_id": "p_connector",
"grasp_point_mm": [
312.5,
140.2,
70
],
"approach_deg": 15.5,
"feasible": true,
"fail_reason": "ok",
"predicted_success": 0.82
}
],
"verification": {
"grasp_hit_rate": 1,
"checks": [
{
"part_id": "p_connector",
"feasible_predicted": true,
"feasible_rule": true,
"match": true
}
]
}
}
},
{
"input_ref": "req_005 (유리 판넬 이동, 제약 누락) + f005 감지",
"output": {
"request_id": "req_005",
"task_spec": {
"task_type": "pick_place",
"targets": [
"p_glass_panel"
],
"constraints": [
"missing:gripper_spec",
"fragile"
],
"ambiguous": false,
"unsupported": false
},
"grasp_sequence": [
{
"step": 1,
"part_id": "p_glass_panel",
"grasp_point_mm": null,
"approach_deg": null,
"feasible": false,
"fail_reason": "gripper_mismatch",
"predicted_success": 0
}
],
"verification": {
"grasp_hit_rate": 1,
"checks": [
{
"part_id": "p_glass_panel",
"feasible_predicted": false,
"feasible_rule": false,
"match": true
}
]
}
}
},
{
"input_ref": "req_006 (브라켓 용접, 미지원 작업)",
"output": {
"request_id": "req_006",
"task_spec": {
"task_type": null,
"targets": [
"p_bracket"
],
"constraints": [],
"ambiguous": false,
"unsupported": true
},
"grasp_sequence": [],
"verification": null
}
},
{
"input_ref": "req_002 (브라켓 2x2 적재) + f002 감지(브라켓 자세 결측)",
"output": {
"request_id": "req_002",
"task_spec": {
"task_type": "stack",
"targets": [
"p_bracket"
],
"constraints": [
"grid=2x2",
"one_at_a_time"
],
"ambiguous": false,
"unsupported": false
},
"grasp_sequence": [
{
"step": 1,
"part_id": "p_bracket",
"grasp_point_mm": null,
"approach_deg": null,
"feasible": false,
"fail_reason": "pose_missing",
"predicted_success": 0
}
],
"verification": {
"grasp_hit_rate": 1,
"checks": [
{
"part_id": "p_bracket",
"feasible_predicted": false,
"feasible_rule": false,
"match": true
}
]
}
}
}
][자동 검증: 규칙·기하 결정론] 1. JSON Schema parse 통과(형식 통과: task_spec·grasp_sequence 필수 필드와 enum 위반 여부). 2. grasp_point_mm·approach_deg 가 part_master 의 파지 영역·그리퍼 허용범위 안인지 6자유도 기하로 재계산해 feasible 을 규칙으로 다시 판정(feasible_rule)한 뒤 예측(feasible_predicted)과 일치(match) 여부를 대조합니다. 3. task_spec.targets 가 part_master 로 해소되는지 확인해 미해소 시 unmapped_part 로 표시합니다(없는 부품 환각 검출). 4. fail_reason 이 규칙 판정 결과와 일치하는지 확인합니다(자세 결측 → pose_missing, 마스터 미등록 → unmapped_part, 그리퍼 종류 불일치 → gripper_mismatch). [수동 검증: 사람 표본] 1. 로봇 엔지니어 2명이 파지 계획 타당성을 비동기로 라벨링한 뒤 두 사람 답의 일치도를 Cohen's κ(두 평가자 답이 우연 이상으로 겹치는 정도, 0~1)로 측정하며, 하한 0.6 이상을 목표로 둡니다. 2. LLM 변환 결과의 5%를 사람이 눈으로 점검해 judge 가 놓친 누락·환각을 확인합니다.