# Camera Recorder This recorder uses YOLO pose tracking from a camera or video source, then writes: - `DataG1/.jsonl`: replay-compatible G1 dataset with 29 joints - `RawPose/.pose.jsonl`: raw 2D pose keypoints and diagnostics - `Models/yolo11n-pose.pt`: local bundled YOLO pose model - `camera_recorder_config.json`: recorder defaults, runtime settings, and file locations - `joint.json`: robot joint counts, waist indices, and joint limits - `pose_mapping.json`: camera pose-to-joint mapping rules and gains The generated G1 dataset is designed to work with the existing replay scripts in this project. Lower body joints stay at `arm_home.jsonl`, and the upper body is estimated from the visible 2D pose. ## Record From Camera ```bash cd /home/zedx/Robotics_workspace/yslootahtech/G1_Lootah/Camera_Recorder python3 g1_camera_pose_recorder.py --source ask --output hands_up_cam ``` Recorder defaults also come from `camera_recorder_config.json`. Right now the default output is `test_take`, and the default home pose is the local `DataG1/arm_home.jsonl`, so you can simply run: ```bash cd /home/zedx/Robotics_workspace/yslootahtech/G1_Lootah/Camera_Recorder python3 g1_camera_pose_recorder.py ``` The recorder asks for an `Enter` confirmation before it starts writing files. Use `--no-prompt` to skip that. You can also use explicit aliases like `--output-file` and `--home-file`. By default, the recorder now looks for `Models/yolo11n-pose.pt` first. All operational defaults are now loaded from `camera_recorder_config.json`. CLI flags still work, but they override the JSON values for that run only. The mapper-specific data is split into `joint.json` and `pose_mapping.json`, which are referenced from `camera_recorder_config.json`. Use a different config file: ```bash python3 g1_camera_pose_recorder.py --config /path/to/camera_recorder_config.json --source 0 --output test_take ``` Fixed camera index: ```bash python3 g1_camera_pose_recorder.py --source 0 --output hands_up_cam ``` Record for a fixed duration: ```bash python3 g1_camera_pose_recorder.py --source 0 --output hands_up_cam --seconds 12 ``` Skip the start confirmation prompt: ```bash python3 g1_camera_pose_recorder.py --no-prompt ``` Use a custom YOLO model or custom home pose: ```bash python3 g1_camera_pose_recorder.py \ --source 0 \ --output wave_cam \ --model /home/zedx/Robotics_workspace/AI/YOLO/yolo11n-pose.pt \ --home-pose /home/zedx/Robotics_workspace/yslootahtech/G1_Lootah/Manual_Recorder/DataG1/arm_home.jsonl ``` ## Replay The Recorded Dataset Because the file is saved under `Camera_Recorder/DataG1`, pass the full path to replay: ```bash python3 /home/zedx/Robotics_workspace/yslootahtech/G1_Lootah/Camera_Recorder/g1_camera_pose_replay.py \ enp3s0 \ --input /home/zedx/Robotics_workspace/yslootahtech/G1_Lootah/Camera_Recorder/DataG1/hands_up_cam.jsonl \ --home arm_home.jsonl ``` `g1_camera_pose_replay.py` also reads replay defaults from `camera_recorder_config.json`, so from inside `Camera_Recorder` you can run: ```bash python3 g1_camera_pose_replay.py ``` Replay scripts also accept explicit aliases like `--iface`, `--input-file`, and `--home-file`. Safer camera-aware replay: ```bash python3 /home/zedx/Robotics_workspace/yslootahtech/G1_Lootah/Camera_Recorder/g1_camera_pose_replay_v2.py \ enp3s0 \ --input /home/zedx/Robotics_workspace/yslootahtech/G1_Lootah/Camera_Recorder/DataG1/hands_up_cam.jsonl \ --home arm_home.jsonl \ --speed 0.35 ``` `g1_camera_pose_replay_v2.py` also reads replay defaults from `camera_recorder_config.json`. Right now those defaults are: - `iface = enp3s0` - `input = test_take.jsonl` - `home = arm_home.jsonl` So you can run: ```bash cd /home/zedx/Robotics_workspace/yslootahtech/G1_Lootah/Camera_Recorder python3 g1_camera_pose_replay_v2.py ``` ## Notes - `q` or `Esc` stops recording. - `Ctrl+C` cleanly cancels camera selection or the start prompt, and stops recording if it is already running. - Any joint that is not captured in a frame falls back to the `arm_home.jsonl` pose for that joint. - The mapping is heuristic because a single 2D camera cannot recover full 3D shoulder and wrist orientation. - On this machine, the default `python3` does not currently have `ultralytics`; run the recorder in the same Python environment you already use for `/home/zedx/Robotics_workspace/AI/YOLO/YOLO_Test_3.py`.