728x90

멀티센서 융합 기반 품질 이상 판별 (Sensor Fusion + 이상 탐지 AI)

🎯 목표

정전용량 센서, 광센서, 유량센서 등 여러 센서를 통해 제품의 상태를 감지하고,
그 데이터를 AI 모델이 학습해 불량품을 자동 감지하는 시스템을 Unity에서 구현합니다.


🧩 사용 기술

  • Unity (센서 동작 시뮬레이션, 제품 상태 구현)
  • Python (이상 탐지 모델: Autoencoder / Isolation Forest)
  • C# (센서값 로깅, 판별 결과 반영)
  • 머신러닝 기반 이상 분류기
  • 선택: ONNX 모델 로딩 (Unity 추론 적용 시)

🖼️ 시뮬레이션 화면 예시

제품이 센서를 통과하면서 각 센서가 값을 수집하고, AI가 이 데이터를 분석해 불량 여부를 판단


🛠 Unity 구현 단계

1️⃣ 구성 요소 설계

오브젝트 설명
Product 감지 대상 물체 (Cube, Sphere 등 불량 포함)
CapacitiveSensor 재질 감지 (예: 금속 vs 비금속)
LightSensor 위치/정렬 상태 감지
FlowSensor 내부 유량 감지 시뮬레이션 (예: 정해진 액체 통과 여부)
InspectionManager 모든 센서 값을 종합하고 AI 호출
 

2️⃣ 센서 감지 스크립트 (C#)

public class SensorReader : MonoBehaviour
{
    public float sensorValue;

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Product"))
        {
            sensorValue = Random.Range(0.8f, 1.2f); // 간단한 센서값 시뮬
        }
    }
}

3️⃣ 멀티센서 데이터 수집 및 라벨링

public class InspectionManager : MonoBehaviour
{
    public SensorReader capacitive;
    public SensorReader light;
    public SensorReader flow;
    public Text resultText;

    void Inspect()
    {
        float[] features = new float[]
        {
            capacitive.sensorValue,
            light.sensorValue,
            flow.sensorValue
        };

        bool isDefective = RunMLModel(features);
        resultText.text = isDefective ? "❌ 불량" : "✅ 정상품";
    }

    bool RunMLModel(float[] input)
    {
        // 예: 평균과 편차 기반 간단 판별
        float avg = input.Average();
        return avg < 0.85f || avg > 1.15f;
    }
}

※ 초기에는 간단한 수치 판별 사용 → 추후 Python 학습 모델 적용 가능


🧠 Python AI 모델 학습 (이상 탐지)

Isolation Forest 사용 예시

from sklearn.ensemble import IsolationForest
import pandas as pd

df = pd.read_csv("sensor_dataset.csv")  # 컬럼: Capacitive, Light, Flow
model = IsolationForest()
model.fit(df[['Capacitive', 'Light', 'Flow']])
df['Anomaly'] = model.predict(df[['Capacitive', 'Light', 'Flow']])  # 1 = 정상, -1 = 불량

# 저장
import joblib
joblib.dump(model, 'sensor_model.pkl')

Unity ↔ Python 연결 방법 (선택)

  • Flask 서버 구성 후 Unity에서 HTTP GET으로 예측 요청
  • 또는 ONNX로 모델 변환 후 Unity 내 ONNX 추론 적용 (고급)

🎁 기대 결과

  • 센서 3개 이상을 융합한 품질 검사 가능
  • AI 기반으로 불량 자동 감지 → 검사 속도 향상
  • Unity에서 품질 판별 시뮬레이션까지 시각화 완료

📈 확장 아이디어

확장 주제 설명
제품 회전/정렬 불량 감지 3D 위치 기반 센서 추가
센서 간 상관관계 분석 PCA, SHAP 등으로 중요도 분석
강화학습과 결합 검사 타이밍 최적화
728x90
728x90

