Bilhões de pontos: 3 dólares contra 8 milhões de rublos

Aqui está como é o olho que tudo vê na vida real:


a propósito, um scanner é mais caro que um carro. Tesla S. Com entrega de ar na entrada de Moscou,

este post descreverá o mais caro (provavelmente) do mundo e o scanner 3D mais barato do mundo.


Não me foi permitido desmontar (serra) o dispositivo pelo preço de um teslamobile, então observei as instruções. Algumas fotos do interior de lá.
Quando perguntados se um scanner 3D pode tirar uma selfie (se você colocar um espelho na frente), eles me responderam que esses dispositivos têm problemas com superfícies refletivas. Então peguei o crânio de uma prateleira próxima e tentei digitalizá-lo.



Coisas tão bonitas são criadas usando um scanner.


Digitalizador 3D Surphaser 25HSX


Scanner 3D Surphaser 25HSX é um scanner a laser tridimensional com um sistema de deflexão de feixe esférico, projetado para formar modelos tridimensionais de objetos reais para uso posterior em vários campos:

- fazer desenhos de peças projetadas de acordo com protótipos;
- criar cópias de segurança de exposições e interiores de museus;
- desenvolvimento de jogos de computador e animação publicitária;

O scanner é baseado no uso de uma “Cabeça de Digitalização” (scanner de hardware) e um computador de controle no qual o “software” do scanner está instalado, com o qual o computador inicia o processo de digitalização, recebe um fluxo de dados de medição da cabeça de digitalização e o processa após a digitalização esses dados, convertendo-os na forma de uma nuvem de pontos de um objeto.



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.



Partes da cabeça de digitalização para um scanner 3D esférico
descriptografia
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 ) ( ). , –
.




Módulo de digitalização óptica para um scanner 3d esférico com sistema de deflexão com rotação apenas em torno do eixo horizontal, preparado para o transporte.


Projeto óptico do módulo de digitalização óptica
descrição do item


:

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 –



A placa do módulo laser BL foi projetada para controlar o diodo laser semicondutor HL6750MG. No modo de operação, a placa fornece a formação de radiação óptica contínua com uma potência óptica média constante e modulação de amplitude.A


placa BP do módulo fotodetector é projetada para receber radiação laser com intensidade modulada usando um fotodiodo de avalanche. No modo de operação, a placa fornece a seleção do sinal de modulação da luz e sua amplificação.


A placa BR do Radio Engineering Module, que faz parte do módulo de scanner óptico do scanner 3D, é projetada para gerar um sinal combinado que modula a intensidade do feixe de luz, converte (traduz para uma baixa frequência de 1 MHz e amplifica) o sinal de RF refletido recebido e o sinal de referência de RF, isola e amplifica a baixa frequência refletida sinal


A placa BS, que faz parte do módulo do scanner óptico do scanner 3D, foi projetada para gerar um sinal sobre a presença de um feixe na saída do módulo laser. Somente radiação dispersa é usada para gerar o sinal. No modo de operação, a tensão de saída excede 0,1 V com uma potência de feixe superior a 3 mW.

Digitalização



É assim que o scanner 3D vê a sala no modo preliminar (você pode selecionar a área desejada que o scanner sondará) O


mundo através dos olhos de um scanner 3D. Quem pode distinguir uma pessoa?


A mesma sala no editor 3D


É assim que uma pessoa comum vê o crânio.


Desta vez, toda a sala não é necessária; portanto, selecionamos apenas a área com a caveira no modo pré-digitalizado. Então, por cerca de 5 a 10 minutos, o scanner torce com os olhos, procurando hobbits . O principal é não atrapalhar, caso contrário , ele queimará um defeito. O scanner captura não apenas o crânio em si, mas também áreas que estão muito atrás dele. Isso é facilmente editado no editor.


Um homem passou e caiu na área do raio laser. Veja a tira? Não atrapalhe a luz coerente. Está tudo em ordem com a pessoa, mas na verificação foi refletido como um "pixel quebrado"

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



outro projeto
imagem

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

E ainda tenho uma pergunta para especialistas: o que compõe a maior parte do custo do dispositivo por 8 milhões de rublos? Idéia

PS
.
Existe uma idéia para fazer um projeto de treinamento (para crianças em idade escolar e estudantes) com acesso ao crowdsourcing. Você pode retirar um scanner 3d no VDNH e digitalizar a “Trabalhador e garota coletiva” e depois imprimir muitos chaveiros e figuras para aqueles que deram uma contribuição. E também para filmar um vídeo de treinamento e colocá-lo no youtube.
Estudantes - conhecimento, empresas - PR, comunidade 3d - um movimento útil.
Se alguém tiver amigos da administração do VDNH ou quem tiver uma plataforma de elevação, escreva.

PPS
O uso de scanners 3D em jogos



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


All Articles