Låt oss laga: 3D skanner baserat på Arduino och bearbetning (9 / 13 steg)

Steg 9: bearbetning



Varför bearbetning? Eftersom det är lätt att använda, med stora referens och handledning bas. Det är också mycket lik arduino. Det innebär att sannolikheten för misstag under koden skriver minskning. Biblioteken är väl dokumenterade också.

Första sak att göra i bearbetningen är installation av GSVideo bibliotek. Instruktioner för nedladdning och installation är det: http://gsvideo.sourceforge.net/
Så i princip program sekvens ser något ut som, men det är uppdelat i 2 slingor (göra bilder och resten):
gör bilden = > hitta ljusaste pixel i varje rad = > Spara bild representation ljusaste pixlar = > hitta avståndet mellan mitten av bilden och ljusaste pixel i varje rad = > Konvertera samlades Polära koordinater till kartesian XYZ = > Spara ASC fil med punktmoln.
Förklaring finns i kommentarer i kod.
Första sak måste göras preety snart är inställningen där Z-värdet är lika 0. Nu ligger Z = 0 inte på mitten av plattform, men på den första raden i foto. Detta orsakar att punktmoln output är uppochner.

kod:
import codeanticode.gsvideo.*;
import processing.serial.*;

objekt
PFont f;
GSCapture cam;
Seriella myPort;
PrintWriter utgång;

färger
färg black=color(0);
färg white=color(255);

variabler
int itr; iteration
float pixBright;
flyta maxBright = 0;
int maxBrightPos = 0;
int prevMaxBrightPos;
int cntr = 1;
int raden;
int col;

scanner parametrar
flyta odl = 210; avståndet mellan webbkamera och roterande axel, [milimeter], inte använt ännu
flyta etap = 120; antal faser profilering per varv
flyta katLaser = 25 * PI/180; vinkeln mellan laser och kamera [radian]
flyta katOperacji = 2 * PI/etap; vinkeln mellan 2 profiler [radian]

koordinater
float x, y, z; kartesiska sladdar., [milimeter]
float ro; första av polär koordinat, [milimeter]
float fi; andra av polär koordinat, [radian]
float b; avståndet mellan ljusaste pixel och mitten av foto [pixlar]
flyta pxmmpoz = 5; pixlar per milimeter horisontellt 1px = 0,2 mm
flyta pxmmpion = 5; pixlar per milimeter vertikalt 1px = 0,2 mm

//================= CONFIG ===================

void setup() {
storlek (800, 600);
strokeWeight(1);
Smooth();
Background(0);

typsnitt
f=createFont("Arial",16,true);

kamera conf.
String [] avcams=GSCapture.list();
om (avcams.length==0) {
println ("det finns inga kameror för fånga.");
textFont(f,12);
Fill(255,0,0);
text ("Kamera inte redo", 680, 32);
}
annat {
println ("tillgängliga kameror:");
för (int jag = 0; jag < avcams.length; i ++) {
println(avcams[i]);
}
textFont(f,12);
Fill(0,255,0);
text ("kameran redo", 680, 32);
cam = nya GSCapture (denna, 640, 480,avcams[0]);
cam.start();
}

Följetong (COM) conf.
println(Serial.list());
myPort = ny följetong (denna, Serial.list() [0], 9600);

utdatafil
output=createWriter("skan.ASC"); plik wynikowy *.asc

}

=== MAIN PROGRAM ===

void draw() {

PImage zdjecie=createImage(cam.width,cam.height,RGB);
cam.Read();
Delay(2000);
för (itr = 0; itr < etap; itr ++) {
cam.Read();
zdjecie.loadPixels();
cam.loadPixels();
för (int n = 0; n < zdjecie.width*zdjecie.height; n ++) {
zdjecie.pixels[n]=cam.pixels[n];
}
zdjecie.updatePixels();
set(20,20,CAM);
String nazwaPliku = "zdjecie-" + nf(itr+1, 3) + "png";
zdjecie.Save(nazwaPliku);
obroc();
Delay(500);
}
obroc();
licz();
noLoop();

}

