FEATURED · 精选文章

如何从零快速搭好一套数字孪生系统?OpenTwins 开源平台实战手记

发布时间 / 2026/8/20 9:51:56
来源 / 创域科博编辑部
栏目 / 资讯中心
如何从零快速搭好一套数字孪生系统?OpenTwins 开源平台实战手记 如何从零快速搭好一套数字孪生系统OpenTwins 开源平台实战手记【免费下载链接】opentwinsInnovative open-source platform that specializes in developing next-gen compositional digital twins项目地址: https://gitcode.com/gh_mirrors/op/opentwins你有没有过这样的时刻会议室里老板指着大屏问我们的设备现在到底什么状态你只能打开三个不同的系统来回切换数据对不上、格式不统一、历史记录查不到。这个场景几乎是每个做物联网系统的人共同的痛。而今天要聊的 OpenTwins正是一个专门为解决这类问题而生的开源数字孪生平台——它把定义模型、接入数据、可视化展示整条链路串在一起让你用尽量少的代码快速搭出一套可扩展的数字孪生系统。数字孪生的真正价值不在于把模型做得多么华丽而在于让物理世界的每一次呼吸都能在数字世界里留下回声。从一个凌晨三点的告警说起想象这样一个画面凌晨三点值班室的手机突然响了是温度传感器发来的告警。你爬起来打开监控页面却发现仪表盘上只有一串没人看得懂的原始数据——没有历史曲线、没有设备档案、也不知道这台设备昨天是否已经出过异常。你只能打电话给现场让老师傅凭经验判断。问题出在哪里不是传感器太少而是数据根本没有被组织起来。设备信息散落在文档里实时数据躺在消息队列里历史数据又埋在另一个数据库里它们之间毫无关联。传统物联网项目做到后期几乎都会长出这种信息孤岛而你真正需要的是一个能把设备、数据、模型统一装进一个数字分身里的中枢。OpenTwins 就是为这个中枢而生的。它是一个完全开源的数字孪生开发平台让你为每一台真实设备建立一个数字副本——这个副本既包含设备的基本档案又实时接收它的运行数据还能挂上预测模型和 3D 模型。它的核心组件 Eclipse Ditto 负责管理这些副本Eclipse Hono 负责收纳各种协议的设备数据Grafana 负责把一切变成看得懂的图表整条链路全部由开源组件拼装而成。先搞清楚这套平台为谁而设如果你符合下面任意一条OpenTwins 就很值得你花一个下午试试你是物联网开发者正被每个项目都要重新造一套监控系统折磨你是系统集成商需要给客户交付一个能看、能管、能扩展的数字孪生 demo你是高校或实验室的研究者想把数字孪生概念快速落地成一个可运行的实验环境。反过来如果你需要的仅仅是一块能显示几个数字的看板或者你的项目要求极致的生产级稳定性那么现阶段你或许应该谨慎一些——OpenTwins 仍在活跃开发中官方明确建议暂不要直接用于生产环境这一点下文还会展开讲。用三个生活化比喻搞懂核心概念在动手之前我们先花两分钟把 OpenTwins 的三个核心概念讲透它们不复杂但理解透了能帮你少走很多弯路。第一个概念类型Type——它就像烘焙用的模具。同一个模具能压出一模一样的饼干类型也一样。你只需定义一次汽车类型写明它有哪些属性和特征之后就能批量生成无数辆同款汽车数字孪生保证每辆车的结构完全一致。如果你跳过类型直接逐个创建就好比用手捏饼干每块形状都不同后期维护会非常痛苦。第二个概念特征Feature——它像仪表盘上的一只表。一辆车有速度表、油量表各自独立显示互不干扰。数字孪生里的特征就是这个逻辑汽车的特征可以是GPS车轮的特征可以是速度和方向每个特征下还可以挂多个属性比如数值和时间戳。你把想要采集的变量拆成一个个特征数据来了往对应的格子里填就行。第三个概念组合Composition——它像乐高积木。一辆车不是凭空存在的它由四个车轮组成。OpenTwins 允许你定义这种父子关系把车轮类型设为汽车类型的子类型指定实例数量为 4那么当你创建一辆汽车孪生时四个车轮孪生会被自动批量生成。这正是组合式数字孪生的核心魅力——拆得开、合得上、互不干扰。动手第一步把平台跑起来理论聊够了现在进入正题。你只需要一台装了 Docker、Kubernetes 和 Helm v3 的机器。没有现成集群用 minikube 在本地拉一个即可minikube start --cpus 4 --disk-size 40gb --memory 8192 kubectl config use-context minikube接着把官方 Helm 仓库加进来然后一键部署helm repo add ertis https://ertis-research.github.io/Helm-charts/ helm upgrade --install opentwins ertis/OpenTwins --wait --dependency-update等上几分钟用kubectl get pods看到一堆 Running 状态的服务就说明平台起来了。装好之后还有一步关键配置打开 Grafana默认地址http://localhost:3000账号密码默认都是admin在插件管理里启用 OpenTwins 应用把 Eclipse Ditto 和 Extended API 的地址填进插件配置里保存后你就能在左侧菜单看到 OpenTwins 的入口了。部署细节可参考 docs/docs/installation/using-helm.mdx。动手第二步定义类型像填表一样简单部署完成我们来做一件最有成就感的事用界面定义一个汽车类型。进入 OpenTwins 的 Types 页面点 Create new type你会看到一份很友好的表单Identification命名空间填exampleID 填car它俩合起来就是这台孪生的唯一标识example:carType information填名称、描述选一个默认策略Features添加一个名为gps的特征——这就是我们要实时采集的数据。点击创建后你会在右侧看到自动生成的 JSON 结构这正是底层 Eclipse Ditto 的 Thing 模型。不用担心看不懂界面已经帮你包好了。接下来如法炮制为车轮创建类型但这次注意进入汽车类型的 Children 页签再新建这样车轮会自动成为汽车的子类型你还能直接指定实例数量——填 4。车轮的特征就两个velocity和direction。最后去 Twins 页面点 Create a new twin选择汽车类型剩下的交给平台一辆汽车 四个车轮五个数字孪生瞬间生成父子关系、特征结构全部就位。从零到拥有一个完整的组合式数字孪生全程不用写一行代码。动手第三步让数据真正流动起来有了骨架还差血液。数字孪生没有真实数据支撑就只是一堆空壳 JSON。这里我们用 MQTT 把模拟数据灌进去。首先说一个关键知识点Eclipse Ditto 只认它自己的 Ditto Protocol 消息格式。好消息是平台安装时已经自动建好了一个 MQTT 源连接mosquitto-source-connection只要你的消息符合协议格式发到telemetry/#主题下就会被自动接收。所以我们要做的就是按格式说它的语言。装好依赖后运行下面这段精简版的 Python 脚本记得把 broker 地址和端口换成你自己的import paho.mqtt.client as mqtt import random, time, json broker, port localhost, 1883 client mqtt.Client() client.connect(broker, port, 60) def msg(name, value): return { topic: fexample/{name}/things/twin/commands/merge, headers: {content-type: application/merge-patchjson}, path: /features, value: value } while True: t round(time.time() * 1000) # 汽车 GPS gps {gps: {properties: { latitude: random.uniform(-90, 90), longitude: random.uniform(-180, 180), time: t}}} client.publish(telemetry/example/mycar, json.dumps(msg(mycar, gps))) # 四个车轮 for i in range(1, 5): w {velocity: {properties: {value: random.uniform(0, 100), time: t}}, direction: {properties: {value: random.uniform(-45, 45), time: t}}} client.publish(ftelemetry/example/mycar:wheel_{i}, json.dumps(msg(fmycar:wheel_{i}, w))) time.sleep(5)脚本跑起来后回到 Twins 页面点开任意一个孪生你会发现特征里的数值已经被实时刷新了。如果没动静先用 MQTT Explorer 订阅telemetry/#确认消息有没有到达 broker——这是排查问题时最常用的第一招。动手第四步把数据变成看得懂的图表数据进来了最后一步是可视化。OpenTwins 把 Grafana 当作主界面而且安装时已经预置好了 InfluxDB 数据源所以创建仪表板的过程非常顺滑在 Grafana 新建 Dashboard每个 Panel 的数据源选 InfluxDB用 Flux 语言写查询把对应孪生的特征字段捞出来。比如要看四个车轮的实时速度对比一段 Flux 就能搞定from(bucket: opentwins) | range(start: v.timeRangeStart, stop: v.timeRangeStop) | filter(fn: (r) r[_measurement] mqtt_consumer) | filter(fn: (r) strings.hasPrefix(v: r[thingId], prefix: example:mycar:wheel_)) | filter(fn: (r) r[_field] value_velocity_properties_value) | keep(columns: [thingId, _value, _time])最终效果大概是这样的一张地图显示汽车当前位置四个环形仪表显示车轮实时方向两条折线分别跟踪 GPS 轨迹和四轮速度对比——一台物流车的运行全貌一张屏就装下了。不止于此一个更进阶的场景跑通上面的流程你就已经完整走过了数字孪生的全链路。但 OpenTwins 的价值远不止实时监控四个字。让我换一个完全不同的视角——智慧温室大棚——来展示它能走多远。想象一座占地两公顷的现代化温室里面散布着上百个温湿度、光照、土壤传感器。传统做法是传感器 → 网关 → 云平台 → 看板仅此而已。但在 OpenTwins 里你可以为每个传感器建立数字孪生把它们按区域 → 大棚 → 传感器组织成树状结构再接上 FMI 仿真服务让一套作物生长模型实时输出理论状态下应该的温度曲线甚至挂上 Kafka-ML 训练的异常检测模型当某个传感器突然断流时模型会自动补上预测数据维持监控连续性直到设备恢复。这套真实数据 仿真数据 预测数据三路合一的能力才是数字孪生区别于普通物联网平台的分水岭。相关玩法可以参考 docs/docs/guides/fmi/concepts.mdx 和 docs/docs/guides/unity/plugin-docs.mdx。另外提一句如果你的目标是边缘设备比如一台树莓派OpenTwins 还有一套轻量级架构砍掉了 ML、3D 和时序数据库这些重组件改用 Mosquitto 做消息总线专门为低资源环境设计。参考 docs/docs/overview/img/lightweightArchitecture.png 就能直观看到它的取舍思路。容易踩的坑提前帮你排掉作为过来人有四个坑我建议你提前绕着走坑一忘记改默认密码。部署后 Grafana 和 InfluxDB 的默认凭据是公开的正式环境前务必改掉同时官方建议不要动 Eclipse Ditto 的账号密码否则可能引发连锁问题。坑二MQTT 消息到了 broker孪生却不更新。九成是协议格式不对。检查消息的topic、path、content-type是否完全符合 Ditto Protocol一个字都不能差。也可以用kubectl logs查看 Ditto 连接日志来定位。坑三连接状态显示正常却收不到数据。这在消息中间件断连后偶尔会发生界面里看着是 Active实则已失效。简单粗暴的解决办法停用再启用一次连接。坑四把 OpenTwins 直接搬进生产。项目仍在开发中官方明确标注不建议生产环境使用。做概念验证、写论文、做 demo 都很香但真要上生产建议评估稳定性并做好备份方案。接着往哪学给你的几条路径这篇文章只是起点想深入的话按你自己的方向挑想完整重走一遍实战直接对照 docs/docs/quickstart.mdx它包含了本文所有操作的完整版想理解底层设计读 docs/docs/overview/concepts.md 和 docs/docs/overview/architecture.md把 Ditto Protocol、Thing 模型、组合机制彻底吃透想了解每一种连接方式MQTT、Kafka、AMQP 及自定义映射看 docs/docs/guides/connection-creation.mdx想跑边缘设备示例参考 docs/docs/examples/raspberry-example/raspberry-example.mdx里面演示了用 HTTP 直接与 Ditto 交互的另一种玩法手动部署不依赖 Helm的配置文件都在files_for_manual_deploy/目录里适合想摸清每个组件细节的人。最后给你一个今晚就能做的小行动回顾一下这趟旅程我们做成了三件事用 Helm 一键拉起整套平台用界面定义类型、批量生成组合式数字孪生用 MQTT 灌入数据并在 Grafana 里画出实时图表。这一套流程跑下来你对数字孪生四个字的理解已经比很多只会念概念的人扎实多了。如果只能带走一个动作我建议你今晚做这件事别再让数据裸奔了——挑一台你手头真实存在、且目前完全没有任何监控手段的设备比如实验室的一台仪器、车库里的一台路由器用今天学到的方法给它建一个数字孪生让它成为你平台上第一个有体温的副本。哪怕只是每天刷一次温度曲线你也已经迈出了从看数据到管资产的第一步。路已经铺好了剩下的就是让真实世界的数据开始在你的数字世界里流动起来。【免费下载链接】opentwinsInnovative open-source platform that specializes in developing next-gen compositional digital twins项目地址: https://gitcode.com/gh_mirrors/op/opentwins创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