강화학습 기반 공정 최적화 (Unity + ML-Agents)

🎯 목표

Unity에서 공정 시뮬레이터를 만들고, 강화학습을 통해 AI가 자동으로 공정을 최적화하도록 훈련합니다.
예: 서보모터 속도 조절, 물체 이송 타이밍, 실린더 동작 간격 등을 AI가 스스로 최적화합니다.


🧩 사용 기술

  • Unity (시뮬레이션 + 제어 환경)
  • ML-Agents Toolkit (강화학습 훈련)
  • PPO (Proximal Policy Optimization) 알고리즘
  • Python (훈련 파이프라인)

🖼️ 시뮬레이션 예시 화면

AI 에이전트가 공정 조건(속도, 타이밍)을 스스로 조정하며 목표 시간과 품질을 만족시키는 방향으로 학습


🛠 Unity 구현 과정

1️⃣ 공정 시나리오 설정 예시

 

구성 요소 설명
Item 이송할 물체 (Cube 등)
Conveyor 벨트, 속도 조절 가능
Cylinder 물체를 밀어주는 역할
Sensor 감지 위치, 도달 시간 측정
Agent 공정을 제어하는 AI 에이전트
 

2️⃣ ML-Agent 설치 및 설정

✅ 설치 (Python)

pip install mlagents

✅ Unity 패키지 설치


3️⃣ AI Agent 스크립트 작성