void licz() {
för (itr = 0; itr < etap; itr ++) {

String nazwaPliku = "zdjecie-" + nf(itr+1, 3) + "png";
PImage skan=loadImage(nazwaPliku);
String nazwaPliku2 = "odzw-" + nf(itr+1, 3) + "png";
PImage odwz = createImage (skan.width, skan.height, RGB);
skan.loadPixels();
odwz.loadPixels();
int currentPos;
Fi = itr * katOperacji;
println(fi);

för (rad = 0; rad < skan.height; rad ++) {//starting rad analys
maxBrightPos = 0;
maxBright = 0;
för (col = 0; col < skan.width, col ++) {

currentPos = ror * skan.width + col;
pixBright=brightness(skan.pixels[currentPos]);
IF(pixBright>maxBright) {
maxBright = pixBright;
maxBrightPos = currentPos;
}
odwz.pixels[currentPos]=Black; ställa in alla pixlar svart
}

odwz.pixels[maxBrightPos]=White; inställningen ljusaste pixel vit

b = ((maxBrightPos+1-row*skan.width)-skan.width/2) / pxmmpoz;
ro=b/sin(katLaser);
output.println (b + "," + prevMaxBrightPos + "," + maxBrightPos); Jag använde detta för felsökning

x = ro * cos(fi); ändra polar coords till kartesian
y = ro * sin(fi);
z = rad/pxmmpion;

om ((ro > = 30) & & (ro < = 60)) {//printing koordinater
output.println (x + "," y + "," + z);
}

} //end rad analys

odwz.updatePixels();
odwz.Save(nazwaPliku2);

}
output.flush();
output.Close();
}

void obroc() {//sending kommandot för att stänga
myPort.write('S');
Delay(50);
myPort.write('K');
}

Se Steg
Relaterade Ämnen

RF kontroll System för R/C bil baserat på Arduino och nRF24L01

Syftet med detta projekt är att bygga en sändare och en mottagare genom att använda en billig och lätt att använda komponent som nRF24L01 Arduino UNO och Arduino Nano transceiver. Detta projekt är en enkel och lätt att genomföra och kan vara en bra s...

DIY 3D skanner baserat på strukturerad ljus och stereo vision i Python språk

Denna 3D scanner gjordes med låg kostnad konventionella objekt som videoprojektor och webbkameror. En strukturerad ljus 3D-scanner är en 3D scanning enhet för mätning av tredimensionell form av ett objekt med projicerade ljusmönster och ett kamerasys...

PC USB Media volym Controller baserat på Arduino

Hej alla och Välkommen till min tredje Instructable.En vän till mig har ett ljudsystem med en urtavla för volymkontroll, och den sitter på hans skrivbord ser riktigt snyggt. Jag ville ha något liknande men med extra funktioner och anpassningsbara. Ja...

Båt Autopilot - baserat på Arduino

Här är hur man bygger en autopilot som kan styra en RC båt till waypoints! Det är enkelt att bygga, baserat på den populära Arduino plattformen och bra för amatörer som vill ha lite lödning övning! Med denna autopilot, kan en RC båt gå långa sträckor...

Pixel levereras Counter baserat på Arduino

Många gånger, använder vi ofta LCD som visar utrustning, från små monitorer till stora industriella utrustning.Roliga i detta projekt är att den kombinerar två röda Ledde matriser som display. Du behöver inte andra enheter utom Arduino att köra den.D...

28BYJ-48 Stepper Motor Control System baserat på Arduino med ULN2003 Chip

ICStation Team presentera denna stegmotor kontrollsystem baserat på ICStation UNO kompatibel med Arduino. Det använder ULN2003 chip till enheten. Den funktionsdugliga spänningen är DC5V. Det är allmänt används på ATM maskin, bläckstråleskrivare, skär...

3 fas sinus våg generator baserat på Arduino förfallodatumet

Syftet med denna andel är att hjälpa någon som försöker utnyttja Dues större prestanda + brist på referens + icke-hjälp datablad.Detta projekt är att generera upp till 3 fas sinusvåg @ 256 prover / cykla på låga freq (< 1kHz) och 16 prover/cykel @ hi...

