"""Run the Isaac Lab RL candy-pick policy on the real SO101 (state-based: joints + detected candy). Same observation and action conventions as Isaac-SO101-CandyPick-Direct: obs = arm joints [rad] + gripper opening [0..1], joint velocities x0.1, candy (x, y, sin2yaw, cos2yaw) from the phone at the start, towel (x, y), last action, episode time fraction act = 5 arm-joint target deltas (x0.06 rad per 30 Hz step, clamped to the real-demo ranges) + gripper command (-1 closed .. +1 = LeRobot 45 open) By default it only detects the candy and prints what it would do (DRY RUN, arm not moved). Add --go to move the arm; you are asked to confirm first. Keep a hand near the power switch. cd ~/B1Hackathon/tasks/candy_sort/rl_deploy ~/miniconda3/envs/lerobot/bin/python deploy_rl.py --policy policy.pt # dry run ~/miniconda3/envs/lerobot/bin/python deploy_rl.py --policy policy.pt --go # moves the arm Safety (real arm only): targets change by at most --max-step-deg per step (default 1 deg = 30 deg/s, about a third of what the sim policy may command) and actions are low-pass filtered (--smooth). Every run saves ../eval_videos/rl__