This project involves developing an autonomous robot capable of navigating environments, detecting and collecting coloured blocks, and completing assigned tasks within a specific timeframe. The robot features obstacle avoidance, color sensing, and a gripping mechanism, processing all logic on an ESP32 microcontroller using Micro-ROS.
Technologies Used
ESP32 microcontroller
Micro-ROS framework
ROS 2 Humble
Vulcanexus distribution
PlatformIO/ESP-IDF
Ultrasonic sensor (obstacle detection)
Color sensor (RGB detection)
Servo motors (x4 for gripper mechanism)
Steering servo motor
DC motors with speed control
GitHub for version control
VS Code with PlatformIO extension
CH340 drivers
Challenges
Some of the challenges we faced during the project execution are listed below:
Integrating multiple sensor inputs (ultrasonic, color) with actuator control
Achieving precise gripper movements with four servo coordination
Implementing reliable autonomous navigation within tight time constraints (1m 30s-1m 45s)
Micro-ROS communication stability between ESP32 and host computer
Preventing servo conflicts (e.g., waist turn interfering with microprocessor)
Real-time processing limitations of ESP32
Results
At the completion of the project, we achieved the following before final delivery of project
Successful development of a robot that can:
Autonomously navigate while avoiding obstacles
Detect and differentiate between red and green blocks
Collect 6 red blocks (worth 8 points each) and place them in the Hospital Consultation Room
Collect 4 green blocks (worth 4 points each) and place them on the upper level of the Refuge
Complete tasks within the target timeframe (estimated total score: 64 points)
Created comprehensive documentation including pinout tables, programming guides, and FAQs
Implemented Test-Driven Development (TDD) approach for reliability
Lessons Learned
Importance of servo calibration to prevent hardware damage
Benefits of Micro-ROS for embedded robotics development
Need for careful timing in sequential operations (using delay())
Value of comprehensive pre-planning for sensor/actuator integration
Effectiveness of modular function design for complex robotic behaviors
Importance of continuous integration testing for firmware stability