Låt oss laga en hel fisk!

Hej gott folk!Jag ska lära dig min strategi för matlagning en hel fisk. Varför skulle du laga en hel fisk så här, i stället för att helt enkelt filetering och matlagning, eller bara Tina upp en frusen hunk mysterium fisk och kastar den på stekpanna?-...

Låt oss laga Tofu rör Fry

jag gräva tofu. Inte många människor gillar det, men om du gör, då jag säger "Välkommen tofu-bröder" och ge dig en high five.Jag har nyligen upptäckt en thailändsk restaurang i centrala Fredericksburg, och beställde berusad nudlar. Det var först...

Hur man enkelt laga en skinka från landet (och göra det visa sig AWESOME).

Instruktioner för matlagning land skinka finns vanligtvis två sätt:Grädda i 500F i 15 minuter, Låt sitta i 2 timmar, grädda i 500F i 15 minuter och Låt sitta i 6 timmar.- eller -Koka skinkan på spisen.Båda suga. Instruktionerna från företagen som ski...

Plant Care System baserat på Pi3 och Wio nod

Jag ville alltid bulid ett projekt som kan styra många noder för grönt hus bevattningssystem, men aldrig hittat den rätta lösningen. Noden Wio är lämplig för mitt projekt.WiO nod är utformad för att förenkla din sakernas utveckling, syftar till att g...

Enkel kalkylator baserat på Arduino MEGA

Numera gör beräkningar är inte ett problem alls. Kraftfull miniräknare kan köpte för några Euro eller lätt installeras på telefoner och datorer. Dock beslutade vi att göra vårt Arduino till en miniräknare eftersom vi tror att det kan bli en riktigt i...

Människokroppen induktion Alarm baserat på Arduino med Arduino UNO, infraröd Sensormodul, Summer modul

ICStation team av forsknings- och utvecklingsavdelning har gjort detta projekt om människokroppen induktion larmet. Det använder DC5V spänning för att arbeta. När någon visas inte i området förmå i infraröd sensor och hela systemet kommer att använda...

DIY temperatur & luftfuktighet & rökdetektor Alarm System baserat på Arduino

ICStation team presentera hur DIY denna temperatur & luftfuktighet & rök larmsystem baserat på ICStation Mega 2560 kompatibel med spänning Arduino.The arbetar med detta system är DC5V. Det kan mäta den nuvarande temperatur, luftfuktighet och rök....

NRF24L01 trådlöst tangentbord dataöverföringssystem baserat på Arduino

ICStation Team presentera detta trådlös överföringssystem utifrån ICStation Mega 2560 och UNO R3 kompatibel med Arduino. Det använder DC5V arbeta spänning. När det finns någon att trycka på tangenterna, skickar det avsändande systemet värdet av nyckl...

Ljuskänsliga Timing IR LED Control System baserat på Arduino

ICStation Team presentera denna Photosensitive timing infraröd LED control system. Detta system använder DC5V spänning för att arbeta. När ljusintensiteten är svag och någon visas i området infraröd, kommer att LED vara på. Medan miljömässiga ljusint...

Stöldskydd ingången Guard larmsystem baserat på Arduino

ICStation team presentera detta stöldskydd ingången Guard Alarm System baserat på ICStation MEGA. Detta system fungerar under 5V DC strömförsörjning, kan förverkliga IR ingången guard övervakning och använder active Summer till slut larm. Detta syste...

Arduino och Plotly baserat seismograf

Detta är en enkel arduino baserad seismograf som skickar data som samlas in till ett python-skript som grafer data live och kan exportera det till plotly. Denna seismograf är ganska känslig, kan man upptäcka en person hoppa bredvid den. Seismographen...

2.4 G trådlöst data sortering system baserat på Arduino RF Uart

Moderna smarta hemmet kan enkelt ansluta till varandra all elektrisk utrustning, men nästan alla terminaler beroende strömförsörjning förutsatt energi, så vi måste göra en mindre storlek makt, INHAOS AC-5000 ger 5 w i en liten storlek, det räcker för...