Skip to content

Kavin7094/GCBOT

Repository files navigation

๐Ÿค– GCBOT โ€” Gamified Cleaning Bot

An AI-powered autonomous trash-collecting robot with real-time web control, live video streaming, YOLOv10 waste detection, and a combined AI + weight-based scoring system.

Python Flask Arduino YOLOv10 Raspberry Pi License: MIT


๐Ÿ“– Table of Contents


๐ŸŒŸ Overview

GCBOT is a remotely controlled garbage-collecting robot built for competitions and real-world waste management challenges. It combines:

  • ๐ŸŽ๏ธ A 4-wheel drive chassis controlled via a motor driver
  • ๐Ÿฆพ A servo-powered arm & gripper for picking up trash
  • ๐Ÿ“ท A live camera stream from an onboard Raspberry Pi
  • ๐Ÿง  YOLOv10 AI running real-time trash detection on the laptop
  • ๐Ÿ† Combined AI + Weight scoring โ€” points are based on both what the AI detected AND how heavy the object is
  • โš–๏ธ HX711 load cell measures object weight for score multiplier
  • ๐ŸŒ A browser-based control panel accessible from any device on the network
  • ๐Ÿ” Login & player system โ€” sign in or create an account before controlling the robot
  • ๐Ÿ“ฒ QR onboarding page โ€” scan to join Wi-Fi, scan again to open the game instantly

The entire system communicates over TCP sockets โ€” the laptop runs the Flask web server, AI inference, and score computation; the Raspberry Pi acts as a bridge between the laptop and the Arduino; and the Arduino directly controls all motors, servos, and the load cell.


๐Ÿ“ธ Screenshots

๐Ÿ” Login Page

Players sign in or create an account before accessing the robot controls. The glassmorphism login card sits on the animated dark background.

GCBOT Login UI


๐Ÿ“ฒ QR Onboarding Page (/qr)

Displayed on a screen at the competition venue. Players scan Step 1 to join the Wi-Fi hotspot, then scan Step 2 to instantly open the control page โ€” no typing required.

GCBOT QR Page


๐Ÿ“ฑ Mobile Views

The interface is fully responsive. On portrait mobile it prompts rotation; on landscape it shows the full control panel.

Portrait (Login) Landscape
Mobile Portrait Mobile Landscape

๐Ÿ†• Create Account Page

New players fill in their Full Name, Nickname (shown on leaderboard), choose an avatar, and set a password. The profile is saved and they are logged in immediately.

GCBOT Create Account


๐Ÿ† Leaderboard Page

Shows all players ranked by total score. Each entry displays the player's avatar, nickname, full name, and points earned in the session.

GCBOT Leaderboard


๐Ÿ–ฅ๏ธ Web Control Interface (Desktop)

The full-screen landscape control panel with live AI Detection feed, movement D-pad, gripper & arm controls, and the real-time score badge.

GCBOT Desktop Control UI


๐Ÿ—๏ธ System Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   GCBOT โ€” Gamified Cleaning Bot                  โ”‚
โ”‚                                                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   WiFi/TCP   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   Serial/USB       โ”‚
โ”‚  โ”‚   LAPTOP   โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ Raspberry Pi โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ โ”‚
โ”‚  โ”‚            โ”‚              โ”‚              โ”‚                    โ”‚
โ”‚  โ”‚ Flask App  โ”‚              โ”‚ pi_control   โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚ (Port 5001)โ”‚              โ”‚ (Port 5000)  โ”‚   โ”‚   Arduino   โ”‚  โ”‚
โ”‚  โ”‚            โ”‚              โ”‚              โ”‚   โ”‚             โ”‚  โ”‚
โ”‚  โ”‚ YOLOv10    โ”‚โ—„โ”€โ”€ Video โ”€โ”€โ”€โ–บโ”‚ Camera       โ”‚   โ”‚ Motor Driverโ”‚  โ”‚
โ”‚  โ”‚ Inference  โ”‚   (Port 9999)โ”‚ Stream Tx    โ”‚   โ”‚ Servos (x4) โ”‚  โ”‚
โ”‚  โ”‚            โ”‚              โ”‚              โ”‚   โ”‚ Load Cell   โ”‚  โ”‚
โ”‚  โ”‚ Web UI     โ”‚โ—„โ”€โ”€ Cmds โ”€โ”€โ”€โ”€โ–บโ”‚ Serial Relay โ”‚   โ”‚ HX711       โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚        โ–ฒ                                                         โ”‚
โ”‚        โ”‚  HTTP (Browser)                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”                                                  โ”‚
โ”‚  โ”‚ Any Device โ”‚ (Phone / Tablet / PC on same network)            โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Three-Tier Architecture Diagram

