【技术教程】树莓派制作的3D扫描仪

开源技术
2014
04/17
11:56
分享
评论
作者:the_anykey 翻译:瑟瑟 校对:plantpark
Hi,
我是arduino和树梅派的忠实粉丝,当然也喜欢3d打印。我想为我的孩子们做一个3d模型,然后就开始研究怎么去做一个3d扫描器,我找到了很多的解决方案,但是他们共有的问题是需要被扫描物体静止一段时间,好吧 我想做一个宇宙飞船飞到火星也比让我两岁的儿子安静得坐一段时间更加简单。所以这些方案没有一个可以用的。

我想必须想出一个办法来可以同时拍到很多图片,所以我开始找廉价的相机。如果我能找到廉价的相机,我想我可以用arduino做个自动触发系统,然后所有图片会在还几张sd卡里,但是我却找不到廉价的数码相机,然后我注意到树梅派和相机模块,一个性价比很高的模块,可以用网线链接。所以我能通过网络触发相机拍照,并把所有图片下载到一个地方,然后我的项目投资就开始了。
项目清单
-树梅派 & PI camera *40
- 8 gb SD卡 *40
-一个60a 5v电源给所有树梅派供电
-led灯条和12v电源
由于我不是一个有耐心的人,没有一次性构建整个项目,我刚开始用了12个相机,这个结果已经很棒了。如果只想得到一个人的面部,你并不需要40个相机。所以你并不需要40个相机,尤其在你只想得到一个人的面部。下面视频是输出结果:


第一步: 搭建设备

【技术教程】树莓派制作的3D扫描仪

【技术教程】树莓派制作的3D扫描仪






首先我需要做一个支撑树梅派的平台。最初我做了一个木制圆环做测试,但是这个不太实用并且很难进出。在一些测试之后,我想到了“单极”的设计。很多将照片转换成3d模型的软件里面都需要从不同角度拍摄。所以在每一个支架上装了三个树梅派相机
我用我的数控车床加工了2mm厚的合成木板做成一个支架,这让我能转2mm钻孔来固定树梅派,所以我只需要2.5mm的螺丝就能将树梅派安装到架子上
我为树莓派相机设计了一个小巧并且方便打印的支架(因为我需要40个,所以我需要他们足够小),既可以很好的固定相机,又可以简单地调整相机角度
为了更加绚丽,我还每个支架上加了一米长的60个led的灯条,这样既看起来很酷,又能为拍照补光。

第二步: 连接


连接40台电脑的网线和电源线会看起来很乱,我想尽办法让它们看着更加简洁。不幸的是树莓派并不支持网线供电(POE),所以这些我得亲自完成。我剪了40根5米长的网线。一样长是为了方便我计算线上消耗的电压并使其相等,这样能够方便的调节电源输出电压达到精确的5v
由于100MB网线只需要用到八根中的四根,所以我用了两根作为树莓派5v电源线。所以我需要80个(2*40)水晶头,并使用八个中的六个(两个没用)。 我想说的是,这是整个工程里面最乏味最无聊的工作。
我买了一捆母接头跳线,将他们切成两半焊进水晶头一边的两根里面,这样可以很简单的适用于树莓派的5v接头
另一方面 我为60a 5v电源做了一个电源扩展板,我可以简单地连接上每一个以太网线上来的5v和地线
第三步: 软件

我用的是Raspian OS,在树莓派官网上默认下载。为了收集所有图片,我用了一个中心文件服务器(我用了Qnap),我用cifs设置了树莓派图片连接到文件服务器,这在/etc/fstab 里面完成
我也用中心文件服务器来管理软件,所以我不用手动更新每一个树梅派。
在我完成系统镜像的之后我用dd(在我的mac上)来为树梅派克隆了40个sd。我想写一个监听脚本让每个树梅派运行,监听特殊网络广播数据包来触发相机,然后保存照片,拷贝到文件服务器上。因为我想将所有图片保存在一个文件夹里(一次摄影一个文件夹),我用每个树莓派的本地ip(最后三位)作为文件名的前。
这是我用的python做的监听脚本
#!/usr/bin/python
import socket
import struct
import fcntl
import subprocess
import sys

