Shuyang-Yu-808
Add Robometer code + Robometer-4B weights
319eb16
|
Raw
History Blame Contribute Delete
7.05 kB
# Humanoid Everyday Dataset Guide
This guide explains how to integrate and use the Humanoid Everyday dataset with the Robometer training pipeline.
Source: `https://github.com/ausbxuse/Humanoid-Everyday`
## Overview
The Humanoid Everyday Dataset is a diverse collection of humanoid robot (Unitree G1 and H1) demonstrations recorded at 30 Hz across everyday tasks. This dataset supports research in robot learning, imitation, and perception.
- **Total Download Size:** ~500 GB (across 250 tasks), over 100,000 time-step recorded
- **Tasks:** 260 diverse scenarios (loco-manipulation, basic manipulation, tool use, deformables, articulated objects, human–robot interaction)
- **Episodes per task:** 40
- **Recording Frequency:** 30 Hz
### Modalities captured
- **Low-dimensional:**
- Joint states (arm, leg, hand)
- IMU (orientation, accelerometer, gyroscope, RPY)
- Odometry/Kinematics (position, velocity, orientation)
- Hand pressure sensors (G1 only)
- Teleoperator hands/head actions from Apple Vision Pro
- Inverse kinematics data
- **High-dimensional:**
- Egocentric RGB images (480x640x3, PNG)
- Depth maps (480x640, uint16)
- LiDAR point clouds (~6k points per step, PCD)
## Prerequisites
### Install humanoid_everyday dataloader
```bash
git clone https://github.com/ausbxuse/Humanoid-Everyday
cd Humanoid-Everyday
uv pip install -e .
```
### Download dataset
Please visit the task spreadsheet to download your task of interest, or use the provided download script:
```bash
bash dataset_upload/data_scripts/humanoid_everyday/download_humanoid_everyday.sh
```
## Directory Structure
```
<dataset_path>/
task1.zip
task2.zip
...
taskN.zip
```
Each zip file contains a complete task dataset with multiple episodes.
## Data Schema
Each time step is represented by a Python dictionary with the following fields:
```python
{
# Scalar identifiers
"time": np.float64, # UNIX timestamp (s)
"robot_type": np.str_, # Robot model identifier (G1 only)
# Robot states
"states": {
"arm_state": np.ndarray((14,), dtype=np.float64), # 14 joint angles
"leg_state": np.ndarray((15 or 13,), dtype=np.float64), # 15 joint angles for G1, 13 for H1_2
"hand_state": np.ndarray((14 or 12,), dtype=np.float64), # 14 joint angles for Unitree Dex3 Hand, 12 for Inspire Dextrous Hand
"hand_pressure_state": [...], # List of per-sensor readings (9 sensors per hand)
"imu": {
"quaternion": np.ndarray((4,), dtype=np.float64), # [w, x, y, z]
"accelerometer": np.ndarray((3,), dtype=np.float64), # [ax, ay, az]
"gyroscope": np.ndarray((3,), dtype=np.float64), # [gx, gy, gz]
"rpy": np.ndarray((3,), dtype=np.float64) # [roll, pitch, yaw]
},
"odometry": {
"position": np.ndarray((3,), dtype=np.float64), # [x, y, z]
"velocity": np.ndarray((3,), dtype=np.float64), # [vx, vy, vz]
"rpy": np.ndarray((3,), dtype=np.float64), # [roll, pitch, yaw]
"quat": np.ndarray((4,), dtype=np.float64) # [w, x, y, z]
}
},
# Control commands and solutions
"actions": {
"right_angles": np.ndarray((7,), dtype=np.float64), # commanded joint angles
"left_angles": np.ndarray((7,), dtype=np.float64), # commanded joint angles
"armtime": np.float64, # timestamp
"iktime": np.float64, # timestamp
"sol_q": np.ndarray((14,), dtype=np.float64), # solution joint angles
"tau_ff": np.ndarray((14,), dtype=np.float64), # feedforward torques
"head_rmat": np.ndarray((3, 3), dtype=np.float64), # rotation matrix
"left_pose": np.ndarray((4, 4), dtype=np.float64), # homogeneous transform
"right_pose": np.ndarray((4, 4), dtype=np.float64) # homogeneous transform
},
# High-dimensional observations
"image": np.ndarray((480, 640, 3), dtype=np.uint8), # RGB image
"depth": np.ndarray((480, 640), dtype=np.uint16), # Depth map
"lidar": np.ndarray((~6000, 3), dtype=np.float64) # around 6000 points for lidar point cloud
}
```
## Configuration (configs/data_gen_configs/humanoid_everyday.yaml)
```yaml
# configs/data_gen_configs/humanoid_everyday.yaml
dataset:
dataset_path: "./datasets/humanoid_everyday" # Path containing zip files
dataset_name: humanoid_everyday_rfm
output:
output_dir: ./robometer_dataset/humanoid_everyday_rfm
max_trajectories: -1
max_frames: 64
use_video: true
fps: 10
shortest_edge_size: 240
center_crop: false
num_workers: 4
hub:
push_to_hub: true
hub_repo_id: humanoid_everyday_rfm
```
## Usage
```bash
uv run python -m dataset_upload.generate_hf_dataset --config dataset_upload/configs/data_gen_configs/humanoid_everyday.yaml
```
This will:
- Find all zip files in the specified dataset path
- For each zip file, extract the task name and load episodes using the humanoid_everyday dataloader
- Extract RGB images from each episode
- Convert frames to web-optimized videos and create a HuggingFace dataset
- Use the zip filename (without extension) as the task description
## Data Fields
Each trajectory includes:
- `id`: Unique identifier
- `task`: Task name extracted from zip filename
- `frames`: Relative path to the generated clip video
- `is_robot`: True
- `quality_label`: "successful"
- `partial_success`: N/A (fixed by pipeline)
- `data_source`: `humanoid_everyday`
## Example Usage with Dataloader
```python
from humanoid_everyday import Dataloader
# Load your downloaded task's dataset zip file (e.g., the "push_a_button" task)
ds = Dataloader("~/Downloads/push_a_button.zip")
print("Episode length of dataset:", len(ds))
# Displaying high dimensional data at first episode, second timestep.
ds.display_image(0, 1)
ds.display_depth_point_cloud(0, 1)
ds.display_lidar_point_cloud(0, 1)
for i, episode in enumerate(ds):
if i == 1: # episode 1
print("RGB image shape:", episode[0]["image"].shape) # (480, 640, 3)
print("Depth map shape:", episode[0]["depth"].shape) # (480, 640)
print("LiDAR points shape:", episode[0]["lidar"].shape) # (~6000, 3)
batch = episode[0:4] # batch loading episodes
print(batch[1]["image"].shape)
print(batch[0]["image"].shape)
```
## Troubleshooting
- **Missing humanoid_everyday package**: Install it with `pip install humanoid_everyday` or clone and install from the GitHub repository
- **No zip files found**: Ensure the dataset_path contains zip files with humanoid everyday datasets
- **Import errors**: Make sure the humanoid_everyday package is properly installed and accessible
- **Memory issues**: Adjust `max_frames` and `num_workers` parameters to reduce memory usage
- **Long episodes**: Episodes longer than 1000 frames are automatically skipped to prevent memory issues
## License
This dataset is released under the MIT License.