机械拆装-基于Unity-总体设计

目录

前言

1. 系统总体设计

2. 装配功能实现的详细设计

  2.1 装配顺序

  2.2 装配思想实现的难点

3. 场景实现中的难点与解决

  3.1 相机控制

  3.2 零件的拖拽和旋转

  3.3 装配位置提示

总结



前言

  在工业设计和制造领域,零部件的拆装技术是一个重要的应用场景,比如我们在工程训练课程中经历的摩托车发动机拆装课程,是机械类学生的必修课程。虚拟拆装系统模拟和仿真了模型的拆装过程,虽然SolidWorks等机械设计软件能够解决特征配合的装配方式,但交互性不足。我们在Unity虚拟引擎中建立一个交互式拆装训练系统,拆装操作简单,并有图文引导提示,适合学习者了解拆装过程。

  如果一个拆装项目要实现比较完善仿真功能,比如需要仿真实体特征、装配精度等,则需要进行更加详尽的架构设计。但如果仅仅实现基本功能,且项目要在短时间(一周)内完成,那么按我目前的想法写下本专栏的笔记,大致可以完成。

1. 系统总体设计

  完成整个系统大约要完成下图中这些工作,*为加分项。核心模块为3D模型的准备以及拆装功能的实现,这两个部分后面会详细说明。

2. 装配功能实现的详细设计

  2.1 装配顺序

  发动机模型的包括活塞、曲柄、离合器等几大部分,零件数量有200多个,彼此存在依赖关系,因此需要根据其构造和原理,安排拆装工序。按发动机功能区域分,可以讲拆装顺序分为如下图的装配分组,其中每个子装配体都包含了若干零件,因篇幅有限,仅展开比较重要的变速箱装配体:

  在系统设计过程中,模型按上图的分组建立子装配体,并先分别完成每个子装配体,最后总装。

  2.2 装配思想实现的难点

  (1)碰撞干涉问题

     虚拟世界中需要模拟实体零件的特性,否则容易发生零件穿透失去真实的效果。可以旋转Unity系统中较常用的几种碰撞器来制造碰撞效果,但这里需要注意几个问题:

    1)如果使用MeshCollider包围整个零件表面,碰撞效果比较真实,但是系统资源占用较大,尤其是齿轮这些三角面较多的模型;

    2)如果使用BoxCollider这类碰撞器时,容易造成视觉上还未碰到模型,而已经产生碰撞效果的现象,不复合现实世界客观规律。可以使用下图分段式碰撞器包裹物体的方式,系统资源消耗较少,又有MeshCollider的效果。

 

 

  (2)装配路径约束

    发动机装配中,大部分都是轴向装配路径,因此需要对孔和轴之间的配合进行约束,以体现实际装配中的方位和路径。考虑用采用以下方法:零件在当前位置O时,可以自由移动;当拖拽到轴端面位置时,制定一个零时位置T,从这个位置向目标位置P移动时,锁定y,z方向,约束零件在轴方向上移动。

  (3)零件装配过程的流程设置

    下图是大致的装配动作实现过程,其中没有考虑的问题有:

    1)判断装配方向;

    2)装配完成后,父子关系改变(如果后续需要通过运动执行来演示装配效果,就需要考虑这个问题);

    3)装配工具选择(背包);    4)游戏奖励制度。

    这些可以在制作过程中预留接口,以便于后期扩展。

    

