🔒 証拠閲覧

Mapry M4-0 フォレンジック証拠プレゼンテーション

アクセスコードが正しくありません

Mapry M4-0 製品欠陥フォレンジック証拠

S/N: M4-00001 | 分析者: 劉 建志 | SDカード SHA256検証済み | syslog 218,000行超

54
出荷前リブート回数
2,781
PreArm警告件数
5.2×
磁力計最大超過倍数
152
バッテリー低電圧回数
74
RPi Undervoltage回数
10.6×
BATT_CAPACITY誤差倍数
v0.0.0
出荷時ファームウェア版
全て0
バッテリー保護パラメータ

🔴 立証する3点

  1. 出荷前から深刻な欠陥が存在し、製造者はそれを認識していた
  2. ソフトウェアでハードウェアの安全機構を系統的に無効化(バイパス)し出荷した
  3. 飛行軌跡とエラーの対応関係が、欠陥製品であることを客観的に証明する

飛行軌跡 — 2026年2月3日 台湾・新竹県五峰郷 正昌林地

標高約1,258m MSL | 24.5989°N, 121.0883°E | 91航点測量ミッション

2m
最初の飛行で車両衝突(GPS記録なし)
80m
アンテナ脱落時の高度
≈148m
最高到達高度AGL
WP#33/91
RTL強制発動時の航点

飛行セッション詳細

セッション種別高度範囲(MSL)備考
Session 0地上待機1,247〜1,250mHome位置: 24.5989°N, 121.0883°E
Session 1地上待機1,247〜1,250mGPS微動のみ
Session 2(飛行A)自動測量+RTL帰還1,254〜1,406m91WP測量→WP#33でRTL→Home帰還
Session 3(飛行B)宮田氏手動操縦1,267〜1,388m樹木衝突寸前2〜3回→緊急中止

最終GPS記録(12:37:11)

項目
緯度24.5978400°N
経度121.0868956°E
高度MSL1,337.80m
推定AGL約79m(1338−1259)
イベントBATT_CAPACITY誤設定によりSOC%誤判定 → RTL強制発動 → Home帰還・着陸

航点データ(フォレンジック抽出)

WP#種別緯度経度高度(AGL)
0Home24.59888121.08831258.68m MSL
3WP24.60006121.087660.00m
6WP24.60020121.087468.55m
8WP24.60029121.087271.57m
10WP24.60036121.087172.58m
12WP24.60030121.087369.09m
14WP24.60025121.087563.02m
34WP24.60095121.086363.99m
36WP24.60097121.086364.44m
88WP24.60196121.087060.00m
90RTLMAV_CMD_NAV_RETURN_TO_LAUNCH

磁力計異常値の記録

正常範囲: 185〜875 | 全計測で上限を超過

事故当日(2026/2/3)磁力計推移 — 全23回の計測で正常範囲外

出荷前→事故当日の磁力計比較

🔴 証拠の意味

磁力計(Compass)はEKF(拡張カルマンフィルタ)で方位を推定する中核センサー。上限875を最大5.2倍超過する状態では、機体の方位制御が正常に機能しない。

原因:分解写真(IMG_8240〜8247)により、電源線と信号線が遮蔽なしで密着配線されていることを確認。Here4 GNSSモジュールから5cm未満の位置にモーター電源線(ピーク182A)が通過している。

事故当日タイムライン — 2026年2月3日 新竹県五峰郷 正昌林地

RPi時計凍結のためログ上"Dec 19"。実際は2026/2/3。

〜10:00(推定)
🔴 2m上昇→制御不能→車両衝突→全アーム破損
GPS衛星ロック前のため軌跡データなし。映像証拠あり(約1分間)。
直前に84件のPreArm警告を全て無視して飛行。磁力計は上限の4.9倍。
Boot#50 — 12:22
車両衝突後の地上診断開始
アーム交換後の修理・動作確認
12:25
🟠 GPS Glitch or Compass error
地上静止状態でGPS/磁力計異常を検知
12:32 / 12:44 / 12:54
🟠 GCS Failsafe ×3
通信途絶:8秒 / 4分26秒 / 繰り返し
12:58〜13:06
🔴 Battery低電圧 48回連続(地上静止で)
地上に静置しているだけでバッテリー低電圧警告が48回。バッテリー劣化の直接証拠。
13:04
🔴 Compass校正失敗
Mag(0) bad orientation — 校正を試行するも失敗。EMIが原因。
Boot#52
🟠 再飛行中にアンテナ脱落(高度80m)
テレメトリアンテナが飛行中に脱落。構造設計不良の証拠。RTL: no terrain data ×3。
Boot#53
🟠 樹木衝突寸前 2〜3回
宮田氏が固定高度飛行を操縦。地形データなしのため山岳地形で樹木との衝突寸前を繰り返す。緊急中止。
Boot#55 — 12:34
最終測量ミッション開始(91航点)
WP#3から自動航線飛行開始。高度60〜72m AGL。
12:35:05
WP#3到達 — 測量グリッド飛行開始
正常に自動航線を飛行
12:37:11
🔴 WP#33でRTL強制発動 → 帰還
70%残量表示(信頼性なし — BATT_CAPACITY 10.6倍誤差のため)。91航点中33航点で測量中断。離陸地点に正常着陸→撤収。

ソフトウェアによる安全機構のバイパス設計

ハードウェアの欠陥を修正する代わりに、ソフトウェアで安全機構を系統的に無効化

バイパス①:バッテリー保護の全面無効化

パラメータMapry設定正常値(6S)効果
BATT_CAPACITY3,30035,000SOC%が3.6分で0%表示
BATT_CRT_VOLT0約20V危急電圧でも無反応
BATT_FS_CRT_ACT02(着陸)電池枯渇でも着陸しない
BATT_ARM_VOLT0約21V低電圧でも離陸可能
BATT_LOW_MAH0約10,500低容量でも無反応

