로봇 간 행동 공간 정규화: 서로 다른 관절·그리퍼 데이터를 함께 학습하는 방법

로봇 데이터의 action 열 이름이 같아도 실제 명령의 좌표계, 단위, 제어 주기와 그리퍼 의미가 다르면 한 모델이 같은 값으로 전혀 다른 움직임을 배웁니다. 행동 공간 정규화는 차원을 맞추는 작업이 아니라 원래 명령을 공통 표현으로 바꾸고 다시 각 로봇 명령으로 정확히 되돌리는 계약입니다.

아래에서는 용어의 차이를 실제 시스템 경계, 실패 조건과 검증 순서로 나눠 살펴봅니다.

행동 공간 정규화는 길이를 맞추는 것이 아니라 명령의 의미를 맞추는 일이다

한 데이터셋은 7개 관절 위치를, 다른 데이터셋은 말단의 6D 이동량과 그리퍼 값을 action으로 저장할 수 있습니다. 둘을 8차원 배열로 패딩해도 같은 인덱스가 같은 물리량을 뜻하지 않으므로 모델은 숫자 모양만 공유하고 제어 의미는 섞어 버립니다.

로봇 action 데이터에서 먼저 상태와 명령, 관측과 목표를 분리해야 합니다. 공통 공간은 원본 제어 인터페이스를 숨기는 임시 배열이 아니라 각 필드의 의미와 역변환 규칙을 가진 명시적 스키마여야 합니다.

말단 7차원 표현은 여러 로봇을 잇는 출발점이지 완전한 표준은 아니다

Open X-Embodiment 공식 프로젝트는 여러 데이터셋의 action을 말단 x·y·z·roll·pitch·yaw와 gripper로 정리해 교차 로봇 학습을 시도했습니다. 쓰지 않는 차원은 0으로 둘 수 있어 서로 다른 조작기의 출력을 한 모델 헤드로 연결하기 쉽습니다.

하지만 7개 값만 같다고 동작이 같아지는 것은 아닙니다. 원 논문이 지적하듯 데이터셋마다 좌표 프레임과 absolute·relative·velocity 제어가 다를 수 있어, 같은 벡터가 로봇마다 다른 움직임을 만들 수 있습니다.

absolute·delta·velocity를 섞으면 작은 값의 뜻부터 달라진다

absolute pose는 목표 위치 자체이고 delta pose는 현재 위치에서의 변화량이며 velocity는 단위 시간당 움직임입니다. 0.02라는 값이 2cm 목표인지, 2cm 증분인지, 초당 2cm인지 구분하지 않으면 정규화 평균과 분산도 해석할 수 없습니다.

먼저 각 데이터셋의 제어 모드를 고정하고 공통 모드로 변환합니다. delta로 통일할 때는 기준 pose와 회전 합성 순서가 필요하고, velocity로 통일할 때는 실제 제어 주기와 누락 프레임을 반영해야 합니다.

원본 표현필요한 문맥공통화할 때 변환대표 오류
관절 위치joint order·단위·limitFK 또는 전용 joint token기구학 정보 손실
말단 absolutebase·tool frame기준 pose로 delta 계산회전 순서 오류
말단 deltalocal·world frame공통 frame으로 회전축 방향 반전
속도제어 주기·holddt를 반영한 증분주기 차이로 크기 왜곡

실제 로봇의 손과 팔 구조가 다르면 같은 공통 action 뒤의 역변환도 달라진다

사진처럼 두 팔과 특수 그리퍼를 가진 로봇은 단일 2지 그리퍼 로봇과 관절 수, 도달 범위, 자체 충돌 조건이 다릅니다. 공통 말단 목표가 같아도 IK 해와 관절 여유, 손가락 접촉 방식은 embodiment마다 달라집니다.

따라서 공통 action을 곧바로 모터 명령으로 보내지 않고 로봇별 adapter가 IK, limit, rate, collision constraint를 적용해야 합니다. 공통 모델과 실제 제어기 사이의 책임 경계를 보존해야 데이터 통합이 하드웨어 제약을 지우지 않습니다.

