这篇科普用一份公开报告(ESA 空间环境报告)回答一个问题:天上的物体,到底有多少是"在干活的"? 答案是:>10cm 的在轨物体约 5.4 万个,真正在产出价值的活跃载荷只约 9,300 颗——占约 17%,剩下的 83% 是碎片、退休卫星、被遗弃的末级。 这篇不把太空碎片讲成"末日威胁",而是把它当一份轨道资产台账——资产管理的第一步,从来是盘清账。所有数字来自 ESA 公开报告原文,你(或任何 AI agent)都可以重跑验证——见文末附录。

先别往下翻

假设你现在要清点天上所有 >10cm 的物体(约 5.4 万个),其中真正"在干活"的——在轨运营、产出价值的活跃载荷——你觉得占多少比例?

(在心里选一个,再往下看。)

不是"末日威胁",是一本资产台账

"太空垃圾"的话题历来被讲成末日叙事——碎片越来越多、撞来撞去、地球被垃圾包围。但换个视角会得到完全不同的画面:把天上的每个物体都当成资产,你得到的是一张理性的台账。

ESA 的《空间环境报告》(Annual Space Environment Report)用 MASTER 模型给出这张台账的核心数(参考纪元 2024-08-01):

>10cm 在轨物体数其中活跃载荷活跃占比非活跃占比(碎片/报废/退休闲置)
约 54,000 个约 9,300 颗约 17%约 83%
数据年龄提示:上表数字不是"现在"的实时值,而是 ESA《空间环境报告》v10.0 的 MASTER 模型估算,冻结在参考纪元 2024-08-01——它已有约 2 年"年龄"。ESA 会每年滚动更新一版(下一版约 2027 春季),到时绝对数会变,但本篇锚定的结论结构——"真正干活的只有约 1/6"、"碎片量级远大于工作卫星"——不因数字微调而改变。追求最新值时看 ESA SDO 原文;追求逐字可核验时看本文附录的冻结快照。

也就是说:你名下这 5.4 万个"资产"里,真正在产出的只有约 9,300 个(约 1/6);其余约 83%——退休卫星、解体的碎片、撞碎后散落的零件、被遗弃的末级火箭——是闲置或报废资产。它们不是主动的"威胁",而是需要被管理的"旧资产"。

更小尺寸:按数量级翻上去

上面 5.4 万只是 >10cm 这一层。越往小尺寸走,数量越呈数量级增长:

尺寸段在轨物体数(模型估算)与 >10cm 的倍数
>10cm约 5.4 万×1(基准)
1cm–10cm约 120 万×22
1mm–1cm约 1.3 亿×2,400

换个更直观的说法:每颗活跃载荷头上,就悬着约 1.4 万个毫米级物体。天上远比"肉眼可见的那么大"要挤得多——但挤,不等于危险。

多数闲置物会"自清",少数才是真麻烦

ESA 的报告还有一句关键观察:并不是所有碎片都同样危险。绝大多数低轨物体高度很低,靠大气阻力几周到几个月就自然再入——它们是会自清的闲置资产。真正需要管理的是与活跃载荷共享高度带、又不会很快掉的碎片:

the density of active payloads is approaching that of debris in these heavily populated orbits
—— ESA 空间环境报告(关于 MASTER 人口 ≤1cm 的分析段)

在那些拥挤的高度带,活跃载荷的密度已经逼近碎片密度——这正是"资产管理"要盯的地方。至于那些一次性掉不下来、又长期占坑的高轨闲置卫星,那正是本系列讲的"墓地轨道"要解决的(见第 5 篇)。高度,决定了闲置资产到底会不会自己"清仓"(见第 6 篇《轨道寿命地图》)。

三个问题

1. 5.4 万是"编目数量"吗? 不是。它是 ESA 的 MASTER 模型对 >10cm 在轨总人口(含追踪到与未追踪的物体)的估算,参考纪元 2024-08-01。模型估算通常大于公开编目数,因为它把大量更小、未明确追踪的边界案例也覆盖进去了。

2. 多数是碎片,是不是很危险? 危险来自"可测的碰撞风险",不是"碎片多"本身。绝大多数低轨物体高度很低、几周到几个月就自然再入,属于会自清的闲置资产。真正要管理的是与活跃载荷共享高度带的碎片——据 ESA,在这些拥挤高度带,活跃载荷密度已经逼近碎片密度。

