- Daniel Augustin
- Winter 2026
Displays and configures TurtleBot3 models in RViz.
Features:
- URDF models for TurtleBot3 Burger
- Multi-robot visualization with color variants (red, blue, green, purple)
- Launch files for loading robot descriptions
- Differential drive parameters configuration
Launch:
# View single robot
ros2 launch nuturtle_description load_one.launch.xml color:=blue
# View all color variants
ros2 launch nuturtle_description load_all.launch.xml2D simulator and visualizer for TurtleBot3 robots.
Features:
- Ground-truth robot state simulation
- Arena walls and cylindrical obstacles
- Simulated sensor data (encoders, fake landmarks)
- Noise models for wheel slip and sensor uncertainty
Launch:
ros2 launch nusim nusim.launch.xmlControl and odometry nodes for TurtleBot3.
Nodes:
turtle_control- Converts cmd_vel to wheel commands and publishes joint statesodometry- Computes odometry from wheel encoders using forward kinematicscircle- Generates circular motion trajectories
Launch:
# Simulation with circular motion
ros2 launch nuturtle_control start_robot.launch.xml cmd_src:=circle robot:=nusim
# Physical robot with teleop
ros2 launch nuturtle_control start_robot.launch.xml cmd_src:=teleop robot:=localhostEKF SLAM with cylindrical landmark detection from 2D lidar. Detects obstacles in laser scan data, builds a landmark map online, and corrects odometry drift in real time. Supports both simulation (known/unknown data association) and real TurtleBot3 deployment.
Nodes:
landmarks— Clusters lidar scan points, fits circles, classifies landmarks using the inscribed angle theorem; publishes detected positions asMarkerArrayslam— EKF SLAM with known data association (Task L.2, simulation only)slam_uda— EKF SLAM with unknown (Euclidean-distance) data association (Tasks L.3 & L.4)
Launch:
# Task S — landmark detection only (simulation)
ros2 launch nuslam landmark_detect.launch.xml robot:=nusim
# Task L.3 — SLAM with unknown data association (simulation)
ros2 launch nuslam unknown_data_assoc.launch.xml cmd_src:=teleop
# Task L.4 — Real-world SLAM (split across robot and PC)
ros2 launch nuslam turtlebot_bringup.launch.xml # on TurtleBot
ros2 launch nuslam pc_bringup.launch.xml cmd_src:=teleop # on workstationVisualization:
- Red robot — Ground truth (simulation only)
- Blue robot — Raw odometry (accumulates drift, goes through walls)
- Green robot — EKF SLAM estimate (landmark-corrected)
Task L.3 Results (simulation):
| x (m) | y (m) | θ (rad) | |
|---|---|---|---|
| Ground truth | 0.037 | 0.827 | 0.369 |
| Odometry | -0.380 | 1.194 | 0.368 |
| SLAM | 0.037 | 0.824 | 0.368 |
SLAM position error: 0.003 m vs odometry 0.556 m
Task L.4 Results (real robot — Donatello):
| x (m) | y (m) | θ (rad) | |
|---|---|---|---|
| Odometry | 0.741 | -1.224 | -0.879 |
| SLAM | 1.023 | -0.539 | 1.254 |
SLAM Euclidean error from origin: 1.16 m vs odometry 1.43 m — SLAM outperformed odometry.
Custom message and service definitions for TurtleBot3 low-level interface.
Messages:
WheelCommands- Motor velocity commandsSensorData- Encoder readings and timestamps
Services:
Control- Set velocity and radius for circular motionInitialPose- Reset odometry to specified pose
C++ library for 2D rigid body transformations and differential drive kinematics.
Components:
se2d- 2D rigid body transformations (SE(2))geometry2d- 2D geometric primitives (points, vectors, twists)svg- SVG file generation for visualizationdiff_drive- Differential drive robot kinematics (forward and inverse)
srencast.mp4
real_turtle_moving_in_circle.mp4
Video demonstration showing the green robot (SLAM estimate) being corrected by landmark observations while the blue robot (pure odometry) drifts away from ground truth.