두 팔과 서로 다른 형태의 고급 그리퍼를 장착한 PR2 로봇
같은 ‘그리퍼를 닫는다’는 명령도 손가락 구조와 구동 범위에 따라 실제 변위와 힘이 달라집니다. 사진은 몸체 차이를 보여 주며 특정 정규화 방법의 성능을 입증하지 않습니다. 출처: Oleg Alexandrov. 라이선스: CC BY-SA 3.0. EXIF orientation normalized, center-cropped around the PR2 and both grippers, and resized; no material content altered.

좌표계는 이름뿐 아니라 원점·축 방향·회전 관례까지 저장한다

base, world, camera, tool frame이라는 이름만으로는 변환을 재현할 수 없습니다. 오른손·왼손 좌표계, quaternion 성분 순서, Euler 회전 순서, tool center point의 위치와 보정 시점을 함께 기록해야 합니다.

변환 행렬은 에피소드 수집 당시 calibration 버전과 연결합니다. 카메라나 gripper를 교체한 뒤 같은 frame 이름을 재사용하면 과거 action을 새 로봇에 역변환할 때 체계적인 위치 오차가 생깁니다.

정규화 통계는 전체 로봇을 한 번에 계산하지 않고 데이터셋별로 보존한다

Open X-Embodiment 원 논문은 각 데이터셋의 action을 discretization 전에 정규화하고 embodiment에 따라 다시 de-normalize하는 구성을 설명합니다. 이는 큰 동작 범위를 가진 로봇이 작은 로봇의 분포를 압도하지 않게 합니다.

평균·표준편차만 저장하면 이상치에 민감하므로 quantile, min·max, clip 범위와 통계 산출 대상 split도 함께 남깁니다. 성공 에피소드만으로 통계를 만들었다면 실패·복구 데이터에 적용할 때 분포가 달라질 수 있습니다.

그리퍼 action은 연속 폭·힘·속도·이진 상태를 구분해야 한다

0과 1이 open·close인지, 미터 단위 폭인지, 최대 힘 대비 비율인지 데이터셋마다 다릅니다. 손가락이 여러 개인 손은 하나의 scalar로 접으면 접촉 전략이 사라질 수 있어 별도 token이나 embodiment 전용 head가 필요합니다.

공통 binary command를 만들더라도 hysteresis와 현재 상태를 같이 씁니다. 0.5 근처의 연속 값을 매 프레임 열고 닫는 명령으로 바꾸면 채터링이 생기므로 원본 명령의 deadband와 hold 의미를 보존합니다.

없는 차원은 0값과 유효성 mask를 함께 둬야 한다

어떤 로봇이 yaw를 쓰지 않는다고 0만 채우면 모델은 ‘0도를 명령했다’와 ‘해당 차원이 없다’를 구분하지 못합니다. action mask, embodiment id, control mode를 함께 제공해야 손실 계산과 출력 해석에서 결측을 무시할 수 있습니다.

Octo 공식 프로젝트처럼 여러 로봇 데이터로 일반 정책을 만들 때는 관측과 action schema의 차이를 adapter 계층에서 다루는 설계가 중요합니다. 공통 backbone이 로봇별 하드웨어 의미를 암기하도록 떠넘기면 새 embodiment 적응이 불안정해집니다.

제어 주기와 action horizon을 맞추지 않으면 시간 크기가 달라진다

10Hz의 delta와 50Hz의 delta는 프레임당 값이 같아도 초당 이동량이 다릅니다. timestamp, 유효 dt, command hold 방식, 누락 프레임 보간을 기록하고 공통 시간격자로 resample할지 모델에 dt를 입력할지 결정합니다.

로봇 Action Chunking을 적용하면 chunk 길이도 초 단위와 step 단위로 함께 관리합니다. 서로 다른 주기의 20-step chunk를 같은 horizon으로 보면 미래 길이가 다르기 때문입니다.

왕복 변환은 배열 비교와 로봇 재생을 두 단계로 검증한다

원본 action을 공통 공간으로 바꾼 뒤 즉시 역변환해 joint·pose·gripper 오차를 계산합니다. 회전은 각도 오차, translation은 거리, gripper는 상태 전환 시점과 포화를 별도로 봅니다.

