A fully autonomous mobile robot built using ROS 2 Humble, Gazebo, and Nav2, capable of mapping, localization, and goal-based navigation in a custom simulation environment.
This project showcases:
- ✅ Full robotics pipeline (Perception → Localization → Planning → Control)
- ✅ Strong understanding of ROS 2 architecture
- ✅ Hands-on experience with Nav2 stack
- ✅ Debugging of real-world issues:
- TF tree errors
- Costmap tuning
- QoS mismatches
- ✅ Ability to design scalable, modular systems
LiDAR → SLAM → Map → AMCL → Nav2 Planner → Controller → cmd_vel → Robot
- 🗺️ Mapping using SLAM Toolbox
- 📍 Localization using AMCL
- 🎯 Goal-based navigation (Nav2)
- 🚧 Obstacle avoidance (costmaps)
- 📡 LiDAR-based perception
- 🔁 Stable TF tree (
map → odom → base_link) - 🕹️ Manual + autonomous control
| Component | Role |
|---|---|
| Map Server | Loads static map |
| AMCL | Localization |
| Planner Server | Global path planning |
| Controller Server | Local trajectory execution |
| BT Navigator | Decision making |
- Gazebo Classic
- Custom maze world
- Differential drive robot
- Realistic LiDAR + IMU sensors
cd ~/ros2_ws/src/diff_robot
docker build -t diff_robot_nav2 .xhost +local:docker
docker run -it \
--env="DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--env="LIBGL_ALWAYS_SOFTWARE=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--net=host \
--name diff_robot_container \
diff_robot_nav2source /ros2_ws/install/setup.bash
ros2 launch diff_robot robot.launch.pydocker exec -it diff_robot_container bashsource /ros2_ws/install/setup.bash
ros2 launch diff_robot nav2.launch.py- Open RViz
- Set Initial Pose
- Send Navigation Goal
- Robot autonomously reaches target






