Unity

[ML-Agents] Buffer Sensor – 동적으로 변하는 객체를 추적하는 센서

빈형임 2025. 5. 14. 02:29

Buffer Sensor는 에이전트가 가변적인 수의 객체를 관찰할 수 있도록 해주는 센서입니다.
관찰할 대상이 매번 바뀌거나, 수가 일정하지 않은 상황에서 유용하게 사용됩니다.

예: 주변에 쓰레기가 몇 개 있을지 모를 때, 그 수에 따라 관찰을 자동으로 조정할 수 있다면?

 


언제 사용하나요?

  • 주변에 존재하는 객체(유출물, 적, 아이템 등)의 수와 위치가 매번 다를 때
  • 다수의 객체를 동적으로 추적해야 할 때
  • 레이, 그리드 센서로는 표현이 어렵거나 비효율적인 경우

예: 로봇 청소기 주변에 쓰레기나 장애물이 불규칙하게 생성/삭제되는 상황

 

주요 설정 항목

설정 항목 설명
MaxNumObservables 한 번에 추적할 수 있는 최대 객체 수
ObservableSize 각 객체를 표현하는 float 값의 개수
예: ObservableSize = 4 → 각 객체: (x, z, 크기, 타입)
     MaxNumObservables = 10 → 최대 10개의 객체까지 관찰 가능

 

코드 구현 예시

public class TrashObserver : MonoBehaviour
{
    public BufferSensorComponent bufferSensor;

    void Update()
    {
        var buffer = bufferSensor.GetObservationBuffer();
        foreach (var trash in FindNearbyTrash())
        {
            float[] data = new float[4] {
                trash.transform.position.x,
                trash.transform.position.z,
                trash.size,
                trash.typeIndex
            };
            buffer.AppendObservation(data);
        }
    }
}

AppendObservation(float[])을 통해 하나씩 수동으로 버퍼에 추가
추가한 데이터의 길이는 ObservableSize와 정확히 일치해야 함

 


실전 예시: 유출물 동적 감지 로봇

목표 Buffer Sensor 활용
근처에 쓰레기가 몇 개 있는지 파악 MaxNumObservables = 20 설정
쓰레기 위치 + 크기 + 타입 기록 ObservableSize = 4 로 설정 후 스택에 추가
너무 멀리 있는 쓰레기는 제외 거리 필터링 후 AppendObservation
에이전트는 매 스텝마다 주변 환경을 새롭게 감지하고, 동적으로 행동 전략을 조정할 수 있습니다.

 

주의사항

  • 추가할 수 있는 개수 제한 있음 (MaxNumObservables 초과 시 무시됨)
  • 각 엔티티의 데이터 길이는 반드시 동일해야 함 (ObservableSize 고정)
  • 서로 다른 유형의 객체를 다루려면 여러 BufferSensor 사용 고려
  • Vector/Camera/Ray 센서와 병행하여 사용하면 학습 안정성 향상

 

훈련 최적화를 위한 전략

전략 설명
가까운 객체만 필터링 불필요한 데이터 제거 → 효율 향상
객체 유형을 구분하려면 마지막 인덱스에 type index 추가
크기 또는 상태 포함 스케일, 체력, 위험도 등 커스텀 벡터 구성 가능
실시간 스캔 최적화 Update 대신 FixedUpdate에서 호출하여 안정적 관찰 유지

 

 

요약

  • Buffer Sensor는 객체 수가 유동적인 환경에서 탁월한 선택입니다.
  • 주변 동적 객체를 유연하게 추적하고, 다양한 정보로 행동을 조정할 수 있습니다.
  • 사용 시 ObservableSize, MaxNumObservables를 일관되게 관리하는 것이 핵심입니다.