======================================================================== HOW TO ACTUALLY RUN THE ROBOT (pose6daug GR00T-N1.5, Franka EEF rig) ======================================================================== !! This MOVES the physical Franka arm. Have the e-stop in hand and the !! workspace clear before you launch. ------------------------------------------------------------------------ 0) WHICH COMMAND DOES WHAT (read this first) ------------------------------------------------------------------------ full_inference_mock.py -> DOES NOT MOVE THE ROBOT. Robot + cameras are mocked. Verification only. Safe to run anytime: PYTHONPATH=/home/jimin/myGR00T CUDA_VISIBLE_DEVICES=0 STEPS=48 \ /home/jimin/miniconda3/envs/gr00t/bin/python \ /home/jimin/jonghoon/mygr00t_franka_deploy/full_inference_mock.py deploy_franka_eef.py -> MOVES THE REAL ROBOT. This is the one below. ------------------------------------------------------------------------ 1) BEFORE YOU LAUNCH (checklist) ------------------------------------------------------------------------ [ ] Franka powered on, brakes released, e-stop within reach. [ ] Workspace clear; nothing in the arm's path. [ ] Both ZED cameras connected. Confirm the serials match: exterior = 37149196 wrist = 11845904 (if different, edit --left_camera_id / --wrist_camera_id below) [ ] The DROID robot server/NUC is up (the `droid` RobotEnv connects to it). [ ] GPU 0 is free. ------------------------------------------------------------------------ 2) RUN IT (easiest — the example script) ------------------------------------------------------------------------ bash /home/jimin/jonghoon/mygr00t_franka_deploy/run_example.sh - Task is preset to: "pick up the object and place it in the white basket" - Per-step translation clamp: 0.03 (safety) - Press Ctrl+C to stop the rollout early at any time. ------------------------------------------------------------------------ 3) RUN IT (explicit command — same thing, edit inline) ------------------------------------------------------------------------ PYTHONPATH=/home/jimin/myGR00T CUDA_VISIBLE_DEVICES=0 \ /home/jimin/miniconda3/envs/gr00t/bin/python -u \ /home/jimin/jonghoon/mygr00t_franka_deploy/deploy_franka_eef.py \ --task "pick up the object and place it in the white basket" \ --max_trans_per_step 0.03 \ --embodiment_tag=new_embodiment \ --data_config=droid_franka_eef_real \ --action_space=cartesian_position \ --left_camera_id=37149196 \ --wrist_camera_id=11845904 \ --inference_head=main \ --denoising_steps=4 \ --max-timesteps=1500 \ --logging_path=/home/jimin/droid/rollout_results/pose6daug-iclr120-20k \ policy:checkpoint \ --policy.config=franka_real_eef \ --policy.dir=/home/jimin/pose6daug-gr00t-iclr120-20k/checkpoint-20000 Omit --task to be prompted "Enter instruction:" interactively instead. Swap checkpoint-20000 for -5000/-10000/-15000 to try earlier steps. ------------------------------------------------------------------------ 4) CONTROL MODE -- CONFIRMED FROM THE CHECKPOINT ------------------------------------------------------------------------ Checked the training normalization stats in the checkpoint metadata: the ACTION distribution == the STATE distribution (EEF x,y,z spanning the ~0.3-0.6 m workspace, not centered on 0). So this model outputs: ABSOLUTE cartesian target positions, in meters (NOT relative/delta, NOT velocity) Therefore: * use --action_space=cartesian_position (as in sections 2/3). * --max_trans_per_step 0.03 is a SAFETY MOVE LIMIT: it caps (target - current_EEF) to +/- 0.03 m per step, so the arm walks toward each predicted target no faster than 3 cm/step. It does NOT clamp the absolute target (that would drag the arm toward 0,0,0). (This was fixed in deploy_franka_eef.py; verified in the mock.) * do NOT use cartesian_velocity for this checkpoint. Tip: on the first real run, set a small --max_trans_per_step (e.g. 0.02), watch a few steps, then raise it. ------------------------------------------------------------------------ 5) DO NOT ------------------------------------------------------------------------ - Do NOT pass --resize_video : this config's VideoToTensor needs native 720x1280 frames (it crops/resizes to 224 internally). Passing 192,320 will crash it. - Do NOT run full_inference_mock.py expecting motion (see section 0). ========================================================================