
【Autodesk Fusion × 외관 검사 AI】 학습 데이터를 상정하여 컨베이어 위의 워크를 랜덤 배치하고 자동 촬영하기 (Part 2)
요약
Autodesk Fusion 360 API를 활용하여 외관 검사 AI 학습을 위한 데이터셋 생성 엔진을 구현합니다. 벨트 컨베이어 환경과 Matrix3D를 이용한 워크의 랜덤 배치, 투시 투영(Perspective) 방식을 적용해 실제 공정 환경을 정밀하게 시뮬레이션합니다.
핵심 포인트
- Matrix3D를 이용한 워크의 위치 및 각도 랜덤화 구현
- 실제 광학계 재현을 위한 투시 투영(Perspective) 방식 채택
- 디지털 트윈 기반의 고품질 AI 학습 데이터셋 자동 생성
- Fusion 360 API를 활용한 자동 촬영 스크립트 작성
서론
지난 1회차 기사에서는 Fusion 360 API를 사용하여 「고정된 워크 주위를 카메라가 나선형으로 회전하며 자동 촬영하는 스크립트」를 작성했습니다.
하지만 실제 공장의 인라인 검사(벨트 컨베이어 위를 흐르는 제품의 검품 등)를 상정할 경우, **「카메라는 수직 위로 고정되어 있으며, 흘러오는 워크의 위치와 각도가 매번 랜덤하게 변한다」**는 것이 일반적인 실제 상황입니다.
따라서 제2회인 이번에는, 현장 시뮬레이션(디지털 트윈, Digital Twin)으로서의 정밀도를 높이기 위해 **「벨트 컨베이어 환경 추가」, 「수직 고정 카메라」, 「워크 측의 랜덤 이동·회전 (Matrix3D)」**을 구현하여, 실제 운용에 부합하는 데이터셋 생성 엔진으로 업데이트합니다.
1. 현장 상황을 재현하기 위한 3가지 접근 방식
① 환경(벨트 컨베이어) 추가와 카메라 수직 고정
간단하게 벨트 컨베이어 모델을 배치하고, 카메라는 수직 위(Top View)에서 내려다보는 위치로 완전히 고정했습니다.
② 워크 측의 랜덤화 (Matrix3D)
카메라를 움직이는 대신, 볼트(컴포넌트) 측을 3차원 변환 행렬(Matrix3D)을 사용하여 루프마다 대상의 위치와 각도를 랜덤하게 변경합니다.
③ 실제 광학계에 맞춘 「투시 투영(Perspective)」 채택
왜곡이 없는 「정투영(Orthographic)」은 CAD 상에서는 깔끔하지만, 공장의 단초점 렌즈 등의 모습을 재현하기 위해 일부러 공간적인 원근감이 생기는 **「투시 투영(Perspective)」**을 채택하였으며, 화각(viewAngle)에 따라 카메라의 「줌(Zoom)」을 밀리미터 단위로 제어하고 있습니다.
【시각적 비교】 정투영(Orthographic)과 투시 투영(Perspective)의 차이
다음 이미지를 비교해 보면 그 차이를 한눈에 알 수 있습니다.


정투영 (위 이미지): 원근감이 없으며, 볼트가 어디로 이동하든 동일한 크기와 형상으로 찍힙니다. 텔레센트릭 렌즈(Telecentric Lens) 등의 특수 렌즈를 사용하면 이러한 이미지를 촬영할 수 있지만, 일반적인 카메라 영상과는 괴리가 있습니다.
투시 투영 (아래 이미지): 실제 렌즈와 마찬가지로 원근감(Perspective)이 생깁니다. 볼트가 중심에서 외곽으로 랜덤하게 이동했을 때, 미세하게 기울어져 보이기 때문에 더욱 리얼한 현장 환경을 재현할 수 있습니다.
2. 구현 코드
import adsk.core, adsk.fusion, traceback
import os
import random
...
3. 실행 결과
스크립트를 실행하면 지정된 폴더 내에 랜덤한 이동과 회전이 가미된 볼트 이미지(512x512 픽셀)가 자동으로 차례차례 저장됩니다.

카메라 위치나 조명 환경을 완전히 일정하게 유지하면서, 워크(볼트)의 배치 변리에 대해서만 대량으로 양산할 수 있게 되었습니다. 이것으로 실제 검품 라인에서 제품이 어떤 각도와 위치로 흘러오더라도 올바르게 검출하기 위한 「기초 데이터셋」이 완성되었습니다.
4. 실무 Tips: 투시 투영으로 전환 시 발생하는 에러의 함정
이번 「리얼한 현장 재현」을 목표로 카메라를 평행 투영에서 투시 투영(Perspective)으로 전환했을 때, 약간의 시행착오가 있어 공유하고자 합니다.
발생한 에러
RuntimeError: 3 : Camera type must be orthographic for extents
코드 내에서 extents(정투영용 표시 범위 프로퍼티)를 전혀 지정하지 않았음에도 불구하고, view.camera = camera를 대입하는 순간 크래시가 발생합니다.
원인과 해결책
원인은 Fusion 360이 내부적으로 유지하고 있는 「이전 정투영 모드의 캐시」였습니다. CAD 측의 표시 설정이 「정투영」 상태로 남아 있으면, API 측에서 아무리 투시 투영을 선언해도 내부의 오래된 파라미터와 충돌을 일으킵니다.
【회피책】
코드 측에서 해결하는 것이 아니라, Fusion 360 화면 우측 하단의 네비게이션 바 > 표시 설정 > 카메라 > 『파스(Perspective)』에 수동으로 체크를 한 뒤 실행함으로써 해결할 수 있었습니다.
← 코드 측에서 해결할 수 있는 방법이 있다면 알려주시면 감사하겠습니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기