意図的バイパスの証拠:BATT_CAPACITYを修正せずにFailsafe自体を無効化した。

バイパス②:磁力計チェック除外

ARMING_CHECK = 4364(bitmask)→ 20項目中わずか4項目のみ有効。

さらに set_boot_init_params.sh がsystemdサービスとして起動時に自動でパラメータを変更(bash_history Line 450〜527で確認)。

結果:磁力計4,509(上限の5.2倍)でもARM許可 → 飛行可能。

バイパス③:mavlink_bridge — バッテリーデータの隠蔽

// mavlink_bridge.cpp — 実際のコード void MavlinkBridge::mavlinkCallback(...) { if (msg->msgid == 253) { // STATUSTEXTのみ転送 serial_port_->asyncWrite(packet); } // ★ BATTERY_STATUS (147) = 破棄 // ★ SYS_STATUS (1) = 破棄 // ★ HEARTBEAT (0) = 破棄 // ★ ESC_TELEMETRY (11030) = 破棄 }

Mapry自社APPでは電池電圧・SOC%・Failsafe警告が一切表示されない → 事実上のブラインドフライト。

バイパス④:scan_controler.py — 安全機能ゼロ

# 購読しているROS2トピック: /mavros/mission/waypoints ← ウェイポイント追跡 /mavros/mission/reached ← ウェイポイント到達 /mavros/state ← RTL検出 # ★ 完全に欠如 ★ # /mavros/battery ← バッテリー監視なし # /mavros/statustext ← FCU警告受信なし # /mavros/esc_status ← ESC監視なし

バイパス⑤:閉鎖的通信プロトコル

// serial_bridge_new.cpp if (rx_buffer_[0]=='M' && rx_buffer_[1]=='4') → 受信 else★ 破棄(標準MAVLinkコマンドを含む全メッセージ)

BATT_CAPACITY 10.6倍誤設定の影響

ArduPilot SOC%表示 vs 実際の残量

計算:SOC% = (BATT_CAPACITY − used_mAh) / BATT_CAPACITY × 100

飛行時間消費(mAh)ArduPilot表示実際SOC%偏差
1分91772%97.4%−25%
3.6分3,3000%(電池空と判定)90.6%(ほぼ満充電)−91%
5分4,5830%(クランプ)86.9%
10分9,1670%(クランプ)73.8%

離陸後わずか3.6分で「電池残量0%」と表示。実際にはまだ90%以上残存。

出荷前の製品状態 — 製造者は認識していた

ブートセッション別の主要異常件数

Dec 18 — 出荷6日前に25回リブート

Boot#PreArm件数主要エラー
14〜1918〜72件Compass not healthy 連続
2173件Need Position Estimate ×73
22〜2362〜128件磁力計898〜1826 + Battery critical
24〜2917〜45件磁力計989〜3220 + Battery critical
30538件1セッションで538件のPreArmエラー
31〜3611〜60件磁力計997〜2815 + GCS Failsafe
3782件磁力計異常のまま飛行テスト強行

出荷前 → 事故当日:同一欠陥の継続

欠陥出荷前(日本)事故当日(台湾)改善
磁力計超過898〜4,509(5.2倍)947〜4,285(4.9倍)なし
Battery低電圧101回(地上2.5h)48回(地上)なし
GCS Failsafe24回以上18回なし
Radio Failsafe5回アンテナ脱落悪化
BATT_CAPACITY3,300(誤)3,300(未修正)なし

責任判定 — 17項目

🔴 CRITICAL — 直接事故原因(5項目)

1. BATT_CAPACITY 10.6倍誤設定(3,300 vs 実際35,000mAh)
SDカードstrings抽出
2. バッテリー保護パラメータの全面無効化(BATT_CRT_VOLT=0等)
SDカードstrings抽出
3. 劣化バッテリーでの出荷(内部抵抗約72mΩ、正常値の3倍)
syslog Dec 10: 21.38V @1921mAh
4. 磁力計超過状態での飛行許可(PreArmバイパス、2,781件無視)
syslog全セッション
5. 配線EMIによる磁力計干渉(最大5.2倍超過)
syslog + 分解写真

🟠 HIGH — 重大設計欠陥(6項目)

6. BEC容量不足(ALIGN BEC→RPi 5、74回Undervoltage)
kern.log + 写真IMG_8246
7. AUW超過(約10kg>推奨8kg、+25%)
BOM重量計算
8. scan_controler.pyがバッテリーを未監視
ソースコード分析
9. mavlink_bridgeがバッテリーデータを隠蔽(msgid=147破棄)
ソースコード分析
10. 地形データ未搭載(山岳1,258mでRTL時衝突リスク)
syslog: no terrain data
11. OA_TYPE=0で障害物回避無効化(RPLiDAR C1搭載にもかかわらず)
パラメータ抽出

🟡 MEDIUM — 品質管理不備(6項目)

12. 開発版ファームウェアでの出荷(version "0.0.0")
config.json
13. 開発機名称のまま出荷(user "m4dev01")
user-data
14. RPi 5にRTC未搭載(ログのタイムスタンプが全て不正確)
syslog時計凍結
15. 高標高での動作検証未実施(標高80mのみ)
GPS座標分析
16. GitHub PAT平文記録
bash_history
17. 第二回納品時もBATT_CAPACITY未修正
パラメータ比較

本件の核心

これは「設定ミス」や「過失」ではない。
ハードウェアエラーを繰り返し確認した上で、
ソフトウェアにより安全機構を系統的に無効化し、
出荷を可能にした意図的な行為である。