Autonomous Robot Lab

Objective: Develop a fully autonomous mobile robot through a four-stage lab series:

  1. Establish ROS2 connectivity and real-time sensor data handling to undock, drive, and dock the robot.
  2. Implement and tune a closed-loop PID controller to follow predefined points and trajectories, logging and comparing P vs PID performance.
  3. Integrate a particle-filter localization module to fuse odometry and sensor data for robust pose estimation.
  4. Build a cost map and employ an A* planner to generate and execute collision-free paths to specified goals.

Lab 1

Process:    

  • Lab 1 implemented motions.py and utilities.py to read IMU, LiDAR, and odometry topics and to publish velocity commands for undock and teleop control.

Lab 2

Process:    

  • Wrote a PID class in pid.py, added saturation limits in controller.py, and proved point-to-point tracking over two trajectories, logging error data via plot_errors.py to refine gains.

Lab 3

Process:    

  • Lab 3 focused on state estimation: I completed the motion and sensor models in particle.py and mapUtilities.py, implemented resampling in particleFilter.py, and visualized filter convergence in Rviz.

Lab 4

Process:    

  • Lab 4 I generated a grid-based cost map, adapted a provided a_star.py routine to our room map, and scripted planner.py and decisions.py to drive the robot along the planned path.

Results, Testing & Validation

  • Reliable baseline control: Successfully undocked, tele-operated, and re-docked the robot using ROS2 action servers and twist messages.
  • Improved tracking accuracy: PID control eliminated steady-state error and reduced overshoot on both point and trajectory following tasks.
  • Robust localization: The particle filter maintained pose estimates within the map boundaries despite wheel-slip disturbances.
  • Effective path planning: The A* planner produced collision-free paths that the robot executed in both simulation and on the physical platform, demonstrating end-to-end autonomous navigation