#### NOTE
This is a **Hugging Face dataset**. For large datasets, ensure `huggingface_hub>=1.1.3` to avoid rate limits. Learn more in the <a href="https://docs.voxel51.com/integrations/huggingface.html#loading-datasets-from-the-hub" target="_blank">Hugging Face integration docs</a>.

<a href="https://huggingface.co/datasets/Voxel51/grabette-tactile-full-synced-48ep" target="_blank">![Hugging Face](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Dataset-yellow)</a>

# Dataset Card for Grabette Tactile Full Synced (48 episodes)

![Grabette Tactile Full Synced preview](https://huggingface.co/datasets/Voxel51/grabette-tactile-full-synced-48ep/resolve/main/grabette-tactile.gif)

This is a [FiftyOne](https://github.com/voxel51/fiftyone) dataset with 48 samples. Each sample is one episode of the task “Pick up the white cube and put it in the correct cup”, recorded with robot type `grabette`.

## Installation

```bash
pip install -U fiftyone
```

## Usage

### Load from the Hub

```python
import fiftyone as fo
from fiftyone.utils.huggingface import load_from_hub

dataset = load_from_hub("Voxel51/grabette-tactile-full-synced-48ep")

session = fo.launch_app(dataset)
```

### Download a snapshot and load it locally

```python
import fiftyone as fo
from huggingface_hub import snapshot_download

snapshot_download(
    repo_id="Voxel51/grabette-tactile-full-synced-48ep",
    repo_type="dataset",
    local_dir="grabette-tactile-full-synced-48ep",
)

dataset = fo.Dataset.from_dir(
    dataset_dir="grabette-tactile-full-synced-48ep",
    dataset_type=fo.types.LeRobotDataset,
    name="grabette_tactile_full_synced",
)

session = fo.launch_app(dataset)
```

## Dataset Details

### Dataset Description

48 episodes (19,353 frames) at 50 fps on robot type `grabette`, all with the task “Pick up the white cube and put it in the correct cup”. Each frame has two 960x720 H.264 camera streams, an 8-D action, an `is_lost` flag, and two int16 tactile taxel grids (6x6 and 4x8). The source is a LeRobot v3.0 repo.

- **Shared by:** `CarolinePascal` on Hugging Face
- **Language(s):** en
- **License:** apache-2.0

### Dataset Sources

- **Repository:** https://huggingface.co/datasets/CarolinePascal/grabette-tactile-full-synced

## Dataset Structure

**Topology.** `media_type: multimodal`, 48 samples, one per episode, 50 fps, 145-537 frames (2.9-10.7 s). Samples hold a `media_reference` to the per-frame parquet and 2 video streams.

| Field                                                                 | FiftyOne type             | Description                                           |
|-----------------------------------------------------------------------|---------------------------|-------------------------------------------------------|
| `media_reference`                                                     | `LeRobotEpisodeReference` | Pointers into `data/` parquet and the 2 video streams |
| `episode_index`                                                       | `IntField`                | Episode index (0-47)                                  |
| `task`                                                                | `StringField`             | The single task instruction                           |
| `tasks`                                                               | `ListField(StringField)`  | All task strings of the episode                       |
| `length`                                                              | `IntField`                | Frames in the episode                                 |
| `duration`                                                            | `FloatField`              | Episode duration in seconds                           |
| `robot_type`                                                          | `StringField`             | `grabette`                                            |
| `fps`                                                                 | `FloatField`              | 50                                                    |
| **Data behind `media_reference`** (per-frame, from `meta/info.json`): |                           |                                                       |

| Feature                                       | Shape        | Description                                                                             |
|-----------------------------------------------|--------------|-----------------------------------------------------------------------------------------|
| `observation.images.right_cam0`, `right_cam1` | 720x960x3    | h264 yuv420p video                                                                      |
| `action`                                      | (8,)         | `right_x, right_y, right_z, right_ax, right_ay, right_az, right_proximal, right_distal` |
| `is_lost`                                     | (1,)         | `right_is_lost` flag                                                                    |
| `observation.tactile.right_sensor_1`          | (6, 6) int16 | Tactile taxel grid                                                                      |
| `observation.tactile.right_sensor_2`          | (4, 8) int16 | Tactile taxel grid                                                                      |

**Label types and why.** The FiftyOne LeRobot importer only recognizes `video` and `image` features, so the int16 tactile grids are not imported as FiftyOne fields. Multimodal samples have no frame fields, so no tactile values become FiftyOne fields. The arrays stay unchanged in `data/chunk-000/file-000.parquet` and ship with the exported LeRobot repo.

**`dataset.info`.** `lerobot` entry with `format`, `format_major`, `episode_count`, `imported_episode_count`, `skipped_episodes` (empty).

**Parsing decisions.**

- All 48 episodes imported, from a single shard (240 MB). No source file was modified.
- Units, taxel layout, and physical meaning of the tactile values are not stated in the source card.

## Dataset Creation

### Source Data

#### Data Collection and Processing

The source card states only that it was created using LeRobot.

### Annotations

#### Annotation process

A single task string is stored in `meta/tasks.parquet`.