3. 场景实现中的难点与解决

  3.1 相机控制

    在场景中,相机会有多种应用要求,比如在实现场景漫游功能时,需要以第一或第三人控制的方式,让相机实现360°场景旋转。但在装配过程、教学认知过程中,都需要相机在小范围移动,或干脆固定不动,解决的方法有很多种,比如:

    1. 载入不同场景实现不同功能

    比如漫游为一个场景,装配功能放在另一个场景,通过场景间的切换实现不同功能。

    2. 建立多个相机,通过改变相机的Depth数值,切换主副相机。UI可以建立专门的UI相机。

    

    另外,在装配场景中,可以将相机旋转中心设置为装配体的位置,让相机始终跟随装配体旋转和移动。

  3.2 零件的拖拽和旋转

    首先要建立零件的层(Layer),只有在这个层里的物体才会被鼠标射线选中拖拽,防止其他物体干扰;其次,使用鼠标射线拖动和旋转的代码很多,借鉴一下大神们的基本都没有问题。

  3.3 装配位置提示

  考虑实现是功能是:当选中一个零件准备装配时,这个零件的正确装配位置会有一个同样的零件形象忽明忽暗地提示,如下图1。大致的思想如下图2。

     

总结

  在制作过程中还有一些小细节需要不断完善,比如需要规范管理那么多种类的文件、UI的层叠结构等,在本专栏中的后续文章会有过程记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/366769.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL:设计数据库与操作

设计数据库 1. 数据建模1.1 概念模型1.2 逻辑模型1.3 实体模型主键外键外键约束 2. 标准化2.1 第一范式2.2 链接表2.3 第二范式2.4 第三范式 3. 数据库模型修改3.1 模型的正向工程3.2 同步数据库模型3.3 模型的逆向工程3.4 实际应用建议 4. 数据库实体模型4.1 创建和删除数据库…

【C++进阶学习】第五弹——二叉搜索树——二叉树进阶及set和map的铺垫

二叉树1:深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客 二叉树2:深入理解数据结构第三弹——二叉树(3)——二叉树的基本结构与操作-CSDN博客 二叉树3:深入理解数据结构第三弹——二叉树…

ubuntu22.04速装中文输入法

附送ubuntu安装chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb

Flask新手入门(一)

前言 Flask是一个用Python编写的轻量级Web应用框架。它最初由Armin Ronacher作为Werkzeug的一个子项目在2010年开发出来。Werkzeug是一个综合工具包,提供了各种用于Web应用开发的工具和函数。自发布以来,Flask因其简洁和灵活性而迅速受到开发者的欢迎。…

Chapter9 更复杂的光照——Shader入门精要学习笔记

Chapter9 更复杂的光照 一、Unity的渲染路径1.渲染路径的概念2.渲染路径的类型①前向渲染路径a. 前向渲染路径的原理b. Unity中的前向渲染c. 两种Pass ②延迟渲染路径a. 延迟渲染路径的原理b. Unity中的延迟渲染c. 两种Pass ③顶点照明渲染路径 二、Unity的光源类型1.光源类型①…

如何找BMS算法、BMS软件的实习

之前一直忙,好久没有更新了,今天就来写一篇文章来介绍如何找BMS方向的实习,以及需要具备哪些条件,我的实习经历都是在读研阶段找的,读研期间两段的实习经历再加上最高影响因子9.4分的论文,我的秋招可以说是…

[22] Opencv_CUDA应用之 使用背景相减法进行对象跟踪

Opencv_CUDA应用之 使用背景相减法进行对象跟踪 背景相减法是在一系列视频帧中将前景对象从背景中分离出来的过程,它广泛应用于对象检测和跟踪应用中去除背景 背景相减法分四步进行:图像预处理 -> 背景建模 -> 检测前景 -> 数据验证 预处理去除…

《昇思25天学习打卡营第9天|onereal》

继续学习昨天的 基于MindNLPMusicGen生成自己的个性化音乐 生成音乐 MusicGen支持两种生成模式:贪心(greedy)和采样(sampling)。在实际执行过程中,采样模式得到的结果要显著优于贪心模式。因此我们默认启…

DP:子序列问题

文章目录 什么是子序列子序列的特点举例说明常见问题 关于子序列问题的几个例题1.最长递增子序列2.摆动序列3.最长递增子序列的个数4.最长数对链5.最长定差子序列 总结 什么是子序列 在计算机科学和数学中,子序列(Subsequence)是指从一个序列…