MCAST_GRP = '224.1.1.1'
MCAST_PORT = 5007
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0×8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])
id = get_ip_address('eth0')
ip1, ip2, ip3, ip4 = id.split('.')
print 'ID: ' ip4 '-'
optionfile = open('/server/options.cfg','r')
options = optionfile.readline()
optionfile.close()
print "optons: " options
while True:
   data = sock.recv(10240)
   data = data.strip()
   if data == "reboot":
     print "rebooting…"
     cmd = 'sudo reboot'
     pid = subprocess.call(cmd, shell=True)
   elif data == "reload":
     optionfile = open('/server/options.cfg','r')
     options = optionfile.readline()
     optionfile.close()
   elif data == "restart":
     cmd = '/server/reload.sh&'
     pid = subprocess.call(cmd, shell=True)
   else:
     print "shooting " data
     cmd = 'raspistill -o /tmp/photo.jpg ' options
     pid = subprocess.call(cmd, shell=True)
     print "creating directory"
     cmd = 'mkdir /server/3dscan/' data
     pid = subprocess.call(cmd, shell=True)
     print "copy image"
     cmd = 'cp /tmp/photo.jpg /server/3dscan/' data "/" data "_" ip4 '.jpg'
     pid = subprocess.call(cmd, shell=True)
     print "photo uploaded"
我写了一个发送脚本来让所有树梅派开始拍照。这个脚本会询问名字,这个名字作为文件名首字发送给树梅派。这让我可以知道图片来自哪一个树梅派。
这是python的发送脚本
import socket
import sys
import time
print 'photo name:'
n = sys.stdin.readline()
n = n.strip('\n')
MCAST_GRP = '224.1.1.1'
MCAST_PORT = 5007
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
sock.sendto(n, (MCAST_GRP, MCAST_PORT))
监听脚本用来确认接受命令,如果命令是reboot, reload or restart 他会执行特殊动作,而不是拍照。
raspistill(树梅派相机默认软件)的配置选项我用了options.cfg文件来配置他,当然这也是存在中央文件服务器里面,所以我可以很简单的来改变设置。
我做了些测试来看树梅派是否同步拍摄照片,当他们同一时间接收网络广播是我觉得这做的很棒。我做了一个测试,12个相机组合同时拍摄我的iphone秒表,照片上的时间最多差1/10秒。

第四步: 将照片转换成3d模型


这是些不同的将照片转换成3d模型的方式,个人觉得autodesk的recap最好。
登录 recap.autodesk.com. 如果你没有autodesk帐号,你可以免费注册一下,这个拥有5G硬盘,转换3d模型足够了。
在你登录了recap,点击new project,这儿你会选择3d模型的质量(我都选最好,为什么选更低的呢?)。导出格式,很多3d打印软件可以直接用obj文件,所以最后选这个。
在你将照片拖动到你的浏览器,或者点击上传窗口选择你的照片上传之后等照片上传,点击两下next,然后autodesk云系统将会开始工作将你的照片转换成3d模型,这将会用15~45分钟时间,这是云端进行的所以你在等待的时候可以去做其他事情 。
当繁重的计算完成之后,你可以点击中间的缩略图来看你的3d模型 重要:这个要在chrome浏览器上完成。当你观看你的3d模型的时候你会在左边发现你图片的缩略图相册,如果一切正常,你应该没有很多(或者没有)“Not Stitched”在列表中。这表明这些图片中有些地方没有检测到,你可以试着点击图片上标记的点来修复。但是如我所说,3D扫描仪拍摄足够多的照片就不会出现这些情况。
你可以现在下载obj文件到你本地电脑上去进一步处理,比如移除背景,你下载的是一个zip文件,所以你需要先解压在跳到下一步
清理你的3d模型

