クラウド・プラットフォーム

デジタルツイン

現実の機器をデジタルに再現するモデル。

概要

デジタルツイン(Digital Twin)とは、現実世界の物理的なオブジェクト、システム、またはプロセスを、デジタル空間でリアルタイムに忠実に再現・模倣するバーチャルモデルのことです。単なるシミュレーションモデルとは異なり、デジタルツインは現実からのセンサーデータをリアルタイムで取り込み、常に現実の状態を反映し続けます。また、デジタルツイン上でシミュレーションを行った結果を現実の制御にフィードバックする双方向性も特徴です。

デジタルツインを構成する3つの核心要素:

  1. 物理エンティティ: 現実世界の機器・設備・システム(工場の製造ライン、航空機エンジン、ビルなど)
  2. デジタルモデル: 物理エンティティの構造・振る舞い・状態をデジタルで表現したモデル
  3. データ接続: 物理エンティティとデジタルモデル間でリアルタイムにデータを同期する仕組み

デジタルツインは以下の用途に使われます。

  • 予知保全: デジタルモデル上で機器の劣化を予測し、故障前にメンテナンスを計画
  • 設計最適化: デジタル上でシミュレーションを行い、物理プロトタイプのコストと時間を削減
  • オペレーション最適化: リアルタイムデータを基に、製造条件・エネルギー消費・物流を最適化
  • トレーニング: 安全なデジタル環境でオペレーターをトレーニング

歴史・背景

デジタルツインの概念は、2002年にミシガン大学のMichael Grieves教授が製品ライフサイクル管理(PLM)の文脈で提唱したとされています。しかし当時はデータ収集・処理能力の限界から、理論的な概念にとどまっていました。

実用化が進んだのはNASAで、2010年に航空機や宇宙船のデジタルシミュレーションモデルを「デジタルツイン」と呼び始めました。特に宇宙船の状態監視や故障診断への活用が先駆けとなりました。

2010年代後半、IoTセンサーのコスト低下、クラウドコンピューティングの普及、AIの発展が重なり、製造業を中心に急速に普及しました。GEはジェットエンジンのデジタルツインを構築し、予知保全でメンテナンスコストを大幅削減。シーメンスは工場全体のデジタルツインを「デジタル工場」と呼び、製造プロセスの最適化に活用しました。

2020年代には、都市全体をデジタルツインで再現する「スマートシティ」プロジェクトも登場。シンガポール国家デジタルツイン、バルセロナのスマートシティプロジェクト、東京都の都市デジタルツイン計画など、都市規模への応用が広がっています。

技術仕様

デジタルツインの成熟度レベル

レベル名称説明実現技術
0デジタルモデルCADモデル等の静的モデルCAD/CAE
1デジタルシャドウ現実からデータを受け取るが制御はしないIoTセンサー + クラウドDB
2デジタルツイン双方向: 現実を反映し、現実を制御するIoT + AI + 制御システム
3適応デジタルツイン自律的に学習・最適化・自己更新するML + 強化学習

デジタルツインのデータモデル(JSON-LD例)

{
  "@context": "https://www.w3.org/ns/td/",
  "@type": "Thing",
  "id": "urn:factory:machine:cnc-001",
  "title": "CNCマシン 001号機",
  "properties": {
    "spindle_speed": {
      "type": "number",
      "unit": "rpm",
      "observable": true,
      "readOnly": true
    },
    "target_speed": {
      "type": "number",
      "unit": "rpm",
      "observable": true,
      "writeOnly": false
    },
    "temperature": {
      "type": "number",
      "unit": "celsius",
      "observable": true
    },
    "vibration_rms": {
      "type": "number",
      "unit": "m/s2",
      "observable": true
    },
    "tool_wear_percent": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "observable": true
    }
  },
  "actions": {
    "emergencyStop": {
      "description": "緊急停止コマンド"
    },
    "setTargetSpeed": {
      "input": {"type": "number", "unit": "rpm"}
    }
  },
  "events": {
    "overtemperatureAlert": {
      "data": {"type": "number"}
    }
  }
}

