十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

给一台真机器建“数字分身“:OpenTwins数字孪生平台零基础上手实战

给一台真机器建“数字分身“:OpenTwins数字孪生平台零基础上手实战 给一台真机器建数字分身OpenTwins数字孪生平台零基础上手实战【免费下载链接】opentwinsInnovative open-source platform that specializes in developing next-gen compositional digital twins项目地址: https://gitcode.com/gh_mirrors/op/opentwins先回答你最关心的问题OpenTwins 是一个专攻组合式数字孪生的开源平台它把 Eclipse Ditto、Eclipse Hono、InfluxDB、Grafana 等成熟组件拼装成一套完整工具链让你能用类型定义 自动实例化的方式给物理设备建出可以实时联动、层层嵌套的数字分身。本文不堆概念直接带你把一辆车搬进系统。先理解一件事数字孪生到底在解决什么想象你有一台工业机器人想随时知道它的实时状态、历史趋势甚至预测它什么时候会出故障。传统做法是设备数据存一个数据库、监控面板用另一套工具、预测模型再单独搭一套最后三套数据对不上。OpenTwins 的思路很朴素——把这台机器的所有信息静态属性 动态数据统一收敛到一个叫Thing的实体里。Thing 是 Eclipse Ditto 提供的抽象概念用 JSON 描述实体含静态的 attributes如型号、位置和动态的 features如温度、速度。平台再帮你把实时数据、模拟数据、AI 预测数据全部接进来数字孪生就成了这台机器的唯一查询入口。一张图看懂它的五脏六腑OpenTwins 采用微服务架构全部组件容器化官方推荐用 Kubernetes Helm 管理。看下面这张架构图记住四类颜色就够了蓝色核心Eclipse Ditto 负责孪生定义与管理Eclipse Hono 统一接收 MQTT/HTTP/CoAP 等协议数据MongoDB 存孪生状态InfluxDB v2 存时间序列数据Telegraf 负责采集入库Grafana 是主前端。绿色组合能力Extended API for Eclipse Ditto 在原生 API 之上加了一层类型与组合约束OpenTwins 的 Grafana 插件则让你在界面上直接操作孪生和类型。这是 OpenTwins 区别于其他方案的核心贡献。黄色机器学习Kafka-ML 管理模型生命周期能持续用数据流做训练和推理配套服务还能在设备断连时自动用模型补数据。红色3DUnity 编译成 WebGL 后由 Grafana 面板插件渲染点击 3D 模型还能联动其他面板。30分钟实操给一辆车建立可复现的数字孪生第一步一键部署平台前置条件Docker、Kubernetes或 K3s、Helm v3。本地开发建议用 minikube配置不低于 4 核 CPU、8GB 内存、40GB 磁盘。然后执行helm repo add ertis https://ertis-research.github.io/Helm-charts/ helm upgrade --install opentwins ertis/OpenTwins --wait --dependency-update部署完成后访问 Grafana进入Administration → Plugins启用 OpenTwins 插件在配置页填入 Eclipse Ditto 和 Extended API 的地址服务名分别是opentwins-ditto-nginx和opentwins-ditto-extended-api。这里提个醒默认密码是admin/admin正式使用前务必改掉 Grafana 和 InfluxDB 的默认凭据。第二步定义汽车和车轮两个类型类型Type是数字孪生的模板。打开插件里的Types页面创建类型example:car在 features 里加上gps。注意界面右侧会实时生成对应的 Ditto Thing JSON。接着进入 car 类型的children标签页创建子类型example:wheelfeatures 设为velocity和direction实例数量填 4。这一步是关键——它建立了一辆车由四个车轮组成的组合关系。第三步一键实例化出 5 个孪生进入Twins页面点Create a new twin选择 car 类型命名mycar。系统会自动生成 1 个汽车孪生 4 个车轮孪生关系一目了然不定义类型也能建孪生表单里选 from scratch 即可。但强烈建议用类型它标准化了结构、简化了批量创建还能保证数据一致性。给未来留条省力的路值得。第四步用 MQTT 注入真实数据Eclipse Ditto 要求数据按 Ditto Protocol 格式发送。安装时平台已自动建好一条mosquitto-source-connection订阅telemetry/#主题所以你只需把消息发到这个主题。下面这段 Python 脚本先pip install paho-mqtt每 5 秒模拟一次 GPS 和四轮数据import paho.mqtt.client as mqtt, json, random, time client mqtt.Client(mqtt.CallbackAPIVersion.VERSION2) client.username_pw_set(your_user, your_password) # 改成你的凭据 client.connect(localhost, 1883, 60) def pack(twin, value): return {topic: fexample/{twin}/things/twin/commands/merge, headers: {content-type: application/merge-patchjson}, path: /features, value: value} while True: t round(time.time() * 1000) client.publish(telemetry/example/mycar, json.dumps(pack(mycar, { gps: {properties: {latitude: random.uniform(-90, 90), longitude: random.uniform(-180, 180), time: t}}}))) for i in range(1, 5): client.publish(ftelemetry/example/mycar:wheel_{i}, json.dumps(pack( fmycar:wheel_{i}, {velocity: {properties: {value: random.uniform(0, 100), time: t}}, direction: {properties: {value: random.uniform(-45, 45), time: t}}}))) time.sleep(5)数据没进孪生三步排查先用 MQTT Explorer 确认消息到达 broker再检查是否连错了 Mosquitto 地址或端口最后看 Ditto 连接日志http://ditto-ip/api/2/connections/mosquitto-source-connection/logs。第五步在 Grafana 里把它画出来数字孪生数据落在 InfluxDB 的opentwinsbucket 里用 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)配上 GPS 当前位置、方向仪表盘和历史轨迹图最终效果类似这样它在哪些场景真的能打哪些场景别硬上值得用的地方组合式设备群一整条产线 若干机器人每个机器人 若干关节逐层定义类型、一次实例化天然形成层级关系。需要真实 模拟 预测三路数据对照比如预测模型给出的故障预警与真实传感器读数并列展示。轻量边缘场景官方提供 Lightweight 架构用 Mosquitto 替代 Kafka、去掉时间序列库和可视化组件可跑在树莓派上见文档 docs/docs/overview/architecture.md。劝退边界高频消息慎用 Hono官方明确指出 Eclipse Hono 在高消息频率下无法正确扩展此时应让 Ditto 直连 Mosquitto 或 RabbitMQ。不要在纯交互型可视化上期待它它强在数据联动而非设计稿级 UI。生产环境再等等文档标注平台仍在开发中不建议现阶段用于生产。选型前先做 PoC。避开这五个坑你的实践就成功了一半不改默认密码Grafana、InfluxDB 的默认凭据是公开的先改再部署。把 localhost 当服务地址集群内部访问要用 ClusterIP 或 NodePort别在 Grafana 数据源里填 localhost。不建类型直接裸建孪生单个可行但几十上百个孪生会失控维护成本爆炸。忽视消息格式不是任何 JSON 都能进 Ditto要么按 Ditto Protocol 发要么给连接加 JavaScript Mapping 做格式转换示例见 docs/docs/examples/string-example.mdx。一次装全量组件按需部署边缘设备用helm install ot ertis/OpenTwins-Lightweight别为省事背上 K8s 集群的内存开销。下一步从跑通到会用跑通上面五步你已经完成了从部署到可视化的最小闭环。继续深入推荐按这个顺序走学透组合与类型docs/docs/guides/definition/ 里的类型创建与 schema 指南理解图状类型与树状孪生的约束差异。接真实设备参考树莓派示例 docs/docs/examples/raspberry-example/用 HTTP API 直接创建孪生和连接。试 3D 联动用 Unity 编译 WebGL 场景导入 Grafana 面板文档在 docs/docs/guides/unity/。探索机器学习集成部署 Kafka-ML把预测结果写回孪生实现故障预警闭环见 docs/docs/guides/fmi/)。想快速拿到全部代码和文档直接git clone https://gitcode.com/gh_mirrors/op/opentwins仓库内docs/docs/就是完整手册files_for_manual_deploy/目录里还提供了不用 Helm 的裸部署 YAML适合想彻底搞清楚每个组件怎么连的人。最后留一个问题给你如果把这套类型 组合 实时同步的思路迁移到你自己手里的设备你的第一棵数字孪生树会长成什么样动手把第一辆车跑起来答案自然会浮现。【免费下载链接】opentwinsInnovative open-source platform that specializes in developing next-gen compositional digital twins项目地址: https://gitcode.com/gh_mirrors/op/opentwins创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表