3. 那些"不在干活"的会不会自己掉下来? 取决于高度。低轨报废物体靠大气阻力几年内自然再入;高轨报废卫星却基本不掉——这就是"墓地轨道"要解决的问题。高度决定闲置资产会不会自己清仓。

你可以自己验

到这里的所有数字,都不是"我们说的",而是 ESA 公开报告原文算出来的:

脚本读取冻结快照 → 由 5.4 万 / 9,300 / 120 万 / 1.3 亿 算出活跃占比、非活跃占比、1-10cm 与 1mm-1cm 相对 >10cm 的倍数、每颗活跃载荷分摊的毫米级物体数 → 输出与正文完全一致的表格、证据层级与哈希。你(或任何 AI agent)都可以重跑核对,见附录。

附录:可复现验证

python3 verify_active_vs_debris.py                           # 读默认快照,重跑并核对
python3 verify_active_vs_debris.py active_vs_debris.json      # 指定快照文件

脚本会做四件事:

1. 校验快照 schema v2(证据门禁:primary 档必须带原文引用句 quote + 出处定位 locator);
2. 由 54,000 / 9,300 / 1,200,000 / 130,000,000 算出活跃占比与尺寸段倍数;
3. 交叉核对"每颗活跃载荷分摊的毫米级物体数"的量级;
4. 输出证据层级、快照 sha256 与验证方式。

说明:4 个 primary 锚点逐字取自 ESA《ESA's Annual Space Environment Report》GEN-DB-LOG-00288-OPS-SD v10.0(2026-05-01,Final)——>10cm 物体与活跃载荷、1-10cm 尺寸段、1mm-1cm 尺寸段、以及"自太空时代起(1957-10-04 以来)碎片在轨总量一直多于工作卫星"。每个 primary 锚点内含原文引用句 quote 与出处定位 locator,可逐字复核。所有数字为 MASTER 模型估算(参考纪元 2024-08-01),非观测编目数——模型含未追踪的小/边界物体,故大于公开编目。正文表格与派生数字由脚本从快照重算,冻结快照可精确复现。

原始材料(可直接复制)

下面的脚本与数据快照全文,供你(或任何 AI agent)直接复制使用,无需下载。

复现材料(含 sha256 锚点,随嵌入文件自动更新):
verify_active_vs_debris.py(复现脚本) · sha256 d4a6b4d3f99d71d46077afedecf7e7cf4c8695ebb5726a9b6cbaf8cc28b49ad5
active_vs_debris.json(数据快照) · sha256 5a477f4b8dc9020662d04e58f0313455328bf807ba92b39717ed1b8e5135a250

verify_active_vs_debris.py — 复现脚本全文

#!/usr/bin/env python3
# verify_active_vs_debris.py — 科普附录:验证「在轨物体 vs 活跃载荷」派生数字(零依赖)
# 输入:active_vs_debris.json 冻结快照 v2(4 个 primary 锚点 + 常数 + 背景密度注)
# 输出:活跃占比 / 碎片占比 / 各尺寸段倍数 / 每颗活跃载荷分摊的微米级物体 + 证据层级 + 快照 sha256
# 用法:python3 verify_active_vs_debris.py            (默认读 active_vs_debris.json)
#       python3 verify_active_vs_debris.py FILE       (指定快照文件)
# 退出码:0 成功;2 解析失败;3 证据契约违规(primary 缺 quote/locator)
import hashlib
import json
import sys

TIERS = ("primary", "secondary", "media")


def check_schema(snap):
    """证据门禁:primary 档必须带原文引用句 quote + 出处定位 locator(可复现≠可验证)。"""
    errors = []
    for a in snap.get("anchors", []):
        tier = a.get("tier")
        if tier not in TIERS:
            errors.append(f"锚点 {a.get('label', '?')}: tier 缺失或非法({tier})")
            continue
        if tier == "primary":
            if not a.get("quote", "").strip():
                errors.append(f"锚点 {a.get('label', '?')}: primary 档缺 quote(原文引用句)")
            if not a.get("locator", "").strip():
                errors.append(f"锚点 {a.get('label', '?')}: primary 档缺 locator(出处定位)")
    for key, item in snap.get("background", {}).items():
        if isinstance(item, dict) and "tier" in item:
            tier = item.get("tier")
            if tier not in TIERS:
                errors.append(f"background.{key}: tier 非法({tier})")
            elif tier == "primary":
                if not item.get("quote", "").strip():
                    errors.append(f"background.{key}: primary 档缺 quote")
                if not item.get("locator", "").strip():
                    errors.append(f"background.{key}: primary 档缺 locator")
    return errors