Azure Digital Twinsのモデル定義(DTDL)

{
  "@id": "dtmi:factory:CNCMachine;1",
  "@type": "Interface",
  "displayName": "CNCマシン",
  "contents": [
    {
      "@type": "Property",
      "name": "spindleSpeed",
      "schema": "double",
      "displayName": "スピンドル回転速度"
    },
    {
      "@type": "Property",
      "name": "toolWearPercent",
      "schema": "double",
      "displayName": "工具摩耗率"
    },
    {
      "@type": "Telemetry",
      "name": "vibration",
      "schema": "double",
      "displayName": "振動値"
    },
    {
      "@type": "Relationship",
      "name": "isPartOf",
      "target": "dtmi:factory:ProductionLine;1",
      "displayName": "製造ラインに属する"
    }
  ]
}

動作原理

リアルタイム同期のアーキテクチャ

[物理層]
 CNCマシン(振動センサー/温度センサー/エンコーダ)
    ↓ OPC-UA / MQTT (10ms-1秒間隔)
[エッジ層]
 産業用PC / PLCゲートウェイ
    ↓ データ前処理・集約
[クラウド層]
 IoT Hub / IoT Core
    ↓ イベントルーティング
 デジタルツインエンジン(Azure Digital Twins等)
    ↓ モデル更新 (双方向)
 [シミュレーションエンジン]   [MLエンジン]
  劣化モデル/物理モデル        異常検知/予測
    ↓                            ↓
 制御フィードバック          アラート/推奨アクション

 製造実行システム(MES)
    ↓ 制御指令
 CNCマシン(制御)

予知保全のロジック

import numpy as np
from sklearn.ensemble import IsolationForest
import boto3
import json

class DigitalTwinPredictiveMaintenance:
    """デジタルツインベースの予知保全"""

    def __init__(self, device_id):
        self.device_id = device_id
        self.anomaly_detector = IsolationForest(contamination=0.05)
        self.vibration_history = []
        self.iot_client = boto3.client('iot-data', region_name='ap-northeast-1')

    def update_twin(self, sensor_data: dict):
        """センサーデータでデジタルツインを更新"""
        # デバイスシャドウに現在の状態を反映
        shadow_update = {
            "state": {
                "reported": {
                    "vibration_rms": sensor_data["vibration_rms"],
                    "temperature": sensor_data["temperature"],
                    "spindle_speed": sensor_data["spindle_speed"],
                    "tool_wear_estimated": self._estimate_tool_wear(sensor_data)
                }
            }
        }
        self.iot_client.update_thing_shadow(
            thingName=self.device_id,
            payload=json.dumps(shadow_update)
        )

    def _estimate_tool_wear(self, data: dict) -> float:
        """振動データから工具摩耗率を推定(物理モデル)"""
        self.vibration_history.append(data["vibration_rms"])
        if len(self.vibration_history) < 100:
            return 0.0

        # Taylor's tool life equation の簡略モデル
        avg_vibration = np.mean(self.vibration_history[-100:])
        baseline_vibration = 0.5  # m/s2 (新品時)
        wear_rate = (avg_vibration / baseline_vibration - 1.0) * 100
        return min(100.0, max(0.0, wear_rate))

    def predict_failure(self, sensor_batch: list) -> dict:
        """バッチデータから故障予測"""
        features = np.array([[d["vibration_rms"], d["temperature"]]
                              for d in sensor_batch])

        # 異常検知
        predictions = self.anomaly_detector.fit_predict(features)
        anomaly_count = np.sum(predictions == -1)
        anomaly_rate = anomaly_count / len(predictions)

        # 工具交換の推奨判断
        current_wear = self._estimate_tool_wear(sensor_batch[-1])

        return {
            "anomaly_rate": float(anomaly_rate),
            "tool_wear_percent": current_wear,
            "recommended_action": "tool_change" if current_wear > 80 else
                                   "schedule_inspection" if anomaly_rate > 0.1 else
                                   "normal_operation",
            "estimated_remaining_life_hours": (100 - current_wear) / 5  # 簡略計算
        }

