Milliards de points: 3 dollars contre 8 millions de roubles

Voici à quoi ressemble l'œil qui voit tout dans la vraie vie.


Au fait, un scanner coûte plus cher qu'une voiture. Tesla S. Avec une livraison aérienne à l'entrée de Moscou,

ce billet décrira le scanner 3D le plus cher (probablement) au monde et le moins cher du monde.


On ne m'a pas donné pour démonter (vu) l'appareil au prix d'une teslamobile, j'ai donc regardé les instructions. Quelques photos de l'intérieur de là.
Lorsqu'on leur a demandé si un scanner 3D peut prendre un selfie (si vous mettez un miroir devant), ils m'ont répondu que ces appareils avaient des problèmes avec les surfaces réfléchissantes. J'ai donc pris le crâne d'une étagère voisine et j'ai essayé de le scanner.



Ces belles choses sont créées à l'aide d'un scanner.


Scanner 3D Surphaser 25HSX


Scanner 3D Surphaser 25HSX est un scanner laser tridimensionnel avec un système de déviation de faisceau sphérique, conçu pour former des modèles tridimensionnels d'objets réels pour une utilisation ultérieure dans divers domaines:

- faire des dessins de pièces conçues selon des prototypes;
- créer des copies de sauvegarde des expositions et des intérieurs du musée;
- développement de jeux informatiques et d'animation publicitaire;

Le scanner est basé sur l'utilisation d'une «tête de numérisation» (scanner matériel) et d'un ordinateur de contrôle sur lequel le «logiciel» du scanner est installé, avec lequel l'ordinateur démarre le processus de numérisation, reçoit un flux de données de mesure de la tête de numérisation et le traite après la numérisation ces données, les traduisant sous la forme d'un nuage de points d'un objet.



TTX
3d , , , .

3d Surphaser 25HSX :

  • – 1.5 – 60 ;
  • — 240180 ;
  • – 200 000 -1 000 000 ;
  • -17-100
  • ~ 2 ( 17 200 000 );
  • – 1 ; 20-60 .
  • 18-22 , 3,3 .


-. 200 /.

: USB-2.



Parties de la tête de numérisation pour un scanner 3D sphérique
décryptage
1- ( )
1.1- ( )
1.1.1-
1.1.2- ѐ
1.1.3- .
1.1.4-
1.1.5-
1.1.6-
1.2. –
1.2.1-
1.2.1.1-
1.2.2-
1.3-
2.- «»
2.1-
2.2-
3-
4-

, ( ) . (0,05-0,2 /), — (4-40 /). 200 ( 1 ) ( ). , –
.




Module de balayage optique pour un scanner 3D sphérique avec un système de déviation avec rotation uniquement autour de l'axe horizontal, préparé pour le transport.


Conception optique du module de balayage optique
description de l'article


:

3 – 47464
4 – 690.0 IF 40 U
7 – 46377
8 – 18.105
11 – 18.106
14 – 18.101.
15 – 18.102.
16 – 47911 48692
17 – 38 02 27 032

1 –
2 –
5 –
6 –
9 –
10 –
12 –
13 –



Le circuit imprimé du module laser BL est conçu pour contrôler la diode laser à semi-conducteur HL6750MG. En mode de fonctionnement, la


carte fournit la formation d'un rayonnement optique continu avec une puissance optique moyenne constante et une modulation d'amplitude. La carte BP du module photodétecteur est conçue pour recevoir un rayonnement laser modulé en intensité à l'aide d'une photodiode à avalanche. En mode de fonctionnement, la carte assure la sélection du signal modulant la lumière et son amplification.


La carte BR du module d'ingénierie radio, qui fait partie du module de scanner optique du scanner 3D, est conçue pour générer un signal combiné qui module l'intensité du faisceau lumineux, convertit (se traduit par une basse fréquence de 1 MHz et amplifie) le signal RF réfléchi reçu et le signal RF de référence, isole et amplifie la basse fréquence réfléchie signal


La carte BS, qui fait partie du module de scanner optique du scanner 3D, est conçue pour générer un signal sur la présence d'un faisceau à la sortie du module laser. Seul le rayonnement diffusé est utilisé pour générer le signal. En mode de fonctionnement, la tension de sortie dépasse 0,1 V avec une puissance de faisceau de plus de 3 mW.

Balayage



C'est ainsi que le scanner 3D voit la pièce en mode préliminaire (vous pouvez sélectionner la zone souhaitée que le scanner sondera) Le


monde à travers les yeux d'un scanner 3D. Qui peut distinguer une personne?


La même pièce dans l'éditeur 3D


Voici comment une personne ordinaire voit le crâne.


Cette pièce n'est pas nécessaire cette fois-ci, nous sélectionnons donc uniquement cette zone avec le crâne en mode de prévisualisation. Ensuite, pendant environ 5 à 10 minutes, le scanner se tord avec son œil, à la recherche de hobbits . L'essentiel est de ne pas se mettre sur son chemin, sinon cela brûlera un défaut. Le scanner capture non seulement le crâne lui-même, mais également les zones qui sont loin derrière. Ceci est facilement édité dans l'éditeur.


Un homme est passé, est tombé dans la zone du faisceau laser. Voir la bande? Ne gênez pas la lumière cohérente. Tout est en ordre avec la personne, mais sur le scan, cela s'est reflété comme un «pixel cassé»

Surphaser`a


































3d- 3





  • Arduino Arduino IDE
  • Processing IDE
  • LEGO
  • ( )
  • -
  • Meshlab


image
OKI . 48 (7,5 ),
3,7V, 200-250mA

image
,



image



image
CD, , , LEGO

image
— Creative Webcam Vista. (640x480), (plastic lenses). . .

image
(~1$) , . ( ). 30

image
code
#include <Stepper.h>
Stepper oki(48,8,9); //see stepper tutorial in arduino.cc for info about that
const int ledPin = 13; // the pin that the LED is attached to
int incomingByte; // a variable to read incoming serial data into

void setup() {
// initialize serial communication:
Serial.begin(9600);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
oki.setSpeed(60);
}

void loop() {
// see if there's incoming serial data:
if (Serial.available() > 0) {
// read the oldest byte in the serial buffer:
incomingByte = Serial.read();
// if it's a capital H (ASCII 72), turn on the LED:
if (incomingByte == 'S') {
digitalWrite(ledPin, HIGH);
oki.step(4);
}
// if it's an L (ASCII 76) turn off the LED:
if (incomingByte == 'K') {
digitalWrite(ledPin, LOW);
}
}
}


image

Processing
code:
import codeanticode.gsvideo.*;
import processing.serial.*;

//objects
PFont f;
GSCapture cam;
Serial myPort;
PrintWriter output;

//colors
color black=color(0);
color white=color(255);

//variables
int itr; //iteration
float pixBright;
float maxBright=0;
int maxBrightPos=0;
int prevMaxBrightPos;
int cntr=1;
int row;
int col;

//scanner parameters
float odl = 210; //distance between webcam and turning axle, [milimeter], not used yet
float etap = 120; //number of phases profiling per revolution
float katLaser = 25*PI/180; //angle between laser and camera [radian]
float katOperacji=2*PI/etap; //angle between 2 profiles [radian]

//coordinates
float x, y, z; //cartesian cords., [milimeter]
float ro; //first of polar coordinate, [milimeter]
float fi; //second of polar coordinate, [radian]
float b; //distance between brightest pixel and middle of photo [pixel]
float pxmmpoz = 5; //pixels per milimeter horizontally 1px=0.2mm
float pxmmpion = 5; //pixels per milimeter vertically 1px=0.2mm

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

void setup() {
size(800, 600);
strokeWeight(1);
smooth();
background(0);

//fonts
f=createFont(«Arial»,16,true);

//camera conf.
String[] avcams=GSCapture.list();
if (avcams.length==0){
println(«There are no cameras available for capture.»);
textFont(f,12);
fill(255,0,0);
text(«Camera not ready»,680,32);
}
else{
println(«Available cameras:»);
for (int i = 0; i < avcams.length; i++) {
println(avcams[i]);
}
textFont(f,12);
fill(0,255,0);
text(«Camera ready»,680,32);
cam=new GSCapture(this, 640, 480,avcams[0]);
cam.start();
}

//Serial (COM) conf.
println(Serial.list());
myPort=new Serial(this, Serial.list()[0], 9600);

//output file
output=createWriter(«skan.asc»); //plik wynikowy *.asc


}

//============== MAIN PROGRAM =================

void draw() {

PImage zdjecie=createImage(cam.width,cam.height,RGB);
cam.read();
delay(2000);
for (itr=0;itr<etap;itr++) {
cam.read();
zdjecie.loadPixels();
cam.loadPixels();
for (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(){
for (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);

for(row=0; row<skan.height; row++){ //starting row analysis
maxBrightPos=0;
maxBright=0;
for(col=0; col<skan.width; col++){
currentPos = row * skan.width + col;
pixBright=brightness(skan.pixels[currentPos]);
if(pixBright>maxBright){
maxBright=pixBright;
maxBrightPos=currentPos;
}
odwz.pixels[currentPos]=black; //setting all pixels black
}

odwz.pixels[maxBrightPos]=white; //setting brightest pixel white

b=((maxBrightPos+1-row*skan.width)-skan.width/2)/pxmmpoz;
ro=b/sin(katLaser);
//output.println(b + ", " + prevMaxBrightPos + ", " + maxBrightPos); //I used this for debugging

x=ro * cos(fi); //changing polar coords to kartesian
y=ro * sin(fi);
z=row/pxmmpion;

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

}//end of row analysis

odwz.updatePixels();
odwz.save(nazwaPliku2);

}
output.flush();
output.close();
}

void obroc() { //sending command to turn
myPort.write('S');
delay(50);
myPort.write('K');
}


image


image


image


image


image
MeshLab



un autre projet
image

image
hackaday.io/project/2021-3dollar-scanner

Et pourtant j'ai une question pour les experts: qu'est-ce qui représente la majeure partie du coût de l'appareil pour 8 millions de roubles? Idée

PS
.
Il y a une idée de faire un projet de formation (pour écoliers et étudiants) avec accès au crowdsourcing. Vous pouvez retirer un scanner 3D à VDNH et numériser la «Ouvrière et la fermière collective», puis imprimer de nombreux porte-clés et figurines à ceux qui ont contribué. Et aussi pour filmer une vidéo de formation et la mettre sur youtube.
Étudiants - connaissances, entreprises - RP, communauté 3d - un mouvement utile.
Si quelqu'un a des amis de l'administration VDNH ou quiconque a une plate-forme élévatrice, écrivez.

PPS
L'utilisation de scanners 3D dans les jeux



Source: https://habr.com/ru/post/fr382939/


All Articles