Note

This is a Hugging Face dataset. For large datasets, ensure huggingface_hub>=1.1.3 to avoid rate limits. Learn more in the Hugging Face integration docs.

Hugging Face

Dataset Card for Boreas Multimodal (MCAP)#

image/png

A FiftyOne build of Boreas and Boreas Road Trip (Boreas-RT), the multi-season and multi-route autonomous driving datasets from the Autonomous Space Robotics Laboratory (ASRL) at UTIAS. This build repackages 3 driving sequences and 6 object-detection windows as time-synchronized MCAP recordings for FiftyOne’s native multimodal dataset support (FiftyOne 1.19+). Each sample is one episode, viewable in FiftyOne’s tiled multimodal viewer with synchronized camera, 128-beam lidar point cloud, decoded 360° radar imagery, GPS/map track, and IMU/encoder/velocity telemetry — plus, for the object-detection episodes, 3D bounding boxes rendered natively in the 3D tile and as 2D wireframe overlays on the camera and radar images.

Boreas/Boreas-RT are raw multi-sensor datasets for benchmarking odometry/localization algorithms across seasons, weather, and road types; only one recording (boreas-objects-v1) carries 3D object annotations (Car/Pedestrian/Cyclist/Misc). This repackaging does not add or alter any ground truth; see Dataset Creation for exactly what was kept, converted, and left out.

This is a FiftyOne dataset with 8 samples.

Installation#

If you haven’t already, install FiftyOne:

pip install -U fiftyone

Usage#

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/boreas-multimodal")

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

Dataset Details#

Dataset Description#

