RaspberryPi based mobile robot - TerpBot
A RaspberryPi based Unicycle Mobile Robot using wheel odometry and monocular perception, built from scratch
Note: This project was done in collaboration with Vedant Ranade and Saksham Verma who were majorly responsible for the hardware setup and tuning, while I was involved predominantly with the perception stack.
TerpBot is a unique unicycle mobile robot developed from the ground up, boasting a simple yet effective design. With wheel odometry and a raspicam based monocular depth estimation module for perception, it navigates its surroundings with precision.
Capabilities:
The TerpBot has the following capabilities :
- RRT* Smart based global path planning + Potential Fields based local path planning : Link
- YOLO based detecting and following a human leader + monocular depth estimation based dynamic obstacle avoidance : Link
Hardware System:
Running on a Raspberry Pi 4B, TerpBot showcases the power of DIY robotics, offering a cost-effective and versatile solution for autonomous mobility. Its hardware system consists of the following parts :
The following diagram is a high level-system representation of how different hardware parts of the TerpBot work in tandem with each other:
Kinematics:
- TerpBot adopts a distinctive unicycle model built upon the principles of a differential drive system.
- This design choice allows for enhanced maneuverability and agility in navigating diverse terrains.
- By leveraging differential drive, TerpBot can adjust the speed and direction of its single wheel independently, enabling precise control and efficient movement.
- This approach not only simplifies the mechanical structure but also maximizes flexibility, making TerpBot well-suited for a variety of tasks and environments.
Controls and Controller Design:
- We have utilized an Anti-Windup PID controller for controlling wheel velocities of the Terpbot. The Arduino Uno microcontroller has been programmed in a very optimal way, to achieve a near perfect trajectory tracking result. The Arduino Uno had the following tasks:
- Accurately count time (us resolution)
- Accurately count ticks coming from each encoder.
- Calculate ticks read in a unit time. (Ticks read in a unit time, is like velocity calculation)
- Communicate this tick rate to the Raspberry PI without loss of synchronization.
- Receive Control Targets of each motor’s tick rate, in a jitter free manner.
- Execute the control loop under the control sampling frequency, leaving enough time for other tasks to run.
The TerpBot was further configured to solve different tasks which can be found in the Projects section.