6.3 출력 안정화
6.3.1 EMA 저역통과 필터
관절 목표 에 EMA를 적용하면
이다. 이 식은 일정한 샘플 간격을 가정한 이산 필터다. 작은 는 평활화를 늘리지만 응답을 늦춘다. EMA 목표 평활화는 PID 적분기의 포화 문제와 구분하며, 둘 다 내부 상태와 최종 구동 명령의 제한을 따로 검토해야 한다. 먼저 schema·유한값·단위·시간과 기본 hard limit을 검사해 무효 제안을 제거하고, 유효한 목표에 시간 앙상블/필터 → 속도 제한 → 위치·작업공간 제한 → 드라이버 순서로 적용한다. 최종 제한만으로 필터 상태나 실제 제동 동작이 안전해지는 것은 아니다. 포화·정지·reset 뒤 재시작 시 이전 필터 상태를 유지할지 초기화할지 계약하고 폐루프에서 확인한다.
필터는 문제를 숨길 수 있다. 타임스탬프 역전, NaN, 통신 끊김은 smoothing 대상이 아니라 fault다.
6.3.2 Temporal Ensembling
Action chunk 정책은 매 시점 미래 행동 시퀀스를 예측한다. 시점 의 행동에는 과거 여러 추론 chunk가 제안한 값이 겹친다. 이를 가중 평균하면 chunk 경계의 불연속을 줄일 수 있다.
ACT는 action chunking과 temporal ensembling으로 모방학습의 누적 오차와 비정상적 시연 문제를 다룬다.[Zhao et al., 2023] code/temporal_filters.py는 EMA와 겹치는 chunk의 지수 가중 평균을 구현한다. 이 교육용 예제는 새 추론 시작 시점에 큰 가중치를 주며, oldest-first 인덱스와 양의 계수에서 오래된 후보를 우선하는 LeRobot ACT 구현과 가중 방향이 다르다. 후보가 실행할 같은 시점·같은 단위의 값인지 확인하고 순서·계수 의미를 기록한다.
시간 앙상블은 안전 감독기를 대체하지 않는다. 먼저 proposal마다 schema, unit, finite, timestamp freshness, task/phase, 기본 hard limit을 확인해 stale/invalid proposal을 제거한다. 유효 후보만 합성한 뒤 최종 출력에 joint/workspace/rate/collision limit을 다시 적용한다. grasp/open/retreat처럼 mode가 바뀌거나 E-stop/reset이 발생하면 ensemble history를 비운다. 서로 다른 chunk가 모두 경계 밖 행동을 제안하면 평균도 위험하다.