概要
デジタルツイン(Digital Twin)とは、現実世界の物理的なオブジェクト、システム、またはプロセスを、デジタル空間でリアルタイムに忠実に再現・模倣するバーチャルモデルのことです。単なるシミュレーションモデルとは異なり、デジタルツインは現実からのセンサーデータをリアルタイムで取り込み、常に現実の状態を反映し続けます。また、デジタルツイン上でシミュレーションを行った結果を現実の制御にフィードバックする双方向性も特徴です。
デジタルツインを構成する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プラットフォーム上のリアルタイムデータを時系列データベースと組み合わせて構築されます。ダッシュボードとの統合により、物理空間のリアルタイム可視化が実現します。