有许多程序可以让你整理你的3d模型,最简单的程序是我在autodesk里找到的免费的“project memento” 你可以下载memento(只能用于windows)
http://labs.autodesk.com/utilities/memento
在你正确安装project memento后,可以直接打开obj文件,应该被称作 mesh.obj。这个2d扫描仪的照片是90度翻转的,这意味着你可能有上下颠倒的感觉,在左边的按钮“did the orbiting feel off”点击“feels off”来更正。
和你看到的那样,不仅仅你被拍到,周围环境也被拍到了,你可能想将那部分切除,这个在memento里面很简单,只要用你的鼠标选择你不想要的区域就能点击删除。旋转模型,你可以很简单的选择并删除你不想要的部分

修复你的3d模型

为了打印你的3d模型,你需要确定你的模型是完整的(没有洞再上面),当然这个又能很简单的在memento上面修改,memento窗口点击中上你会看见一个弹出框来修复你的模型。
通过向导,任何洞都会被发现,点击fix。你需要选择是smooth还是flat。我一般喜欢用flat fix,这用起来很好。再次选择next来寻找更多的洞。洞需要被修复,其他也是可以选择的。

在你修复所有洞值购,点击done,现在你就导出了新的obj文件。你可以点击memengo左上角点击弯的箭头

现在你可以详细的设置你模型的保存类型。为什么要选低像素呢?!!!!划动所有模块到右边达到最好的质量。
你现在完成了所有能做的,你得到了一个可打印的模型,如果你还想修改模型,有很多软件能帮到你。
Pixologic Sculptris (免费): 这是处理模型细节的很好的软件,比如揉化边缘,这有点像photoshop,但是是3d的。
Meshmixer (免费):这是从autodesk下载来的其他免费程序,他对于做平地模型很好。
其他软件来做3d模型
除了autodesk recap,其他还有很多选择来让你的照片编成3d模型。
Autodesk 123d Catch (free):这个用起来像recap(通过云服务器)这个比recap更加好,但是限定了你的图片,所以最后精度不高。
VisualSFM (free): 这是一个将你照片变成3d模型的本地软件,你需要强大的显卡来运行软件。
Agisoft Photoscan Standard Edition ($179): 这个软件同样需要你有比较给力的电脑,但是我并没发现这个软件比recap和123d好到哪里去。

第五步: 结果






在建立了模型之后,没有比将这个机器分享给别人更加美妙了,所以我决定参加Dutch maker faire并且给每个人提供3d摄影,我可以告诉你他很愉快的工作了6小时并扫描了225个人。你可以从我blog了解到更多www.pi3dscan.com


Step 6: 设计文件
这是我用的设计文件。statief是一个让我用数控机来做过孔的2d cad文件
camera_mount文件是相机支架的设计文件
游客,如果您要查看本帖隐藏内容请回复




回复

使用道具 举报

2014-4-21 12:59:17 | 显示全部楼层
过来看一下,看看好弄不
回复 支持 反对

使用道具 举报

2014-4-21 13:41:48 | 显示全部楼层
kakakkaaaaaaaaaa
回复 支持 反对

使用道具 举报

2014-4-21 13:41:50 | 显示全部楼层
kakakkaaaaaaaaaa
回复 支持 反对

使用道具 举报

2014-5-18 12:58:41 | 显示全部楼层
{:soso_e193:}
回复 支持 反对

使用道具 举报

2014-5-18 12:58:56 | 显示全部楼层
{:soso_e140:}
回复 支持 反对

使用道具 举报

2014-5-19 23:53:16 | 显示全部楼层
有什么隐藏资料啊
回复 支持 反对

使用道具 举报

2014-5-30 13:33:38 | 显示全部楼层
好东西,收藏
回复 支持 反对

使用道具 举报

2014-5-31 01:21:55 | 显示全部楼层
看晕了,十楼跳下去 。
回复 支持 反对

使用道具 举报

推动3D打印

关注南极熊

通知

联系QQ/微信9:00-16:00

392908259

南极熊3D打印网

致力于推动3D打印产业发展

Copyright © 2024 南极熊 By 3D打印 ( 京ICP备14042416号-1 ) 京公网安备11010802043351
快速回复 返回列表 返回顶部