【JavaEE精炼宝库】多线程进阶(2)synchronized原理、JUC类——深度理解多线程编程

一、synchronized 原理 1.1 基本特点: 结合上面的锁策略,我们就可以总结出,synchronized 具有以下特性(只考虑 JDK 1.8): 开始时是乐观锁,如果锁冲突频繁,就转换为悲观锁。 开始是轻量级锁实现&#xff…

维护Nginx千字经验总结

Hello , 我是恒 。 维护putty和nginx两个项目好久了,用面向底层的思路去接触 在nginx社区的收获不少,在这里谈谈我的感悟 Nginx的夺冠不是偶然 高速:一方面,在正常情况下,单次请求会得到更快的响应;另一方面&#xff0…

Linux:网络基础1

文章目录 前言1. 协议1.1 为什么要有协议?1.2 什么是协议? 2. 网络2.1 网络通信的问题2.2 网络的解决方案——网络的层状结构2.3 网络和系统的关系2.4 网络传输基本流程2.5 简单理解IP地址2.6 跨网络传输 总结 前言 在早期的计算机发展中,一开…

免费翻译API及使用指南——百度、腾讯

目录 一、百度翻译API 二、腾讯翻译API 一、百度翻译API 百度翻译API接口免费翻译额度:标准版(5万字符免费/每月)、高级版(100万字符免费/每月-需个人认证,基本都能通过)、尊享版(200万字符免…

Linux驱动开发实战宝典:设备模型、模块编程、I2C/SPI/USB外设精讲

摘要: 本文将带你走进 Linux 驱动开发的世界,从设备驱动模型、内核模块开发基础开始,逐步深入 I2C、SPI、USB 等常用外设的驱动编写,结合实际案例,助你掌握 Linux 驱动开发技能。 关键词: Linux 驱动,设备驱动模型,内核模块,I2C,SPI,USB 一、Linux 设备驱动模型 Li…

cesium 聚合

cesium 聚合(下面附有源码) 示例代码 <html lang="en"><head><!-- Use correct character set. -->

python系列30:各种爬虫技术总结

1. 使用requests获取网页内容 以巴鲁夫产品为例&#xff0c;可以用get请求获取内容&#xff1a; https://www.balluff.com.cn/zh-cn/products/BES02YF 对应的网页为&#xff1a; 使用简单方法进行解析即可 import requests r BES02YF res requests.get("https://www.…

JSON JOLT常用示例整理

JSON JOLT常用示例整理 1、什么是jolt Jolt是用Java编写的JSON到JSON转换库&#xff0c;其中指示如何转换的"specification"本身就是一个JSON文档。以下文档中&#xff0c;我统一以 Spec 代替如何转换的"specification"json文档。以LHS(left hand side)代…

云计算基础技术

网络类技术 网络的作用 网络是设备间、虚拟机之间通信的桥梁。因此&#xff0c;在ICT基础设施中&#xff0c;网络是必不可少的。 传统网络的基本概念 广播和单播&#xff1a;两个设备通信就好像是人们之间的对话一样。如果一个人对另外一个人说话&#xff0c;那么用网络技术的…

从零开始搭建spring boot多模块项目

一、搭建父级模块 1、打开idea,选择file–new–project 2、选择Spring Initializr,选择相关java版本,点击“Next” 3、填写父级模块信息 选择/填写group、artifact、type、language、packaging(后面需要修改)、java version(后面需要修改成和第2步中版本一致)。点击“…

容器内存

一、容器内存概述 容器本质上还是一个进程&#xff0c;是一个被隔离和限制的进程。因此容器内存和进程内存在表现形式上其实是一样的&#xff0c;这块主要涉及三部分内容&#xff1a;RSS&#xff0c;page cache和swap这三部分&#xff0c;容器基于memory Cgroup对内存进行限制…