case 05 · MTE 544 · 2025
Autonomous mobile robot navigation
A full stack for getting a mobile robot from A to B on its own — A* path planning, particle filter localization from LiDAR and odometry, and PID trajectory control. Built on ROS2 in Python.
code/repo coming soonWhat it does
The robot is given a goal pose. It plans a path to that goal across an occupancy grid, estimates its own pose in real time from sensor fusion, and follows the path with a feedback controller. The whole loop runs over ROS2 topics, visualized live in Rviz.
The stack
- A* path planner — searches the gridded map from start to goal, generating a sequence of waypoints. Heuristic, expanded-cell tracking, the usual.
- Particle filter localization — propagates a cloud of particles forward using wheel odometry, then reweights them against incoming LiDAR scans using a likelihood-field model. Best estimate is the weighted mean.
- PID trajectory controller — given the current pose estimate and the next waypoint, computes linear and angular velocity commands. Tuned to follow paths smoothly without overshoot.
What was interesting
The particle filter is where it all comes together — and where it breaks if any one piece is wrong. Bad sensor model, particle deprivation, or a too-tight resampling step will give you a confident-but-wrong pose, and the planner will happily steer you into a wall. Most of the debugging was visualizing the particle cloud in Rviz and watching where it disagrees with reality.
- Course
- MTE 544 — Autonomous Mobile Robots
- Stack
- ROS2 (Python)
- Planning
- A* on occupancy grid
- Localization
- Particle filter · LiDAR + odometry
- Control
- PID trajectory controller
- Visualization
- Rviz
What's next
- Dynamic obstacle avoidance — A* on a static map breaks down with moving obstacles; layering a local planner (DWA or VFH) on top would handle real environments
- SLAM — replace the pre-built occupancy grid with simultaneous localization and mapping so the robot can operate in unknown spaces
- EKF / UKF localization — the particle filter works but is computationally heavy; an extended or unscented Kalman filter would give tighter estimates at lower cost
- 3D perception — swap the 2D LiDAR for a depth camera and extend the planner to reason about obstacles at different heights