def fmt(x):
    """去尾零的友好显示:17.2 而非 17.2222222。"""
    return f"{x:.4g}"


def main():
    path = sys.argv[1] if len(sys.argv) > 1 else "active_vs_debris.json"
    with open(path, "rb") as f:
        raw = f.read()
    sha = hashlib.sha256(raw).hexdigest()

    try:
        snap = json.loads(raw.decode("utf-8"))
        anchors = snap["anchors"]
        c = snap["constants"]
        bg = snap.get("background", {})
    except Exception as e:
        print(f"ERROR: 快照解析失败: {e}", file=sys.stderr)
        return 2

    schema_errors = check_schema(snap)
    if schema_errors:
        print("ERROR: 证据契约违规(可复现≠可验证):", file=sys.stderr)
        for e in schema_errors:
            print(f"  - {e}", file=sys.stderr)
        return 3

    gt = c["objects_gt_10cm"]
    ap = c["active_payloads"]
    cm_10 = c["objects_1cm_10cm"]
    mm_1cm = c["objects_1mm_1cm"]

    share_active = ap / gt * 100.0
    share_other = 100.0 - share_active
    ratio_1cm_10cm = cm_10 / gt
    ratio_1mm_1cm = mm_1cm / gt
    mm_per_active = mm_1cm / ap

    print("=== 在轨物体 vs 活跃载荷 派生数字 ===")
    print(f">10cm 在轨物体总数 N = {gt:,} 个")
    print(f"其中活跃载荷 A = {ap:,} 颗")
    print(f"  · 活跃占比 = A / N = {ap:,}/{gt:,} = {share_active:.1f}%")
    print(f"  · 非活跃(碎片/报废/退休闲置)占比 = 100% − {share_active:.1f}% = {share_other:.1f}%")
    print(f"  · 每颗活跃载荷对应 {gt / ap:.1f} 个 >10cm 在轨物体")

    print("-" * 52)
    print("尺寸段与 >10cm 物体数的倍数(同源 MASTER 模型,参考纪元 2024-08-01):")
    print(f"  1cm-10cm : {cm_10:,}/{gt:,} = ×{ratio_1cm_10cm:.0f}")
    print(f"  1mm-1cm  : {mm_1cm:,}/{gt:,} = ×{ratio_1mm_1cm:,.0f}")
    print(f"  1mm-1cm 相对活跃载荷:{mm_1cm:,}/{ap:,} = {mm_per_active:,.0f} 个/每颗活跃载荷")

    print("-" * 52)
    print("背景密度注(primary):")
    for key, item in bg.items():
        if isinstance(item, dict):
            print(f"  {item.get('note', '')}")

    print("-" * 52)
    print("=== 证据层级(可复现≠可验证,quote 为外部正确性逐字证据)===")
    primaries = [a["label"] for a in anchors if a.get("tier") == "primary"]
    print("  primary(主源逐字, ESA 空间环境报告 v10.0):")
    for lab in primaries:
        print(f"    · {lab}")
    print(f"快照格式: {snap.get('format', '?')} · 锚点行数 {snap.get('rows', '?')}")
    print(f"快照 sha256: {sha}")
    print("验证方式:重跑本脚本,与文章正文表格及派生数字逐项核对(占比、倍数、每颗载荷分摊)。")
    return 0


if __name__ == "__main__":
    sys.exit(main())

active_vs_debris.json — 数据快照全文

