--action-type ee 필수RoboDojo에서 Zero-WAM을 평가하려면 XPolicyLab 정책 형식의 어댑터가 필요하다. ARX-X5용 ZW 체크포인트가 아직 없어 공개 RoboTwin 체크포인트(zero-wam-posttrain-robotwin)로 obs → backend → action 경로, action shape, 에피소드 완주만 검증했다(성공률은 대상 아님).
Zero-WAM wan_va 코드는 수정하지 않았다. 새 파일은 RoboDojo/XPolicyLab/policy/Zero_WAM/(서브모듈 내 로컬).
| 파일 | 내용 |
|---|---|
deploy.yml | backend 설정(zero_wam_root, server_env=lingbot-b200, config_name=robotwin, model_path), 모드(use_icl, guidance scale, icl_video_map...), action_type: ee, eval_batch: false |
model.py | backend(wan_va_server)에 붙는 얇은 websocket 클라이언트. RoboTwin 클라이언트 프로토콜 그대로, lazy 연결(Isaac Sim 부팅 중 backend 로드) |
deploy.py | 첫 obs → get_action, 이후 keyframe 주기(4스텝)마다 obs 전송 |
setup_eval_policy_server.sh | (1) torch.distributed.run --standalone -m wan_va.wan_va_server --config-name robotwin backend 기동 (2) XPolicyLab forward server 기동. 한쪽이 죽으면 전체 종료 |
install.sh | forward server용 경량 uv venv(py3.11, torch 없음). lingbot-b200에 msgpack_numpy 없고 RoboDojo env는 websockets가 구버전이라 두 env는 건드리지 않음 |
_smoke/smoke_zerowam.sh | language-only, --action-type ee, 1 에피소드(#SBATCH 헤더 없음) |
robodojo.sh eval은 정책의 eval.sh를 쓰지 않고 setup_eval_policy_server.sh를 직접 실행(forward 포트 600 s 대기)하므로, LingBot_VA 방식(eval.sh에서 backend 기동)은 이 경로에서 backend가 뜨지 않는다 → backend 기동을 server 스크립트로 이동.
| 항목 | RoboDojo (ARX-X5) | ZW robotwin |
|---|---|---|
| 카메라 | cam_head / cam_left_wrist / cam_right_wrist 640×480 (JPEG 왕복) | cam_high / left / right wrist, 서버가 224×288 리사이즈 |
| action | left/right_ee_pose [x,y,z,qw,qx,qy,qz](link6, world) + ee_joint_state[0..1] → IK | (16, F=2, H=16): 팔당 [Δxyz, quat4, gripper], 에피소드 첫 EE pose 기준 상대값 |
| 청크 | 첫 청크 16 스텝(frame0 skip), 이후 32 | KV cache keyframe 4 → 8개 |
내부 30-dim 중 사용 채널 16개(0-6, 28, 7-13, 29). 작업 지시의 "14-dim joint" 가정과 다르다.
_start_episode로 이동(가짜 backend 테스트로 확인)_result.json glob 수정| # | 항목 | 내용 |
|---|---|---|
| 1 | EE 프레임 | RoboTwin endpose는 TCP 기준(gripper_bias), RoboDojo ee_pose는 link6 원 pose. 상대 회전이 EE local에서 합성돼 축 정의 차이가 그대로 회전 오차. ARX-X5 베이스 y=-0.45, 90° 회전도 다름 |
| 2 | quat 산술 | wxyz 배열을 scipy(xyzw)로 읽는 관례를 그대로 복제. 학습 변환 스크립트도 같은 관례 필수 |
| 3 | 제어 주기 | RoboDojo 25 Hz(step_lim 800 = 32 s). RoboTwin 학습 action 주기와 같은지 미확인. action_per_frame=16, stride 4 고정 |
| 4 | 그리퍼/stats | 양쪽 0..1이나 robotwin_icl.json q01/q99는 RoboTwin 작업공간 기준 |
| 5 | 이미지 | 640×480(4:3) → 224×288(0.78) 종횡비 왜곡, JPEG 압축, FOV·위치 상이 |
| 6 | 기타 | 녹화는 get_obs 시점에만 프레임이 쌓여 4스텝 간격(201프레임, 25 FPS 라벨은 4배속). IK 실패 시 해당 팔 명령을 조용히 생략, 횟수 로그 없음 |
deploy.yml의 model_path(또는 --ckpt)와 필요 시 config_name만 바꿔 평가 가능.add_init_pose의 역연산, 같은 scipy 관례). 새 norm_stats + 새 va_robodojo_cfg(카메라 3개, height/width, action_per_frame를 25 Hz에 맞춤), link6 기준 일관 사용 → 불일치 1번 해소 (261006-robodojo_data_conversion_plan)icl_video_map)과 latent 선행 필요(현 RoboTwin 맵에 RoboDojo 태스크 없음)