Boreas is a multi-season autonomous driving dataset collected by repeatedly driving a route near the University of Toronto over one full year (Nov 2020-Nov 2021), capturing sun, rain, falling snow, and every season in between — 44 public sequences, 350 km total. Boreas Road Trip (Boreas-RT) extends this with 9 new, more diverse routes (suburbs, industrial, urban, forest, farm, tunnel, skyway, regional, freeway), each repeated on average 6 times — 60 sequences, 643 km total — adding an Aeva Aeries II FMCW Doppler lidar (32 of 60 sequences) and a standalone Silicon Sensing DMU41 IMU on top of the original sensor suite (128-beam Velodyne Alpha-Prime lidar, 360° Navtech scanning radar, 5MP FLIR Blackfly S camera, Applanix POS LV GNSS-INS). A separate, dedicated recording (boreas-objects-v1, ~104 minutes, sunny weather only) provides 326,180 3D object-detection annotations (Car/Pedestrian/Cyclist/Misc) across 7,111 labeled lidar frames. This FiftyOne build covers 2 driving-sequence episodes (one original Boreas, one Boreas-RT) and 6 object-detection windows carved from boreas-objects-v1 (see Curation Rationale).

  • Curated by: Autonomous Space Robotics Laboratory (ASRL), University of Toronto Institute for Aerospace Studies (UTIAS), in collaboration with Applanix/Trimble — original Boreas/Boreas-RT data collection, sensor calibration, and ground-truth pose post-processing. 3D object annotations for boreas-objects-v1 were produced by the Scale.ai data annotation service. This MCAP/FiftyOne multimodal repackaging (episode authoring, dataset card) was prepared independently by Harpreet Sahota.

  • Funded by: Natural Sciences and Engineering Research Council of Canada (NSERC); Applanix/Trimble (co-authorship and sensor support); General Motors (vehicle donation); hosting via the Amazon Open Data Sponsorship Program.

  • Shared by: Harpreet Sahota (this repackaging); the original Boreas and Boreas-RT datasets are shared by ASRL via the AWS Open Data Registry (s3://boreas) and https://www.boreas.utias.utoronto.ca.

  • Language(s): N/A (sensor data — camera, lidar, radar, GPS, IMU; no text).

  • License: Unknown — the AWS Open Data Registry listing’s License field is blank, and no license is stated in the pyboreas devkit or bucket contents at the time of this card; see Citation for the registry’s suggested access citation.

Dataset Sources#

  • Repository (devkit): https://github.com/utiasASRL/pyboreas

  • Paper: Burnett, K., Yoon, D. J., Wu, Y., Li, A. Z., Zhang, H., Lu, S., Qian, J., Tseng, W.-K., Lambert, A., Leung, K. Y. K., Schoellig, A. P., & Barfoot, T. D. (2023). Boreas: A Multi-Season Autonomous Driving Dataset. The International Journal of Robotics Research, 42(1-2), 33-42. arXiv:2203.10168; Lisus, D., Papais, K. M., Le Gentil, C., Preston-Krebs, E., Lambert, A., Leung, K. Y. K., & Barfoot, T. D. (2026). Boreas Road Trip: A Multi-Sensor Autonomous Driving Dataset on Challenging Roads. arXiv:2602.16870

  • Demo: https://www.boreas.utias.utoronto.ca (official docs/download/ leaderboard site) and https://registry.opendata.aws/boreas/ (AWS Open Data listing)

Uses#

Direct Use#

  • Exercising/demoing FiftyOne’s multimodal MCAP support: synchronized playback of camera, 128-beam lidar point cloud, decoded 360° radar imagery, GPS/map track, and IMU/encoder/velocity telemetry across real autonomous-driving recordings.

  • Inspecting 3D object-detection ground truth (Car/Pedestrian/Cyclist boxes) rendered natively as foxglove.SceneUpdate cuboids in the 3D tile, plus 2D wireframe overlays on the camera and radar bird’s-eye-view images (both carrying label/uuid/numPoints metadata, inspectable via FiftyOne’s built-in click-to-inspect panel), across 6 diverse time windows spread through the ~104-minute boreas-objects-v1 recording.

  • Prototyping odometry/localization analyses against dense ENU-frame ground-truth pose (/tf, /odom, /gps, /velocity) at each sensor’s native timestamp.

  • Comparing sensor suites between the original Boreas platform and the Boreas-RT extension (adds an Aeva FMCW Doppler lidar and a standalone DMU41 IMU).

Out-of-Scope Use#

  • Reproducing the official odometry/localization/detection leaderboards at boreas.utias.utoronto.ca — those benchmarks run over full, un-windowed sequences (44 Boreas + 60 Boreas-RT sequences, each 90-150+ GB raw); this build covers only 2 driving sequences (each a 10-second window, not the full sequence) plus 6 short windows carved from the single boreas-objects-v1 recording.

  • Training or evaluating on obj_test-split windows for detection — ground truth for that split is withheld by the source dataset for leaderboard fairness (confirmed directly: every obj_test window checked has zero label files); only obj_train windows are included here.

  • Any task requiring depth maps, semantic/instance segmentation, or an HD map layer — none exist anywhere in the source dataset (the devkit’s own BoreasDataset.map attribute is an unimplemented TODO).

Dataset Structure#

This is a flat (ungrouped) FiftyOne dataset with media_type: "multimodal" and 8 samples. Each sample is one episode, stored as one .mcap file; FiftyOne infers the multimodal media type automatically from the .mcap extension. There are no separate per-frame image or point-cloud samples — the episode is the sample unit, and every stream inside it (camera, lidar, radar, GPS, IMU, encoder, and — where present — 3D box annotations) is decoded live by FiftyOne’s multimodal viewer.

The dataset carries no per-sample tags and dataset.info is empty (no extra dataset-level metadata beyond the per-sample fields below).

Episodes in this dataset#

sequence_id

episode_tag

dataset_variant

episode_type

Duration

has_boxes

has_aeva

has_gps

boreas-2021-09-02-11-42

ep000

Boreas

odometry

10.0s

False

False

True

boreas-2024-12-03-12-54

ep000

Boreas-RT

odometry

10.0s

False

True

True

boreas-objects-v1

ep000_objsample

Boreas

object_detection

19.5s

True

False

False

boreas-objects-v1

ep001_objtrain

Boreas

object_detection

19.5s

True

False

False

boreas-objects-v1

ep002_objtrain

Boreas

object_detection

39.6s

True

False

False

boreas-objects-v1

ep003_objtrain

Boreas

object_detection

45.7s

True

False

False

boreas-objects-v1

ep004_objtrain

Boreas

object_detection

19.5s

True

False

False

boreas-objects-v1

ep005_objtrain

Boreas

object_detection

19.7s

True

False

False

The 2 driving episodes are fixed 10-second windows starting mid-sequence (not full sequences — see Curation Rationale). The 6 boreas-objects-v1 episodes are 5 obj_train windows plus the devkit’s own obj_sample window, spread across the full ~104-minute recording for scene diversity; ep000_objsample’s window is also one of the obj_train windows. boreas-objects-v1 has no applanix/imu.csv/dmi.csv/lat-lon columns at all (an older, 2020-era recording — see Parsing decisions), hence has_gps is False for all 6.

Fields#

Field

FiftyOne type

Description

filepath

StringField

Absolute path to the episode’s .mcap file — the sample’s multimodal media

sequence_id

StringField

Raw Boreas/Boreas-RT sequence ID (boreas-YYYY-MM-DD-HH-MM, or boreas-objects-v1), verbatim from the S3 folder name

episode_tag

StringField

Local identifier disambiguating multiple episodes from the same sequence_id (e.g. the 6 different windows into boreas-objects-v1)

episode_type

StringField

"odometry" or "object_detection"

dataset_variant

StringField

"Boreas" or "Boreas-RT"

duration_s

FloatField

Episode duration in seconds, computed from the MCAP’s message-time span

message_count

IntField

Total MCAP message count across all channels in the episode

channel_count

IntField

Total MCAP channel (topic) count in the episode (10 for driving/detection episodes, 13 for the Boreas-RT episode)

topics

ListField(StringField)

Every MCAP topic present (see MCAP topics below)

schemas

ListField(StringField)

Every distinct Foxglove schema present in the episode

has_image

BooleanField

Whether the episode has an Image-tile-decodable stream (foxglove.CompressedImage or foxglove.RawImage) — True for every episode

has_pointcloud

BooleanField

Whether it has a decodable point-cloud stream for the 3D tile (foxglove.PointCloud) — True for every episode

has_gps

BooleanField

Whether it has a decodable GPS fix stream for the Map tile (foxglove.LocationFix) — True only for the 2 driving episodes

has_boxes

BooleanField

Whether it has a foxglove.SceneUpdate (3D box) stream — True only for the 6 boreas-objects-v1 episodes

has_aeva

BooleanField

Whether it has an Aeva FMCW lidar point-cloud stream (/aeva) — True only for the Boreas-RT episode

has_dmu_imu

BooleanField

Whether it has the standalone DMU41 IMU stream (/dmu_imu) — True only for the Boreas-RT episode

has_aeva_imu

BooleanField

Whether it has the Aeva built-in IMU stream (/aeva_imu) — True only for the Boreas-RT episode

Standard FiftyOne bookkeeping fields (id, metadata, created_at, last_modified_at) are also present but not source-specific.

MCAP topics (inside each episode)#

Topic(s)

Schema

Tile

Notes

/camera

foxglove.CompressedImage (png)

Image

Rectified, radially-undistorted, and pre-anonymized (faces/plates blurred) by the original dataset

/camera/calibration

foxglove.CameraCalibration

(enables reprojection)

Static, logged once from P_camera.txt + real lens distortion from camera0_intrinsics.yaml (when present)

/lidar

foxglove.PointCloud

3D

Velodyne Alpha-Prime, x,y,z,intensity (float32)

/aeva (Boreas-RT episode only)

foxglove.PointCloud

3D

Aeva Aeries II FMCW lidar, x,y,z,intensity,radial_velocity (float32)

/radar

foxglove.RawImage (mono8)

Image

Decoded polar→Cartesian bird’s-eye-view conversion (no native polar-sensor MCAP schema exists); Boreas-RT radar additionally gets Doppler/offset correction before conversion

/tf

foxglove.FrameTransform

(enables 3D)

enu_ref→{camera,lidar,radar,aeva} per-sensor pose, at each sensor’s own native timestamp (sensors are not hardware-synchronized)

/odom

foxglove.Odometry

3D + Plot

Lidar-frame pose + ENU/body-frame velocity

/velocity

generic JSON

Plot

Same velocity/body-rate values as /odom, as a flat dict for convenient Plot-tile inspection

/gps (driving episodes only)

foxglove.LocationFix

Map

Lat/lon/heading, converted from the source CSV’s radians to the degrees LocationFix expects (see Parsing decisions)

/imu, /encoder (driving episodes only)

generic JSON

Plot

Applanix-integrated IMU and wheel-encoder pulse count

/dmu_imu, /aeva_imu (Boreas-RT episode only)

generic JSON

Plot

Standalone DMU41 IMU and Aeva’s built-in IMU

/boxes (object-detection episodes only)

foxglove.SceneUpdate

3D

One SceneEntity per box (id = source uuid), CubePrimitive sized [length,width,height], colored by class, metadata carrying label/type/uuid/numPoints

/camera/boxes, /radar/boxes (object-detection episodes only)

foxglove.ImageAnnotations

Image

2D wireframe (camera) / bird’s-eye-view footprint (radar) overlays of the same boxes, each carrying the same label/type/uuid/numPoints metadata

Label types and why#

No FiftyOne sample-level label fields (Detections, Detections3D, etc.) are attached. Because each sample is a multi-second-to-minute continuous recording rather than a single frame, there is no single fixed-length list a sample-level label field could hold. Instead, the 3D object annotations for the 6 boreas-objects-v1 episodes are embedded as additional MCAP topics inside the same timeline as the sensor data (/boxes, /camera/boxes, /radar/boxes — see MCAP topics), decoded live by FiftyOne’s multimodal viewer alongside the camera/lidar/radar tiles, exactly like the sensor topics themselves. The has_boxes sample field exists so episodes can be filtered without opening every MCAP file first, e.g. dataset.match(F("has_boxes")).

Parsing decisions#

  • One sample = one episode. Full Boreas/Boreas-RT sequences are 90-150+ GB raw each (44+60 = 104 sequences total), so only 2 driving episodes (one original Boreas, one Boreas-RT) were authored, each a fixed 10-second window starting mid-sequence rather than the full recording.

  • Object-detection episode selection. boreas-objects-v1 is one continuous ~104-minute recording; the source dataset’s own detection benchmark carves it into 53 short (17.6-71.9s) named windows (obj_train: 37, obj_test: 16) rather than splitting by whole sequence. 6 windows were selected from obj_train (spread across the full recording for scene diversity) — obj_test windows were excluded because their ground truth is withheld by the source dataset for leaderboard fairness (confirmed directly: every obj_test window checked has zero labels_detection/*.txt files in range, while every obj_train window checked has labels).

  • Boxes with numPoints == 0 are dropped, matching the source devkit’s own object_detection.ipynb tutorial (BoundingBoxes.filter_empty()), which always removes boxes with no supporting lidar returns before display. Had no effect on the specific windows included here (0 of 4,896 boxes checked have numPoints == 0), but the authoring script is defensive against it for other windows.

  • 3D boxes are logged at every lidar frame (10 Hz), not just directly labeled ones (5 Hz) — the source only labels every other lidar frame directly; boxes on the in-between frames are produced via the devkit’s own SO(3) interpolation (BoundingBoxes.interpolate(), needs the asrl-pylgmath package), the same codepath the devkit itself uses for camera/radar frames (which never land on a directly-labeled timestamp). This is a deliberate scope choice beyond the devkit’s own tutorial, which only ever shows directly-labeled lidar frames.

  • Box dimension order is [length, width, height] (verified directly in the source paper’s text: “(dx,dy,dz) represent the bounding box dimensions (length, width, and height)”) — the readme.txt shipped alongside the label files in the S3 bucket incorrectly states the order as height, width, length; this build follows the paper, not the bucket’s readme.txt.

  • gps_post_process.csv’s latitude/longitude/heading are in radians, not degrees (like the sibling roll/pitch columns, used directly with no conversion elsewhere in the devkit) — converted to degrees for foxglove.LocationFix.latitude/longitude (which expect degrees), while heading is passed straight through unconverted (it’s already radians, matching LocationFix.heading’s expected units).

  • Angular velocity columns in every pose CSV are stored in z,y,x order, not x,y,z — an intentional, paper-documented convention (“the flipped ordering… for backward compatibility”), not a bug; reordered to x,y,z before logging.

  • Aeva point fields are [x,y,z,radial_velocity,intensity,signal_quality, reflectivity,time,point_flags] (9 named fields, point_flags occupying 2 of the 10 float32 slots as one float64) — this exact order is confirmed by the Boreas-RT paper’s text, resolving an internal inconsistency in the devkit itself (a generic per-point-time helper assumes the last column is always “time”, which is only true for the 6-field Velodyne format, not the 10-field Aeva format).

  • Radar Doppler/offset correction is applied only to the Boreas-RT episode, gated on the devkit’s own radar_chirp_type_upgrade_time constant — applying it to the original (pre-upgrade) Boreas radar would use a bogus chirp-type value (that sensor generation has no real per- azimuth chirp data) and corrupt the image.

  • Sensors are not hardware-synchronized — real per-sensor timestamps are used as-is for /tf, which is correct/expected behavior per both source papers, not an alignment bug.

Dataset Creation#

Curation Rationale#

Full Boreas/Boreas-RT sequences are far too large for a lightweight FiftyOne showcase — 104 sequences total (44 Boreas + 60 Boreas-RT), each 90-150+ GB raw, plus a separate 152 GB standalone recording for object detection. Rather than attempting exhaustive coverage, this build selects: one original-Boreas driving episode and one Boreas-RT driving episode (each a 10-second window, chosen to demonstrate the respective sensor suites — the Boreas-RT one specifically for its Aeva FMCW lidar and dual IMU streams), plus 6 object-detection windows spread across the full boreas-objects-v1 recording for scene diversity, all drawn from the already-labeled obj_train split.

Source Data#

Data Collection and Processing#

Per ASRL’s published papers and devkit documentation: Boreas was collected by driving a repeated route (the “Glen Shields” route) near the University of Toronto over one year (Nov 2020-Nov 2021), captured in every season and weather condition including falling snow — 44 public sequences, 350 km total. Sensor suite: a 128-beam Velodyne Alpha-Prime lidar (360°×40° FOV, ~2.2M points/s, 10 Hz), a 360° Navtech CIR304-H scanning radar (0.9° angular resolution, 0.0596 m/200 m range pre-upgrade or 0.0438 m/250 m range post-upgrade, 4 Hz), a 5MP FLIR Blackfly S camera (2448×2048, 81°×71° FOV, 10 Hz, images pre-rectified and pre-anonymized for faces/license plates), and an Applanix POS LV 220 GNSS-INS (200 Hz, 2-4 cm RTX accuracy) providing centimetre-level post-processed ground-truth pose in a fixed ENU frame anchored to the first pose of the first sequence. A dedicated standalone recording, boreas-objects-v1 (~104 minutes, sunny weather), was separately annotated by the Scale.ai data annotation service with 326,180 3D object boxes (Car/Pedestrian/Cyclist/Misc) across 7,111 labeled lidar frames at 5 Hz.

Boreas Road Trip (Boreas-RT) extends the same collection methodology to 9 new routes across suburban, industrial, urban, rural, and highway environments (60 sequences, 643 km total), adding an Aeva Aeries II FMCW Doppler lidar (120°×30° FOV, ~1.0M points/s, 32 of 60 sequences) and a standalone Silicon Sensing DMU41 IMU (200 Hz) alongside the original sensor suite, plus Doppler-capable radar firmware (per-azimuth “chirp type” metadata enabling Doppler velocity extraction and undistortion).

For this repackaging: raw per-frame sensor files, calibration, and ground-truth CSVs were downloaded from the public, unsigned s3://boreas bucket (targeted time-windowed slices, not full sequences), decoded using the official pyboreas devkit (with asrl-pylgmath/asrl-pysteam added to unblock its 3D box interpolation code path, and foxglove-sdk for MCAP authoring), cross-checked byte-for-byte against real downloaded files rather than trusted from documentation alone, and packed into one .mcap file per episode. No sensor data or ground truth was synthesized, relabeled, or altered beyond the conversions documented in Parsing decisions.

Who are the source data producers?#

Autonomous Space Robotics Laboratory (ASRL), University of Toronto Institute for Aerospace Studies (UTIAS), in collaboration with Applanix/Trimble — original Boreas/Boreas-RT data collection, sensor calibration, and ground-truth pose post-processing.

Annotations#

Annotation process#

3D bounding boxes for boreas-objects-v1 were produced by the Scale.ai data annotation service, per the original Boreas paper: 7,111 lidar frames were labeled at 5 Hz (double the labeling rate is achievable via interpolation, since the lidar itself runs at 10 Hz — see Parsing decisions), yielding 326,180 unique 3D box annotations across 4 classes (Car, Pedestrian, Cyclist, Misc), divided into 53 continuous scenes (20-70s each) and split into 37 training scenes and 16 test scenes (test-scene labels withheld for the official benchmark). No other annotation exists anywhere in either dataset — odometry/localization ground truth is automated GNSS/IMU/wheel-encoder post-processing, not manual annotation.

Who are the annotators?#

The Scale.ai data annotation service, for the boreas-objects-v1 3D box annotations only. All other “ground truth” in this dataset (pose, velocity) is produced automatically by Applanix’s POSPac software suite from GNSS/IMU/wheel-encoder measurements plus an RTX correction subscription — no manual annotation is involved.

Personal and Sensitive Information#

Camera images are pre-anonymized by the original dataset producers: faces and license plates are blurred using the “Understand.ai Anonymizer” tool before public release, per the original Boreas paper. This repackaging performs no additional processing, re-identification, or redaction beyond what ASRL already released publicly.

Citation#

BibTeX:

@article{burnett_ijrr23,
  author  = {Keenan Burnett and David J Yoon and Yuchen Wu and Andrew Z Li
             and Haowei Zhang and Shichen Lu and Jingxing Qian and
             Wei-Kang Tseng and Andrew Lambert and Keith YK Leung and
             Angela P Schoellig and Timothy D Barfoot},
  title   = {Boreas: A multi-season autonomous driving dataset},
  journal = {The International Journal of Robotics Research},
  volume  = {42},
  number  = {1-2},
  pages   = {33-42},
  year    = {2023},
  doi     = {10.1177/02783649231160195}
}

@misc{lisus_brrt26,
  author        = {Daniil Lisus and Katya M. Papais and Cedric Le Gentil
                   and Elliot Preston-Krebs and Andrew Lambert and
                   Keith Y. K. Leung and Timothy D. Barfoot},
  title         = {Boreas Road Trip: A Multi-Sensor Autonomous Driving
                   Dataset on Challenging Roads},
  year          = {2026},
  eprint        = {2602.16870},
  archivePrefix = {arXiv},
  primaryClass  = {cs.RO},
  url           = {https://arxiv.org/abs/2602.16870}
}

APA:

Burnett, K., Yoon, D. J., Wu, Y., Li, A. Z., Zhang, H., Lu, S., Qian, J., Tseng, W.-K., Lambert, A., Leung, K. Y. K., Schoellig, A. P., & Barfoot, T. D. (2023). Boreas: A multi-season autonomous driving dataset. The International Journal of Robotics Research, 42(1-2), 33-42.

Lisus, D., Papais, K. M., Le Gentil, C., Preston-Krebs, E., Lambert, A., Leung, K. Y. K., & Barfoot, T. D. (2026). Boreas Road Trip: A Multi-Sensor Autonomous Driving Dataset on Challenging Roads. arXiv:2602.16870.

“Boreas Autonomous Driving Dataset was accessed on DATE from https://registry.opendata.aws/boreas.” — suggested citation text per the AWS Open Data Registry listing.

More Information#

This repository is an independently-curated, derived subset of the official Boreas/Boreas-RT datasets, repackaged as MCAP for FiftyOne’s multimodal support. It is not an official ASRL/UTIAS artifact. For the full datasets (all 104 driving sequences, the full boreas-objects-v1 recording, the devkit, and the live odometry/localization/detection leaderboards), see https://www.boreas.utias.utoronto.ca, https://registry.opendata.aws/boreas/, and https://github.com/utiasASRL/pyboreas.

Dataset Card Authors#

Harpreet Sahota (@harpreetsahota) — MCAP repackaging and this card. Original dataset producers are listed under Dataset Description.

Dataset Card Contact#

Harpreet Sahota — https://huggingface.co/harpreetsahota