基于摄影测量的数字孪生建设

news2024/11/24 9:55:06

在这篇博文中,我们将了解如何使用无人机拍摄的照片在数字孪生中创建现实世界环境的 3D 模型。

数字孪生是物理系统的虚拟表示,定期更新数据以模仿其所表示的资产的结构、状态和行为。 数字孪生可以通过在单一管理平台中连接多个数据源并提供可行的见解来实现更快、更好的决策。

然而,从头开始构建和管理数字孪生非常耗时、复杂且成本高昂。 它需要具有不同专业技能的开发团队共同努力构建结合不同来源数据的集成解决方案。 开发人员必须从流数据中生成实时洞察并创建情境化可视化,以更好地将最终用户与数据连接起来。

借助 AWS IoT TwinMaker,可以轻松创建物理环境的数字孪生,并构建应用程序,通过浏览器提供大型复杂物理结构的交互式 3D 数字表示。

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

1、概述

AWS IoT TwinMaker 的主要功能之一是能够将现有 3D 模型(例如 CAD 和 BIM 模型或点云扫描)导入到 AWS IoT TwinMaker 场景中,然后将来自其他系统的数据叠加在此可视化上。

AWS IoT TwinMaker 场景使用实时 WebGL 视口并支持 glTF 格式。 虽然 CAD 和 BIM 模型代表设计的资产结构,但在某些情况下,此类模型可能不存在,或者构建的资产可能与设计不同。 在数字孪生中提供尽可能反映当前现实的 3D 模型非常有价值。 有多种机制可用于创建现实世界的 3D 模型,其中两种流行的方法是激光扫描和摄影测量。

激光扫描使用专门且通常昂贵的设备来创建高度精确的物理环境 3D 模型。 相比之下,摄影测量是使用计算机视觉技术(包括运动结构 (SfM))从重叠的 2D 照片中提取 3D 信息的过程。

本文重点介绍如何使用低成本航空摄影平台(消费级四轴飞行器 – DJI Phantom 4 Pro)与摄影测量相结合,创建大面积的逼真模型,代表在 AWS IoT TwinMaker 中建模的资产。

采用这种方法,你可以快速构建资产的 3D 模型,而使用激光扫描创建该模型可能非常昂贵或不可能。 该模型可以通过后续的无人机飞行快速而频繁地更新,以确保你的数字孪生密切反映现实。 首先需要注意的是,该模型将有利于照片级真实感而不是生成模型的绝对精度。

在本博客中,我们还将介绍如何通过自动飞行计划和执行来捕获地理参考照片数据集。 然后,你可以通过摄影测量处理管道提供这些照片,该管道会在 AWS IoT TwinMaker 中自动创建生成的 3D 可视化场景。

我们使用流行的免费开源摄影测量软件将数据处理为 glTF 格式,以便导入到 AWS IoT TwinMaker。 处理管道还支持可从 DroneDeploy 或其他摄影测量引擎导出的 OBJ 文件。

2、解决方案

2.1 数据采集

摄影测量依赖于源航空照片的某些特征来创建有效的 3D 模型,包括:

  • 图像之间高度重叠
  • 在任何照片中都看不到地平线
  • 捕捉最低点和非最低点照片
  • 捕获高度基于模型所需的分辨率

虽然熟练的无人机飞行员可以手动捕捉用于摄影测量的照片,但你可以通过自动化飞行和捕捉来获得更一致的结果。 飞行计划工具可以创建自主飞行计划,捕获相关位置、高度和重叠程度的图像,以进行有效的摄影测量处理。

下面显示的是 DroneDeploy 的飞行计划界面,DroneDeploy 是一个流行的现实捕获平台,用于捕获内部和外部空中和地面视觉数据,我们用它来捕获示例中的图像。

在这里插入图片描述

图 1 – DroneDeploy 飞行计划界面

我们使用 DroneDeploy 平台的飞行计划和自主操作功能来捕获代表要在 AWS IoT TwinMaker 中建模的资产的数据。 感兴趣的资产是西澳大利亚州弗里曼特尔的一座废弃发电站。

如之前的截图所示,该航班飞行高度为 160 英尺,覆盖面积为 6 英亩,飞行时间不到 9 分钟,拍摄了 149 张图像。 接下来,我们展示了从无人机飞行中捕获的航拍照片的两个示例,这些照片随后用于生成 3D 模型,说明了图像之间的高度重叠。

在这里插入图片描述

图 2 – 有效摄影测量的高度图像重叠

2.2 摄影测量处理管线

捕获航空图像后,必须将其输入摄影测量引擎以创建 3D 模型。 DroneDeploy提供了强大的摄影测量引擎,能够以OBJ格式导出引擎创建的3D模型,如下图所示
在这里插入图片描述

