Scanner 3D

Nume: Țeugea Ioan-Teodor
Grupa: 332CC

Introducere

Proiectul permite scanarea unor obiecte si transformarea lor in modele OBJ ce pot fi integrate in jocuri video sau animatii 3D.

Scopul proiectului este de a reduce timpul si costul de dezvoltare a jocurilor video prin eliminarea nevoii de a modela de la zero diferitele elemente necesare. Astfel, si cei care nu au cunoștiinte de modelare 3D sau talent artistic pot crea rapid modele pentru jocurile lor.

Descriere generală

Scannerul foloseste un senzor laser pentru a măsura distanța față de obiect. Prin colectarea distanțelor din mai multe unghiuri și de la înălțimi diferite, se creează un point cloud care este apoi convertit într-un fișier OBJ.

Pentru rotirea obiectului și pentru mișcarea pe verticală a senzorului laser se utilizează două motoare stepper, pentru a avea o precizie cât mai mare. Motoarele sunt controlate cu ajutorul a 2 plăci DRV8825.

Senzorul laser trimite măsurătorile către placa Arduino prin I2C, iar Arduino comunică cu PC-ul prin interfața serială și biblioteca PySerial.

Aplicația de pe PC primește de la Arduino numărul de pași efectuați de fiecare motor și distanța măsurată, date care sunt convertite în coordonate cilindrice pe baza unui fișier de configurare bazat pe datele tehnice ale componentelor. Pentru motoarele utilizate, 200 de pași corespund cu o rotație completă de 360 de grade, iar o rotație completă înseamnă 8mm pentru mișcarea pe verticală a ansamblului senzorului. Coordonatele cilindrice sunt transformate în coordonate carteziene pe baza cărora se creeaza un fișier point cloud în format .ply, care este apoi convertit într-un mesh 3D folosind biblioteca Open3D.

Schemă bloc

Hardware Design

Listă componente

  • Arduino Uno
  • Senzor laser VL53L0X
  • Placă DRV8825 (2x)
  • Motor stepper (2x)
  • Condensator 100uF 50V (2x)
  • Sursă alimentare 12V 5A

Schemă

Implementare finala

Software Design

Arduino trimite datele catre laptop, impreuna cu anumite coduri cu diferite semnificatii:

  • -2 - eroare initializare senzor
  • 5 - senzorul a fost initializat cu succes
  • 20 - a fost efectuata o noua masuratoare. Impreuna cu acest cod se trimit numarul de pasi efectuati de motoarele de rotire si deplasare verticala si distanta masurata
  • 10 - s-a terminat scanarea obiectului

Centrul de referinta al modelului este centrul platformei pe care sta acesta. Centrul se afla la o distanta cunoscuta D fata de senzor. Senzorul intoarce distanta d1 de la marginea obiectului la senzor. Pe baza acestor doua distante, putem calcula distanta de la centru la marginea obiectului scazand D - d1.

Specificatiile motoarelor folosite arata ca 200 de pasi de rotatie corespund cu o rotatie completa de 360 de grade. Astfel, se calculeaza unghiul din care este privit obiectul prin regula de 3 simpla. Pentru deplasarea pe verticala, specificatiile arata ca o rotatie completa a unui motor corespunde cu o deplasare verticala de 8mm.

Astfel, prin aceste 3 masuratori am obtinut pozitia punctului de pe obiect in coordonate cilindrice. Acestea sunt transformate in coordonate carteziene si scrise intr-un fisier .ply

Repository GitHub: https://github.com/John-Ted/Scanner-3D-PM

Rezultate Obţinute

Proiectul executa scanari, insa faptul ca obiectul este vazut doar din lateral, problemele cu senzorul si algoritmii de conversie din point cloud in mesh 3D nu permit o rezolutie extraordinara.

Concluzii

Proiectul are potential, creeaza modele 3D, insa mai trebuie lucrat pentru imbunatatirea rezolutiei rezultatelor

Posibile imbunatatiri
  • Schimbarea senzorului de distanta cu unul mai bun
  • Rotirea obiectului si pe alte axe in afara de OY

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2022/ndrogeanu/scanner_3d.txt · Last modified: 2022/06/02 12:40 by ioan_teodor.teugea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0