#### 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/navwareset" target="_blank">![Hugging Face](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Dataset-yellow)</a>

# Dataset Card for NavWareSet

![image/png](https://huggingface.co/datasets/Voxel51/navwareset/resolve/main/navaware.gif)

This is a [FiftyOne](https://github.com/voxel51/fiftyone) dataset with 7 samples.

## Installation

If you haven’t already, install FiftyOne:

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

## Usage

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

# Load the dataset
# Note: other available arguments include 'max_samples', etc
dataset = load_from_hub("Voxel51/navwareset")

# Launch the App
session = fo.launch_app(dataset)
```

## Dataset Details

### Dataset Description

NavWareSet is a multi-modal dataset of socially-compliant and non-compliant
robot navigation around human pedestrians, collected in a controlled indoor
environment (3.9 m × 10.7 m). The source dataset covers 48 scenes across
seven canonical social-navigation scenarios (Frontal Approach, Pedestrian
Obstruction, Blind Corner, Following Human, Perpendicular Traffic, Circular
Crossing, Object Handover), each recorded with two robot platforms (Toyota
Human Support Robot and Clearpath Jackal) and, for six of the seven
scenarios, in both a socially-compliant and a non-compliant navigation mode
under matched initial conditions. Every scene is captured simultaneously by
the robot’s own onboard sensors and by a stationary external Ground-truth
Recording Station (GRS: a RoboSense RS-LiDAR-16 mounted above an Intel
RealSense camera), which also provides the point cloud on which human
trajectories were manually annotated.

**This FiftyOne parse currently ships 7 of the source dataset’s 48 scenes,
Jackal only** (Toyota HSR carries a head RGB-D sensor plus 2 stereo cameras
and is not yet imported; the merge pipeline already supports it, see
`pipeline/merge_bags.py`). Each sample is one scene, stored as a single
multi-topic `.mcap` file combining the robot’s onboard sensors, the GRS’s
sensors, and the manually-annotated pedestrian trajectories into one
synchronized timeline, viewable in FiftyOne’s multimodal 3D/Image/Plot
tiles.

- **Curated by:** Johnata Brayan, Sihao Deng, Armando Alves Neto, Iaroslav
  Okunevich, Tomas Krajnik, Francois Bremond, Zhi Yan (CIAD UMR7533/UTBM;
  Universidade Federal de Minas Gerais; Université Marie et Louis
  Pasteur/UTBM/CNRS ICB UMR 6303; Czech Technical University in Prague;
  Inria; ENSTA/Institut Polytechnique de Paris)
- **Funded by:** French National Research Agency (ANR), grant ANR-23-CE10-0016;
  Toyota Partner Robot joint research project; Roboprox (Czechia),
  CZ.02.01.01/00/22_008/0004590; Coordenação de Aperfeiçoamento de Pessoal de
  Nível Superior (CAPES, Brasil), Finance Code 001
- **Shared by:** harpreetsahota (this FiftyOne parse); original dataset by
  Brayan et al.
- **Language(s):** en
- **License:** CC BY 4.0

### Dataset Sources

- **Repository:** [dat@UBFC portal](https://search-data.ubfc.fr/FR-13002091000019-2025-05-22_NavWareSet-A-Dataset-of-Socially-Compliant-and.html) (original data, DOI: 10.25666/DATAUBFC-2025-05-22); [NavWareSet-Tutorials](https://github.com/anr-navware/NavWareSet-Tutorials) (official devkit)
- **Paper:** Brayan et al., “NavWareSet: A Dataset of Socially Compliant and Non-Compliant Robot Navigation”, *The International Journal of Robotics Research*, 2026, DOI: 10.1177/02783649261447305; preprint: [hal-05231729v2](https://hal.science/hal-05231729v2)
- **Demo:** https://anr-navware.github.io/navwareset/

## Uses

### Direct Use

Training and benchmarking social navigation algorithms; direct behavioral
comparison between socially-compliant and non-compliant robot motion under
matched initial conditions; pedestrian-response modeling and trajectory
prediction conditioned on robot behavior; calibrating analytic
human-motion/interaction models such as the Social Force Model against real
robot-human recordings (the source paper demonstrates this with UAIbot); use
as counterexamples (non-compliant trajectories) alongside compliant examples
in imitation/avoidance-learning setups.

### Out-of-Scope Use

The source data was collected in a single controlled indoor lab environment
and does not generalize to outdoor, cluttered, or multi-room settings. It
contains teleoperated trajectories only — no autonomous navigation runs from
learned policies are included, so it is not suited to evaluating real-time
onboard planners end-to-end. This FiftyOne parse specifically ships Jackal
scenes only; it should not be used to draw conclusions about the Toyota HSR
platform’s behavior until HSR scenes are imported.

## Dataset Structure

**Media type:** `multimodal` — one FiftyOne sample per scene, each backed by
one `.mcap` file (Foxglove/ROS 2 MCAP, `ros2msg`/`cdr` message encoding for
raw sensor topics, Foxglove protobuf schemas for authored annotation
channels). 7 samples currently, spanning 2 of the source dataset’s 7
participant groupings (Group 1, Group 2, and Pair 1–5 for Object Handover):
Group 1 (scenes 15–18, 25) and Group 2 (scenes 46–47), and both `behavior`
values.

Per-sample fields:

| Field                        | FiftyOne type            | Description                                                                                                                       |
|------------------------------|--------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
| `filepath`                   | `StringField`            | Path to the scene’s `.mcap` file                                                                                                  |
| `scene_id`                   | `StringField`            | Source scene number (verbatim from source, e.g. `"15"`)                                                                           |
| `scenario`                   | `StringField`            | One of the 7 canonical scenarios (verbatim from the project site’s scene table — not shipped machine-readable in the source data) |
| `robot_platform`             | `StringField`            | `"Jackal"` for every sample currently shipped                                                                                     |
| `behavior`                   | `StringField`            | `"social"` (compliant) or `"non-social"` (non-compliant)                                                                          |
| `participant_group`          | `StringField`            | `"Group 1"` or `"Group 2"` — which 5 volunteers appear in the scene                                                               |
| `has_pedestrian_annotations` | `BooleanField`           | `True` for all 7 (would be `False` only for the 5 Object Handover scenes, not yet imported)                                       |
| `duration_s`                 | `FloatField`             | Episode duration in seconds (~250s / ~4 min per scene)                                                                            |
| `message_count`              | `IntField`               | Total MCAP message count (~78k per scene)                                                                                         |
| `channel_count`              | `IntField`               | Total MCAP channel/topic count (18 per scene)                                                                                     |
| `topics`                     | `ListField(StringField)` | Every topic name present in the scene’s `.mcap`                                                                                   |
| `schemas`                    | `ListField(StringField)` | Every message schema name present in the scene’s `.mcap`                                                                          |

Inside each `.mcap`, the 18 channels break down as:

| Topic                             | Schema                                        | Content                                                                                       |
|-----------------------------------|-----------------------------------------------|-----------------------------------------------------------------------------------------------|
| `/grs/rslidar_points`             | `sensor_msgs/msg/PointCloud2`                 | GRS RoboSense RS-LiDAR-16 point cloud (stationary), ~10 Hz                                    |
| `/grs/camera/color/image_raw`     | `sensor_msgs/msg/CompressedImage` (JPEG)      | GRS overhead RGB video                                                                        |
| `/grs/camera/color/camera_info`   | `sensor_msgs/msg/CameraInfo`                  | GRS camera intrinsics                                                                         |
| `/grs/tf_static`                  | `tf2_msgs/msg/TFMessage`                      | Authored GRS extrinsics chain (`grs_map`→`grs_rslidar`→`grs_camera_color`→optical frame)      |
| `/robot/rslidar_points`           | `sensor_msgs/msg/PointCloud2`                 | Jackal onboard lidar, ~20 Hz                                                                  |
| `/robot/camera/color/image_raw`   | `sensor_msgs/msg/CompressedImage` (JPEG)      | Jackal onboard front camera                                                                   |
| `/robot/camera/color/camera_info` | `sensor_msgs/msg/CameraInfo`                  | Jackal camera intrinsics                                                                      |
| `/robot/tf`                       | `tf2_msgs/msg/TFMessage`                      | Jackal’s real recorded transform tree (`odom`↔`base_link`, wheel joints, camera/lidar mounts) |
| `/robot/tf_static`                | `tf2_msgs/msg/TFMessage`                      | Authored Jackal camera optical-frame convention                                               |
| `/robot/amcl_pose`                | `geometry_msgs/msg/PoseWithCovarianceStamped` | Jackal’s 2D AMCL localization estimate                                                        |
| `/robot/cmd_vel`                  | `geometry_msgs/msg/Twist`                     | Jackal velocity commands                                                                      |
| `/robot/map`                      | `nav_msgs/msg/OccupancyGrid`                  | Jackal’s onboard occupancy grid                                                               |
| `/connector/tf_static`            | `tf2_msgs/msg/TFMessage`                      | Per-scene calibration linking the robot’s localization frame to the GRS frame                 |
| `/annotations/pedestrians`        | `foxglove.SceneUpdate`                        | Per-frame pedestrian 3D cuboids, persistent per-person track ID                               |
| `/annotations/robot_pose`         | `foxglove.SceneUpdate`                        | Robot 2D pose marker (arrow primitive), GRS-frame-native                                      |
| `/annotations/trajectories`       | `foxglove.SceneUpdate`                        | Static, full-episode robot + participant trajectory polylines                                 |
| `/annotations/occupancy`          | `foxglove.PointCloud`                         | Static floor-plan point set                                                                   |
| `/telemetry/positions`            | JSON                                          | Per-frame flat `robot_x`/`robot_y`/`robot_yaw_rad` plus up to 5 participants’ `x`/`y`         |

**Label types and why:**

- Pedestrian 3D cuboids map to `foxglove.SceneUpdate` entities rather than a
  per-sample `fo.Detections` field, because they are a time-synced channel
  meant to play back alongside the lidar/camera channels in FiftyOne’s
  multimodal 3D tile. `SceneUpdate` entities carry a persistent entity ID
  across frames, which is exactly what the source annotation format’s
  per-person UUID (`objects[].key` in the Supervisely export) already
  provides — no separate tracking field needed.
- The robot’s pose is logged as an arrow primitive inside a `SceneUpdate`
  channel (`/annotations/robot_pose`) rather than a keypoint field, mirroring
  the official devkit’s own visualization convention.
- Trajectories are logged once per episode as static polyline entities
  (matching the source paper’s Figure 4, “trajectories extracted from the
  robot and participants over the environment map”) rather than growing
  per-frame, since a `SceneUpdate` entity persists across playback until
  replaced.
- The static floor plan is a raw point set (`foxglove.PointCloud`), not a
  `fo.Segmentation` mask, since that is the format the source occupancy-map
  export ships in.

No dataset-level `info` dict is populated by the ingest pipeline. Sensor
extrinsics (GRS mount height/orientation, Jackal’s camera optical-frame
convention, the per-scene GRS↔robot calibration) are instead authored as
static TF channels inside each episode’s own `.mcap`
(`/grs/tf_static`, `/robot/tf_static`, `/connector/tf_static`) rather than
as dataset-level metadata, so they travel with each sample individually.

**Parsing decisions of note** (see `pipeline/merge_bags.py`’s module
docstring for the full, per-decision verification):

- The robot bag reuses the GRS’s own topic names and `frame_id` strings for
  its own sensors — every topic is prefixed `/grs` or `/robot`, and the two
  colliding `frame_id`s are renamed rather than left to collide.
- Neither raw bag records the GRS’s or the robot camera’s static extrinsics;
  these are authored from real numbers (the devkit’s own launch file, and
  the universal ROS optical-frame axis convention), not fabricated.
- The GRS’s `map`→`rslidar` pitch is authored as flat (0°), not the 15°
  downward tilt the source paper/devkit launch file specify — verified
  empirically against the raw point cloud, which is already gravity-level in
  its own frame; applying the stated 15° would slope a real flat floor by
  ~2 m across the room.
- `rgb8`/`bgr8` camera images are transcoded to JPEG-backed
  `CompressedImage` (quality 90); depth and other non-8-bit-3-channel
  encodings are left raw.
- `PointCloud2` messages are repacked to drop undeclared per-point padding
  present in the raw sensor driver output (verified bit-identical x/y/z/
  intensity values through a full serialize/deserialize roundtrip before
  applying).
- The robot’s own recorded `/tf` carries real but non-physical roll/pitch/z
  noise on the `odom`→`base_link` and `map`→`odom` transforms (verified
  against the same bag’s `/robot/amcl_pose`, which is exactly
  `roll=pitch=z=0.0` on every message) — these two transforms are flattened
  to yaw-only rotation with `z=0` on ingest; x/y translation and yaw are left
  untouched as real, meaningful odometry.

## Dataset Creation

### Curation Rationale

The source paper’s stated goal is to fill a gap left by existing social
navigation datasets (e.g. SCAND, THÖR), which lack a systematic exploration
of well-defined social navigation scenarios and robot behaviors under
controlled conditions. NavWareSet is designed around seven canonical,
literature-grounded interaction scenarios, each recorded with matched
socially-compliant and non-compliant robot behavior under comparable initial
conditions, so that differences in robot–human interaction can be directly
attributed to the presence or absence of social awareness in the robot’s
motion, rather than confounded by environment or task differences.

### Source Data

#### Data Collection and Processing

For each scene, two ROS bag files were recorded simultaneously: one from the
robot’s onboard sensors (lidar, RGB-D/stereo or single color camera,
odometry, velocity commands, TF), and one from the external GRS station
(3D lidar point clouds and overhead RGB video). Human trajectories were
manually annotated frame-by-frame on the GRS’s point clouds using the CVAT
annotation tool, exported in Supervisely JSON format, and later converted to
CSV for downstream tooling. Static occupancy maps were exported as 2D point
sets. All files follow a standardized per-scene naming convention encoding
scenario, robot, social-compliance condition, and participant group.

This FiftyOne parse re-processes the two raw ROS bags per scene into a
single synchronized `.mcap` and layers the annotation products on top — see
“Parsing decisions of note” above for the specific fixes this required.

#### Who are the source data producers?

Two mobile robot platforms — Toyota Human Support Robot (HSR) and Clearpath
Jackal — each teleoperated to replicate both socially-aware and unaware
navigation behavior. Seventeen adult volunteer participants, organized into
two main groups of five plus five additional pairs for the Object Handover
scenario, acted as pedestrians/interaction partners.

### Annotations

#### Annotation process

Human (pedestrian) 3D positions were manually annotated frame-by-frame on
the GRS’s point clouds using the CVAT annotation tool, exported in
Supervisely format (single `Person` class, 3D cuboid geometry, one
persistent object key per tracked individual). This FiftyOne parse carries
those cuboids through as a `foxglove.SceneUpdate` channel keyed by that same
persistent per-person ID (see “Label types and why” above).

#### Who are the annotators?

[More Information Needed]

#### Personal and Sensitive Information

All 17 volunteer participants were informed about the nature of the study
and signed an informed consent form before the experiments; no subjective
personal feedback (e.g. discomfort/frustration questionnaires) was
collected. The dataset does contain personally identifiable information in
the form of RGB video of participants (both the GRS’s overhead camera and
the robot’s onboard camera) and their 3D trajectories/positions throughout
each scene.

## Citation

**BibTeX:**

```bibtex
@article{brayan2026navwareset,
  title={NavWareSet: A Dataset of Socially Compliant and Non-Compliant Robot Navigation},
  author={Brayan, Johnata and Deng, Sihao and Alves Neto, Armando and Okunevich, Iaroslav and Krajnik, Tomas and Bremond, Francois and Yan, Zhi},
  journal={The International Journal of Robotics Research},
  year={2026},
  doi={10.1177/02783649261447305},
  note={HAL Id: hal-05231729v2, https://hal.science/hal-05231729v2}
}
```

**APA:**

Brayan, J., Deng, S., Alves Neto, A., Okunevich, I., Krajnik, T., Bremond, F., & Yan, Z. (2026). NavWareSet: A dataset of socially compliant and non-compliant robot navigation. *The International Journal of Robotics Research*. https://doi.org/10.1177/02783649261447305

## More Information

This FiftyOne parse currently ships 7 of the source dataset’s 48 scenes,
Jackal platform only (scene 01, an HSR scene, was downloaded only to
validate the merge pipeline and was never authored into this dataset). 14
more Jackal scenes exist in the source data and are not yet imported: 19,
20, 21, 22, 23, 26 (Group 1) and 41, 42, 43, 44, 45, 49, 51, 52 (Group 2).
Toyota HSR scenes and the 5 Object Handover scenes (no pedestrian
annotations) are also not yet imported. The merge/authoring pipeline
supports all of these without code changes — see `pipeline/scene_metadata.py`
for the full scene → scenario/robot/behavior/group table and
`AGENT_BOARDING.md` for the import pipeline’s decision log.

Official devkit and tutorials: https://github.com/anr-navware/NavWareSet-Tutorials

For the original dataset: Zhi Yan (zhi.yan@ensta.fr)

## Dataset Card Authors

harpreetsahota (this FiftyOne parse)

## Dataset Card Contact

For the original dataset: Zhi Yan (zhi.yan@ensta.fr)
