To design and implement the software stack for an autonomous robot capable of delivering food along predefined routes within a hospital environment. The key challenges were reliable indoor navigation, dynamic obstacle avoidance, and providing a simple user interface for hospital staff.
As the primary developer for the navigation, guidance, and control software, I architected the system around a Raspberry Pi (for high-level planning) and an Arduino Uno (for low-level motor control and sensor polling).
Challenge: Enable point-to-point navigation without a complex, computationally expensive mapping solution.
Solution & Implementation: I designed a graph-based representation of the hospital floorplan. Key locations (e.g., nurse stations, kitchens) were defined as nodes, with edges representing navigable hallways. I implemented Dijkstra's algorithm in Python on the Raspberry Pi to calculate the shortest path between any two nodes. Given the relatively small scale of the graph (a single building), the algorithm's O(V^2) complexity was acceptable. This choice allowed for rapid development and a guaranteed optimal path, which was a higher priority than pure computational speed for this prototype.
Outcome: The system successfully generated efficient routes. The path was translated into a series of sequential coordinate targets for the guidance system to follow.
Challenge: Accurately follow the planned path while safely avoiding static and dynamic obstacles like people and equipment.
Implementation:
Localization: I developed a dead reckoning system fusing data from wheel encoders and a gyroscope (IMU) to track the robot's position and heading. This system maintained an accuracy of within 10 cm for up to 5 minutes of operation.
Motor Control: I wrote and tuned PID control loops on the Arduino to precisely regulate wheel speed based on encoder feedback, ensuring straight-line movement and accurate turns.
Obstacle Handling: A two-layer approach was used:Â
1.) Global Re-routing (LIDAR): The primary layer used a LIDAR sensor for the Raspberry Pi to attempt to re-route around obstacles. In practice, this proved complex and unstable in highly dynamic settings.
2.) Reactive Avoidance (Ultrasonic): To ensure basic safety, I implemented a reliable fallback on the Arduino using an ultrasonic sensor. If an object was detected within a critical distance, the robot would stop immediately, a more robust solution for a clinical environment.
Challenge: Provide staff with a simple way to request deliveries.
Implementation: I leveraged the Arduino's WiFi capabilities to host a lightweight web server. I built a responsive web interface allowing users to select a destination from a dropdown menu and initiate a delivery. I also implemented a "Manual Mode" with an on-screen joystick for teleoperation, which was valuable for testing and repositioning.
The project was a successful proof-of-concept. The robot could reliably navigate to predefined nodes when prompted via the web interface and transport items using the custom trailer.
Successes: The graph-based pathfinding and dead reckoning localization were highly effective for navigating clear paths. The web interface was intuitive and functional.
Areas for Improvement: The primary challenge was robust obstacle avoidance. The LIDAR-based solution required more development time to handle edge cases than was available. The simpler ultrasonic sensor-based stopping mechanism was more reliable but less autonomous.
Conclusion: This project provided immense hands-on experience in full-stack robotics development, from high-level algorithm design to low-level embedded systems programming. It highlighted the critical importance of system reliability over complexity in a real-world environment. If I were to iterate, I would focus on integrating a more robust localization system (like LIDAR-based SLAM) to reduce drift and explore more deterministic obstacle avoidance strategies.