Skip to main content
The EuRoC MAV dataset was recorded with two pinhole cameras and an inertial sensor on a Micro Aerial Vehicle (MAV). ORB-SLAM3 provides examples to run all sensor configurations on this dataset.

Dataset Overview

The EuRoC dataset provides:
  • Two synchronized cameras (stereo pinhole, 20 Hz)
  • IMU measurements (200 Hz gyroscope, 200 Hz accelerometer)
  • Ground truth trajectories (Vicon/Leica motion capture)
  • 11 sequences with varying difficulty levels
  • Indoor environment (machine hall at ETH Zurich)

Sequence Categories

  • MH_01_easy
  • MH_02_easy
  • V1_01_easy
  • V2_01_easy
Slow motion, good lighting, rich texture.

Download Instructions

1

Visit the dataset website

2

Select ASL format

Download sequences in ASL Dataset Format (not ROS bag format).
3

Extract the data

unzip MH_01_easy.zip -d ~/Datasets/EuRoC/
Each sequence contains:
MH_01_easy/
├── mav0/
│   ├── cam0/
│   │   └── data/          # Left camera images
│   ├── cam1/
│   │   └── data/          # Right camera images
│   ├── imu0/
│   │   └── data.csv       # IMU measurements
│   └── state_groundtruth_estimate0/
│       └── data.csv       # Ground truth

Running Monocular Examples

Run monocular SLAM using only the left camera:
./Examples/Monocular/mono_euroc \
    Vocabulary/ORBvoc.txt \
    Examples/Monocular/EuRoC.yaml \
    ~/Datasets/EuRoC/MH_01_easy \
    Examples/Monocular/EuRoC_TimeStamps/MH01.txt

Multiple Sequences

Run multiple sequences sequentially with map reuse:
./Examples/Monocular/mono_euroc \
    Vocabulary/ORBvoc.txt \
    Examples/Monocular/EuRoC.yaml \
    ~/Datasets/EuRoC/MH_01_easy \
    Examples/Monocular/EuRoC_TimeStamps/MH01.txt \
    ~/Datasets/EuRoC/MH_02_easy \
    Examples/Monocular/EuRoC_TimeStamps/MH02.txt \
    ~/Datasets/EuRoC/MH_03_medium \
    Examples/Monocular/EuRoC_TimeStamps/MH03.txt
The system automatically saves sub-map trajectories and loads the atlas for subsequent sequences.

Running Stereo Examples

Run stereo SLAM using both cameras:
./Examples/Stereo/stereo_euroc \
    Vocabulary/ORBvoc.txt \
    Examples/Stereo/EuRoC.yaml \
    ~/Datasets/EuRoC/MH_01_easy \
    Examples/Stereo/EuRoC_TimeStamps/MH01.txt

Code Overview

The stereo example (stereo_euroc.cc:132) passes both images to the SLAM system:
// Load left and right images
imLeft = cv::imread(vstrImageLeft[ni], cv::IMREAD_UNCHANGED);
imRight = cv::imread(vstrImageRight[ni], cv::IMREAD_UNCHANGED);

// Track stereo frame
SLAM.TrackStereo(imLeft, imRight, timestamp);
The EuRoC.yaml file includes rectification matrices. The system will rectify images online if needed.

Running Monocular-Inertial Examples

Fuse monocular vision with IMU data:
./Examples/Monocular-Inertial/mono_inertial_euroc \
    Vocabulary/ORBvoc.txt \
    Examples/Monocular-Inertial/EuRoC.yaml \
    ~/Datasets/EuRoC/MH_01_easy \
    Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt

IMU Integration

The inertial examples (mono_inertial_euroc.cc:180-184) collect IMU measurements between frames:
// Load IMU measurements from previous frame
vector<ORB_SLAM3::IMU::Point> vImuMeas;
while(vTimestampsImu[first_imu] <= vTimestampsCam[ni]) {
    vImuMeas.push_back(ORB_SLAM3::IMU::Point(
        vAcc[first_imu].x, vAcc[first_imu].y, vAcc[first_imu].z,
        vGyro[first_imu].x, vGyro[first_imu].y, vGyro[first_imu].z,
        vTimestampsImu[first_imu]));
    first_imu++;
}

// Track with IMU measurements
SLAM.TrackMonocular(im, timestamp, vImuMeas);

Running Stereo-Inertial Examples

The most accurate configuration - stereo cameras with IMU:
./Examples/Stereo-Inertial/stereo_inertial_euroc \
    Vocabulary/ORBvoc.txt \
    Examples/Stereo-Inertial/EuRoC.yaml \
    ~/Datasets/EuRoC/MH_01_easy \
    Examples/Stereo-Inertial/EuRoC_TimeStamps/MH01.txt
This combines the benefits of:
  • Stereo vision: Accurate scale and depth estimation
  • IMU: Robust tracking during fast motion and feature-poor scenes
  • Sensor fusion: Highest accuracy and robustness

Running All Sequences

Use the provided batch script:
1

Edit the script

Open euroc_examples.sh and set the dataset path:
pathDatasetEuroc="/home/user/Datasets/EuRoC" # Change this!
2

Make it executable

chmod +x euroc_examples.sh
3

Run all examples

./euroc_examples.sh
This processes all 11 sequences with all sensor configurations.

Evaluation with Ground Truth

EuRoC provides ground truth trajectories for quantitative evaluation.

Coordinate Frame Notes

Ground truth is provided in the IMU body reference frame. Pure visual trajectories are in the left camera reference frame. The evaluation folder includes transformed ground truth for visual-only sequences.

Running Evaluation

1

Use the evaluation script

./euroc_eval_examples.sh
2

Compute RMS ATE

The script automatically:
  • Runs each sequence
  • Aligns estimated trajectory with ground truth
  • Computes Root Mean Square Absolute Trajectory Error (RMS ATE)
3

Review results

Results are saved to trajectory files and displayed in the terminal:
MH_01_easy: 0.023m RMS ATE
MH_02_easy: 0.019m RMS ATE
...

Manual Evaluation

For custom evaluation:
python evaluation/evaluate_ate_scale.py \
    ~/Datasets/EuRoC/MH_01_easy/mav0/state_groundtruth_estimate0/data.csv \
    CameraTrajectory.txt \
    --plot results.png

Configuration Files

EuRoC examples use pre-calibrated settings files:
Examples/Monocular/EuRoC.yaml
  • Camera intrinsics (left camera)
  • ORB extractor parameters
  • Viewer settings

Expected Performance

Typical results on EuRoC sequences:
ConfigurationAccuracyRobustnessSpeed
MonocularGoodModerateFast
StereoExcellentGoodMedium
Monocular-InertialExcellentExcellentFast
Stereo-InertialBestBestMedium
Stereo-Inertial configuration provides the most accurate and robust results, typically achieving sub-centimeter accuracy on easy sequences.

Troubleshooting

If tracking fails:
  • Start with easier sequences (MH_01_easy, V1_01_easy)
  • Ensure proper illumination
  • Check that timestamp files match the sequence
  • Verify camera calibration parameters
To improve speed:
  • Reduce ORBextractor.nFeatures in YAML
  • Close the viewer window
  • Use a more powerful computer
Common issues:
  • Verify IMU noise parameters in YAML
  • Check camera-IMU extrinsics
  • Ensure sufficient IMU measurements before first frame

Next Steps

TUM-VI Dataset

Try examples with fisheye cameras

Camera Configuration

Learn about camera calibration

IMU Configuration

Configure IMU parameters

Custom Datasets

Use your own data

Build docs developers (and LLMs) love