Camera Recorder
This recorder uses YOLO pose tracking from a camera or video source, then writes:
DataG1/<take>.jsonl: replay-compatible G1 dataset with 29 jointsRawPose/<take>.pose.jsonl: raw 2D pose keypoints and diagnosticsModels/yolo11n-pose.pt: local bundled YOLO pose modelcamera_recorder_config.json: recorder defaults, runtime settings, and file locationsjoint.json: robot joint counts, waist indices, and joint limitspose_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
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:
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:
python3 g1_camera_pose_recorder.py --config /path/to/camera_recorder_config.json --source 0 --output test_take
Fixed camera index:
python3 g1_camera_pose_recorder.py --source 0 --output hands_up_cam
Record for a fixed duration:
python3 g1_camera_pose_recorder.py --source 0 --output hands_up_cam --seconds 12
Skip the start confirmation prompt:
python3 g1_camera_pose_recorder.py --no-prompt
Use a custom YOLO model or custom home pose:
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:
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:
python3 g1_camera_pose_replay.py
Replay scripts also accept explicit aliases like --iface, --input-file, and --home-file.
Safer camera-aware replay:
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 = enp3s0input = test_take.jsonlhome = arm_home.jsonl
So you can run:
cd /home/zedx/Robotics_workspace/yslootahtech/G1_Lootah/Camera_Recorder
python3 g1_camera_pose_replay_v2.py
Notes
qorEscstops recording.Ctrl+Ccleanly 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.jsonlpose 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
python3does not currently haveultralytics; run the recorder in the same Python environment you already use for/home/zedx/Robotics_workspace/AI/YOLO/YOLO_Test_3.py.