Skip to content

Repository files navigation

ME495 Sensing, Navigation and Machine Learning For Robotics

  • Chenwan HALLEY Zhong
  • Winter 2026

Package List

This repository consists of several ROS packages:

  • turtlelib - A standalone C++ library for 2D rigid body transformations (SE(2)), differential drive kinematics, geometric primitives, SVG visualization, and Extended Kalman Filter math.
  • nuslam - A Feature-Based EKF SLAM package with unknown data association using Euclidean distance gating. Achieves < 3.5 cm landmark estimation error and < 3 mm robot pose error after one closed loop in simulation.
  • nusim - A simulation package providing a ground-truth environment with arena walls, cylindrical obstacles, physical noise modeling (slip and input noise), and a kinematic robot simulator.
  • nuturtle_control - The core control package implementing odometry, motor command translation, and circular trajectory nodes.
  • nuturtle_description - URDF files, meshes, and launch files for visualizing the Nuturtle Burger robot in red, blue, and green configurations.

Build Instructions

colcon build
source install/setup.bash

System Demonstrations

Physical Robot: EKF SLAM with Landmark Detection

This video (×4.0) shows the TurtleBot navigating among cylindrical obstacles in the lab while the EKF SLAM algorithm estimates the robot pose and landmark positions in real time. The green robot and path represent the SLAM estimate; the blue robot and path show raw odometry drift.

Demo4-2.New.mp4

Simulation: EKF SLAM with Unknown Data Association

This screencast (x5.0) shows the full EKF SLAM pipeline running in simulation. The green robot (SLAM estimate) closely tracks the red robot (ground truth) while the blue robot (odometry) drifts over time. Green cylinders converge to the true obstacle positions after a few laps.

Demo4-1.mp4

Physical Robot: Odometry Drift Measurement

This video shows the TurtleBot performing circular maneuvers in the lab. The robot is driven in a circle and returns to its initial configuration to measure odometry drift.

Demo2.mp4

Simulation: Odometry Overlay

This video shows the simulated ground-truth robot (red) and the odometry-estimated robot (blue) under ideal simulation conditions. The two robots remain synchronized when no slip or input noise is applied.

Demo1.mp4

Quick Start

Simulation with teleop:

ros2 launch nuturtle_control start_robot.launch.xml robot:=nusim cmd_src:=teleop

EKF SLAM in simulation:

ros2 launch nuslam unknown_data_assoc.launch.xml cmd_src:=circle

EKF SLAM on the physical TurtleBot — on the robot:

ros2 launch nuslam turtlebot_bringup.launch.xml

On your computer:

ros2 launch nuslam pc_bringup.launch.xml cmd_src:=teleop

Physical robot (odometry only):

ros2 launch nuturtle_control start_robot.launch.xml robot:=localhost cmd_src:=circle

Physical Testing Results

Odometry Drift (circle test)

Following the odometry drift experiment, the robot was driven in a full circle and returned to the starting marker. The final odometry position was:

Coordinate Final Value
x −0.07397 m
y 0.09907 m
θ 0.78177 rad

Total Euclidean Error: 0.1236 m

EKF SLAM (real robot)

The robot was driven among five cylindrical obstacles. Final pose after returning near the starting position:

Estimate x [m] y [m] θ [rad] Total error [m]
Odometry vs Ground Truth 0.000 0.000 0.000 0.000
SLAM vs Ground Truth 0.071 −0.093 3.030 0.117

The odometry error is near zero because the robot was driven a short distance, insufficient to accumulate measurable encoder drift. Over longer paths the SLAM correction becomes essential. Real-world performance is limited by the ~2.5 Hz LiDAR update rate and higher physical sensor noise compared with the simulation model.

Detailed Documentation

Package-level documentation, parameter descriptions, and topic listings can be found in the README.md files within each individual package directory.

About

slam-halleyscomet-99 created by GitHub Classroom

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages