Skip to content

Akshatb2006/Paint_Robot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🤖 Autonomous Wall Finishing Robot — Path Planning & Visualization

🚀 Overview

This project implements a robust, optimized, and database-driven control system for an autonomous wall-finishing robot.
It performs intelligent path planning, real-time communication, and visual trajectory playback, providing a foundation for industrial-grade wall-painting or finishing robots.


🧩 Features

1️⃣ Coverage Planning

  • Implements a Hybrid Coverage Path Planner combining:
    • Boundary tracing for initial wall outline coverage.
    • Zigzag interior filling for efficient internal coverage.
  • Supports user-defined wall dimensions and rectangular obstacles.
  • Avoids redundant passes and ensures 100% surface coverage.

2️⃣ Backend Data Management

  • Powered by FastAPI and SQLAlchemy ORM.
  • SQLite database with advanced PRAGMA optimizations for real-world performance.
  • Includes basic indexing for faster queries.
  • Provides complete CRUD APIs:
    • Create new trajectories
    • Retrieve trajectory by ID
    • Paginated list of stored trajectories
    • Delete trajectories
    • Fetch aggregated statistics

3️⃣ Frontend Visualization

  • Canvas-based 2D visualizer built in vanilla JavaScript (no Matplotlib).
  • Real-time trajectory playback animation.
  • Interactive UI with controls, color-coded segments, and tooltips.
  • Lightweight, modular files for clarity and easy debugging.

4️⃣ Testing

  • Basic API testing using pytest and FastAPI's TestClient.
  • Validates CRUD operations and response times.

🗂️ Project Structure

Robot Paint/
│
├── backend/
│   ├── __init__.py
│   ├── main.py          # FastAPI entry point
│   ├── db.py            # SQLite setup + PRAGMA optimizations
│   ├── models.py        # SQLAlchemy + Pydantic schemas
│   └── planner.py       # Hybrid path planner (core algorithm)
│
├── frontend/
│   ├── static/
│   │   ├── app.js       # Main frontend entry
│   │   ├── api.js       # API request handling
│   │   ├── canvas.js    # 2D path visualization
│   │   ├── animation.js # Trajectory playback logic
│   │   ├── ui.js        # Event handling & controls
│   │   └── config.js    # Configuration constants
│   └── index.html
│
├── tests/
│   └── test_api.py
│
└── requirements.txt

⚙️ Backend Setup

1️⃣ Install dependencies

pip install -r requirements.txt

or

pip install fastapi uvicorn sqlalchemy pydantic

2️⃣ Run the server

uvicorn backend.main:app --reload

3️⃣ Initialize database

Database automatically initializes on startup as wall_robot.db.

4️⃣ API Endpoints

Method Endpoint Description
POST /plan Generate a new trajectory
GET /trajectory/{id} Retrieve trajectory by ID
GET /trajectories List all stored trajectories (paginated)
DELETE /trajectory/{id} Delete a specific trajectory
GET /stats Retrieve overall statistics

💾 SQLite Optimizations

To simulate real-world robot control load, the database is configured with performance-focused PRAGMA directives:

PRAGMA Description Real-World Effect
journal_mode=WAL Enables Write-Ahead Logging Allows concurrent reads and writes, improves durability
synchronous=NORMAL Relaxes sync frequency Faster commits, good durability tradeoff
cache_size=-64000 64 MB in-memory page cache Reduces disk I/O, boosts read performance
temp_store=MEMORY Stores temporary data in memory Speeds up sorting and intermediate queries

These settings provide low-latency query response, high throughput, and consistent performance under load, even for concurrent users.


🧠 Path Planning Logic

Implemented in planner.py, the Hybrid Path Planner works in three distinct stages:

Boundary Tracing:
The robot first covers the entire wall outline to ensure edge completeness.

Obstacle Tracing:
Each obstacle (like a window) is outlined with a safety margin (equal to tool width) to prevent accidental collision or overpainting.

Zigzag Fill:
The remaining area is covered using a smart zigzag pattern that avoids obstacles and minimizes turns.

🔧 Advantages:

  • Complete coverage of walls with no missed or redundant regions.
  • Efficient turn minimization through alternating traversal direction.
  • Adaptable to any obstacle geometry.
  • Easy to parameterize (tool width, speed, margin).
  • Significantly shorter execution time compared to traditional patterns.

⚙️ Hybrid vs Spiral vs Zigzag — Numerical Example

Wall: 5m × 5m
Obstacle: Window (25cm × 25cm)
Tool Width: 0.1m (10 cm)
Speed: 0.5 m/s
Turn Time: 2 seconds

🌀 Spiral Method

Perimeter of each layer = 2(w + h)
Layers = min(w, h) / (2 × tool_width) = 5 / 0.2 = 25 layers
Total path ≈ 25 × 2(3.75 + 3.75) = 375m
Turns = 4 × 25 = 100 turns
Time = 375/0.5 + 100×2 = 750 + 200 = 950s ≈ 16 min

↔️ Zigzag Method

Rows = wall_height / tool_width = 5 / 0.1 = 50 rows
Path per row ≈ 5m
Obstacle causes 2 split segments per affected row (~3 rows affected)
Total path ≈ 50 × 5 = 250m
Turns = 49 (between rows) + 6 (around obstacle) = 55
Time = 250/0.5 + 55×2 = 500 + 110 = 610s ≈ 10 min

🔄 Hybrid Method (Implemented)

Boundary pass: 2(5 + 5) = 20m
Interior zigzag: (5 - 0.2) × (5 - 0.2) / 0.1 ≈ 230m
Total path ≈ 250m
Turns ≈ 60
Time ≈ 620s ≈ 10.5 min

🌟 Benefits of the Hybrid Method

Aspect Spiral Zigzag Hybrid (Proposed)
Coverage Efficiency High (but redundant near center) Good Excellent (no overlaps)
Turn Count Very high Moderate Optimized
Obstacle Handling Poor Good Excellent (margined obstacle tracing)
Computation Time Low Medium Optimized for balance
Path Length Long (~375m) Short (~250m) Optimal (~250m)
Real-world Suitability Limited (redundant) Decent Industrial-grade ready

💡 Summary:

The Hybrid Approach combines the strengths of both Spiral (boundary completeness) and Zigzag (efficiency) methods.

It achieves:

  • ~35% reduction in total time compared to the Spiral approach.
  • Smooth motion profile with fewer turns.
  • Precise coverage near walls and around obstacles.
  • A realistic, deployable solution for autonomous wall-finishing systems.

🧠 Technical Highlights

  • Path planner complexity: O(n) with respect to obstacle count.
  • Dynamic obstacle avoidance using margin-based exclusion zones.
  • Optimized trajectory storage with JSON-encoded path data.
  • High-speed querying via multi-column SQLite indices.
  • Detailed metadata tracking (path length, computation time, estimated runtime).

Demo Video:

▶️ Watch on Google Drive

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors