| # Robometer MIT Franka Dataset Guide |
|
|
| This guide explains how to integrate and use the Robometer MIT Franka dataset with the Robometer pipeline. |
| Source: https://drive.google.com/drive/folders/1dd62YeKY9-bTeK5fkjljzoFkNX2uZ1YD?usp=sharing |
|
|
| ## Overview |
|
|
| - Robometer MIT Franka is a robotics dataset with quality-labeled trajectories for manipulation tasks |
| - The dataset contains pre-recorded MP4 videos organized by task and quality level |
| - Quality labels include: **successful**, **suboptimal**, and **failure** |
| - Each trajectory has two camera views: **external (ext)** and **wrist** |
|
|
| ## Dataset Structure |
|
|
| The dataset is organized as follows: |
|
|
| ``` |
| ROBOMETER_MIT_Franka/ |
| foldtowel/ |
| success/ |
| Tue_Jan_20_23_49_14_2026_ext.mp4 |
| Tue_Jan_20_23_49_14_2026_wrist.mp4 |
| ... |
| suboptimal/ |
| Tue_Jan_20_23_52_01_2026_ext.mp4 |
| Tue_Jan_20_23_52_01_2026_wrist.mp4 |
| ... |
| failure/ |
| Tue_Jan_20_23_54_53_2026_ext.mp4 |
| Tue_Jan_20_23_54_53_2026_wrist.mp4 |
| ... |
| movebanana/ |
| success/ |
| suboptimal/ |
| failure/ |
| movemouse/ |
| pourpebble/ |
| pulltissue/ |
| putspoon/ |
| stirpot/ |
| ``` |
|
|
| ### Tasks Included |
|
|
| 1. **foldtowel**: Fold the towel in half. |
| 2. **movebanana**: Pick up the banana from the blue plate and place it on the green plate. |
| 3. **movemouse**: Pick up the mouse and place it right next to the laptop, while avoiding spilling coffee. |
| 4. **pourpebble**: Pour the pebbles from the cup onto the plate. |
| 5. **pulltissue**: Pull a tissue from the tissue box. |
| 6. **putspoon**: Pick up the spoon and place it inside the cup. |
| 7. **stirpot**: Pick up the spatula and stir the beans in the pot. |
|
|
| ### Camera Views |
|
|
| Each trajectory has two synchronized camera views: |
| - **ext (external)**: Third-person view of the robot and workspace |
| - **wrist**: First-person view from the robot's wrist camera |
|
|
| By default, the loader processes both views as separate trajectories, each with the same task instruction but different visual observations. You can optionally exclude wrist camera views using the `exclude_wrist_cam` configuration option. |
|
|
| ### Quality Labels |
|
|
| - **success**: Trajectory successfully completes the task |
| - **suboptimal**: Trajectory completes the task but with inefficiencies or errors |
| - **failure**: Trajectory fails to complete the task |
|
|
| ## Configuration |
|
|
| Configuration file: `dataset_upload/configs/data_gen_configs/new_mit_franka.yaml` |
|
|
| ```yaml |
| dataset: |
| dataset_path: ~/robometer/datasets/ROBOMETER_MIT_Franka |
| dataset_name: rfm_new_mit_franka_rfm |
| exclude_wrist_cam: false # Set to true to only process external camera views |
| |
| output: |
| output_dir: ./robometer_dataset/rfm_new_mit_franka_rfm |
| max_trajectories: -1 # -1 for all trajectories |
| max_frames: 32 |
| use_video: true |
| fps: 10 |
| shortest_edge_size: 240 |
| center_crop: false |
| num_workers: 4 |
| |
| hub: |
| push_to_hub: true |
| hub_repo_id: rfm_new_mit_franka_rfm |
| ``` |
|
|
| ### Camera View Options |
|
|
| The dataset includes both external and wrist camera views. You can configure which views to process: |
|
|
| - **`exclude_wrist_cam: false`** (default): Process both external and wrist camera views as separate trajectories |
| - **`exclude_wrist_cam: true`**: Only process external camera views, skip wrist camera entirely |
|
|
| This is useful if you only want third-person views or need to reduce dataset size. |
|
|
| ## Usage |
|
|
| ### Convert Dataset to HuggingFace Format |
|
|
| ```bash |
| uv run python -m dataset_upload.generate_hf_dataset --config_path=dataset_upload/configs/data_gen_configs/new_mit_franka.yaml |
| ``` |
|
|
| To only process external camera views (exclude wrist camera): |
|
|
| ```bash |
| uv run python -m dataset_upload.generate_hf_dataset --config_path=dataset_upload/configs/data_gen_configs/new_mit_franka.yaml --dataset.exclude_wrist_cam=true |
| ``` |
|
|
| This will: |
| - Scan all task folders and their quality subfolders |
| - Load the corresponding MP4 videos for both camera views (or only external if `exclude_wrist_cam: true`) |
| - Process and resample videos to the specified frame count and FPS |
| - Generate language embeddings for task instructions |
| - Create a HuggingFace dataset with proper quality labels |
| - Optionally push to HuggingFace Hub |
|
|
| ### Quality Label Mapping |
|
|
| The loader automatically normalizes quality labels: |
| - `"success"` → `"successful"` |
| - `"failure"` → `"failure"` (unchanged) |
| - `"suboptimal"` → `"suboptimal"` (unchanged) |
|
|
| ## Output Format |
|
|
| The generated dataset will have the following schema: |
|
|
| - `id`: Unique trajectory identifier |
| - `task`: Task instruction text |
| - `lang_vector`: Language embedding of the task |
| - `data_source`: Dataset name |
| - `frames`: Path to video file (or sequence of images) |
| - `is_robot`: Boolean (True for this dataset) |
| - `quality_label`: One of "successful", "suboptimal", "failure" |
| - `preference_group_id`: None for this dataset |
| - `preference_rank`: None for this dataset |
|
|
| ## Task Instructions Mapping |
|
|
| The loader uses the following mapping from folder names to natural language instructions: |
|
|
| | Folder Name | Task Instruction | |
| |--------------|----------------------------------------------------------------------------------------| |
| | foldtowel | Fold the towel in half | |
| | movebanana | Pick up the banana from the blue plate and place it on the green plate | |
| | movemouse | Pick up the mouse and place it right next to the laptop, while avoiding spilling coffee | |
| | pourpebble | Pour the pebbles from the cup onto the plate | |
| | pulltissue | Pull a tissue from the tissue box | |
| | putspoon | Pick up the spoon and place it inside the cup | |
| | stirpot | Pick up the spatula and stir the beans in the pot | |
|
|
| These mappings are defined in the loader file (`new_mit_franka_loader.py`) and can be updated if needed. |
|
|
| ## Notes |
|
|
| - Videos are already in MP4 format, so the loader reads them directly using OpenCV |
| - The loader supports parallel processing with configurable worker count |
| - Language embeddings are cached to avoid redundant computations |
| - Output videos maintain the same content but are resampled to the specified frame count and FPS |
| - Both camera views (ext and wrist) are processed as separate trajectories by default |
| - Use `exclude_wrist_cam: true` to only process external camera views and reduce dataset size by ~50% |
|
|
| ## Troubleshooting |
|
|
| ### Video File Not Found |
| - Ensure the dataset path points to the ROBOMETER_MIT_Franka directory |
| - Check that video files exist in the expected task/quality subfolders |
|
|
| ### Missing Task Folders |
| - The loader expects folders named: foldtowel, movebanana, movemouse, pourpebble, pulltissue, putspoon, stirpot |
| - Each task folder should contain subfolders: success, suboptimal, failure |
|
|
| ### OpenCV Issues |
| - If you encounter video codec issues, ensure OpenCV is properly installed with video support |
| - Try: `pip install opencv-python-headless` or `pip install opencv-python` |
|
|
| ### Unknown Task Warning |
| - If a task folder is not in the TASK_INSTRUCTIONS mapping, it will be skipped |
| - Add new tasks to the mapping in `new_mit_franka_loader.py` |
|
|
| ### Filtering Camera Views |
| - Set `exclude_wrist_cam: true` in the YAML config to skip wrist camera videos |
| - Or pass it as a command-line argument: `dataset.exclude_wrist_cam=true` |
| - This will process only external camera views, roughly halving the dataset size |
|
|
| ## Example Output |
|
|
| After processing, you'll have a directory structure like: |
|
|
| ``` |
| robometer_dataset/rfm_new_mit_franka_rfm/ |
| rfm_new_mit_franka_rfm/ |
| shard_0000/ |
| episode_000000/ |
| foldtowel_ext.mp4 |
| episode_000001/ |
| foldtowel_wrist.mp4 |
| ... |
| ``` |
|
|
| With `exclude_wrist_cam: true`, only external camera videos are included: |
|
|
| ``` |
| robometer_dataset/rfm_new_mit_franka_rfm/ |
| rfm_new_mit_franka_rfm/ |
| shard_0000/ |
| episode_000000/ |
| foldtowel_ext.mp4 |
| episode_000001/ |
| movebanana_ext.mp4 |
| ... |
| ``` |
|
|
| And a HuggingFace Dataset with all trajectory metadata. |
|
|
| ## Dataset Statistics |
|
|
| The dataset contains approximately 304 video files (152 trajectory pairs with ext and wrist views) across 7 different manipulation tasks, with varying distributions of successful, suboptimal, and failed demonstrations. |
|
|
| When `exclude_wrist_cam: true` is set, approximately 152 external camera videos are processed (one per trajectory). |
|
|