用途・ユースケース

製造業:工場デジタルツイン

工場全体の設備・ライン・物流をデジタルツインで再現。生産シミュレーションにより、段取り変え時間の最適化や品質不良の根本原因分析が可能です。シーメンス、GE、三菱電機などが積極的に導入しています。

航空宇宙:エンジン双子

GEアビエーションはジェットエンジン1台ごとにデジタルツインを構築。飛行中のセンサーデータを地上でリアルタイム解析し、次のメンテナンス時期を精度高く予測することでMRO(整備・修理・オーバーホール)コストを20-30%削減しています。

インフラ:橋梁・建築物

橋梁や高層ビルの構造をデジタルツインで管理。センサーで計測した変形・応力データをリアルタイムに可視化し、地震や強風後の安全確認や長期的な劣化予測に活用します。

スマートシティ

都市全体の交通流、エネルギー消費、住民の移動パターンをデジタルツインで再現。信号機の最適化、公共交通のダイヤ調整、災害時の避難シミュレーションなどに活用します。

医療:患者デジタルツイン

個人の医療データ(ゲノム、病歴、バイタルサイン)を基にした患者デジタルツインにより、個人に最適化した治療法のシミュレーションが研究されています。

実装・開発のポイント

デジタルツインとデバイスシャドウの違い

デバイスシャドウ(基礎):
- 単一デバイスの状態をJSONで保持
- 主にdesired/reported の同期
- オフライン対応が目的

デジタルツイン(発展):
- 複数デバイス・システムの関係性を含むモデル
- 物理的な振る舞いのシミュレーション機能
- 予測・最適化・シミュレーションが目的
- 3Dビジュアライゼーションとの統合

グラフ構造によるシステム関係モデリング

Azure Digital Twinsでは、複数のデジタルツインをグラフ構造で関連付けられます。

from azure.digitaltwins.core import DigitalTwinsClient
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
client = DigitalTwinsClient("https://myinstance.api.eus.digitaltwins.azure.net", credential)

# デジタルツインの作成
machine_twin = {
    "$metadata": {"$model": "dtmi:factory:CNCMachine;1"},
    "spindleSpeed": 0,
    "toolWearPercent": 0
}
client.upsert_digital_twin("cnc-001", machine_twin)

# ラインとの関係を定義(グラフエッジ)
relationship = {
    "$relationshipId": "cnc-001-to-lineA",
    "$targetId": "production-line-A",
    "$relationshipName": "isPartOf"
}
client.upsert_relationship("cnc-001", "cnc-001-to-lineA", relationship)

# ADTクエリ言語でグラフをクエリ
query = """
SELECT Machine, Line
FROM DIGITALTWINS Machine
JOIN Line RELATED Machine.isPartOf
WHERE Machine.$metadata.$model = 'dtmi:factory:CNCMachine;1'
AND Machine.toolWearPercent > 70
"""
results = client.query_twins(query)
for result in results:
    print(f"工具交換要: {result['Machine']['$dtId']}")

他技術との比較

項目デジタルツインデバイスシャドウCAEシミュレーションBIMモデル
リアルタイム同期ありありなしなし
双方向フィードバックありあり(限定的)なしなし
物理モデリングありなしありあり
複数エンティティ関係ありなし一部あり
予測・最適化ありなしありなし
用途運用・予測保全デバイス制御設計・解析建設・設備管理

デジタルツインはデバイスシャドウの概念を発展させたものであり、IoTプラットフォーム上のリアルタイムデータを時系列データベースと組み合わせて構築されます。ダッシュボードとの統合により、物理空間のリアルタイム可視化が実現します。

関連用語

参考リンク