728x90
예측 기반 실린더 속도 제어 (LSTM + Unity)
🎯 목표
실린더의 이동 거리, 속도, 환경 조건을 기반으로 도착 시간을 AI가 예측하고, 예측 결과에 따라 속도 또는 입력 값을 실시간 보정하는 Unity 시뮬레이터를 제작합니다.
🧩 활용 기술
- Unity (물리 기반 이동 시뮬레이션)
- Python (LSTM 예측 모델 학습)
- C# (속도 제어 및 보정 로직 구현)
- ML.NET (선택: Unity 내 ML 추론 가능)
🖼️ 시뮬레이션 화면 예시
실린더가 이동 거리에 따라 도착 시간을 AI가 예측 → 속도 자동 보정 → 일정한 도착 시간 유지
🛠 Unity 구현 과정
1️⃣ 실린더 + 거리 기반 제어 스크립트
public class PredictiveCylinder : MonoBehaviour
{
public Transform target;
public float speed = 2f;
private float moveStartTime;
private float predictedTime;
public void StartMove(float predictedTime)
{
this.predictedTime = predictedTime;
moveStartTime = Time.time;
StartCoroutine(MoveRoutine());
}
IEnumerator MoveRoutine()
{
Vector3 start = transform.position;
Vector3 end = target.position;
while (Vector3.Distance(transform.position, end) > 0.01f)
{
float distance = Vector3.Distance(start, end);
speed = distance / predictedTime;
transform.position = Vector3.MoveTowards(transform.position, end, speed * Time.deltaTime);
yield return null;
}
Debug.Log("🟢 실린더 도착! 실제 시간: " + (Time.time - moveStartTime));
}
}
2️⃣ 데이터 수집 (거리, 속도, 도착 시간)
public class TimeLogger : MonoBehaviour
{
public Transform start;
public Transform target;
public float speed;
private float startTime;
void Start()
{
float distance = Vector3.Distance(start.position, target.position);
startTime = Time.time;
float estimatedTime = distance / speed;
float actualTime = SimulateMovement(distance, speed); // 추후 구현
Debug.Log($"{distance},{speed},{actualTime}");
}
}
📁 CSV 예시:
Distance,Speed,ActualTime
0.5,2.0,0.24
0.8,2.0,0.38
1.0,2.5,0.40
🧠 AI 모델 학습 (Python - LSTM)
import pandas as pd
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
df = pd.read_csv("cylinder_data.csv")
X = df[['Distance', 'Speed']].values
y = df['ActualTime'].values
X = X.reshape((X.shape[0], 1, X.shape[1])) # LSTM 입력 형태
model = Sequential()
model.add(LSTM(32, input_shape=(1, 2)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.fit(X, y, epochs=100, verbose=1)
model.save("lstm_predictor.h5")
🎯 예측 결과를 Unity에서 사용하는 방법
💡 옵션 1: 예측값 CSV로 저장 → Unity에서 로딩
float predictedTime = PredictTimeFromCSV(distance, speed);
cylinder.StartMove(predictedTime);
💡 옵션 2: Unity에서 Python 서버 호출 (Flask)
UnityWebRequest www = UnityWebRequest.Get("http://localhost:5000/predict?d=0.5&s=2.0");
yield return www.SendWebRequest();
float predictedTime = float.Parse(www.downloadHandler.text);
💡 옵션 3: ML.NET or ONNX 모델 로딩 (고급)
📢 보정 로직 개념
| 거리 | 예측 시간 | 속도 보정 |
| 0.8m | 0.4s | 0.8 / 0.4 = 2.0 m/s |
| 1.2m | 0.6s | 1.2 / 0.6 = 2.0 m/s |
| 1.2m | 0.9s (부하 ↑) | 1.2 / 0.9 = 1.33 m/s |
→ AI가 예측한 시간에 맞춰 속도 보정
🎁 기대 결과
- 실린더가 항상 일정한 시간에 도달
- 공기압 변화, 부하 변화가 있어도 예측 기반으로 자동 보정
- Unity 기반 시뮬레이션 + 제어 최적화 모델 완성
🧪 확장 아이디어
| 화장 | 설명 |
| 센서 피드백 추가 | 정전용량 센서로 도달 여부 검증 |
| 온도/공기압 영향 변수 추가 | 예측 정확도 개선 |
| PID 보정 병행 | AI+전통 제어 융합 가능 |
📌 태그
#예측제어 #속도자동조절 #LSTM예측 #UnityAI #스마트팩토리제어 #공정시간보정 #AI제어최적화 #C샵유니티 #Unity시뮬레이션
▶️ 다음 편 예고 (4편)
강화학습 기반 공정 최적화 – Unity ML-Agents로 서보모터와 공정 순서를 스스로 학습하는 AI 만들기
728x90
'인공지능 & 데이터 사이언스 > 연구 및 테스트' 카테고리의 다른 글
| 🧪 스마트팩토리 AI 시리즈 – 5편 (2) | 2025.06.02 |
|---|---|
| 🤖 스마트팩토리 AI 시리즈 – 4편 (6) | 2025.06.01 |
| 🔧 스마트팩토리 AI 시리즈 – 2편 (1) | 2025.05.30 |
| Unity + AI 스마트팩토리 시리즈 (0) | 2025.05.29 |
| AI로 설비 이상을 사전에 감지하는 방법! – 스마트팩토리 데이터 분석 실전 (0) | 2025.05.29 |