ROS2 · Personal Robotics Project

Simulated Mobile Robot: Mapping, Navigation & Vision

A hands-on, month-long introduction to ROS2 built around one concrete goal — get a simulated TurtleBot3 mapping its environment, navigating autonomously, and reacting to what it sees, entirely on a personal laptop.

Duration: ~1 month 5 sessions × 2–3 hrs No physical hardware 100% simulation (Gazebo)
Screenshot — Gazebo simulation overview Paste an image here

01Tech Stack

The whole pipeline — from driving to SLAM to navigation to vision — runs in simulation on one machine.

OS
Ubuntu 24.04
Host platform
ROS Distribution
ROS2 Jazzy Jalisco
Latest, not yet LTS-mature
Simulator
Gazebo Harmonic
New architecture, replaces Gazebo Classic
Robot Platform
TurtleBot3 Waffle Pi
Differential drive · LIDAR · camera
SLAM
Cartographer
Builds the occupancy map
Navigation
Nav2
Autonomous point-to-point navigation

02Five-Session Implementation Plan

Each session is capped at two to three hours, structured to build toward one core milestone rather than isolated tutorials.

1
Session 1

Environment Setup

Install ROS2 Jazzy and Gazebo Harmonic on Ubuntu 24.04; verify the base install with simple ROS2 nodes and topics.

2
Session 2

TurtleBot3 from Source & Basic Driving

Build TurtleBot3's core packages from source (Jazzy binaries aren't fully available yet); spawn the Waffle Pi in Gazebo and drive it manually via /cmd_vel.

Screenshot — Waffle Pi driving in Gazebo Paste an image here
3
Session 3

SLAM Mapping

Integrate Cartographer to build an occupancy map of the simulated environment while driving the robot around it.

Builds toward: perceive-plan-act loop
Screenshot — Cartographer occupancy map Paste an image here
4
Session 4

Autonomous Navigation with Nav2

Configure Nav2 on top of the SLAM map for autonomous point-to-point navigation.

Core project milestone
Screenshot — Nav2 autonomous navigation run Paste an image here
5
Session 5

Computer Vision Layer

Add a color-detection node that locates an object in the camera feed and drives a simple visual-approach behavior — turning and moving toward whatever it spots.

Screenshot — color-detection visual approach Paste an image here

03The Core Milestone: Perceive → Plan → Act

Nav2-based autonomous navigation is the project's centerpiece because it's the first point where the full robotics loop closes end-to-end.

PerceiveLIDAR + Cartographer map
→
PlanNav2 path planning
→
Act/cmd_vel drive commands

04Why Jazzy Instead of Humble — And What It Costs

Humble is the more established LTS release. Choosing Jazzy instead means learning to diagnose and adapt in an ecosystem mid-transition — itself part of the learning goal.

Gazebo Harmonic's install & bridging setup differs from Classic
Harmonic is a new architecture, not an incremental update — install steps and the ROS–Gazebo bridge configuration don't match older Classic-based tutorials.
TurtleBot3 packages must be compiled from source
Jazzy binaries for TurtleBot3 aren't fully published yet, so the core packages need to be built from source rather than installed via apt.
/cmd_vel now defaults to a stamped message type
A breaking change from earlier distributions — velocity command messages now default to the stamped variant, which trips up drive code written against older examples.

05Future Work — Extending the Project

Once the core perceive-plan-act loop and vision layer are working, these are natural directions to take it further.

Sim-to-real transfer
Port the working stack onto a physical TurtleBot3 Waffle Pi, dealing with real sensor noise, calibration, and network setup that simulation hides.
Deep-learning object detection
Replace the color-threshold detector with a lightweight model (e.g. YOLO) for robust, class-based object recognition instead of hue matching.
Dynamic obstacle avoidance
Add moving obstacles to the simulated world and extend Nav2's costmaps for reactive replanning around them in real time.
Multi-robot coordination
Spawn a second TurtleBot3 in the same world and explore namespacing, shared maps, and basic fleet coordination.
Voice / natural-language commands
Add a speech-to-text front end that turns spoken commands into Nav2 goal poses or vision-target requests.
Autonomous docking & recharge behavior
Design a docking behavior tree in Nav2 that returns the robot to a charging station once a task or battery threshold is reached.
Remote monitoring dashboard
Build a web dashboard (rosbridge or Foxglove) to view the live map, camera feed, and robot state from another device.
Migration notes: Jazzy → Humble/LTS
Document the reverse porting path, capturing which workarounds (source builds, message-type fixes) become unnecessary on an LTS release.
Takeaway: the goal isn't just following a working tutorial to a green checkmark — it's building the diagnostic muscle to adapt when the tools underneath you are still shifting.