🎮 공정 최적화용 Agent 스크립트 (C#)

using Unity.MLAgents;
using Unity.MLAgents.Sensors;
using Unity.MLAgents.Actuators;

public class FactoryAgent : Agent
{
    public Transform item;
    public Transform sensor;
    public float conveyorSpeed = 1.0f;

    private float timer;

    public override void OnEpisodeBegin()
    {
        item.position = new Vector3(-2f, 0.5f, 0f);
        timer = 0;
    }

    public override void CollectObservations(VectorSensor sensor)
    {
        sensor.AddObservation(item.position.x);
        sensor.AddObservation(conveyorSpeed);
    }

    public override void OnActionReceived(ActionBuffers actions)
    {
        float speedAction = actions.ContinuousActions[0];
        conveyorSpeed = Mathf.Clamp(speedAction, 0.5f, 3.0f);
        item.Translate(Vector3.right * conveyorSpeed * Time.deltaTime);

        timer += Time.deltaTime;

        // 성공: 센서 위치 도달
        if (item.position.x >= sensor.position.x)
        {
            float reward = 1.0f - Mathf.Abs(timer - 2.0f); // 목표 시간 2초
            SetReward(reward);
            EndEpisode();
        }

        if (timer > 4.0f) // 제한 시간 초과
        {
            SetReward(-1.0f);
            EndEpisode();
        }
    }

    public override void Heuristic(in ActionBuffers actionsOut)
    {
        actionsOut.ContinuousActions.Array[0] = 1.0f; // 테스트용 속도
    }
}

 


4️⃣ Python 훈련 설정 (config 파일)

behaviors:
  FactoryAgent:
    trainer_type: ppo
    hyperparameters:
      batch_size: 64
      buffer_size: 1024
      learning_rate: 0.0003
      beta: 0.005
      num_epoch: 3
    network_settings:
      normalize: true
      hidden_units: 128
      num_layers: 2
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
    max_steps: 100000
    time_horizon: 64
    summary_freq: 1000

5️⃣ 학습 시작 명령어

mlagents-learn config/ppo_factory.yaml --run-id=factory_run_01 --train

Unity 실행 상태에서 에이전트가 스스로 공정 타이밍을 조절하며 최적화 학습을 진행합니다.


🧠 보상 설계 팁 (강화학습 핵심)

행동 결과
정확히 목표 시간 도달 (2.0s ± 0.2s) +1.0
너무 빠르거나 느림 -0.3 ~ -1.0
실패 (타겟 미도달 or 충돌) -1.0
연속 성공 +0.2 (보너스)
 

🎁 기대 결과

  • AI가 자율적으로 공정 속도 조절 전략 학습
  • 실제로 이송 거리, 목표 시간이 바뀌어도 스스로 조정
  • 튜닝 없이 강건한 공정 제어 자동화 구현

📌 확장 아이디어

확장 주제 설명
실린더+벨트 조합 최적화 동시 제어
강화학습 + 예측 모델 결합 Hybrid 제어
다중 에이전트 협업 공정 간 AI 협력 제어
 

🏷️ 태그 (4편 전용)

강화학습, UnityMLAgents, PPO, 공정강화학습, AI자율제어, 스마트팩토리AI, 공정최적화, 강화학습시뮬레이션, UnityAI, 스마트제조

▶️ 다음 편 예고 (5편)

멀티센서 융합 기반 품질 이상 판별 – AI가 다양한 센서 데이터를 조합해 불량 자동 감지

728x90
728x90

🟢 1편: 센서 기반 물체 감지 시뮬레이터 만들기

🎯 목표

Unity에서 광센서와 정전용량 센서를 구현하고, 머신러닝을 통해 물체 감지 이상을 AI로 판단


🖼️ 시뮬레이션 화면 예시

 

설명: 다양한 물체가 이송되고, 센서가 감지 여부를 판단. AI가 센서 이상을 탐지하면 화면에 알림 표시됨.


🔧 Unity 구현 과정

1️⃣ 씬 구성

  • 물체(GameObject) 프리팹: Cube, Sphere, MetalObject
  • 센서 오브젝트 2개 생성: CapacitiveSensor, LightSensor
  • Conveyor Belt 시뮬레이션: Scroll script로 이동 구현

2️⃣ 센서 감지 스크립트 (C#)

public class SensorTrigger : MonoBehaviour
{
    public bool isDetected = false;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Item"))
        {
            isDetected = true;
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Item"))
        {
            isDetected = false;
        }
    }
}

🧠 AI 모델 학습용 데이터 생성

3️⃣ 센서 로그 기록 스크립트

public class SensorLogger : MonoBehaviour
{
    public SensorTrigger capacitiveSensor;
    public SensorTrigger lightSensor;

    void Update()
    {
        string log = Time.time + "," +
                     (capacitiveSensor.isDetected ? 1 : 0) + "," +
                     (lightSensor.isDetected ? 1 : 0);
        Debug.Log(log);
        // 파일 저장 가능 (StreamWriter 등 사용)
    }
}

예시 데이터 포맷 (CSV):

Time,Capacitive,Light,Label
0.5,1,1,Normal
0.6,0,1,Abnormal

📊 AI 모델 학습 (Python 예시)

from sklearn.ensemble import IsolationForest
import pandas as pd

df = pd.read_csv("sensor_log.csv")
model = IsolationForest()
model.fit(df[['Capacitive', 'Light']])
df['anomaly'] = model.predict(df[['Capacitive', 'Light']])

📣 Unity 내 이상 감지 표

void Update()
{
    if (sensorA.isDetected && !sensorB.isDetected)
    {
        // 이상 상태 시 UI 알람
        warningText.SetActive(true);
    }
}

🎁 완성 화면 구성

  • UI Text로 상태 출력 (정상, 이상)
  • 물체 통과 시 센서 동작 애니메이션
  • 이상 감지 시 경고음 또는 빨간 LED 점등 시뮬레이션

📌 요약

  • Unity에서 센서를 구현하고 데이터 수집
  • AI 모델로 이상 감지 학습
  • Unity에서 AI 결과 반영 (알람 출력)

🔁 다음 편 예고:

2편. 실린더 외란 감지 시뮬레이션 만들기 (Autoencoder 활용)

Unity에서 실린더 이동 데이터를 수집하고, 외란 상태를 감지해보자!

728x90

+ Recent posts