3D 可视化之Azure 数字孪生

发布时间 : 2022-01-07 10:44:14.877|阅读 250 次

概述:现实世界环境中的所有事物、人、业务流程的3D可视化,不再只出现在科幻电影中,这就是数字孪生。数字孪生是描述环境、事物、人及其关系的数字表现的术语,而Azure数字孪生(ADT)是一个允许创建和与这种数字表现互动的平台。它不仅允许创建模型,而且还提供了图形API来查询和与它的孪生互动。ADT Explorer是一个工具,允许用户将ADT模型和孪生可视化,并探索不同事物、人和过程之间的关系。

相关链接:

现实世界环境中的所有事物、人、业务流程的3D可视化,不再只出现在科幻电影中,这就是数字孪生。数字孪生是描述环境、事物、人及其关系的数字表现的术语,而Azure数字孪生(ADT)是一个允许创建和与这种数字表现互动的平台。它不仅允许创建模型,而且还提供了图形API来查询和与它的孪生互动。ADT Explorer是一个工具,允许用户将ADT模型和孪生可视化,并探索不同事物、人和过程之间的关系。ADT Explorer对于可视化这个图和探索不同对象之间的关系非常有用。


但这些二维图形并不像实际物体的大小、形状、颜色或位置。灵活的三维表示法对于浏览、理解、监控和对这些信息的变化

做出反应是非常有帮助的。必须与数字双胞胎互动的操作人员需要以一种对他们来说简单而直观的方式进行互动。

HOOPS Web 平台是一套软件开发工具包,它可以补充ADT,提供一个基于网络的三维浏览器,可以导入CAD模型并连接到ADT中存储的数据和事件。使用HOOPS和ADT,我们可以创建一个工厂的3D数字孪生,其直观的界面可以让操作员轻松看到每台机器的状态。

让我们来了解一下如何通过将3D可视化与Azure数据孪生连接起来,使其成为现实。我们将从你需要的东西开始,以及如何将三维模型导入HOOPS。然后我们将把3D模型连接到ADT节点,显示标记,对事件作出反应,并学习如何编辑我们创建的3D世界。
前提条件
https://github.com/techsoft3d/communicator-adt-tutorial 上的资源库展示了一个结合这两个框架的简单例子。我们将用这个项目来强调基本的想法和整合点。

DTDL是Azure Digital Twins中用来描述模型和双胞胎的语言。在这里了解更多。我们使用一个基于这个ADT学习模块的DTDL图。你需要连接到一个与此类似的托管ADT图。


要使用来自CAD模型的自定义3D数据,你需要HOOPS Web平台。

导入数据
我们必须首先创建或获取3D数据。很多时候,设备、机械、基础设施和建筑的3D模型已经存在。其他时候,它们需要使用CAD软件包来创建,如用于机械设计的SOLIDWORKS或Inventor,用于建筑设计的AutoCAD、Revit或SketchUp。一个接近原件的三维模型可能就足够了。众多的3D模型库,如GrabCAD,TurboSquid和SketchFab,提供了现成的3D模型,可以使用或改编。
每个三维模型都可以用HOOPS转换器的命令行程序转换为流式缓存文件。
这些优化的文件可以合并并加载到HOOPS网络浏览器中进行可视化。

注意:流缓存数据有两个主要变体。

Stream Cache Standalone (SCS) - 可以使用 REST API 函数轻松加载这些单一文件,就像加载其他文件一样。在可视化之前必须下载整个文件。在本文中,我们使用这种方法来管理 3D 数据。

Stream Cache Compressed (SCZ) – 这些压缩文件使用 HOOPS SC Server 应用程序的实例进行流式传输,该应用程序在服务器和客户端之间建立 WebSocket 连接。3D 模型数据通过此连接逐步流式传输,并可立即进行交互。这种格式有助于可视化非常大的模型。

可以找到支持的文件格式的完整文件列表在这里。大多数情况下,可以将 HOOPS Converter 不支持的格式保存为中性格式,例如 STEP、STL 或 FBX,然后转换为流缓存文件。

ADT图中的一些节点可能有相关的3D数据,包括物理建筑或场地、机器、传感器和其他对象,无论是否启用物联网。对于有三维数据的ADT节点,你可以把相关的模型名称保存为一个属性。虽然模型文件名保存在ADT内,但模型文件本身应该保存在其他地方,可能是在托管你的后台的服务器上的/scs_models目录下。

我们使用的DTDL。

除了SCS文件的路径,我们还保存了一个转换矩阵,帮助我们在三维空间中放置物体。变换矩阵是一个4x4的矩阵,编码它在3D场景中的位置、旋转和比例。因为DTDL不支持将数组作为一个属性,这个矩阵被存储为一个地图。索引 "1 "到 "16 "代表了矩阵中16个元素的每一个。建议将SCSFile名称和转换保存为ADT图的一部分,但它们也可以在你的特定应用程序中硬编码,保存在JSON文件中或保存在一个外部数据库中。这个例子假设它是存在的,并将使用这些属性来自动加载相关的三维数据


可视化数据

HOOPS Web Viewer (HWV) 是一种基于浏览器的应用程序,用于查看 3D 数据并与之交互。它可以通过广泛的 JavaScript API 进行配置。hoops_webviewer_sample.html 显示了如何配置 WebViewer 并将工具栏和其他常用工具连接到查看器。此示例是我们示例项目的基础。

