- Kevin Nella
- Winter 2023
The purpose of this project was to develop a custom C++ library to implement SLAM with a turtlebot 3 (ROS 2). The project was executed in sequential assignments throughout the ME 495 SLAM class. By the end of the class the project was capable of calculating the state of the robot and its environment (cylindrical obstacles) using odometry, laser scanning, and an Extended Kalman Filter.
This repository consists of several ROS packages
nuturtle_description
- Edited turtlebot 3 burger urdf.xacro to launch one or multiple turtlebot nodes, visualized in RViz.turtlelib
- C++ library to define, calculate, and output frame transformations and twists. Computes inverse kinematics from odometry as well as forwrad kinematics. Also contains functions for Extended Kalman Filter and a circle detection algorithm.nusim
- Defines and launches nusim node, a simulated environment for the nuturtle.nuturtle_control
- Control interface and odometry nodes for turtlebot simulation or real robotnuslam
- Applied an Extended Kalman Filter with unknown data association to correct odometry readings from turtlebot simulation or real robot.
Odometry Error: dx = 9.09 CM dy = 1.8 CM dtheta = 41 degrees
EKF Filter Error: Odometry to true: dx = -0.044 CM dy = .032 CM
SLAM Corrected to true: dx = -0.0002 CM dy = -0.0003 CM
217950496-93bcb4ad-9c3e-4133-9091-a5ba8538c6b9.mp4
- Red: simulated robot
- Blue: odometry position after the addition of slippage (gaussian noise)
- Green: EKF corrected position with detected obstacles through state estimation