graph TD
    %% Define Node Styles
    classDef component fill:#ffffff,stroke:#333333,stroke-width:1px;

    subgraph Tier3 ["Tier 3: Host / Fog Layer"]
        Browser[("Web Browser (Mobile/PC)\nControl UI & Video")]:::component
        Flask["Flask Web Server"]:::component
        YOLO["YOLOv10 Inference Engine"]:::component

        Browser <==>|HTTP / WebSocket| Flask
        Flask <==>|Frames / Classes| YOLO
    end
    style Tier3 fill:#e3f2fd,stroke:#1565c0,stroke-width:2px;

    subgraph Tier2 ["Tier 2: Edge Layer"]
        Pi["Raspberry Pi 4"]:::component
        Cam[("USB Web Camera")]:::component

        Cam -->|Raw Video| Pi
    end
    style Tier2 fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;

    subgraph Tier1 ["Tier 1: Hardware Layer"]
        Arduino["Arduino Uno"]:::component
        L298N["L298N Motor Driver"]:::component
        Motors(("4x DC Motors")):::component
        Servos(("4x Servo Motors\n(Arm & Gripper)")):::component
        HX711["HX711 Amplifier"]:::component
        LoadCell[("1Kg Load Cell")]:::component

        Arduino -->|PWM Signals| L298N
        L298N -->|Power| Motors
        Arduino -->|PWM Signals| Servos
        HX711 -->|Digital Weight Data| Arduino
        LoadCell -->|Analog Signal| HX711
    end
    style Tier1 fill:#fff3e0,stroke:#e65100,stroke-width:2px;

    %% Cross-layer connections
    Flask ==>|TCP Control Commands| Pi
    Pi ==>|MJPEG Video Stream| Flask
    Pi <==>|Serial USB| Arduino
Loading

Communication Flow

sequenceDiagram
    participant Browser as ๐ŸŒ Browser
    participant Laptop as ๐Ÿ’ป Laptop (Flask)
    participant Pi as ๐Ÿ“ Raspberry Pi
    participant Arduino as โšก Arduino

    Browser->>Laptop: HTTP POST /cmd {"cmd": "F"}
    Laptop->>Pi: TCP "F\n" (Port 5000)
    Pi->>Arduino: Serial "F\n"
    Arduino-->>Arduino: forward()

    Browser->>Laptop: HTTP GET /video_feed
    Pi-->>Laptop: TCP Video Frame (Port 9999)
    Laptop-->>Laptop: YOLOv10 Inference โ†’ tracks last_detected_class
    Laptop-->>Browser: MJPEG Stream

    Note over Browser,Arduino: DROP OBJECT Flow (AI + Weight Scoring)
    Browser->>Laptop: POST /cmd {"cmd": "WEIGHTNOW"}
    Laptop->>Laptop: weighnow_pending = True
    Laptop->>Pi: TCP "WEIGHTNOW\n"
    Pi->>Arduino: Serial "WEIGHTNOW\n"
    Arduino-->>Arduino: HX711 read โ†’ diff = current - lastWeight
    Arduino-->>Pi: Serial "W:23.45\n"
    Pi-->>Laptop: TCP "W:23.45\n" (broadcast)
    Laptop-->>Laptop: compute_combined_score(23.45g)
    Note over Laptop: score = round(base ร— (1 + 23.45/100))
    Laptop-->>Browser: JSON {score: 12, event: {cls: "Bottle", pts: 12, weight: 23.5}}
Loading

โœจ Features

Feature Description
๐ŸŽฎ WASD / D-pad Control Move forward, backward, left, right with keyboard or touch
๐Ÿฆพ Arm Lift Control Dual servo arm with animated angle ring indicator
๐Ÿค Gripper Control Dual servo gripper (open/close) with visual feedback
๐Ÿ—‘๏ธ Drop Object One-tap: releases gripper โ†’ waits 2s โ†’ weighs โ†’ combines AI class + weight โ†’ scores
๐Ÿ“ท Live Camera Feed MJPEG stream from Pi camera at ~30 FPS
๐Ÿค– AI Detection Feed YOLOv10 trash overlay feed (host only) with toggle
๐Ÿ† AI + Weight Scoring Score = base_pts ร— (1 + weight_g / 100) โ€” heavier + rarer = more points
โš–๏ธ Load Cell Integration HX711 reads weight diff on command, laptop combines with AI class
๐Ÿ“ฑ Mobile Responsive Landscape-optimized with portrait rotation hint
โšก Low Latency TCP_NODELAY + no blocking delays = near-zero command lag
๐Ÿ”„ Auto-Reconnect All TCP connections auto-reconnect on drop

๐Ÿ”ง Hardware

Components List

Component Quantity Purpose
Arduino Uno 1 Motor & servo control, load cell reading
Raspberry Pi 4 1 Video streaming, TCP bridge to Arduino
L298N Motor Driver 1 4WD motor control
DC Gear Motors (TT Motor) 4 Drive wheels
SG90 / MG90S Servo 4 2ร— Arm lift + 2ร— Gripper
HX711 Load Cell Amplifier 1 Weight sensing for scoring
Load Cell (1kg) 1 Detects collected trash weight
Pi Camera Module 1 Live video stream
3S LiPo / 18650 Pack 1 Power supply
Robot Chassis (4WD) 1 Physical body

Wiring โ€” Arduino Pin Map

Arduino Uno
โ”œโ”€โ”€ Pin  2  โ†’ L298N IN1  (Left Motor A)
โ”œโ”€โ”€ Pin  3  โ†’ L298N IN2  (Left Motor B)
โ”œโ”€โ”€ Pin  4  โ†’ L298N IN3  (Right Motor A)
โ”œโ”€โ”€ Pin  7  โ†’ L298N IN4  (Right Motor B)
โ”œโ”€โ”€ Pin  8  โ†’ L298N ENA  (Left Motor PWM)
โ”œโ”€โ”€ Pin 12  โ†’ L298N ENB  (Right Motor PWM)
โ”œโ”€โ”€ Pin  5  โ†’ Gripper Servo A (grabA)
โ”œโ”€โ”€ Pin  6  โ†’ Gripper Servo B (grabB) [mirrored]
โ”œโ”€โ”€ Pin  9  โ†’ Lift Servo A (liftA)
โ”œโ”€โ”€ Pin 10  โ†’ Lift Servo B (liftB) [mirrored]
โ”œโ”€โ”€ Pin A0  โ†’ HX711 SCK
โ””โ”€โ”€ Pin A1  โ†’ HX711 DT

๐Ÿ’ป Software Stack

Layer Technology
Web Framework Flask (Python)
AI Inference Ultralytics YOLOv10 (best.pt)
Computer Vision OpenCV (cv2)
Video Protocol MJPEG over HTTP (multipart)
Control Protocol Raw TCP sockets with TCP_NODELAY
Serial PySerial (Pi โ†” Arduino)
Frontend Vanilla HTML/CSS/JS with glassmorphism UI
Fonts Google Inter
Microcontroller Arduino C++ with Servo.h + HX711.h
Pi Script Python threading + socket server

๐Ÿง  AI Model โ€” YOLOv10 Trash Detection

The onboard AI model is a custom-trained YOLOv10 fine-tuned on a multi-class garbage detection dataset. It runs locally on the laptop CPU in a dedicated inference thread at 416ร—416 resolution.

Detected Waste Classes (18 classes)

Aluminium foil ยท Bottle ยท Bottle cap ยท Broken glass ยท Can ยท Carton ยท Cigarette ยท Cup ยท Lid ยท Other litter ยท Other plastic ยท Paper ยท Plastic bag/wrapper ยท Plastic container ยท Pop tab ยท Straw ยท Styrofoam piece ยท Unlabeled litter

Training Performance Graphs

Precision-Recall Curve (Train) Confusion Matrix (Train)
PR Curve Confusion Matrix
F1-Confidence Curve Precision Curve
F1 Curve Precision Curve

Validation Performance Graphs

Precision-Recall Curve (Val) Confusion Matrix (Val)
PR Curve Val Confusion Matrix Val

Inference Optimizations

  • โœ… Frame resized to 416ร—416 before inference (3ร— speedup vs full-res)
  • โœ… Duplicate frame skipping โ€” hashes frame identity, skips if unchanged
  • โœ… PyTorch thread capping โ€” prevents CPU over-subscription
  • โœ… Confidence threshold 0.25 โ€” filters weak detections
  • โœ… Annotated frame scaled back to original resolution after inference

๐Ÿ“ Project Structure

GCBOT/
โ”‚
โ”œโ”€โ”€ app.py                              # ๐Ÿ’ป Laptop: Flask server, YOLOv10 inference, AI+weight scoring
โ”œโ”€โ”€ pi_control.py                       # ๐Ÿ“ Raspberry Pi: TCP server + Serial relay to Arduino
โ”‚
โ”œโ”€โ”€ gcbot_arduino/
โ”‚   โ””โ”€โ”€ gcbot_arduino.ino              # โšก Arduino: motors, servos, load cell (weight only)
โ”‚
โ”œโ”€โ”€ Trash_detection_Yolov10_StreamLit/
โ”‚   โ”œโ”€โ”€ best.pt                        # ๐Ÿง  Trained YOLOv10 model weights
โ”‚   โ”œโ”€โ”€ train_graphs/                  # ๐Ÿ“Š Training performance graphs
โ”‚   โ”‚   โ”œโ”€โ”€ PR_curve.png
โ”‚   โ”‚   โ”œโ”€โ”€ F1_curve.png
โ”‚   โ”‚   โ”œโ”€โ”€ P_curve.png
โ”‚   โ”‚   โ”œโ”€โ”€ R_curve.png
โ”‚   โ”‚   โ””โ”€โ”€ confusion_matrix_normalized.png
โ”‚   โ”œโ”€โ”€ val_graphs/                    # ๐Ÿ“Š Validation performance graphs
โ”‚   โ”‚   โ”œโ”€โ”€ PR_curve_val.png
โ”‚   โ”‚   โ”œโ”€โ”€ F1_curve_val.png
โ”‚   โ”‚   โ”œโ”€โ”€ P_curve_val.png
โ”‚   โ”‚   โ”œโ”€โ”€ R_curve_val.png
โ”‚   โ”‚   โ””โ”€โ”€ confusion_matrix_normalized_val.png
โ”‚   โ”œโ”€โ”€ train_yolov10_garbage_detection.ipynb  # ๐Ÿ““ Training notebook
โ”‚   โ””โ”€โ”€ requirements.txt
โ”‚
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ Screenshot 2026-03-26 213021.png   # ๐Ÿ–ผ๏ธ Desktop UI screenshot
โ”œโ”€โ”€ WhatsApp Image 2026-03-17 *.jpeg   # ๐Ÿ–ผ๏ธ Hardware & mobile UI photos
โ””โ”€โ”€ README.md

โš™๏ธ Setup & Installation

Prerequisites

  • Python 3.10+ on the Laptop
  • Python 3.x on the Raspberry Pi
  • Arduino IDE for flashing the .ino sketch

1. Laptop Setup

# Clone the repository
git clone https://github.com/your-username/gcbot.git
cd gcbot

# Create virtual environment
python -m venv .venv
.venv\Scripts\activate      # Windows
# source .venv/bin/activate # Linux/Mac

# Install dependencies
pip install flask ultralytics opencv-python numpy torch

2. Raspberry Pi Setup

# Copy pi_control.py to the Raspberry Pi
scp pi_control.py pi@kavin.local:~/

# SSH into Pi and install dependencies
ssh pi@kavin.local
pip install pyserial

3. Arduino Setup

  1. Open gcbot_arduino/gcbot_arduino.ino in Arduino IDE
  2. Install required libraries:
    • Servo (built-in)
    • HX711 by bogde
  3. Flash to your Arduino Uno

โš ๏ธ Calibrate your load cell! Replace 2280.0 in the sketch with your actual calibration factor. Run a calibration sketch with a known weight to find the correct value.

4. Configuration

In app.py, update the Pi's hostname or IP:

PI_IP        = "kavin.local"   # or use the Pi's IP e.g. "192.168.1.42"
CONTROL_PORT = 5000
VIDEO_PORT   = 9999

In pi_control.py, update the serial port if needed:

ARDUINO_PORT = "/dev/ttyUSB0"   # use /dev/ttyACM0 for some Arduinos
ARDUINO_BAUD = 9600

๐Ÿš€ How to Run

Step 1 โ€” Flash the Arduino

Connect the Arduino to the Raspberry Pi via USB, then flash gcbot_arduino.ino from your development machine.

Step 2 โ€” Start the Pi Bridge

# On Raspberry Pi
python3 pi_control.py

The Pi will:

  • Open the Arduino serial port
  • Start listening for laptop connections on port 5000
  • Start a video stream sender on port 9999 (handled by the Pi camera script โ€” ensure your Pi camera streaming script is also running)

Step 3 โ€” Start the Laptop Server

# On the Laptop (must be on same WiFi as the Pi)
python app.py

Step 4 โ€” Open the Web UI

Navigate to:

http://localhost:5001          # on the laptop (AI Detection feed)
http://<laptop-ip>:5001        # on any phone/tablet on the same WiFi

๐Ÿ“ก Control Protocol

Commands are sent as newline-terminated ASCII strings over TCP:

Command Description
F Move forward
B Move backward
L Turn left
R Turn right
S Stop all motors
U<angle> Set arm lift angle (0โ€“180ยฐ), e.g. U90
G<angle> Set gripper angle (0โ€“180ยฐ), e.g. G120
WEIGHTNOW Trigger a weight check on the load cell

HTTP API (Flask)

Endpoint Method Description
/ GET Serve the control UI
/cmd POST Send a command to the robot
/video_feed GET Raw MJPEG camera stream
/video_feed_detected GET YOLOv10 annotated MJPEG stream
/score GET Current score + last scoring event breakdown
/scorechart GET Full score classification chart as JSON

Example cURL:

# Send a movement command
curl -X POST http://localhost:5001/cmd \
     -H "Content-Type: application/json" \
     -d '{"cmd": "F"}'

# Get the score chart
curl http://localhost:5001/scorechart

๐Ÿ† Scoring System

Scoring uses a combined AI detection + weight measurement system. The laptop computes the final score using both what the AI sees and how heavy the object is.

Formula

final_score = round(base_score ร— (1 + weight_g / 100))
  • base_score โ€” determined by the detected trash class (see chart below)
  • weight_g โ€” weight difference measured by the HX711 load cell (in grams)
  • No detection fallback โ€” if no trash was detected by AI: base = max(1, weight_g รท 10)

Score Classification Chart

Object Class Base Points @ 50g @ 100g @ 200g Reason
Broken glass 15 22 30 45 Dangerous โ€” bonus reward
Bottle 10 15 20 30 Recyclable
Can 10 15 20 30 Recyclable
Plastic bag / wrapper 10 15 20 30 High environmental impact
Carton 8 12 16 24 Recyclable
Cup 8 12 16 24 Disposable
Plastic container 8 12 16 24 Recyclable
Styrofoam piece 8 12 16 24 Hard to recycle
Other plastic 7 10 14 21 โ€”
Aluminium foil 5 7 10 15 Recyclable
Paper 5 7 10 15 Recyclable
Straw 5 7 10 15 Environmental hazard
Other litter 5 7 10 15 โ€”
Cigarette 3 4 6 9 Small but toxic
Lid 3 4 6 9 Small
Bottle cap 3 4 6 9 Small
Pop tab 3 4 6 9 Small
Unlabeled litter 2 3 4 6 Unknown fallback
(No detection) weightรท10 5 10 20 Weight-only fallback

Scoring Flow

1. User presses ๐Ÿ—‘๏ธ DROP OBJECT button in the browser
2. Gripper opens to 50ยฐ (releases trash)
3. After 2s delay, WEIGHTNOW command sent
4. Arduino reads HX711 load cell (avg 3 readings)
5. Arduino sends weight diff: "W:23.45\n"
6. Pi broadcasts W:23.45 to all connected laptops
7. Laptop's app.py combines:
   โ€ข last_detected_class (from YOLO inference) โ†’ base = 10 (Bottle)
   โ€ข weight_g = 23.45g โ†’ multiplier = 1.23
   โ€ข final_score = round(10 ร— 1.23) = 12 pts
8. Browser shows: "+12 Bottle (23.5g)" and updates the score badge

๐Ÿ’ก Tip: The weight multiplier means heavier objects of the same class score higher. A full 200g bottle scores 30 pts vs. a small 50g bottle at 15 pts.

โš–๏ธ No detection fallback: If the AI didn't detect the object before drop, scoring falls back to weight-only: 1 point per 10 grams.


๐ŸŒ Web Control Interface

The control UI is a single-page, glassmorphism-styled dashboard embedded in Flask (app.py). No external CSS framework is used.

UI Features

  • ๐ŸŽฎ D-pad for movement (touch + WASD keyboard)
  • ๐Ÿ”ต SVG ring indicator for real-time arm/gripper angle display
  • ๐ŸŸข Score badge (top-right, always visible) with scale-bounce animation on score update
  • ๐Ÿ“ก Feed toggle โ€” switch between Raw and AI Detection video feed
  • ๐ŸŸข Status dot with pulse animation indicating live connection
  • โ†ป Portrait warning โ€” prompts rotation on mobile portrait mode
  • โœš Crosshair overlay on the video feed for targeting

๐Ÿค Contributing

Contributions, issues, and feature requests are welcome!

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is open source and available under the MIT License.

MIT License

Copyright (c) 2026 Kavin and Team

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Built with โค๏ธ for making the world cleaner, one piece of trash at a time ๐ŸŒโ™ป๏ธ

GCBOT โ€” Gamified Cleaning Bot

About

๐Ÿค– GCBOT โ€” Gamified Cleaning Bot. An AI-powered trash-collecting robot with YOLOv10 waste detection, real-time MJPEG streaming, web-based control panel, and a load-cell scoring system built on Raspberry Pi + Arduino.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors