当前位置:首页 期刊杂志

基于Unity3D 的虚拟仿真电路实验系统

时间:2024-07-28

康子瑞 孙海茗 刘政* 刘洧杰 朱孟茹

0 引言

电路实验是电气与自动化类学生电路理论课程学习的重要实践环节。传统条件下,学生在电路实验之前只能通过教材电路图进行抽象理解,难以对实验仪器和电子元件有直观的认识[1]。在实际电路接线中经常会因为操作生疏导致接线错误而产生用电危险[2]。

随着信息化时代的到来,我国积极倡导高校进行数字化、信息化实验教育教学课程体系改革,在《教育部等六部门关于推进教育新型基础设施建设构建高质量教育支撑体系的指导意见》和《中国教育现代化2035》等相关文件精神指导下,虚拟仿真实验教学应运而生[3-5]。近年来各高校以基于二维的电路仿真实验作为学生预习实验的方式,降低了学生在正式实验时误操作的可能性,提高了实验的教学效率与安全性[6],同时可以避免因实验仪器损坏而无法完成实验的问题[7]。但现有的二维电路虚拟仿真软件与真实实验环境相差较大,造成了学生预习效率低、沉浸感差、实验交互性差等问题。

当前,将Unity3D 技术与各学科教学相融合这一课题,逐渐在教育界受到广泛关注。陈爱群等[8]基于Unity3D 引擎开发了高校机械类课程中减速器的虚拟实验教学平台。费杰等[9]基于 Unity3D 设计了一套直接数字化X 射线摄影系统(Digital Ra-diography,DR)可交互仿真教学工作站,对医学实验教学具有重大意义。李公科[10]结合Unity3D 与VR(Virtual Reality,虚拟现实)技术,开发了服饰陈列三维虚拟仿真实训系统,有效提高了陈列技能人才培养的质量。程世冲等[11]采用Unity3D 与3DMax 结合,开发了针灸教学演示系统,实现了针灸教学从现实迈入虚拟空间的进步。邵子明等[12]基于Unity3D进行了船舶分段仿真制造系统的开发,为船舶分段制造工艺作出了重要贡献。魏玉蒙[13]基于Unity3D 和3D Max 的交互式语音应答(Inter-active Voice Response,IVR)系统设计了立体几何的可视化空间线索,为沉浸式虚拟现实系统应用于学科教学提供了新的思路。朱田莉[14]基于Unity3D 开发了关于《认识五大基本地形》的教育游戏,让教育性与游戏性相结合,有效激发了学生的学习兴趣。甘志梅等[15]采用Unity3D 和3D Max 开发了汽车起动机虚拟拆装实训系统,提高了实训的教学质量。这些系统将Unity3D 虚拟引擎技术结合各类学科进行研发,对提高教学质量有一定的助力作用,但仍缺乏应用于电路理论实验方向的虚拟实验平台。

为此,本文运用虚拟仿真技术,将Unity3D引擎、Blender 建模和BlazePalm 手势识别模块相结合,设计了一套虚拟仿真电路实验系统,能够实现学生在各实验的虚拟场景下进行交互,在仿真场景中完成电路实验的预习工作。

1 Unity3D 系统设计

基于Unity3D 建模技术的虚拟电路实验室需要对各种电路元件进行建模,同时虚拟电路实验室对电路元件的物理特性进行模拟,包括电流、电压等。Unity3D 可以为学生提供一个用户友好的交互界面,使学生能够方便地使用。此外可以对电路的运行状态进行实时可视化,使学生能够直观地了解电路的运行情况。基于Unity3D 的虚拟电路实验室系统设计了电路理论实验课中的几个典型实验,如图1 所示。

图1 虚拟仿真电路实验系统实验汇总

基于Unity3D 的虚拟电路实验室主要由实验室场景制作、程序框架设计、程序编写、测试发布四个阶段构成,具体流程如图2 所示。

图2 虚拟电路实验室实现流程图

1.1 系统实现

为便于学生在理论课程后掌握真实电路实验场景的接线方法以及安全操作规范,通过对学生电路实验需求和使用场景的分析,并根据电路实验的相关原理,设计建立相应的模型。虚拟仿真实验系统利用模型模拟实际电路的工作原理和特性,针对集成电路试验箱进行建模。仿真万用表、示波器、电源发生器、功率计、负载、电桥等设备,具备足够的灵活性和可拓展性,以满足电路实验的需求,以便进行实验操作和观察。为了接近真实场景,系统同时应用了人机交互技术,通过摄像头捕捉学生手势动作达到点对点接线的效果。

1.2 模型制作与场景搭建

为确保模拟场景贴近真实环境,通过倾斜摄影对实验室大型实验设备进行模拟建模,并在Blender 中对不够精确的部分进行修改和补充,导入到建好的Unity3D场景中,还原电路实验室场景。

1.2.1 模型制作

应尽量选取室内光线充足的场景对试验台进行拍摄,将大型试验台划分区域布置相机机位,以Nikon Z7 配合DJI RSC 2 Pro Combo 为例,取用环绕方式进行拍照,在距离试验台合适距离,相机调整到30—45 度,间隔时间为2—5 秒,间隔时间越短,细节照片数量越多,影像重叠度越高,建模物理细节精度越高[16]。

在Context Capture Master 中新建项目导入所得照片并对其空中三角测量进行计算,提交默认计算结果。完成计算后在Spatial Framework 中编辑模型区域边界重建模型得到Production 导出为3mx 格式,待运算后得到建模结果。将3mx结果导入Blender 进行调整,进行材质调整、纹理映射等操作。在Blender 中选择“3D Mesh(.3ds,.obj,.f-bx,etc.) ” 选 项, 导 入3mx文件并显示3D 模型。检查模型的材质,同时还可以使用纹理映射将图像应用于模型表面。在Blender 中,使用纹理编辑器进行调整,使用渲染设置来更改光照、阴影和其他效果,以进一步改善模型的外观。完成对模型的调整后,将模型导出为所需的格式。模型修改前后的对比如图3 所示。

图3 模型修改前后对比图

1.2.2 场景搭建

首先,在搭建场景前,收集学校电路实验室的平面图、照片实验室的结构、布局和设备等,以便更好地模拟实验室。其次在Unity3D 中创建所需场景,根据实验室的大小来设置场景的大小和比例。添加地形和天空盒,使场景更加真实。使用Unity3D 的建模工具,建立实验室的墙壁和地板。根据实验室的布局,添加上文建立模型的设备进入实验室中,并添加光照和阴影以及适当的材质和纹理让实验室更加真实。

2 关键技术

在Unity3D 中使用碰撞检测实现电线与其他电路元件的连接和断开,以及通过基于BlazePalm姿态估计实现人机交互,使用Line Renderer 组件显示电线,并创建数据可视化界面展示电路元件参数和测量值。其开发主要逻辑如图4 所示。

图4 实验台场景搭建

2.1 碰撞检测

为实现电线与其他电路元件模型的连接,本文使用碰撞检测技术来检测电线与其他物体的碰撞。通过在Visual Studio 建立的C#脚本中定义一个变量来存储当前连接的物体,并在脚本中使用OnCollisionEnter 函数来检测电线是否与其他物体发生碰撞。如果电线与其他物体发生碰撞,则将当前连接的物体设置为该物体,并将电线的一个端点连接到该物体上。当需要断开连接时调用OnCollisionExit 函数来检测电线是否与连接的物体断开了碰撞。如果电线与连接的物体断开了碰撞,则将当前连接的物体设置为空,并将电线的端点从该物体上移除。主逻辑框架如图5 所示。

图5 主逻辑框架

2.2 人机交互

通过基于BlazePalm 的手势姿态识别获取手部骨骼点位置信息,并通过传输控制协议(Transmission Control Protocol,TCP)连接Unity3D,在C#脚本中根据接收到的食指指尖和中指指尖的横坐标x 数值进行差值判断,若差值小于0.05,触发C#脚本中IPointerDownHandler 鼠标按下事件;若差值大于0.1,则触发IPointerUpHandler 鼠标释放事件。主要逻辑为使用BlazePalm 模型追踪用户的手部运动,并获取手部骨骼点的坐标。通过TCP 协议连接Unity3D,创建并绑定TCP/IP 套接到本地IP 和端口,连接后处理视频流中的帧,并检测手部,将帧传递给BlazePalm 模型进行检测。获取所需的手掌点坐标,将点坐标发送到Unity3D,在Unity3D 中读取从服务器发送的点坐标,将点坐标用于鼠标的实时控制。在脚本中定义一个变量来存储鼠标的当前位置,在Update 函数中获取鼠标的位置,然后,可以使用Raycast函数来将鼠标的位置转换为世界坐标系中的位置,并将电线的父对象的位置设置为该位置。

在服务器端,监听Unity3D 发送的TCP 连接请求,并根据收到的消息内容执行相应的操作。根据手指的运动情况,当收到connect 消息时,执行持续发送手掌指定点坐标操作;当收到disconnect 消息时,执行关闭摄像头操作。

2.3 电线的显示与接线正误判断

Unity3D 有着直观易懂的特点,有利于实现本文所述的虚拟实验的教学功能。在Unity3D中通过创建物体作为电线的父对象,为其添加Rigidbody 组件和Line Renderer 组件 ,并将父对象的Rigidbody 组件的Is Kinematic 属性设置为False。在电线的每个顶点上添加一个Rigidbody组件,其次在父对象上添加一个Spring Joint 组件,将其连接到电线的每个顶点上的 R-igidbody 组件。调整Spring Joint 的属性使电线具有柔性和弹性。将Line Renderer 组件的Position 属性设置为电线的每个顶点的位置在场景中显示出电线。

为接线判断电线连接是否正确。 需要在各导线接口的模型上放置透明材质的image 并添加C# 脚本,脚本中分别使用四个用户界面(User Interface,UI)交互事件,IPointerDownHandler、IPointerUpHandler、IDragHandler 和IEndDragHandler。IPointer-DownHand-ler 和IPointerUpHandler 对 应鼠标按下和鼠标释放事件,IDragHandler 对应鼠标拖拽事件,IEndDragHandler 对应拖拽结束事件。当用户鼠标在接口处按下后,将会创造一条从图像中心到鼠标位置的红色导线,并且会根据鼠标拖拽的位置不断更新导线的长度和末端位置。当用户松开鼠标时,若鼠标处在下一个接口处,则导线连接成功,若没有处在其他任何接口处,则会销毁该条导线。RectTransform 组件是Unity3D中用于控制UI 元素位置、大小、旋转等属性的组件。在Visual Studio 建立的C#脚本中,使用了RectTransform 组件来控制连线的位置、大小和旋转。通过设置 RectTransform 的pivot 属性和localRotation 属性,可以实现连线的旋转和位置控制,确保导线能连接到任意接口。Image 组件是Unity3D 中用于渲染图像的组件。在脚本中使用了Image 组件来渲染连线,通过设置Image 的color 属性,可以实现连线颜色的控制。当按下UI 的“ 确定 ”按钮后,将会判断所有的连线的正误。正确连接的导线会被渲染为绿色,错误连接的导线则会被渲染为红色。此时,用户可以按下“ 重做 ”的按钮,销毁所有已经连接好的导线,重新开始连接。接线过程如图6 所示。

图6 接线过程图

2.4 数据可视化

本文以三相电路实验为例,研究三相电路在电源对称的情况下,负载作为星形和三角形连接时线电压相电压以及线电流与相电流具有的关系。

其中由电路原理可以得到三相四线制电源的线电压UL与相电压UP的关系为:Ul=Up且UL较相应的UP,在相位上超前30°。

(1)负载星形联接时。在有中线(Y0)的情况下,不论负载对称与否,其线电流等于相电流,线电压大小上为相电压的倍,即Ul=Up且线电压依次超前相应的相电压。