我们创建了一个摄影测量处理管线,利用流行的免费开源 OpenDroneMap 平台的 NodeODM 组件以完全无服务器的方式处理地理配准图像。 该管道利用 AWS Fargate 和 AWS Lambda 进行计算,在 AWS IoT TwinMaker 中创建一个场景作为输出,其中包含 OpenDroneMap 创建的 3D 模型。

该管道还支持处理由 DroneDeploy 摄影测量引擎创建的 3D 模型,通过从 DroneDeploy 导出的 OBJ 文件在 AWS IoT TwinMaker 中创建场景。

摄影测量处理管道架构如下图所示。
在这里插入图片描述

图 4 – 处理管线架构

使用 OpenDroneMap 摄影测量处理引擎执行管道的步骤如下:

  • 使用来自公共 docker.io 注册表的 OpenDroneMap 的 NodeODM 映像启动 Fargate 任务
  • 无人机飞行获得的一组地理参考图像以 .zip 文件上传到 Amazon S3 存储桶
    上传 zip 文件会导致发布 Amazon S3 事件通知,从而触发数据处理器 Lambda 的执行
  • 数据处理器 Lambda 解压缩文件,在 Fargate 中运行的 NodeODM 中启动新的处理作业,并将所有图像上传到 NodeODM 任务
  • 状态检查 Lambda 定期轮询 NodeODM 任务以检查处理作业是否完成
  • 当 NodeODM 处理作业完成时,作业的输出将保存在处理后的 S3 存储桶中
  • 保存输出 zip 文件会导致发布触发 glTF Converter Lambda 的 Amazon S3 事件通知
  • glTF Lamba 将 NodeODM 处理作业的 OBJ 输出转换为二进制 glTF 文件,并将其上传到工作区 S3 存储桶,该存储桶与 AWS IoT TwinMaker 工作区关联,并在 CloudFormation 堆栈创建工作区时生成
  • glTF Lambda 使用 glTF 文件在 AWS IoT TwinMaker 工作区中创建一个新场景

如果你使用 DroneDeploy 摄影测量引擎创建 3D 模型,则可以将导出的 OBJ zip 文件直接上传到“已处理”存储桶,步骤 6-8 将正常完成。

当摄影测量处理管道完成执行时,将在包含生成的 3D 模型的 AWS IoT TwinMaker 工作区中创建一个新场景,如下所示为感兴趣的资产。
在这里插入图片描述

图 5 – AWS IoT TwinMaker 中生成的 3D 场景

3、先决条件

需要一个 AWS 帐户来设置和执行本博客中的步骤。 AWS CloudFormation 模板将配置和安装必要的 VPC 和网络配置、AWS Lambda 函数、AWS Identity and Access Management (IAM) 角色、Amazon S3 存储桶、AWS Fargate 任务、应用程序负载均衡器、Amazon DynamoDB 表和 AWS IoT TwinMaker 工作区 。 该模板设计为在北弗吉尼亚地区 (us-east-1) 运行。 你可能会因以下某些服务而产生费用:

  • Amazon Simple Storage Service(Amazon S3)
  • Amazon DynamoDB
  • Amazon VPC
  • Amazon CloudWatch
  • AWS Lambda processing and conversion functions
  • AWS Fargate
  • AWS IoT TwinMaker

4、部署摄影测量处理管线

下载示例 Lambda 部署包。 此软件包包含上述数据处理器 Lambda、状态检查 Lambda 和 glTF 转换器 Lambda 的代码

导航到 Amazon S3 控制台

创建 S3 存储桶

将下载的 Lambda 部署包上传到上一步中创建的 S3 存储桶。 保持文件原样压缩

将 Lambda 部署包放入 S3 后,启动此 CloudFormation 模板

在“指定堆栈详细信息”屏幕的“参数”部分下,执行以下操作:

  • 将 Prefix 参数值更新为存储桶名称的唯一前缀。 此前缀将确保堆栈的存储桶名称全局唯一
  • 将 DeploymentBucket 参数值更新为你上传 Lambda 部署包的存储桶的名称
  • 如果你正在处理大型数据集,请根据允许的值增加 Fargate 任务的内存和 CPU 值,如此处所述
  • 选择创建堆栈来创建摄影测量处理管道的资源

完成后,导航到新的 S3 着陆桶。 可以在资源选项卡中找到链接,如下所示
在这里插入图片描述

图 6 – 上传存储桶资源

将包含图像的 zip 文件上传到 S3 存储桶

5、运行摄影测量处理管线

上传包含地理参考图像的 zip 文件后,摄影测量处理管道将自动启动。

