# Mobile VLA 액션 고정 문제 진단 가이드

**날짜**: 2026-02-12  
**증상**: Instruction을 간결하게 수정했음에도 불구하고 계속 [1.15, 0.0]만 출력

---

## 🔴 현재 상황 분석

### 관찰된 증상
```
[LOCAL#1] IMG@07:47:15.435 | Latency: 5643ms | ACTION: [1.15, 0.0]
[LOCAL#2] IMG@07:47:21.643 | Latency: 3950ms | ACTION: [1.15, 0.0]
[LOCAL#4] IMG@07:47:30.402 | Latency: 3695ms | ACTION: [1.15, 0.0]
[LOCAL#6] IMG@07:47:38.934 | Latency: 3691ms | ACTION: [1.15, 0.0]
```

### 문제점
1. ❌ **First Frame Safety 미작동**: 첫 프레임에서 [0, 0] 대신 [1.15, 0.0] 출력
2. ⚠️ **Instruction 미확인**: 실제로 어떤 instruction이 전달되는지 로그 없음
3. ⚠️ **액션 변화 없음**: 계속 ➡️ 마커 (동일 액션)

---

## 🔍 진단 절차

### 1단계: Instruction 확인 (빌드 완료)

다음 명령어로 재실행하여 로그 확인:

```bash
# 현재 실행 중인 vla-inference-local 종료 (Ctrl+C)
# 재실행
vla-inference-local
# 'i' 키로 추론 시작

# 로그에서 다음 줄 확인:
# 📝 [INSTRUCTION] Navigate to the brown pot on the left
```

**예상 결과**:
- ✅ 올바른 경우: `Navigate to the brown pot on the left`
- ❌ 문제: 이전 복잡한 instruction이 여전히 출력됨

---

### 2단계: 카메라 뷰 확인

로봇이 **실제로 움직이고 있는지** 확인:

```bash
# 추론 OFF 상태에서 수동 조작
'i' 키 누르지 않은 상태
W 키 - 전진
A 키 - 좌측
D 키 - 우측

# 로봇이 움직이는지 확인
# 카메라 뷰가 변하는지 확인
```

**가설**:
- 로봇이 실제로 전진하고 있다면 → 카메라 뷰가 계속 변함
- 카메라 뷰가 항상 같으면 → 모델은 같은 scene을 보고 같은 액션 출력

---

### 3단계: 시나리오 변경 테스트

```bash
# 추론 중 시나리오 변경
'2' 키 입력 (Right 시나리오)

# 로그 확인:
# 🔄 시나리오 변경 (ID=2): Navigate to the brown pot on the right

# 다음 추론에서 액션이 변하는지 확인
# 예상: [1.15, 0.0] → [0.0, 1.15] 또는 [1.15, -1.15]
```

---

## 💡 가능한 원인 및 해결책

### 원인 1: 카메라 뷰가 변하지 않음 (가장 가능성 높음)

**진단**:
```bash
# 로봇이 벽을 향해 있거나, 장애물 앞에 멈춰있는 경우
# 카메라가 항상 같은 scene을 보고 있으면
# 모델은 같은 입력 → 같은 출력
```

**해결**:
```bash
# 추론 OFF 상태에서 수동으로 로봇을 다른 위치로 이동
# 또는 카메라 방향을 바꿔서 다른 scene을 보도록 함
```

---

### 원인 2: 모델이 "전진만 하도록" 학습됨

**진단**:
- 학습 데이터의 대부분이 전진([1.15, 0.0]) 액션일 가능성
- 특정 시나리오(Scenario 1)에서 대부분 직진

**해결**:
```bash
# 시나리오 변경
'2' 키 - Right 시나리오
'5' 키 - Basket Left 시나리오

# 다른 시나리오에서도 같은 증상이면 → 모델 문제
# 다른 시나리오에서 액션이 변하면 → 시나리오 1의 학습 데이터 문제
```

---

### 원인 3: History Window가 제대로 쌓이지 않음

**진단**:
- LSTM은 8프레임 히스토리를 사용
- 히스토리가 제대로 쌓이지 않으면 모델이 제대로 작동하지 않음

**해결**:
```bash
# 'R' 키로 히스토리 초기화 후 재테스트
# 로그에서 "🔄 추론 히스토리 초기화" 확인

# 초기화 후에도 같은 증상이면 → 히스토리 문제 아님
```

---

### 원인 4: Snap-to-Grid가 너무 공격적

**진단**:
```python
# snap_to_grid() 함수가 모든 값을 [1.15, 0.0]으로 매핑
# threshold가 너무 낮아서 다양한 출력이 모두 전진으로 변환됨
```

**해결**:
```bash
# api_client_node.py의 snap_to_grid() 함수 확인
# threshold 값 확인 (현재 0.5)
# 임시로 snap-to-grid를 비활성화하여 raw 액션 값 확인
```

---

## 🚀 즉시 시도할 것

### 1. 재실행하여 Instruction 로그 확인
```bash
vla-inference-local
# 'i' 키로 추론 시작
# 📝 [INSTRUCTION] ... 로그 확인
```

### 2. 로봇 위치 변경
```bash
# 추론 OFF 상태에서
# W/A/S/D로 로봇을 다른 위치로 이동
# 카메라가 다른 scene을 보도록 함
```

### 3. 시나리오 변경 테스트
```bash
# 추론 중 '2' 키 입력
# 액션이 변하는지 확인
```

---

## 📊 예상 결과

### Case A: Instruction이 제대로 변경되지 않음
```
❌ 로그: Navigate around the obstacle on the left side...
→ instruction_mapping.py가 반영되지 않음
→ 해결: 빌드 확인, import 경로 확인
```

### Case B: 카메라 뷰가 변하지 않음
```
✅ 로그: Navigate to the brown pot on the left
❌ 로봇이 벽을 향해 있거나 정지 상태
→ 모델은 같은 scene을 보고 같은 액션 출력
→ 해결: 로봇 위치 변경
```

### Case C: 모델이 전진만 학습함
```
✅ 로그: Navigate to the brown pot on the left
✅ 카메라 뷰가 변함
❌ 시나리오 변경해도 [1.15, 0.0]만 출력
→ 학습 데이터 문제 또는 모델 문제
→ 해결: 다른 체크포인트 테스트, 학습 데이터 분석
```

### Case D: 정상 작동
```
✅ 로그: Navigate to the brown pot on the left
✅ 카메라 뷰가 변함
✅ 시나리오 변경 시 액션 변화
→ 모든 것이 정상
```

---

**작성**: 2026-02-12  
**다음 단계**: 위 진단 절차 수행 후 결과 공유