{
  "format": "chenji-active-vs-debris-v2",
  "schema": {
    "version": 2,
    "evidence_tiers": ["primary", "secondary", "media"],
    "rule": "primary 档锚点必须带原文引用句(quote)+出处定位(locator);secondary 为归因清楚的官方二手口径;media 为媒体汇编。可复现≠可验证:quote 是外部正确性的逐字证据,让 AI agent 无需依赖权威即可核验。"
  },
  "generated": "2026-08-31",
  "source": "ESA《ESA's Annual Space Environment Report》GEN-DB-LOG-00288-OPS-SD v10.0(2026-05-01,Final)公开文献原文;MASTER 参考纪元 2024-08-01",
  "rows": 4,
  "constants": {
    "objects_gt_10cm": 54000,
    "active_payloads": 9300,
    "objects_1cm_10cm": 1200000,
    "objects_1mm_1cm": 130000000,
    "note": ">10cm 在轨物体数 54000(含约 9300 活跃载荷);1-10cm 约 120 万;1mm-1cm 约 1.3 亿——均为 ESA MASTER-2024 模型估算(参考纪元 2024-08-01),非观测编目数。"
  },
  "anchors": [
    {
      "asof": "2024-08-01",
      "label": "MASTER 估算:>10cm 在轨物体与活跃载荷",
      "tier": "primary",
      "quote": "54.000 objects greater than 10 cm (including approximately 9300 active payloads)",
      "locator": "ESA 空间环境报告 §2.4《Non-catalogued and modelled objects》,MASTER 参考纪元 2024-08-01(第 408-410 行文本)",
      "ref": "ESA'S ANNUAL SPACE ENVIRONMENT REPORT, GEN-DB-LOG-00288-OPS-SD v10.0, 2026-05-01"
    },
    {
      "asof": "2024-08-01",
      "label": "MASTER 估算:1-10cm 在轨物体",
      "tier": "primary",
      "quote": "1.2 million objects from 1 cm to 10 cm",
      "locator": "ESA 空间环境报告 §2.4《Non-catalogued and modelled objects》,MASTER 参考纪元 2024-08-01(第 412 行文本)",
      "ref": "ESA'S ANNUAL SPACE ENVIRONMENT REPORT, GEN-DB-LOG-00288-OPS-SD v10.0, 2026-05-01"
    },
    {
      "asof": "2024-08-01",
      "label": "MASTER 估算:1mm-1cm 在轨物体",
      "tier": "primary",
      "quote": "130 million objects from 1 mm to 1 cm",
      "locator": "ESA 空间环境报告 §2.4《Non-catalogued and modelled objects》,MASTER 参考纪元 2024-08-01(第 414 行文本)",
      "ref": "ESA'S ANNUAL SPACE ENVIRONMENT REPORT, GEN-DB-LOG-00288-OPS-SD v10.0, 2026-05-01"
    },
    {
      "asof": "2026",
      "label": "自太空时代起,碎片在轨总量一直多于工作卫星",
      "tier": "primary",
      "quote": "Ever since the start of the space age on the 4th of October 1957 there has been more space debris in orbit than operational satellites",
      "locator": "ESA 空间环境报告引言/执行摘要(报告开篇背景段)",
      "ref": "ESA'S ANNUAL SPACE ENVIRONMENT REPORT, GEN-DB-LOG-00288-OPS-SD v10.0, 2026-05-01"
    }
  ],
  "background": {
    "density_note": {
      "tier": "primary",
      "quote": "the density of active payloads is approaching that of space debris in these heavily populated orbits",
      "locator": "ESA 空间环境报告 §2.4(MASTER 人口 ≤1cm 分析段)",
      "note": "在星座密集的高度带,活跃载荷密度已逼近碎片密度——即便这一层,也说明'在用的'与'垃圾的'在同量级挤占"
    }
  }
}

你该带走什么

天上 >10cm 的在轨物体约 5.4 万个,真正在干的活活跃载荷只有约 9,300 颗(约 17%),其余约 83% 是碎片、报废卫星、退休末级——二手闲置与报废资产。更小尺寸段以数量级翻上去:1-10cm 约 120 万(×22),1mm-1cm 约 1.3 亿(×2,400),每颗活跃载荷头上悬着约 1.4 万个毫米级物体。碎片话题不必是末日叙事:轨道是资产,绝大多数闲置物会随高度自清(见《轨道寿命地图》),真正要管理的是与活跃载荷共享高度带的那些。资产管理的第一步,从来是盘清账。

数据来源:ESA 空间环境报告(Annual Space Environment Report)GEN-DB-LOG-00288-OPS-SD v10.0(2026-05-01,Final)——>10cm 在轨物体与活跃载荷、1-10cm、1mm-1cm、以及"碎片在轨总量一直多于工作卫星"四段原文;MASTER-2024 模型估算,参考纪元 2024-08-01。
历史背景:本系列第 5 篇《墓地轨道》——高轨报废卫星为何基本不掉、如何抬升处置;第 6 篇《轨道寿命地图》——高度如何决定一颗卫星失联后自然再入的时长。

可验证声明 印记等级:完整可复现