处理作业可能需要一个多小时(取决于提供的图像数量以及 Fargate 处理任务中提供的 CPU 和内存),你可以通过查看状态的 Amazon CloudWatch 日志中的状态来跟踪作业的进度 检查Lamda。

当处理作业处于活动状态时,状态检查 Lambda 将在作业运行时输出作业的状态(按 5 分钟计划)。 输出包括以百分比值表示的处理作业的进度,如下所示。

在这里插入图片描述

图 7 – 摄影测量作业进度

6、基于 3D 模型构建数字孪生

当摄影测量处理管道完成并在 AWS IoT TwinMaker 工作区中创建新场景后,你可以开始使用 3D 模型将绑定到数据源的组件关联起来,为数据提供视觉上下文,并提供基于数据驱动的视觉提示 状况。

可以使用适用于 Grafana 的 AWS IoT TwinMaker 应用程序插件配置仪表板,以与其他用户共享你的数字孪生。

7、清理

请务必清理此博客中的工作以避免收费。 按此顺序完成后删除以下资源

  • 从 AWS IoT TwinMaker 工作区删除任何创建的场景
  • 删除 Landing、Processed 和 Workspace S3 存储桶中的所有文件
  • 删除 CloudFormation 堆栈

8、结束语

在本博客中,我们创建了一个无服务器摄影测量处理管道,该管道可以通过开源软件将无人机图像处理为 3D 模型,并根据生成的 3D 模型在 AWS IoT TwinMaker 中创建场景。此外,该管道还可以处理其他摄影测量引擎(例如 DroneDeploy 提供的引擎)创建的 3D 模型,并导出到 OBJ。

尽管该管道已用于演示无人机图像的处理,但可以使用任何地理参考图像数据。 仅使用消费级硬件即可快速创建大型现实世界资产的逼真 3D 模型,使你能够维护最新的模型,这些模型可以绑定到数据源并与其他用户共享,从而使他们能够根据数据做出决策 在丰富的视觉环境中显示的数据。

本博客中描述的管道可在此 GitHub 存储库 中找到。


原文链接:基于摄影测量的数字孪生 — BimAnt

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十一、结合数字孪生与时间技术进行多维分析设计与实施

大数据可视化中心以主题为分析对象,选择业务分类下的某个主题,可以在数据面板中展示其二维图表,在地图中标记其空间分布,并叠加其相应的二维或三维图层。 1、界面设计 其主界面设计详上图,各部分功能介绍如下: 1.1、主题与图层面板,从上到下,从左到右分别是: ①折…

Linux--core dump打开的情况下,运行下面的代码,会发生什么?

代码&#xff1a; #include <iostream> #include <signal.h> #include <unistd.h>using namespace std;void catchSig(int signum) {cout<< "进程捕捉到了一个信号&#xff0c;正在处理中&#xff1a; "<< signum << " p…

基于Spring Boot的招聘网站的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的招聘网站的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java springboot框…

Linux 进程间通信, 管道

文章目录 前言一、常见的进程间通信方式二、如何实现管道通信三、示例代码解析四、管道的读写行为总结 前言 在多进程编程中&#xff0c;进程间通信&#xff08;Inter-Process Communication&#xff0c;IPC&#xff09;是一种重要的技术手段&#xff0c;它使得不同进程可以安…

函数的声明和定义

1、函数声明 //告诉编译器有一个函数叫什么&#xff0c;参数是什么&#xff0c;返回类型是什么。但是具体是不是存在&#xff0c;函数声明决定不了。 //函数的声明一般出现在函数的使用之前。要满足先声明后使用。 //函数的声明一般要放在头文件中的。 2、函数的定义 //函数…

Linux(进程间通信详解)

进程间通信&#xff0c;顾名思义&#xff0c;就是进程与进程之间互通信交流&#xff0c;OS保证了各进程之间相互独立&#xff0c;但这不意味着进程与进程之间就互相隔离开&#xff0c;在不少的情况下&#xff0c;进程之间需要相互配合共同完成某项6任务&#xff0c;这就要求各进…

8月9日算法刷题【6道题】

8月9日算法刷题 一、排序1. 成绩排序&#xff08;清华大学考研机试题&#xff09;考点&#xff1a;结构体排序在结构体中定义排序使用比较器定义排序 注意问题&#xff1a;需要处理 值相等时 先后顺序 2. 成绩排序2( 清华大学考研机试题 )1. 从尾到头打印链表本题考点栈 2. 在O…

hgdbdevelop弹窗无法使用

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Microsoft Windows (64-bit) 10 版本&#xff1a;4.5 文档用途 解决双击exe程序出现弹窗&#xff0c;点击Disable Modules and Continue没反应 详细信息 1.打开管理工具exe程序&#xff0c;出现弹窗如下图&…

