ETH Zurich Autonomous Systems Lab

Github page for the Autonomous Systems Lab, containing info and documentation about our open source projects.

View My GitHub Profile

About the Autonomous Systems Lab

The Autonomous Systems Lab is part of the Mechanical Engineering department at ETH Zurich, under Prof. Roland Siegwart.

The main focus of the lab is autonomous robotic systems, including hardware, state estimation, perception, and planning. A small subset of the software packages we've made available open-source are listed and described here.

Open-Source Projects

These projects are divided by general area. Note that not all of these are appropriate for every robot or application, please read each package's individual documentation.

State Estimation

maplab -- A research-oriented visual-inertial mapping framework, written in C++, for creating, processing and manipulating multi-session maps. On the one hand, maplab can be considered as a ready-to-use visual-inertial mapping and localization system. On the other hand, maplab provides a collection of multi-session mapping tools that include map merging, visual-inertial batch optimization, and loop closure.

rovio -- Robust Visual Inertial Odometry framework, estimating the pose of a robot based on synchronized IMU and monocular or stereo camera input. EKF-based.

okvis_ros, okvis -- docs_ros, docs -- Open Keyframe-based Visual-Inertial SLAM, bundle-adjustment based, estimating the pose of a robot based on synchronized IMU and monocular or stereo camera input.

ethzasl_msf -- Multi-sensor fusion, allowing fusing multiple sensors estimating a robots' pose together, such as multiple IMUs, IMU and camera pose estimates, external position tracking estimates, etc. Compensates for sensor delays.


voxblox -- A flexible Signed Distance Field (SDF) library, which runs in real time on CPU only. Flexible to supporting TSDFs, ESDFs, and various other custom layers in a voxel-based architecture.

libpointmatcher -- A library implementing various ICP (Iterative Closest Point) algorithms for laser and other scan matching in 3D. A ROS wrapper is available at ethzasl_icp_mapping.

volumetric_mapping -- Wrapper around Octomap, allowing input from various data sources (such as disparity maps) and a more flexible sensor position interface.

grid_map -- 2.5 D grid-based mapping with multiple layers for robot navigation.

elevation_mapping -- Local elevation mapping, expressed in a robot-centric frame for navigation, especially for walking robots.


kalibr -- Camera and IMU calibration toolbox.


mav_trajectory_generation -- A library for polynomial optimization for Micro-Aerial Vehicle (MAV) paths.

nbvplanner -- Next-Best-View-based exploration and planning for Micro-Aerial Vehicles, based on vision-based sensing.

StructuralInspectionPlanner -- Toolbox for planning paths for a flying robot to inspect a structure for which a mesh representation is known.


rotors_simulator -- Gazebo-based simulator for multirotor helicopters and quadrotors. Provides physical models, sensor models, octomap generation from Gazebo world, and realistic aerodynamics simulation.


minkindr -- Lightweight, simple transformation library, handling Quaternion-based transformations. Conversions to/from ROS are available as part of the minkindr_ros package.

Hardware Interfaces/Drivers

visensor_node, libvisensor -- Drivers for the VI Sensor, a sensor with a stereo head synchronized to an IMU.