재생 도구가 검사 기준을 대신하지 않는다
Rerun은 영상·수치/공간 자료와 시간 관계를 기록하고 탐색하는 도구다. Replayer는 저장된 자료를 읽어 정한 순서/시간 정책으로 내보내거나 표시하는 프로그램이다. 파일을 열고 화면이 움직인다는 사실은 파일의 단위·시각/관측-행동 대응이 맞다는 뜻이 아니다. 상태를 화면에 재현하는 것과 행동을 제어기에 다시 보내는 것은 다른 작업이므로 이번 단위에서는 오프라인 표/표시 검토만 다룬다.
데이터 무결성 검사는 어떤 규칙을 충족하는지 판정하는 과정이다. 예를 들어 허용 관절 범위/영상 시차·예상 번호/시간 간격을 미리 정하고 위반을 기록한다. 그 규칙이 실제 과업의 품질을 충분히 설명하는지도 별도 검증한다. 자동 검사에 통과했다고 물체 파지/배치가 성공한 것은 아니고, 위반을 찾았다고 원인을 곧바로 센서 고장으로 확정할 수도 없다.
entity와 timeline에는 같은 뜻을 넣는다
entity path는 기록 대상을 구분하는 계층적 이름이다. robot/joints/elbow/position과 quality/image_joint_delta_ms처럼 원본 신호와 계산한 품질 신호를 나눌 수 있다. 이름만으로 단위가 자동 변환되지는 않으며 관절 이름·단위/프레임과 카메라 색/크기 등을 별도 기록한다. Rerun 공식 entity 설명은 경로와 저장 대상의 관계를 설명한다.
timeline은 데이터를 정렬/조회할 시간 또는 순번의 기준이다. 취득 시각과 기록 호출 시각, 도착 순서 번호를 다른 timeline/열로 유지하면 지연·순서 문제를 드러낼 수 있다. 공식 timeline 자료의 sequence·timestamp·duration 구분처럼 절대 시각과 에피소드 상대 경과 시간도 섞지 않는다. 이 단위에서 확인한 문서는 0.41 버전이며 SDK/표시 옵션은 설치 버전으로 확인한다.
공간 표시에서는 source/target과 회전/이동 방향을 명시한다. entity 이름에 world/camera라고 썼다는 이유만으로 측정된 TF가 생기는 것은 아니다. 실제 변환을 기록하고 축/길이 단위를 확인한다. Rerun의 부모 경로 변환 방식과 명시 frame 방식 중 어떤 계약을 썼는지도 남긴다. 잘못된 축에서 그럴듯한 그림이 나올 수 있어 별도 기준점으로 확인한다.
원시 순서를 지워 버리기 전에 검사한다
다음은 하나의 에피소드/같은 시계에서 들어온 합성 기록이다. seq는 취득 때마다 1씩 증가하고 이 구간에는 reset이 없다고 입력한다. t_joint/t_image는 취득 시각(s), q는 같은 회전 관절의 rad다. 번호/시각은 원본이며 arrival은 이번 표의 도착 순서다.
| arrival | seq | t_joint(s) | q(rad) | t_image(s) |
|---|---|---|---|---|
| 0 | 10 | 0.00 | 0.00 | 0.00 |
| 1 | 11 | 0.05 | 0.02 | 0.03 |
| 2 | 13 | 0.15 | 1.20 | 0.15 |
| 3 | 13 | 0.14 | 0.30 | 0.14 |
명목 관절/영상 간격은 0.05 s이며 합성 검사 범위는−1≤q≤1 rad, 구간 평균 속도 경고 기준은 절대값 2 rad/s 초과, 영상/관절 시차는 10 ms 이하다. 이 값은 실제 로봇 정격이 아니라 이번 활동의 입력이다.
seq11 다음 13이므로 12가 빠졌고 13은 두 번 나타난다. 두 13의 값/시각도 달라 단순히 완전히 같은 바이트의 재전송이라고 단정할 수 없다. seq10~13의 기대 4개 중 고유 관측은 3개라 이 구간의 번호 누락은 1/4=25%다. 도착은 4개이므로 행 수만 세면 누락을 놓친다. 이 비율의 분모는 지정한 번호 구간이며 전체 수집의 누락률로 일반화하지 않는다.
도착 순서의 관절 간격은 0.05/0.10/−0.01 s다. 마지막은 앞서 도착한 것보다 취득 시각이 작다. 네트워크 순서 뒤바뀜/버퍼·스키마/시계 문제 등 가능한 원인이 있으며 이 표만으로 확정하지 않는다. 먼저 timestamp로 정렬하면 역행 흔적이 화면에서 사라질 수 있다. 원본 arrival/seq와 정렬한 분석 view를 따로 보존하고 reset/새 에피소드와도 구별한다.
범위와 속도·정합의 위반을 따로 계산한다
q=1.20은 범위 상한 1을 0.20 rad 초과한다. 첫 구간 평균 속도는(0.02−0)/0.05=0.4 rad/s, 다음 양의 시간 구간은(1.20−0.02)/0.10=11.8 rad/s다. 후자는 2를 넘어 경고다. 마지막 구간은 음의 시간이라 이 순서의 속도 판정에 유효한 구간으로 넣지 않는다. 음수 분모를 그대로 써 큰 수를 얻고 정상 역방향 속도라고 이름 붙이지 않는다.
높은 변화가 물리적 운동인지 tick/degree를 rad로 잘못 기록한 것인지, 관절 매핑이 바뀌었는지는 원본/설정·다른 센서와 비교해야 한다. 예를 들어 90 degree를 90 rad로 표기하면 범위를 크게 넘지만 단순 값을 한계로 잘라 저장하면 변환 결함을 숨긴다. 원본을 보존하고 단위/보정·관절 ID를 먼저 조사한다. 유효 범위도 관절 타입/설정별로 다르므로 모든 회전 관절을 동일 범위로 검사하지 않는다.
arrival1의 영상−관절 시차는 0.03−0.05=−0.02 s다. 영상이 20 ms 이전이며 절대 시차 20>10 ms로 기준을 위반한다. 나머지 시각이 맞더라도 이 행의 카메라/관절 정합을 승인하지 않는다. 시계 기준이 같다는 입력 덕분에 차이를 계산할 수 있는 것이며, 다른 시계라면 먼저 시간 변환/불확실성 확인이 필요하다.
매끄러운 표시와 새 관측을 구분한다
재생 속도를 2배로 정하면 원본 0.15 s 구간을 이상적인 표시 스케줄에서는 0.075 s wall time에 보여 준다. 이는 재생 정책이지 원래 취득/명령 간격을 바꿨다는 뜻이 아니다. 실제 표시 지연/누락은 별도 확인한다. 보간을 켜 매끈하게 만들더라도 없는 프레임을 실제 취득 자료로 바꾸지는 못한다.
Rerun의 latest-at 질의는 선택 시각까지의 최신 component 값을 가져올 수 있다. 따라서 화면에 점/영상이 계속 남아 있다는 사실만으로 그 시각에 새 메시지가 있었다고 해석하지 않는다. 원본 이벤트 시각/자료 나이·유효 플래그와 빈 구간을 함께 표시한다. 원본과 보간/이전값 유지 view를 다른 이름으로 구분하면 표시가 결함을 가리지 않게 할 수 있다.
격리 목록은 결함을 지우는 대신 설명한다
검사 결과에는 episode/frame/seq·원본 파일 위치, 규칙/버전·관측 값/단위·위반 정도와 원인 가설/미상을 남긴다. 예를 들어 'seq12 미관측, seq13 충돌 기록, arrival3 순서 역행, arrival2 범위/속도, arrival1 정합'은 서로 다른 사실이다. 이를 모두 '센서 고장 5개'로 합치지 않는다. 하나의 원인이 여러 경고를 만들 수도 있고 각 경고에 다른 원인이 있을 수도 있다.
quarantine은 검토가 끝나지 않은 자료를 일반 학습/평가 흐름과 분리해 보존하는 것이다. 검사에 걸렸다는 이유로 원본을 바로 삭제하지 않는다. 가능한 재수집/수정과 해당 없음·불가를 기록한다. 수정 시에는 원본/변환 규칙·이전/새 버전을 남기고 같은 검사와 독립 기준으로 재검증한다. timestamp 정렬/중복 제거/단위 교정도 의미를 바꾸므로 자동 성공 처리하지 않는다.
기존 4.7 Rerun 무결성 검사는 의도적 이상치를 포함한 교육용 예를 연결한다. 해당 예의 이상치/예상 관찰은 실제 수집 성능이 아니다. 이번 활동도 Rerun 설치 없이 표의 근거를 계산하며 메시지 재발행/실물 재생은 수행하지 않는다.