1759
需用时 03:31
3D扫描仪
/gkimage/v2/a4/sg/v2a4sg.png
DIYer: Dentroman765
制作时间: 一天
制作难度: ★★★☆☆
GEEK指数: ★★★☆☆

编译来源

我对这个项目的设想如下:

3D扫描仪:

能准确且正确地产生3D计算机模型。

能够扫描1英尺(30.48厘米)x1英尺x1英尺大小的物体。

项目成本小于20美元(折合126.4元人民币)(手头已经有的材料不计在内,但就算加上这些扫描仪的成本也不会超过100美元(折合632.1元人民币))。

最后的作品工作的很好,我希望能在未来进一步提升可用性,改善性能,并且让软件更加自动化。

 

1   基本想法

/gkimage/nu/qh/ez/nuqhez.png
  • 这张图实际上和项目无关,这是我工作室的照片,看起来整齐不?

定位三维空间的某个点有多种描述方式。最简单的方式是给出三个坐标数字来定位它和空间中另一点的相对位置,大多数计算机模型也使用这种格式。另外一些方式是用三个平面,或者一个平面和与其相交的一条线来定位。事实上最容易定位的是第三种描述格式,并将获得的数据转换成第一种格式保存。所以现在问题就变成了如何定位平面和与之相交的线:平面的定位可以用硬件解决,而直线的定位用软件处理。

 

2   硬件原理

/gkimage/za/i5/6r/zai56r.png
  • 一个玩具海螺壳,不幸的是过大了些。

和我在其他制作里做的一样,我会首先展示基本的设计大纲,然后再进行具体解说。这样的话方便根据自己的情况调整制作的环节。

所以我们需要生成一个平面,然后将平面的位置记录下来供计算机处理。尽管其他人有时使用阴影边缘定位,我打算用个更有趣的方法。我有一个亮度很高的绿色指星笔(普通的激光笔也行,大功率的指星笔通常比较贵)。我将它射向一个圆柱形透镜,将光束扩展成一个扇面,并将扇面作为定位平面使用。这个方法很奏效,但是注意扫描仪的工作范围将会被透镜的尺寸限制。我的透镜大约直径1英寸(2.54厘米),虽然框架大约是一个2英尺(60.96厘米)见方的立方体,但是扫描区域只有2英尺x6英寸(15.24厘米)x6英寸大小。用一个小些的透镜会更好,但对我来说这样的扫描区大小也算是够了。

 

3   机箱

/gkimage/3z/6s/nw/3z6snw.png

首先要制作一个能装下扫描仪部件的箱子,底板和后面板用聚氨酯板,侧板用胶合板,剩下的部分用在台锯上锯下的1.5英寸(3.81厘米)木块。在完工之后,我发现不一定需要聚氨酯板,找一些平胶合板漆上白漆的话也一样,并且便宜一点。我的箱子尺寸介于1.5英寸到2英寸(5.08厘米)之间,但是具体来说可以自定。箱子中比较重要的部分是顶部的导轨,导轨的加工必须精确,并且同滑轮配合妥当。我用了3/8英寸(0.95厘米)的金属棒做导轨,以及手头的尼龙滑轮,但是类似的设计也都能用。

 

4   激光头支架

/gkimage/8f/bf/hj/8fbfhj.png/gkimage/a0/g9/55/a0g955.png/gkimage/xx/9k/3h/xx9k3h.png/gkimage/j1/y3/ox/j1y3ox.png/gkimage/k9/g1/u5/k9g1u5.png/gkimage/7a/t4/gt/7at4gt.png/gkimage/0q/2b/xb/0q2bxb.png/gkimage/ia/fn/vw/iafnvw.png/gkimage/52/rg/5f/52rg5f.png

接下来是激光头的支架,脱胎于一块旧木头。一张图片胜过千言万语,所以我会把具体的说明放到图片上。支架安装在导轨上,能够沿着导轨滑动。支架上有个激光组件的安装孔,所以激光组件可以在盒子的背板和底板之间,以及垂直方向上自由运动。支架和激光组件安装完成后硬件设置就完成了,接下来的步骤是安装摄像头。

 

5   安装照相机

/gkimage/9k/im/ie/9kimie.png/gkimage/af/k0/mu/afk0mu.png/gkimage/9a/7f/74/9a7f74.png

相机应该安装在侧面和正上方,这样能够接收到反射出的激光光线。

这时候最好有一个测试样品,我找了一个小雕像,但是有着大小不等丰富细节的物体都可以。看看拍摄到的图像,保证能从它们的角度看到反射的激光。看下面的图片更更清楚地了解我的意思。

 

6   软件的基本原理

/gkimage/op/wu/gf/opwugf.png

软件的编程思路很简单,摄像头中的每个像素对应实际空间中的一个点。或者说,摄像头拍下的图像是三维空间的一个投影,重点是怎样将两个空间中的点一一对应起来。事实上这可以通过一个简单的方程做到。

译注:依据已知的激光头位置,参考点位置,图片中相机拍摄到的参考点和激光照射表面点(图中的亮线)可以推算出实际表面的位置。这其实是一个三角定位和平面投影的问题,有兴趣的同学可以在纸上模拟一下。
 

7   开始扫描!

/gkimage/rq/k6/c0/rqk6c0.png/gkimage/0c/f2/to/0cf2to.png/gkimage/h1/o8/dg/h1o8dg.png/gkimage/kw/9a/t2/kw9at2.png

现在来试一把。试图扫描点东西然后来看看工作状况。从这个简单的扫描仪里得到的并不是最终的扫描模型,只有对着摄像头的那些面能够被定位,分辨率也比较粗糙。解决这个问题的方法是多次扫描然后将结果合成,可以参看这个极好的例子:

http://www.instructables.com/id/Using-Meshlab-to-Clean-and-Assemble-Laser-Scan-Dat/

扫描快乐!

译注:看起来作者是手动扫描记录位置然后对每个位置拍摄的图片综合处理得出3D模型。
 

8   新的方向

/gkimage/0j/xi/lw/0jxilw.png

还有很多我打算进一步努力的方向,不幸的是在近期内我没有实现它们的时间。我会把我的想法写在这里,留给那些和我一样雄心勃勃的DIYer。

1.自动扫描

为了实现这一点还有很多事情要做,首先是软件控制。MATLAB在这个用途上不一定适合,而且我也不是很急于去尝试另一种语言。另外这还需要使用另外一些电子产品,通过电脑上的命令控制电机运动。最后,需要获取和加载实时图像,我暂时还搞不定。

2.添加一个转盘

自动化的转盘能够一次性完成多个角度的扫描,这会减少生成完整3D模型的时间。

3.扫描软件

在理想的情况下,扫描软件应该能够过滤图片中的噪声,并且自动从扫描获得的点集划分生成网格模型。

 

9   DIYer签到处

 
编辑: 秦皇汉武

果壳DIY站QQ群:132647923, 2群:179240860(加入时请报上你在果壳的个人主页地址,以防广告ID)

果壳DIY站微博: http://t.sina.com.cn/guokrdiy

The End

发布于2011-12-28, 本文版权属于果壳网(guokr.com),禁止转载。如有需要,请联系果壳

举报这篇文章

叶子疏

微电子专业硕士研究生,DIY爱好者

pic