Skip to content

Repository files navigation

EKF SLAM on Turtlebot3

  • Michael Jenz
  • Winter 2026

Description

This project is the culmination of work in ME 495: Sensing, Navigation, and Machine Learning for Robotics.

It features an implementation of Simaltaneous Localization and Mapping (SLAM) using an Extended Kalman Filter (EKF) as well as machine learning (ML) based techniques for obstacle identification and classification from 2D LiDAR sensor data.

Package List

This repository consists of several ROS packages:

  • nuslam - Implements EKF for nuturtlebot
  • nusim - Simulates the turtlebot inside of a configurable environment.
  • nuturtle_control - Controls the turtlebot hardware and in simulation
  • nuturtle_description - Contains urdf files, basic debugging, testing, and visualization code for the turtlebot.
  • nuturtle_srvs - Service message interfaces for the nuturtle_control package services.

And several c++ libraries:

  • detectlib - performs the object detection on 2D LiDAR sensor data
  • ekflib - performs all computation required for an Extended Kalman Filter (EKF)
  • turtlelib - supports everything from low level angle conversions to se(2) transformation matrix operations

Download/Installation

Requires ROS2 kilted and nuturtlebot3 (for hardware use only). Use the VCS tool to download all required repos from the turtle.repos file. Download the turtle.repos file and place in your workspace's src/ folder. Run the following command:

vcs import src < turtle.repos

Simulated SLAM implementation

The nuslam package implements an Extended Kalman Filter (EKF) with unknown data association in simulation and on hardware. See the nuslam package README.md for more launch file options.

To run the simulation and control using the teleop window popup, use the following command: ros2 launch nuslam unknown_data_association.launch.xml.

EKF SLAM in simulation

Final position error

  • blue/odometry pose [x, y, θ] (0.26979m, 0.45709m, -2.813°), distance from red = 0.512m

  • green/slam pose [x, y, θ] (0.072285m, -0.01489m, -2.435°), distance from red = 0.0005m

  • red/ground_truth position (0.072451, -0.015346, -2.469°)

slam came within 1mm of precision in final position

Video

unknown_data_association.mov

Example rviz2 result

Image

EKF SLAM on turtlebot3 results (from nuslam package)

Final position error

  • blue/odometry pose [x, y, θ] (-0.022467m, 0.061269m,-0.555°), distance = 0.065m

  • green/slam pose [x, y, θ] (0.02637m, -0.0015977m, -1.822°), distance = 0.026m

slam performed 3x more accurately in final position

Screenshot path

Image

Hardware video

robot8.mov

Rviz video

simbot8.mov

Side by side video

sidebyside.mp4

About

slam-Mjenz created by GitHub Classroom

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages