Vector Sensor는 가장 기본적이면서도 강력한 센서입니다. 에이전트가 숫자 데이터를 통해 환경을 인식하도록 해줍니다.
언제 사용하나요?
- 현재 위치, 속도, 회전 같은 수치 데이터를 관찰할 때
- 내부 상태(예: 배터리 잔량, 청소 모드 등)를 학습에 반영할 때
- 시각이나 물리 센서보다 간단한 상태 표현이 필요할 때\
어떻게 구현하나요?
Agent 클래스의 CollectObservations(VectorSensor sensor) 함수에서 데이터를 수집합니다.
public override void CollectObservations(VectorSensor sensor)
{
sensor.AddObservation(transform.position.x); // x 위치
sensor.AddObservation(transform.position.z); // z 위치
sensor.AddObservation(transform.rotation.eulerAngles.y); // y축 회전
sensor.AddObservation(currentBattery / maxBattery); // 배터리 비율
sensor.AddOneHotObservation((int)cleaningMode, 3); // 청소 모드 (Idle, Cleaning, Returning)
}
AddObservation()은 다양한 데이터 타입을 지원합니다:
int, float, Vector3, Quaternion, bool, float[], OneHot
반드시 지켜야 할 규칙
- 관찰 순서 고정: 매 호출마다 순서가 같아야 합니다.
- 총 길이 고정: 관찰 벡터의 길이는 항상 동일해야 합니다.
- Space Size 일치: Behavior Parameters에서 지정한 관찰 공간 크기와 일치해야 합니다.
예: 총 6개의 float 값을 관찰 → Space Size = 6
시간 정보도 포함하고 싶다면?
Stacked Vectors를 활용하면, 현재 관찰 외에 이전 관찰값들도 함께 제공합니다.
최근 상태를 기억하는 데 유용하며, 시계열 데이터 기반 의사결정에 적합합니다.
예: 최근 3 프레임의 관찰을 사용하려면 → Stacked Vectors = 3
실전 예시: 로봇 청소기
관찰 항목 | VectorSensor로 표현하기 |
위치 | transform.position.x, transform.position.z |
회전 | rotation.eulerAngles.y |
배터리 잔량 | currentBattery / maxBattery |
청소 모드 | AddOneHotObservation((int)mode, 3) |
이렇게 구성하면 로봇이 어디에 있고 어떤 상태인지 정확히 파악하며 움직일 수 있습니다.
요약
- Vector Sensor는 가장 가볍고 범용적인 센서입니다.
- 수치형 관찰에 적합하며 빠른 학습에 유리합니다.
- 관찰 길이, 순서, 스태킹 설정은 항상 일관성 있게 관리해야 합니다.
'Unity' 카테고리의 다른 글
[ML-Agents] Ray Perception Sensor – 공간을 인식하는 센서 (0) | 2025.05.14 |
---|---|
[ML-Agents] Camera Sensor – 에이전트의 '눈'을 만들어주는 센서 (0) | 2025.05.14 |
[ML-Agents] Unity ML-Agents 입문자를 위한 에이전트와 센서 완전 정복 가이드 (0) | 2025.05.14 |
[Unity] Unity와 Visual Studio Code 연동 가이드 (0) | 2025.03.07 |
[Unity] Mixamo를 활용하여 캐릭터를 가져왔는데 머터리얼이 깨질 때 (0) | 2025.02.26 |