728x90

실린더 외란 감지 + 알람 시스템 (Unity + AI)

🎯 목표

Unity에서 실린더의 동작을 시뮬레이션하고, 외란(지연, 위치 오차, 튀는 현상 등)을 감지하는 AI 모델을 적용하여 알람 시스템을 만들자.


🧩 사용 기술

  • Unity 2021+ (시뮬레이터 제작)
  • C# (센서/실린더 제어, 로그 저장)
  • Python (Autoencoder 또는 이상탐지 모델)
  • 머신러닝: 이상 탐지 기반 분류 모델 (Isolation Forest / Autoencoder)

🖼️ 시뮬레이션 화면 예시

💬 실린더가 동작할 때, 예상 위치에 도달하지 않거나 도달 시간이 지연되면 AI가 외란 상태로 판단하고 알림 발생


🛠 Unity 구현 단계

1️⃣ 실린더 제어 시뮬레이션

🎮 오브젝트 구성

 

오브젝트 설명
Cylinder 실린더 역할, 위치 이동
Target 목표 위치
LightSensor 도착 여부 판단
AlarmPanel 경고 UI 표시
 

🎮 이동 스크립트 (C#)

public class CylinderMover : MonoBehaviour
{
    public Transform target;
    public float speed = 2.0f;
    public float moveStartTime;
    public bool isMoving = false;

    void Update()
    {
        if (isMoving)
        {
            transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
            if (Vector3.Distance(transform.position, target.position) < 0.01f)
            {
                isMoving = false;
                float arrivalTime = Time.time - moveStartTime;
                Debug.Log("도착 시간: " + arrivalTime);
                CylinderLogger.Instance.LogArrival(arrivalTime);
            }
        }
    }

    public void StartMove()
    {
        moveStartTime = Time.time;
        isMoving = true;
    }
}

2️⃣ 외란 기준 데이터 로깅

public class CylinderLogger : MonoBehaviour
{
    public static CylinderLogger Instance;
    public List<float> log = new List<float>();

    void Awake() => Instance = this;

    public void LogArrival(float time)
    {
        log.Add(time);
        // 예: time > 2.5초면 외란으로 라벨링 가능
    }
}

3️⃣ 외란 라벨링 기준 예시

도착 시간 (sec) 외란 여부
1.5 정상
2.7 외란 (지연)
1.6 정상
3.2 외란
 

이 데이터를 Python으로 Export (CSV)해서 학습에 사용합니다.


🧠 AI 모델 학습 (Python 예시)

Autoencoder 기반 이상 탐지

from sklearn.ensemble import IsolationForest
import pandas as pd

df = pd.read_csv("cylinder_data.csv")
model = IsolationForest()
model.fit(df[['arrival_time']])
df['anomaly'] = model.predict(df[['arrival_time']])
  • 1 → 정상, -1 → 외란
  • 모델을 Pickle 파일로 저장하여 Unity와 연동하거나, threshold 기반으로 Unity 내에서 직접 분류 가능

🖥 Unity 내 이상 감지 및 알람 출력

알람 표시 스크립트

public class AlarmController : MonoBehaviour
{
    public GameObject alarmUI;

    public void CheckForAnomaly(float arrivalTime)
    {
        if (arrivalTime > 2.5f) // 기준 시간 설정
        {
            alarmUI.SetActive(true);
            Debug.Log("⚠️ 외란 감지됨! 알람 발생");
        }
        else
        {
            alarmUI.SetActive(false);
        }
    }
}
  • 외란이 발생하면 빨간 경고창 (AlarmPanel) 활성화

🎮 UI 구성 추천

UI 요소 설명
TextMeshPro "정상 동작" / "외란 발생" 표시
LED Light (빨강) 외란 시 점등
Reset 버튼 다시 테스트 가능
Chart 버튼 로그 기반 도착 시간 시각화 (선택 사항)
 

🎁 기대 결과

  • 실린더 동작의 정상/비정상 판단 가능
  • 외란 발생 시 즉각 경고 → 공정 품질 확보
  • AI 기반 판단으로 휴먼 에러 감소

📊 실습 요약

 

항목 설명
센서 시뮬레이션 실린더 위치/도착 감지
외란 기준 정의 도착 시간, 위치 오차
AI 모델 적용 이상 탐지 기반 분류
알람 출력 Unity UI로 알림 표시
 

🔖 사용 태그

#Unity공정제어 #실린더제어 #AI이상탐지 #Autoencoder #IsolationForest #스마트팩토리 #외란감지 #산업자동화

📌 다음 편 예고

3편. 예측 기반 실린더 속도 제어 – LSTM으로 도착 시간 예측하고 제어 자동화하기

728x90

+ Recent posts