覆盆子π作为主要控制器板设置,使用π摄像头捕捉图像,控制激光二极管和提供控制信号EasyDriver(步进电机驱动程序)。gydF4y2Ba
Siddarth Vaghela |gydF4y2BaMathWorksgydF4y2Ba
描述gydF4y2Ba
覆盆子π为diy项目带来很多的可能性。它是负担得起的和潜在的实现具有挑战性的项目。多年后修修补补我的3 d打印机,想要建立自己的3 d扫描仪完成3 d工作流是一个令人兴奋的想法。使用MATLAB和覆盆子π硬件支持包发展快速和容易做的实验,至少从软件的角度。gydF4y2Ba
在这个项目中,我决定用一个最基本的扫描技术,更多关注了整个机制使用现成的组件,而不是得到最好的结果。覆盆子π作为主要控制器板设置,使用π摄像头捕捉图像,控制激光二极管和提供控制信号EasyDriver(步进电机驱动程序)。我用MATLAB和覆盆子Pi算法实现的硬件支持包并将其部署到覆盆子π。这个步骤帮助我减少设置控制器板所需的时间,并允许我专注于让正确扫描背后的数学算法。gydF4y2Ba
图1:使用扫描仪生成三维点云,然后转换成一个封闭的网格使用MeshLab和netFabb基本gydF4y2Ba
基本理论gydF4y2Ba
图2:一个3 d对象的形象gydF4y2Ba
3 d对象提供的图像对象的投影到二维平面。提取是微不足道的X和Y坐标点的对象,因为他们在图像平面上。然而,相关信息的深度点对的中心对象丢失由于投影。为了获取这些信息,我们需要一些特殊的帮助。值得庆幸的是,这并不像听起来那么困难。gydF4y2Ba
图3:一个简单的三角测量设置一条线组成的激光二极管投射一条线的3 d对象gydF4y2Ba
上图显示了一个非常简单的使用一个摄像头和一个线激光三角测量设置。激光二极管是定位,这样它会创建一个三角形与相机的视图方向。从图片可以看出,激光线项目的视图对象和相交方向相机在物体的旋转轴。角度激光线的交点和视图方向(我们将称之为θ)为我们提供了第一个工具从图像中提取深度信息的捕捉到镜头。gydF4y2Ba
图4:z坐标可以由简单的三角函数的计算gydF4y2Ba
让我们假设Y坐标对应的每一行像素在图像和地图通过一些实际的Y坐标比例因子。在每个Y坐标,物体的表面点的激光线项目本身,激光线的交点与相机的视图方向(如果没有对象来阻止其路径)和垂直下降从表面上的角度方向形成一个直角三角形。视图上的垂直下降方向的长度给我们表面的距离的角度方向,可以视为我们的X坐标比例因子。其他小三角形的一边给我们表面的深度点对旋转轴,再次与比例因子。正如你所看到的,计算的基本三角运算。gydF4y2Ba
现在,让我们使用这些信息来构建基本的扫描算法。为了提取三维信息的每个点躺在物体的表面,我们需要首先确定的点我们可以提取这些信息。这可以很容易地通过捕获两张图片,一次没有激光,一次激光。因为一切在相机的观点是相同的,不同的两张图片应该给我们所有的点,躺在激光线投射的对象。区别图像转换成二进制图像,我们可以消除大多数无关的信息的图像的区别和马克所有点躺在激光线用白色和剩下的图像的像素为黑色。我们可以进一步缩小地区的利益通过假设矩形区域覆盖整个图像中的对象。gydF4y2Ba
图5:采取不同的两个物体的图像——一个激光线投影和一个没有,帮助我们提取点投射到对象。gydF4y2Ba
现在我们有了所有必需的组件可用于提取每一个点的三维坐标躺在物体的表面。还有一部分仍然需要照顾。从图像中提取的点躺在同一幅图像平面和不正确的三维空间。为此,我们需要旋转每个提取的3 d点由一定数量的轴旋转。通过仔细跟踪的旋转对象,我们可以很容易地确定需要旋转的角度分每次旋转后一步。最后算法看起来像下图所示。gydF4y2Ba
图6:完成流程图的步骤需要扫描一个完整的3 d对象gydF4y2Ba
先决条件gydF4y2Ba
对于这个项目,你需要以下硬件和软件工具:gydF4y2Ba
1。软件:gydF4y2Ba
MATLAB 2015 b +树莓π和硬件支持包gydF4y2Ba
图像处理工具箱gydF4y2Ba
相机标定工具箱gydF4y2Ba
点云的工具箱gydF4y2Ba
MeshLab(从点云)生成网格的工具gydF4y2Ba
2。硬件:gydF4y2Ba
覆盆子πgydF4y2Ba
π的相机gydF4y2Ba
线激光二极管gydF4y2Ba
EasyDriver步进电机驱动模块gydF4y2Ba
步进电机gydF4y2Ba
可选-覆盆子π原型板gydF4y2Ba
3 d打印部分转台gydF4y2Ba
底盘MakerBeam工具包gydF4y2Ba
烙铁gydF4y2Ba
以太网电缆连接的覆盆子π的笔记本电脑gydF4y2Ba
至少4 - 5 v电源gydF4y2Ba
下载代码和模型gydF4y2Ba
您可以下载的代码:gydF4y2Ba
你可以下载打印的部分:gydF4y2Ba
http://www.thingiverse.com/thing: 1622779gydF4y2Ba
任务gydF4y2Ba
任务1:底盘做准备gydF4y2Ba
我用MakerBeam starter kit建造我的底盘。很容易使用和提供了一个坚固的基础相机,激光二极管和转盘。gydF4y2Ba
你需要为了完成底盘如下:gydF4y2Ba
两个300毫米梁gydF4y2Ba
两个200毫米梁gydF4y2Ba
三个100毫米梁gydF4y2Ba
两个60毫米梁gydF4y2Ba
90度的括号gydF4y2Ba
60度激光二极管的支架gydF4y2Ba
使用60度角的激光二极管向中心支架300毫米梁之间的步进电机放置在另一端。一旦你连接相机,你必须确保步进电机完全一致的中心的中心形象被相机。,三角的设置将会完成。gydF4y2Ba
转台可以打印使用下载部分中的模型有关。基本可以直接安装在步进电机。轴承滑到基地和转盘板应该落入地方上的轴承和连接联轴器连接步进电机轴。gydF4y2Ba
完整的设置应该是这样的:gydF4y2Ba
任务2:准备的硬件电路gydF4y2Ba
我用的覆盆子π牧师B董事会对于这个项目。我也假设π相机连接到相机端口在黑板上。线路图假设销布局匹配这个板。gydF4y2Ba
有两个主要部分的硬件设置:gydF4y2Ba
步进电机控制gydF4y2Ba
激光开关控制gydF4y2Ba
步进电机控制gydF4y2Ba
步进电机控制电路,我们使用EasyDriver委员会(gydF4y2Ba链接gydF4y2Ba)。这板带走所有的痛苦建立voltage-regulated电源能够提供一致的和足够的电流运行一个步进电机,以及PWM控制信号要求运行它们。板,我们需要做的就是连接直流电源的高额定电流(4安培是足够的),控制线路连接到IO别针覆盆子π,将步进电机连接到电动机输出,你准备好了!真的就是这么简单。谢谢布莱恩! ! !gydF4y2Ba
和我提到EasyDriver还提供了一个规范5 v输出,可以推动其他电路吗?嗯,是的它!所以我们将驱动的覆盆子π,这种监管的激光二极管供应!双谢谢布莱恩! ! !gydF4y2Ba
EasyDriver需要输入如下:gydF4y2Ba
启用——当这个控制信号是低(0 v),启用了运动输出和信号应用于其它控制信号,得到传播到步进电机。我们这销连接到一个IO别针的覆盆子π(销24)。我们必须记住这销逻辑0每当我们想使步进电机和逻辑1每当我们想要禁用它。gydF4y2Ba
MS1和一份——这两个控制信号控制步进电机的分析模式。步进电机通常需要大约200步完成一次完整的旋转,步长为1.8度。分析允许你这个分解成较小的步骤- 1/2,1/4或1/8。基本上这意味着它可以让你减少步长至0.9,0.45或0.225度分别允许精细控制旋转。我们连接MS1销25和一份销23π。设置针(0,0)告诉司机运行电机没有任何分析。设置针(1,1)告诉司机运行的电动机最小步长——1/8th。留给你解读之间的值。gydF4y2Ba
一步——这行驱动步进电机控制。当我们这条线(000011110000)施加一个脉冲,驱动移动一步的步进电机线转换从1到0时(也称为脉冲的下降沿)。我们这条线连接销18π。我们将编写一个小的MATLAB函数发送一个脉冲IO销。更多关于软件设置。gydF4y2Ba
DIR -这对步进电机控制线决定是否将在顺时针或逆时针方向旋转。我们将这条线连接到销17的π。这条线设置为逻辑0使步进旋转顺时针方向和逻辑1使它逆时针方向旋转。gydF4y2Ba
激光开关控制gydF4y2Ba
扫描设置,我们需要一个机制来开关激光二极管在需要时打开和关闭。我们完成这个使用一个非常简单的晶体管开关电路。我们使用一个NPN型晶体管(TIP31)共发射极配置和分压器的偏见(维基百科)。在我们的电路,R1是120欧姆电阻和R2是10 KOhm阻力。销的22个πR1的外引线相连。当我们设置这个销逻辑1,它相当于把R1 Vcc。基极和发射极通过确保电压高于正向偏压,我们允许电流流过收集器,从而激活激光二极管。当我们设置这个销逻辑0,是相当于输入R1,拉基极和发射极的电压为零,关闭当前通过收集器和激光二极管才会安静下来。gydF4y2Ba
激光二极管有两个领导-电力和地面。电源线连接到+ 5 v供应来自EasyDriver和接地线连接到收集器的NPN型晶体管。gydF4y2Ba
注意:重要的是领带+ 5 v的地面供应EasyDriver和地面的覆盆子π一起确保控制信号来自π有共同点。gydF4y2Ba
我建议你测试整个电路试验板在组装之前的原型盾,这样就不需要任何昂贵的重做!gydF4y2Ba
完成电路的原型板应该是这样的:gydF4y2Ba
电源:gydF4y2Ba
任务3:让软件在一起gydF4y2Ba
的软件,我们需要做两件事:gydF4y2Ba
准备的覆盆子π与MATLAB通信使用硬件支持包。你可以在这里得到的详细信息:gydF4y2Ba
http://www.mathworks.com/help/supportpkg/raspberrypiio/functionlist.htmlgydF4y2Ba一旦你设置署和插入到树莓π,你需要打开Rasp3DScanner项目在MATLAB引导界面。这是一个简单的GUI界面的扫描仪。确保你已经改变当前目录指向包含扫描代码下载的文件夹从MATLAB文件交换。gydF4y2Ba
代码走查gydF4y2Ba
您应该能看到以下文件Rasp3DScanner存档:gydF4y2Ba
Rasp3DScanner。无花果是主要的MATLAB GUI文件,可以从控制台输入“指南”,从浏览选择Rasp3DScanner项目领域。Rasp3DScanner。包含所有应用程序的代码和实现了扫描算法。有基本的实用功能,是自解释的,他们控制激光器的运转,步进电机和相机。gydF4y2Ba
cameraParams。从我的设置垫文件包含校准数据。你应该重新生成cameraParams。垫申请您的设置遵循的步骤:gydF4y2Ba
http://www.mathworks.com/help/vision/ug/single-camera-calibrator-app.htmlgydF4y2Ba
任务4:出口点云和网格生成gydF4y2Ba
一旦一切都设置正确,在转盘上放置任何物体(调整它,这样自己的中心轴伴随着旋转轴)。“开始”撞到GUI和等待扫描仪在3 d显示完整的扫描图。如果你是满意的输出,保存点云按“保存”按钮。gydF4y2Ba
程序的下一步是将这个点云转换成3 d网格组成的三角脸。我们将使用MeshLab执行这个步骤如下:gydF4y2Ba
MeshLab导入点云gydF4y2Ba
1。开放MeshLab和开放”。厚度”文件生成的扫描仪gydF4y2Ba
2。点集的生成正常:gydF4y2Ba
3所示。一旦生成了法线,您可以使用泊松重建方法:生成网格gydF4y2Ba
一旦打开的对话框中,选择一个合理的高价值的八叉树深度以确保顺利在点云网格生成。gydF4y2Ba
4所示。现在生成网格,您可以导出”。stl文件”。gydF4y2Ba
总结和进一步勘探gydF4y2Ba
现在,您应该有一个扫描Rasp3DScanner生成的网格。你可以探索清理网,准备使用工具,如NetFabb基本3 d打印。gydF4y2Ba
您还可以进一步探索改进扫描概念通过尝试其他扫描技术,如立体声和多幅相机设置。gydF4y2Ba
内容与本文作者的意见,不一定代表RoboticsTomorrow的观点半岛app官网gydF4y2Ba
评论(0)gydF4y2Ba
这篇文章没有任何评论。成为第一个在下面留下你的评论。gydF4y2Ba
特色产品gydF4y2Ba