【运维小能手】交换机二层环路问题如何处理

1 网络业务故障&#xff0c;如何确认存在环路&#xff1f; 网络业务故障后&#xff0c;如发生二层环路&#xff0c;通常会存端口流量数据风暴和反复大量的MAC漂移现象。因此&#xff0c;在骨干链路所在的节点&#xff0c;通过如下三步操作&#xff1a; 图1&#xff1a;环…

向量检索在大模型应用场景的技术和实践

一、向量检索应用简介 向量是多维数学空间里的一个点&#xff0c;在各维度上的坐标的一串数字。这个点就是来源于真实世界的物体进行数字化之后在数学空间的投影。那么不同点之间有一个数学关系&#xff0c;就是距离&#xff0c;距离远近就代表两个物体的相似程度。 非结构化数…

Semantic and Syntactic Enhanced Aspect Sentiment Triplet Extraction

创新点 图-序列双重表示: 通过将句子中的语义和句法关系表示为图&#xff0c;并使用图神经网络&#xff08;GNNs&#xff09;进行编码&#xff0c;同时保留原始句子的顺序信息&#xff0c;S3E2能够更精确地捕捉三元组元素之间的复杂关系。许多传统方法可能只依赖于线性或浅层表…

分支和循环语句(1)(C语言)

目录 什么是语句&#xff1f; 分支语句&#xff08;选择结构&#xff09; if语句 悬空else if书写形式的对比 switch语句 在switch语句中的 break default子句 循环语句 while循环 while语句中的break和continue for循环 语法 break和continue在for循环中 for语句和…

vue3 vite gzip

1、首先前端项目里安装 vite-plugin-compression 插件 yarn add vite-plugin-compression 2、在 vite.config.js 中 import vue from vitejs/plugin-vue import { defineConfig } from vite import compressPlugin from vite-plugin-compressionexport default defineConf…

【TI毫米波雷达笔记】sdk传参时的type避坑

【TI毫米波雷达笔记】sdk传参时的type避坑 这个函数要传一个结构体进去 然后结构体里面有个adcoutcfg结构体变量 adcoutcfg结构体里面共有三个变量 一个adcbitformat结构体 另外两保留 点开adcbitformat结构体发现是个32位段 一共四级结构体 那么请问 为什么adcoutcfg变量不直…

管理类联考——逻辑——论证逻辑——汇总篇——真题和典例——支持

支持 没有特点的 199-2017-1-30——支持论点 离家300米的学校不能上&#xff0c;却被安排到2千米外的学校就读&#xff0c;某市一位适龄儿童在上小学时就遭遇了所在区教育局这样的安排&#xff0c;而这一安排是区教育局根据儿童户籍所在施教区做出的。根据该市教育局规定的“…

科技前沿:一文带你读懂“星闪点亮万物互联”

目录 一、星闪简介 二、星闪技术的模式 三、星闪技术六大优势 四、应用场景 智能汽车 智能工业 智能穿戴 智能家居 智能终端 一、星闪简介 星闪NearLink是由中国信通院牵头发起的星闪联盟&#xff08;NearLink Alliance&#xff09;推出的一种新一代近距离无线连接技…

什么是DNS欺骗及如何进行DNS欺骗

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、什么是 DNS 欺骗&#xff1f;二、开始1.配置2.Ettercap启动3.操作 总结 前言 我已经离开了一段时间&#xff0c;我现在回来了&#xff0c;我终于在做一个教…

Spring Boot集成Mybatis Plus通过Pagehelper实现分页查询

文章目录 0 简要说明Pagehelper1 搭建环境1.1 项目目录1.2 项目搭建需要的依赖1.3 配置分页插件拦截器1.4 源代码启动类实体类数据层xml映射文件业务层业务层实现类控制层接口配置swagger请求体 2 可能出现的疑问或者问题2.1 关于total属性疑问2.2 分页不生效问题 3 案例说明3.…

【高危】 Zoom Desktop Client for Windows <5.14.5 权限升级漏洞

漏洞描述 Zoom 是一种用于视频会议、在线会议和远程协作的软件平台。 Zoom Desktop Client for Windows 5.14.5 之前版本由于对数据的真实性验证不足&#xff0c;经过身份验证的攻击者可通过网络访将权限升级为 SYSTEM 用户。 漏洞名称Zoom Desktop Client for Windows <…

IDEA如何调试Stream API

Stream API现在在实际开发中应用非常广泛&#xff0c;经常会遇到需要调试Stream API的场景&#xff0c;这篇文章主要讲解如何使用IDEA调试Stream Testpublic void test(){Stream.of(10, 20, 30, 40, 50).mapToInt(e->e*10).filter(e->e>200).forEach(System.out::pri…