十亿积分:3美元兑800万卢布

这是现实生活中全能的眼睛


,顺便说一句,扫描仪比汽车贵。特斯拉(Tesla)S.空中送往莫斯科的入口

。这篇文章将描述世界上最昂贵的(可能是)和世界上最便宜的3D扫描仪。


我没有以特斯拉手机的价格拆卸(锯)该设备,所以我看了看说明书。几张里面的照片。
当被问及3d扫描仪是否可以自拍(如果您在镜子前放了镜子)时,他们回答我说这些设备的反射面有问题。因此,我从附近的架子上取下了头骨,并试图对其进行扫描。



这些美丽的东西是使用扫描仪创建的。


3D扫描仪Surphaser 25HSX


3D扫描仪Surphaser 25HSX是带有球形光束偏转系统的三维激光扫描仪,旨在形成真实物体的3维模型,以便随后在各个领域中使用:

-根据原型制作设计零件的图纸;
-创建博物馆展品和室内装饰的备份副本;
-开发计算机游戏和广告动画;

扫描仪基于“扫描头”(硬件扫描仪)和装有扫描仪“软件”的控制计算机的使用,计算机在该控制计算机上开始扫描过程,从扫描头接收测量数据流,并在扫描后对其进行处理将该数据转换为对象的点云的形状。



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.



球形3D扫描仪的扫描头部件
解密
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 ) ( ). , –
.




用于带有偏转系统的球形3d扫描仪的光学扫描模块,该偏转系统仅绕水平轴旋转,已准备运输。


光学扫描模块的光学设计
商品描述


:

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 –



BL激光模块电路板设计用于控制HL6750MG半导体激光二极管。在工作模式下,该板可形成具有恒定平均光功率和振幅调制的连续光辐射,


光电探测器模块的BP板设计为使用雪崩光电二极管接收强度调制的激光辐射。在工作模式下,该板可提供光调制信号及其放大的选择。


无线电工程模块的BR板是3D扫描仪的光学扫描仪模块的一部分,旨在生成组合信号,该信号调制光束强度,转换(转换为1 MHz的低频并放大)接收到的反射RF信号和参考RF信号,隔离和放大反射的低频信号


BS板是3D扫描仪的光学扫描仪模块的一部分,旨在产生有关在激光模块的输出处是否存在光束的信号。仅使用散射辐射来生成信号。在工作模式下,输出电压超过0.1 V,光束功率超过3 mW。

扫描



这是3D扫描仪在初始模式下看到房间的方式(您可以选择扫描仪要探测的所需区域)


通过3D扫描仪的眼睛看世界。谁能认出一个人?


3D编辑器中的同一个房间


这就是普通人看到头骨的方式


这次不需要整个房间,因此我们在预扫描模式下只选择带有头骨的区域。然后,在大约5至10分钟内,扫描仪眼睛扭曲,寻找霍比特人最主要的是不要妨碍他,否则会烧伤缺陷。扫描仪不仅捕获头骨本身,还捕获其后面的区域。这可以在编辑器中轻松编辑。


一个人经过,掉入了激光束区域。看到地带?不要妨碍相干光。一切都与人保持秩序,但在扫描中被反映为“残缺像素”

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



另一个项目
图片

图片
hackaday.io/project/2021-3dollar-scanner

但是我有一个专家的问题:800万卢布的设备总成本是多少?

PS的
想法。
有一个想法可以使培训项目(针对学童和学生)能够使用众包。您可以在VDNH拔出3D扫描仪,然后扫描“工人和集体农场女郎”,然后为做出贡献的人打印许多钥匙链和小雕像。并拍摄培训视频并将其放到youtube上。
学生-知识,公司-公关,3d社区-有用的运动。
如果有人有VDNH主管部门的朋友,或者有升降平台的人,请写信。

PPS
在游戏中使用3D扫描仪



Source: https://habr.com/ru/post/zh-CN382939/


All Articles