使用从 hoops_web_viewer.js 提供的客户端代码实例化 WebViewer。我们首先加载一个附加到命名 HTML <div> 的空查看器,WebViewer 将控制并渲染到该 HTML 中。

接下来,我们为所有定义了“SCSFile”和“Transformation”的节点查询 ADT,并使用 loadSubtreeFromScsFile() 将它们加载到 WebViewer 中。

将 ADT TWINS 连接到 3D 对象
加载到 Web Viewer 中的每个模型都有一个唯一的节点 ID。我们可以在加载并存储在由 ADT Id 索引的地图中时捕获它。


这会在 WebViewer 和 ADT 中的对象之间创建绑定。当 ADT 发生变化时,我们使用 ADT Id 查找 WebViewer 节点 Id,然后使用节点 Id 更改 WebViewer 中的 3D 表示。我们使用此绑定来显示元数据并对事件做出反应。

或者,与 3D 查看器中的对象交互可以通过使用此数组从 WebViewer 节点 ID 查找关联的 ADT Id 来影响 ADT 图。例如,

这是在重新定位对象或更改与 ADT 节点关联的 3D 模型时完成的。

标记

通常需要在 3D 对象旁边显示静态或实时信息。ADT 中的每个实体都可以有与之关联的元数据。WebViewer 可以通过多种方式将其显示为文本。一种方法是通过一段标记。
在我们的示例中,当我们将 3D 模型加载到 WebViewer 中时,我们还会创建一段标记来显示其属性。为了正确放置它,我们考虑了整个 3d 场景的边界框。
在我们的 twinMap 中,对 JavaScript 标记对象的引用与 WebViewer 节点 ID 一起保存。为了更新每个对象的元数据,我们查询 ADT 图:
然后在 updateMarkup() 中,我们使用 ADT 孪生 Id 来查找关联的 JavaScript 标记对象并使用从 ADT 解析的正确属性更新其文本。最后,调用 markupManager.refreshMarkup() 会自动更新 3d 视图中的文本。

对事件的反应

另一个典型的工作流程是对事件做出反应,尤其是单个节点的错误状态或 ADT 图中的传播错误。我们将事件状态视为另一块元数据。我们不将其显示为文本,而是在错误状态下突出显示整个对象。

我们的 ADT 实例会在研磨振动超过 300 时设置警报。UI 中的“触发”按钮会自动将 ADT 图表中的振动设置为 300 以上以进行测试。

在我们的轮询功能中,我们检查是否在节点上设置了警报,然后突出显示:

hwv.selectionManager.selectNode(object.nodeId);
重新定位对象

每个对象的位置、旋转和大小都存储为一个 16 元素的浮点数组,表示一个 4x4 变换矩阵 ( https://en.wikipedia.org/wiki/Transformation_matrix )。这有助于将每个对象放置在 3D 空间中。将变换矩阵留空会将对象放置在 3D 场景的中心 (x=0, y=0, z=0)。

我们为图中的每个节点设置了适当的转换。利用几何手柄如果添加了新对象或者您想重新定位现有对象。这些可以在演示中
通过右键单击对象并从上下文菜单中选择“显示句柄”来启用。完成重新定位后,新矩阵将输出到控制台并可用于更新 ADT 图。

未来的工作

使 ADT 和 HOOPS 之间的集成对开发人员更加友好的几项举措:
创作工具– 我们假设 3D 模型数据(名称、位置和方向)已经存在于 ADT 图中。允许在 3D 场景中创作和编辑此数据然后保存到 ADT 图形的示例代码和随附的 UI 将是有益的。
IFC 到 ADTL– IFC 是一种标准的开源建筑和施工文件格式,自然适用于分层对象组织。IFC 文件通常按建筑领域(建筑、机械、电气、管道)、楼层、空间(房间)和对象进行组织。HOOPS Exchange 提供对 IFC 数据的 API 访问,并可以预填充建筑物的 ADTL 表示。
信号R– 参考实现使用 Restful API 在五秒计时器上查询 ADT 图。获取实时数据的首选方式是通过SingalR,WebSocket 数据传输的包装器。
对象实例化– 将 ADT 中引用的每个 3D 对象的实例加载到 3D 场景中。如果在不同位置多次加载同一个对象,这将是低效的。相反,可以对 3D 对象的单个实例进行流式传输、加载到内存并多次绘制。不使用 loadSubtreeFromScsFile(),而是创建一个破碎的 SCZ 文件
关于HOOPS可视化

Tech Soft 3D的旗舰图形引擎已为20多年来成功合作的程序提供最先进的图形支持,这些软件包括来自Oracle,SOLIDWORKS,Trimble,Hexagon,ANSYS,3D Systems,Mitutoyo,Actify等。全球各地的公司都依赖HOOPS Visualize在平台,设备和图形卡之间实现极高的性能,和一致的稳定性。有兴趣探索HOOPS Visualize API功能的开发人员可以与我们联系

关于Tech Soft 3D

Tech Soft 3D是全球领先的开发工具提供商,可帮助软件团队交付成功的应用程序。Tech Soft 3D成立于1996年,总部位于俄勒冈州本德市,并在加利福尼亚州,法国,英国和日本设有办事处。该公司的工具包产品为全球数亿台计算机上运行的近500个独特应用程序提供支持。

扫码关注“HOOPS”微信公众号,及时获取更多hoops技术资讯


扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP