【基于Unity3D的混箱码垛系统设计案例分析8000字】_第1页
【基于Unity3D的混箱码垛系统设计案例分析8000字】_第2页
【基于Unity3D的混箱码垛系统设计案例分析8000字】_第3页
【基于Unity3D的混箱码垛系统设计案例分析8000字】_第4页
【基于Unity3D的混箱码垛系统设计案例分析8000字】_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE21基于Unity3D的混箱码垛系统设计案例分析目录TOC\o"1-3"\h\u19866基于Unity3D的混箱码垛系统设计案例分析 1200601.1Unity3D技术介绍 1238911.2基础数据管理功能模块设计 2111131.2.1获取基于实际场景的测试用例接口 210611.2.2箱型数据查看功能 3218061.3码垛方案生成功能模块设计 491591.3.13D混箱码垛垛型生成功能 5144761.3.2垛型分析信息生成功能 5264951.3.3供箱序列保存功能 615501.4垛型预览编辑功能模块设计 737401.1.13D手动编辑功能 8217441.1.2垛型预览功能 10317241.5可视化展示功能模块设计 1128831.5.1多托盘垛型切换功能 11147941.5.2多视角切换功能 1372311.5.3码垛过程动态演示功能 141.1Unity3D技术介绍Unity3D是一款支持多平台开发,全面整合的专业游戏引擎。其有助于用户开发三维游戏、实现建筑可视化以及创建三维动画。Unity3D因其强大的跨平台特性与绚丽的3D渲染效果,在游戏市场上的多种引擎中脱颖而出,广受游戏开发者的喜爱。Unity3D也在其他领域展现了其应用价值[48-55],如在工业应用领域中,利用Unity3D与VR技术进行虚拟驾驶系统的设计[49]。还有学者在模拟岩土工程中利用Unity3D技术实现岩土工程大规模仿真数据的可视化[48]。在军事训练领域中,利用Unity3D中的地形编辑器构造多种战场环境,模拟坦克驾驶来进行作战演习[52]。在旅游行业也有学者利用Unity3D技术在虚拟的物理环境中,实现游客与非物质文化遗产的互动,有利于非物质文化遗产的广泛传播[51]。在开发过程中开发者常利用Unity3D的特性包含以下几点:1)简单实用的物理效果。利用Unity3D中的内置物理仿真引擎作为辅助,游戏开发者可以通过简单的操作,如对游戏对象挂载刚体组件后,设置具体的参数或通过脚本编辑进行控制,即可模拟现实世界中的碰撞检测、重力、阻力等物理效果。2)生动逼真的显示效果。Unity3D中高性能且易用的着色器、灯光照明、摄像机、地形编辑器,仿真构建虚拟环境、实时气候,给用户带来身临其境的体验。使游戏开发人员可以得到高质量画质,提高所创建场景的真实度。3)简易上手的脚本控制。Unity3D引擎支持多种脚本语言进行设计交互功能,例如C#与Java脚本语言。对于游戏开发人员来说,学习成本低,易上手开发。利用Unity3D与脚本语言共同开发系统,其友好的人机交互设计,有利于提高用户体验感。4)支持拓展的综合编辑。Unity3D的可视化模式与视觉化编辑方便了游戏开发者在测试运行中实时修改参数的设置值,极大缩短开发时间。Unity3D中提供常见的可交互UI组件,游戏开发者可以通过脚本对UI控件进行开发其响应事件。因此,将Unity3D技术作为用于机器人控制的混箱码垛系统的开发平台,能够提高系统的开发效率,并且使系统具有美观的可视化界面以及良好的人机交互性能。1.2基础数据管理功能模块设计基础数据管理功能模块中实现的核心功能设计获取基于实际场景的测试用例接口以及箱型查看功能。获取基于实际场景的测试用例接口包括Excel订单导入和箱型数据标准化功能。以下将针对这两个核心功能进行详细设计。1.2.1获取基于实际场景的测试用例接口获取基于实际场景的测试用例接口包括Excel导入和箱型数据标准化两部分。结合实际调研,了解到订单作为混箱码垛的数据来源,通常采用Excel表格形式。因此需要提供一个Excel表格提取订单信息的接口,将指定文件地址中包含的订单读入系统中,选定待码垛的订单。将订单信息按照每类产品编码自动拆分。得到涵盖订单所有产品种类,每类箱型的尺寸规格以及待码垛箱子的数量。箱型数据标准化是将待码垛箱型数据进行数据标准化。为了得到混箱码垛的实际测试用例,需要得到每个产品箱型的属性信息。如箱子的产品编码、产品名称、长、宽、高、重量、待码垛数量。因此本文插入数据库中的产品箱型数据应为订单中每种产品的箱型属性信息(箱子的产品编码、产品名称、长、宽、高、重量、待码垛数量)。以上构成产品箱型数据表如表4-1所示。表4-1产品箱型数据表NO.字段字段类型是否可为空属性注释1pro_idVarchar(15)否主键产品编码2pro_nameVarchar(20)是—产品名称3box_lengthNumber是—长4box_widthNumber是—宽5box_heightNumber是—高6box_weightNumber是—重量7box_sumNumber是—待码垛数量获取基于实际场景的测试用例接口功能流程描述:Step1:在Unity中编写C#脚本将指定路径下的所有的Excel表格资源文件。将所有文件名读取出来,加载到Unity中下拉框UI组件中。Step2:鼠标点击下拉框UI组件中的待码垛订单名,响应UI组件内容变化后的读入订单内数据功能。Step3:编写产品箱型数据Box_Df类,用于进行订单内容信息序列化。通过正则表达式规范数据格式,将内容信息以Box_Df类结构存储。通过遍历将相同产品编号的数据,待码垛数量相加,将去重后的每条Box_Df类数据存储于OrderList列表。Step4:系统向服务器发起HTTP请求,将OrderList列表中数据通过JSON序列化处理后插入数据库中的产品箱型数据表,为之后的码垛工作奠定基础。获取基于实际场景的测试用例接口功能展示图如下图4-1所示。图4-1获取基于实际场景的测试用例接口功能展示图1.2.2箱型数据查看功能货物信息管理中的箱型查看功能是设计UI将待码垛数据进行展示,以便用户查看订单中具体的数据信息。箱型查看功能展示图如下图4-2所示。箱型查看功能流程描述:Step1:根据待码垛订单编号从后台读取对应的待码垛产品箱型数据。待码垛产品箱型数据包括箱子的产品编码、产品名称、长、宽、高、重量、待码垛数量。Step2:创建订单箱型数据列表预制体。订单箱型数据列表预制体包括子对象列表滚动条,子对象列表行单元,设置相应参数,加载订单数据列表预制体资源。其中,预制体表述为,预制体存储工程中的游戏对象,在被需要的时候创建,包括游戏对象的组件和所有子游戏对象。相当于一个组件模板,可多次重复使用该物体,对一个预制体修改,即可完成修改场景中所有的该预制体。Step3:编写C#脚本控制动态实例化订单箱型数据列表。当鼠标选中待码垛订单,下拉框组件中的内容改变,系统响应事件执行将待码垛产品箱型数据中参数设置到列表行单元对应的变量中,在2D场景中动态生成实例化订单信息列表预制体。图4-2订单中箱型数据查看功能展示图1.3码垛方案生成功能模块设计码垛方案生成功能模块包括3个子模块:混箱码垛算法执行、混箱码垛结果生成、供箱序列保存。其中混箱码垛算法的设计与供箱序列的设计已在第三章详细叙述,在此将对混箱码垛结果生成以及供箱序列保存的核心实现功能设计进行详细阐述。混箱码垛结果生成功能的核心实现包括3D混箱码垛垛型生成功能与垛型分析信息生成功能。以下将针对这三个核心功能进行详细设计。1.3.13D混箱码垛垛型生成功能在码垛方案的生成环节,由混箱码垛算法合理布局每个托盘对应的稳定垛型。通过创建三维场景,生成混箱码垛后每个托盘对应的3D垛型供用户查看最终的码垛结果。3D混箱码垛垛型生成功能的流程图如下图4-3所示。3D混箱码垛垛型生成功能流程描述:Step1:从后台读取码垛垛型信息。根据混箱码垛算法得到的待码垛订单的码垛方案,从后台读取由混箱码垛算法得到混箱码垛结果的垛型数据信息,包括箱子的产品编码、产品名称、长、宽、高、摆放方向、所属垛型的垛号、所属垛型的层数、箱子具体空间位置。Step2:创建三维场景。初始化画布,设置照亮整个场景的光源参数以及作为用户观察整个三维场景的相机参数。Step3:实例化托盘预制体。创建托盘预制体,根据交互得到的输入的托盘尺寸,设置托盘预制体的参数大小和初始化位置,遍历混箱码垛结果中所需托盘的数量,实例化托盘预制体到场景中。Step4:实例化待码垛箱子预制体。根据第一步的读取的待码垛箱子数据信息,创建箱子预制体,设置其大小和位置。为区别每个箱子,利用随机数对每个箱子添加颜色,实例化待码垛箱子预制体到场景中。判断当前码垛箱子数量是否全部实例化,满足条件则结束箱子实例化,否则继续实例化剩余的待码垛箱子。图4-3箱型查看功能的流程图1.3.2垛型分析信息生成功能垛型分析信息包括混箱码垛算法的运行时间、待码垛订单最终的混箱码垛垛型的个数、待码垛订单最终的混箱码垛垛型的托盘平均空间利用率。垛型分析信息生成功能流程描述:Step1:在鼠标点击执行算法按钮时开启计时器。鼠标点击执行算法按钮,开启Stopwatch计时器,之后开始执行算法。Step2:算法执行函数的结束时关闭计时器。当设置关闭计时器后,消耗的时间间隔属性值不变,不会引起后台活动,有效精确计算算法运行时间。Step3:计算垛型分析信息数据。由step2返回算法函数运行时所消耗的毫秒数,将运行时间的单位转化为以秒为单位,记录算法运行时间。计算并记录混箱码垛结果所需托盘个数以及平均托盘空间利用率。加载以上三个垛型分析信息数据到已创建的汇总信息栏UI对应的文本框中。1.3.3供箱序列保存功能供箱序列是指根据算法中策略生产垛型,计算每个托盘中每个箱子的具体空间位置。按照一层层的摆放顺序生成码放顺序。最终生成含有每垛型垛号、层数、箱子具体空间位置以及码垛顺序的供箱序列。供箱序列保存就是将供箱序列存入数据库,便于机器人获取并进行实际自动码垛。供箱序列保存功能展示图如下图4-4与图4-5所示。其中图4-4展示后台正在上传供箱序列数据。图4-5展示供箱序列数据保存到数据库的结果。供箱序列保存功能流程描述:Step1:从后台读入供箱序列数据。包括箱子的产品编码、产品名称、长、宽、高、摆放方向、所属垛型的垛号、所属垛型的层数、箱子具体空间位置以及码垛顺序。Step2:编写C#脚本向服务器提交数据的策略。利用HttpWebRequest对象,以post方式发送HTTP请求向服务器上的数据库上传数据。Step3:附加待上传的供箱序列数据。将供箱序列数据进行Json序列化,将其和插入数据库函数地址以字典的形式储存。通过utf-8编码将数据编码成byte流,作为附加在post请求的数据。Step4:读取服务器返回的信息。图4-4供箱序列保存到数据库功能展示图图4-5供箱序列保存到数据库功能展示图1.4垛型预览编辑功能模块设计垛型预览编辑功能模块包括2个子模块:垛型预览、垛型编辑。垛型预览是实现对数据库中已存储的码垛垛型的展示。垛型编辑的核心实现功能是设计3D手动调整功能,对于当前订单中待码垛箱型数量为一种的情况,对该箱型的码垛垛型可以通过该功能进行手动编辑与调整。或者可以应对企业生产中产品箱型的更新换代。需要更新录入新的箱型码垛方案,完善企业码垛方案的信息化管理。在此以更新录入新的箱型码垛方案为例描述3D手动调整功能流程。以输出录入新的箱型码垛方案为例描述垛型预览功能流程。以下将针对这两个核心功能进行详细设计。1.1.13D手动编辑功能3D手动编辑功能是在三维场景下,通过鼠标在二维的屏幕控制三维场景中物体拖拽,该物体跟随鼠标移动到下一秒指定位置。首先由相机发射射线,通过碰撞检测判断鼠标是否点击选中了三维场景中的物体。其次鼠标的移动是在二维的屏幕坐标系的坐标发生改变,物体发生移动是在三维的世界坐标系发生改变。而鼠标点击到三维场景中的物体的位置就是将鼠标在二维的屏幕坐标系中的坐标转化为三维的世界坐标系的坐标。因此需要进行坐标的转换。鼠标控制三维场景中的物体移动的过程中往往会有一个偏移量,也是三维物体移动时在屏幕坐标系中的偏移量。最后经鼠标控制移动物体坐标就是在二维的屏幕坐标系下,物体初始坐标加上鼠标的偏移量后,转换为三维的世界坐标系下的坐标。上述中,所述屏幕坐标与世界坐标的转换,即利用Unity中ScreenToWorldPoint将获取的屏幕位置直接转成世界坐标。由于ScreenToWorldPoint函数进行运算的坐标为Vector3类型,Unity中二维的屏幕坐标的Z轴值为0,其Z轴的值表示为屏幕上的目标与摄像机的距离,导致转换后的坐标赋值给物体后移动无效。因此在处理鼠标的屏幕位置转化为世界坐标前,鼠标屏幕坐标的Z轴应设置为随物体移动的Z轴的值,再进行转换世界坐标。3D手动编辑功能流程描述为:Step1:创建射线。对被检测的通过利用Unity提供的Ray射线类,从摄像机发出到二维屏幕的射线。Step2:添加鼠标交互事件OnMouseDown。此时射线的起点位置为摄像机位置,射线的终点位置为鼠标点击的坐标。判断射线是否碰撞到物体,即鼠标是否点击到物体。当点击到物体时,改变物体的颜色为随机颜色。将物体三维世界坐标位置转换为屏幕坐标,记录屏幕坐标系Z轴的值screenZvlue。Step3:计算鼠标偏移量moveOffset。将鼠标移动的屏幕坐标转化为世界坐标。只有转换了世界坐标才能计算鼠标与选中物体的距离。Step4: 当鼠标右键键按下时,改变当前选中物体的摆放方式。通过设置该选中物体的相应轴向的欧拉角度,控制选中物体进行绕Z轴0度与90度的摆放切换。Step5: 当鼠标左键按下时,得到当前鼠标的屏幕坐标系位置,此时将步骤2中记录的屏幕坐标系Z轴的值screenZvlue赋值给鼠标的屏幕坐标系位置,记录赋值后的当前鼠标屏幕坐标系位置currentPosition。将当前鼠标的屏幕坐标系位置转化成世界坐标系位置,再加上由步骤3得到的鼠标移动量,就是物体应移动的向量值movePosition。Step6:更新选中的物体位置以及摆放方式。3D手动编辑功能流程的流程图图4-6如下所示。图4-63D手动编辑功能的流程图3D手动编辑功能展示图4-7如下所示。子图a)表示已经在托盘旁生成用户输入的箱型3D模型。正在等待摆放最后一个箱子。子图b)表示点击托盘右侧已生成的一个箱子,拖入托盘完成摆放的动作。a)3D箱子模型生成待摆放展示图b)完成拖动箱子展示图图4-73D手动编辑功能展示图1.1.2垛型预览功能在码垛工作的调整更新环节,在三维场景中展示数据库中已存储的码垛垛型。同时基于对实际场景突发状况的考虑,出现新产品时需要录入新的产品箱型数据以及其码垛方案。新产品的箱型码垛方案为其包箱表皮制有该类产品码垛的垛型,通过3D手动编辑功能将同箱型码垛方案存入数据库。满足面对公司产品生产研发的更新换代时,实现数据库中已有的箱型码垛方案的输出。垛型预览功能流程描述为:Step1:创建选择垛型预览的UI组件。在Unity中设置下拉框UI组件,将所有产品名称读取出来,编写C#脚本加载所有产品名称到Unity中下拉框UI组件中。Step2:鼠标点击产品名称下拉框UI组件中的待预览产品箱型码垛方案,响应UI组件点击后内容变化后的读入待预览产品箱型码垛方案内数据功能。Step3:编写C#脚本向服务器请求读取数据的策略。利用HttpWebRequest对象,将鼠标点击的待预览产品箱型码垛方案名称与需要读取的数据库函数地址作为参数,以post方式发送HTTP请求向服务器上的数据库获取数据。Step4:Json反序列化接收数据。数据库执行相应查询SQL语句后返回查询后的数据。后台接收到该数据的存储格式为JSON格式。需要对其进行JSON的反序列化。将待预览产品箱型码垛方案中的每条数据,通过正则表达式规范数据格式拆分成对应的Box_Df类箱型数据供后续垛型的实例化操作。Step5:实例化待预览产品箱型码垛方案中的箱子预制体。根据Step3反序列化后得到的箱子数据信息,创建箱子预制体,设置其大小和位置。为区别每个箱子,利用随机数对每个箱子添加颜色,实例化待码垛箱子预制体到场景中。Step6:判断是否切换下一个待预览产品箱型码垛方案。当需要切换到下一个待预览产品箱型码垛方案,或者此次预览方案为用户错误选择的结果时,鼠标点击清除按钮,将托盘上所有已实例化的待预览产品箱型码垛方案中的箱子预制体销毁。再转到Step2选择下一个待预览产品箱型码垛方案。当用户停止切换时,流程结束。垛型预览功能展示图如下图图4-8所示。图4-8垛型预览功能展示图1.5可视化展示功能模块设计可视化展示功能模块包括3个子模块:多托盘垛型切换、多视角切换、码垛过程动态演示。一个订单中经混箱码垛算法合理布局每个托盘对应的稳定垛型,该混箱码垛结果大多需要划分成多个垛型。用户可通过切换多个视角来观察三维场景中最终混箱码垛垛型结果。系统可按照供箱序列动态码放箱子,模拟整个码垛过程。以下将针对这三个核心功能进行详细设计。1.5.1多托盘垛型切换功能多托盘垛型切换功能是指设置存放多个托盘选项的下拉框UI组件,用户通过鼠标选择需要查看的某个托盘,将选中的托盘移动到展示栏的固定位置,供用户观察选中托盘中的垛型。多个托盘切换的原理即根据用户每次选择的托盘序号,不断将选中托盘移动到摄像机下的一个固定位置,可供摄像机近距离显示该托盘上的垛型。多托盘垛型切换功能流程描述:Step1:创建待选托盘的UI组件。在Unity中创建下拉框组件,计算混箱码垛结果的托盘数量PNum。将托盘序列名称加载到UI组件中。Step2:确定选中托盘正放于摄像机下的展示位置FixedPosition。Step3:移动选中托盘到展示位置FixedPosition。添加下拉框内容改变的响应事件。用户选择某个盘时,获取实例化的选中托盘的对象,记录当前托盘的位置LastPosition,设置该托盘的位置为正放于摄像机下的展示位置FixedPosition。Step4:判断是否切换托盘。当用户需要进行下一次选择时,将前一次选中的托盘位置更新为LastPosition,即复原前一个托盘的位置。再转到Step3进行下一次选择。当用户停止切换时,流程结束。多托盘垛型切换功能的流程图如下图4-9所示。图4-9多托盘垛型切换功能的流程图多托盘垛型切换功能展示图如下图4-10所示。子图a)表示切换第一个托盘的结果图,子图b)表示切换第二个托盘的结果图。a)切换第一个托盘垛型图b)切换第一个托盘垛型图图4-10多托盘垛型切换功能展示图1.5.2多视角切换功能多视角切换功能是指将混箱码垛结果进行多个视角的展示。通过设计UI界面与三维场景切换的交互功能,用户不仅可以在二维场景中,通过鼠标的滚轮可进行视角的缩放细节观察垛型,按下鼠标中键返回原视角即垛型的俯视视角。而且可切换到三维场景中,通过选择俯视、正视、后视、右侧正视、左侧正视、右侧斜视、左侧斜视七个视角对垛型进行全方位观察。多视角切换功能流程描述:Step1:添加UI界面与三维场景切换的交互事件。在Unity中创建二维与三维切换的选择框UI组件。对UI界面的CanvasGruop组件中的Alpha属性设置对应数值,用以控制UI界面的隐藏和显示。Step2:判断用户是否选择3D界面。当用户勾选3D选项时,设置UI界面的CanvasGruop组件中的Alpha属性值为0来控制UI界面隐藏。当用户勾选2D选项时,设置UI界面的CanvasGruop组件中的Alpha属性值为1,即。Step3:创建待选视角的UI组件。在Unity中创建下拉框组件,将俯视、正视、后视、右侧正视、左侧正视、右侧斜视、左侧斜视七个视角名称加载到UI组件中。Step4:添加鼠标选择视角的响应事件。通过移动摄像机的角度和位置,分别设置俯视、正视、后视、右侧正视、左侧正视、右侧斜视、左侧斜视七个视角选项对应摄像机角度和位置。当鼠标选择某一视角,摄像机移动到该选项中设定的角度与位置。Step5:添加鼠标缩放视角事件。当滑动鼠标的滚轮,在Unity中改变摄像机Camera.main.fieldOfView变量控制摄像机的视野范围。由当前相机视野大小、滚轮滑动值、以及摄像机前进后退的速率三个值控制摄像机镜头缩进和拉远。当用户按下鼠标中键,设置摄像机的角度和位置返回原视角即垛型的俯视视角。多视角切换功能展示图如下图4-11所示。a)2D界面托盘垛型正视视角图b)3D界面托盘垛型右侧斜视视角图图4-11多视角切换功能的流程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论