(2)负载作三角形连接时。不论负载对称与否,其相电压均等于线电压即Ul=UP。负载对称时,其相电流也对称,相电流与线电流之间的关系为Il=Ip且线电流滞后于相应的相电流30°,三相负载不对称时,相、线电流的大小不再是倍的关系,即I0=Ip,但其相电压(线电压)仍是对称的[17]。

在Unity3D 中通过创建实验数据可视化界面使以上数据体现在虚拟实验界面中。首先使用Unity3D 自带的UI 组件,创建一个空Canvas 添加一个Panel,并添加GridLayoutGroup 组件,调整GridLayoutGr-oup 的Spacing 和CellSize 属 性。创建一个表头行,并使用Text 组件创建表头的每个单元格,将它们放置在GridLayoutGroup 的第一行中。其次创建数据行,使用脚本动态创建每个单元格,并将它们放置在GridLayoutGroup中的每行中。在Start 函数中创建表头,然后使用Instantiate 函数动态创建每个数据行,并在每个数据行中设置单元格的文本。最后,将数据行添加到GridLayoutGroup 的子物体中。在Unity3D 中添加电路元件并定义其参数,在电路运行时更新这些参数和测量值,将它们显示在UI 上。

3 实验结果与分析

在软件环境为C#8.0、unity2021.3.20f1c1、python3.7,硬件环境为CPU:AMD Ryzen 7 5800H with Radeon Graphics、GPU:NVIDA GeForce RTX 3060 Laptop GPU 和720P HD 摄像头下运行,收集仿真数据。

3.1 仿真实验结果展示

为验证虚拟仿真电路实验系统的实用性和稳定性,研究团队选取电路课程中较为典型的三相电路实验进行检验。本实验需要探究三相电路在电源对称的情况下,负载作为星形和三角形连接时线电压与相电压以及线电流与相电流的关系。本研究的团队成员在虚拟仿真实验室中进行了实验,借助计算机视觉库MediaPipe 实现了对实验参与者手势的识别和手部关键点的动作信息提取,以获取实验过程的详尽数据。虚拟实验操作如图7 所示。使用Unity3D 的UI 系统工具实现,将实验结果以表格数据的形式显示在虚拟仿真实验室中。

图7 虚拟实验操作场景

实验完成后,研究团队成员对实验效果进行了总结:虚拟实验系统能够顺利地完成电路实验,且实验过程流畅,能够与实际操作有较好的一致性,虚拟实验系统能够顺利实现虚拟实验仿真,系统具有较好的实用性和稳定性。

3.2 仿真实验数据表

基于上述实验,可以得到虚拟实验的实验数据,如A、B、C 三相开灯盏数、相电流、相电压、每两相间线电压以及中线电流等数据,并将虚拟实验结果与实际实验值进行对比。根据实验结果,可以发现模拟实验所得数据与现实实验所得数据在误差允许范围内基本一致,这意味着模拟实验系统可以准确地反映现实实验系统的真实情况。此外,模拟实验数据与理论实验数据相符,进一步证明了模拟实验系统的准确性。因此可以得出结论,本实验系统的模拟实验部分具有良好的准确性,为后续实验研究提供了坚实的基础。虚拟实验得出的结果与实际实验中的测量值进行对比如表1 所示。

表1 虚拟实验结果与实际值对比

4 总结

本文基于Unity3D 完成了对电路实验系统的虚拟仿真模型搭建,主要采用基于BlazePalm 的位姿估计实现对使用者手部的精准识别,以模拟真实的电路接线。同时,系统还通过碰撞检测、人机交互使电路实验接线更加真实和直观;通过数据可视化使电路元件参数和实验测量结果清晰地呈现在界面上,强化了实验数据关联性。结果表明:通过使用虚拟仿真电路实验室,能够增强学生对电路原理和设计的认识,提高电路实验接线效率和实践能力。在后续的工作中,将考虑提高实验设备建模精度,并增添识别手势自动接线等相关功能,进一步提升系统使用效率。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!