그다음 저속·안전 영역에서 짧은 에피소드를 replay해 방향과 크기, 주기가 실제로 맞는지 확인합니다. 숫자 왕복이 정확해도 잘못된 frame calibration이나 controller mode 때문에 물리 실행은 틀릴 수 있습니다.

원본 action 스키마에서 공통 표현과 로봇별 명령으로 왕복 변환하는 검증표
스키마·좌표계·단위·시간축·그리퍼 의미를 기록하고 원본과 역변환 결과를 비교해야 합니다. 출처: 피지컬 AI Lab.

정규화 실패는 평균 손실보다 로봇별 방향·포화 패턴에서 먼저 보인다

특정 로봇만 x축 동작이 약하거나 gripper 전환이 늦고 관절 limit에 자주 닿는다면 공통 모델보다 adapter와 통계를 먼저 의심합니다. 로봇별 action histogram, saturation rate, mask 사용률, 역변환 오차를 분리해 기록합니다.

로봇 학습 데이터 품질 검사에서도 분포만 보지 말고 물리 의미가 맞는 표본 재생을 포함해야 합니다. 값 범위가 예쁘게 정규화됐다는 사실은 방향과 좌표계가 맞다는 증거가 아닙니다.

합격 기준은 공통 성능과 각 로봇의 원래 성능을 함께 지키는 것이다

교차 로봇 모델의 평균 성공률이 올라가도 한 embodiment가 크게 퇴보하면 정규화가 그 로봇의 유효 action 해상도를 잃었을 수 있습니다. 로봇별 성공률, 미세 조작 오차, action saturation과 zero-shot·fine-tune 결과를 함께 봅니다.

LeRobot Dataset v3 구조처럼 데이터 형식을 고정할 때도 normalization 통계와 adapter commit을 dataset version에 묶습니다. 그래야 모델이 어떤 변환으로 학습됐는지 나중에 재현할 수 있습니다.

검증 층확인 항목합격 신호실패가 뜻하는 것
스키마dimension·mask·mode결측과 명령 구분필드 의미 혼합
왕복position·rotation·gripper허용 오차 안 복원frame·scale·clip 오류
재생방향·크기·주기원래 궤적과 일치calibration·controller 불일치
학습robot별·task별 성능평균과 최악 모두 유지특정 embodiment 손실

로봇 간 행동 공간 정규화에서 자주 묻는 질문

모든 로봇 action을 7차원으로 만들면 정규화가 끝나나요?

아닙니다. 좌표계, absolute·delta·velocity 의미, 단위, 주기와 그리퍼 정의까지 맞춰야 하며 로봇별 역변환 adapter가 필요합니다.

관절 action과 말단 action을 같은 모델에 넣을 수 있나요?

가능하지만 FK·IK 변환이나 별도 action head·token으로 의미 차이를 드러내야 합니다. 단순 padding만으로는 같은 차원이 같은 동작을 뜻하지 않습니다.

정규화 통계는 전체 데이터에서 한 번만 계산하면 되나요?

로봇과 데이터셋마다 분포가 달라 개별 통계를 보존하는 편이 안전합니다. train split, quantile, clip 범위와 계산 코드 버전도 함께 저장해야 합니다.

쓰지 않는 action 차원은 0으로 두면 되나요?

0값과 함께 유효성 mask를 둬야 합니다. 그렇지 않으면 모델은 실제 0 명령과 존재하지 않는 차원을 구분할 수 없습니다.

정규화가 맞는지 가장 빠르게 확인하는 방법은 무엇인가요?

원본→공통→원본 왕복 오차를 계산하고, 저속 안전 조건에서 짧은 궤적을 replay해 방향·크기·주기와 그리퍼 전환을 확인합니다.

공통 action 표현은 하드웨어 안전 한계나 제어기 검증을 대신하지 않습니다. 실제 실행에서는 로봇별 관절·속도·힘·충돌 제한과 비상 정지 절차를 별도 계층에서 적용해야 합니다.