{
  "schemaVersion": "2026.05.phase2",
  "modules": [
    {
      "id": "easyrtk",
      "name": "EasyRTK",
      "category": "Open-source RTK reference design",
      "frequency": ["L1", "L2", "L5-ready architecture"],
      "constellation": ["GPS", "BDS", "Galileo", "GLONASS", "QZSS"],
      "rtk": true,
      "ppp": "service-dependent",
      "updateRate": "20 Hz class",
      "interfaces": ["UART", "USB", "I2C", "CAN-ready", "Qwiic-ready"],
      "applications": ["Community learning", "PCB reference", "RTK bring-up", "Open hardware notes"],
      "emiScore": 84,
      "dynamicScore": 90,
      "urbanScore": 82
    },
    {
      "id": "zed-f9p",
      "name": "ZED-F9P",
      "category": "Dual-band RTK module",
      "frequency": ["L1", "L2", "E1", "E5b", "B1", "B2"],
      "constellation": ["GPS", "BDS", "Galileo", "GLONASS", "QZSS"],
      "rtk": true,
      "ppp": "SPARTN / PointPerfect ecosystem dependent",
      "updateRate": "20 Hz max",
      "interfaces": ["UART", "SPI", "I2C", "USB"],
      "applications": ["Drone", "Robot", "Education", "RTK prototype"],
      "emiScore": 74,
      "dynamicScore": 82,
      "urbanScore": 72
    },
    {
      "id": "um982",
      "name": "UM982",
      "category": "Primary commercial dual-antenna multi-frequency RTK module",
      "frequency": ["L1", "L2", "L5", "B1", "B2", "B3", "E1", "E5"],
      "constellation": ["GPS", "BDS", "Galileo", "GLONASS", "QZSS", "NavIC"],
      "rtk": true,
      "ppp": "firmware/service dependent",
      "updateRate": "50 Hz class",
      "interfaces": ["UART", "SPI", "I2C", "CAN"],
      "applications": ["Robot", "Agriculture", "Vehicle heading", "Marine", "Drone", "Survey"],
      "emiScore": 82,
      "dynamicScore": 90,
      "urbanScore": 82
    }
  ],
  "benchmarks": [
    {
      "environment": "Open Sky",
      "results": [
        { "module": "EasyRTK", "fixRatio": "99.2%", "drift": "0.8 cm", "cn0": "45 dB-Hz avg", "reacquisition": "1.8 s" },
        { "module": "ZED-F9P", "fixRatio": "98.4%", "drift": "1.1 cm", "cn0": "43 dB-Hz avg", "reacquisition": "2.4 s" },
        { "module": "UM982", "fixRatio": "99.0%", "drift": "0.9 cm", "cn0": "44 dB-Hz avg", "reacquisition": "2.0 s" }
      ]
    },
    {
      "environment": "Urban Canyon",
      "results": [
        { "module": "EasyRTK", "fixRatio": "83.6%", "drift": "12 cm", "cn0": "34 dB-Hz avg", "reacquisition": "6.8 s" },
        { "module": "ZED-F9P", "fixRatio": "74.1%", "drift": "21 cm", "cn0": "31 dB-Hz avg", "reacquisition": "10.5 s" },
        { "module": "UM982", "fixRatio": "86.2%", "drift": "10 cm", "cn0": "35 dB-Hz avg", "reacquisition": "5.9 s" }
      ]
    },
    {
      "environment": "Trees",
      "results": [
        { "module": "EasyRTK", "fixRatio": "88.4%", "drift": "8 cm", "cn0": "36 dB-Hz avg", "reacquisition": "5.1 s" },
        { "module": "ZED-F9P", "fixRatio": "80.7%", "drift": "15 cm", "cn0": "33 dB-Hz avg", "reacquisition": "8.2 s" },
        { "module": "UM982", "fixRatio": "89.8%", "drift": "7 cm", "cn0": "37 dB-Hz avg", "reacquisition": "4.9 s" }
      ]
    },
    {
      "environment": "Dynamic Drone",
      "results": [
        { "module": "EasyRTK", "fixRatio": "96.1%", "drift": "2.8 cm", "cn0": "41 dB-Hz avg", "reacquisition": "2.9 s" },
        { "module": "ZED-F9P", "fixRatio": "92.5%", "drift": "4.2 cm", "cn0": "39 dB-Hz avg", "reacquisition": "4.4 s" },
        { "module": "UM982", "fixRatio": "95.0%", "drift": "3.1 cm", "cn0": "40 dB-Hz avg", "reacquisition": "3.4 s" }
      ]
    },
    {
      "environment": "EMI",
      "results": [
        { "module": "EasyRTK", "fixRatio": "91.7%", "drift": "5.5 cm", "cn0": "-4 dB drop", "reacquisition": "4.2 s" },
        { "module": "ZED-F9P", "fixRatio": "84.9%", "drift": "11 cm", "cn0": "-8 dB drop", "reacquisition": "7.8 s" },
        { "module": "UM982", "fixRatio": "90.4%", "drift": "6.1 cm", "cn0": "-5 dB drop", "reacquisition": "4.8 s" }
      ]
    },
    {
      "environment": "Reacquisition",
      "results": [
        { "module": "EasyRTK", "fixRatio": "97.0%", "drift": "3.0 cm", "cn0": "42 dB-Hz avg", "reacquisition": "2.2 s" },
        { "module": "ZED-F9P", "fixRatio": "93.8%", "drift": "4.8 cm", "cn0": "40 dB-Hz avg", "reacquisition": "3.9 s" },
        { "module": "UM982", "fixRatio": "96.4%", "drift": "3.2 cm", "cn0": "41 dB-Hz avg", "reacquisition": "2.5 s" }
      ]
    }
  ],
  "stacks": [
    {
      "id": "drone-build",
      "title": "Drone Build",
      "products": ["UM982", "RTK antenna", "LTE module", "PX4", "EasyRTK open reference notes"],
      "applications": ["Drone", "UAV mapping", "Inspection"],
      "verified": ["PX4 tested", "Dynamic tested", "Open sky verified"],
      "buyLinks": ["/buy/#rtk-modules", "/cases/drone-rtk/", "/products/easyrtk/"],
      "estimatedCost": "$299 - $899"
    },
    {
      "id": "robot-build",
      "title": "Robot Build",
      "products": ["UM982", "ROS2", "Wheel odometry", "Matched RTK antenna pair", "EasyRTK open reference notes"],
      "applications": ["Robot", "AGV", "Outdoor autonomy"],
      "verified": ["ROS2 ready", "Urban route tested", "Fusion tested"],
      "buyLinks": ["/buy/#rtk-modules", "/cases/robot-navigation/"],
      "estimatedCost": "$249 - $799"
    },
    {
      "id": "agriculture-build",
      "title": "Agriculture Build",
      "products": ["UM982", "Survey antenna pair", "Base station", "NTRIP", "RTKLIB configs"],
      "applications": ["Agriculture", "Autosteer", "Field robot"],
      "verified": ["Base ready", "Survey antenna", "Field verified"],
      "buyLinks": ["/buy/#rtk-modules", "/cases/agriculture-autosteer/"],
      "estimatedCost": "$399 - $1299"
    }
  ],
  "knowledgeGraph": [
    { "source": "EasyRTK", "compatibleWith": ["Open schematic", "Open PCB", "BOM notes", "RTK bring-up", "Antenna layout lessons", "Community cases"] },
    { "source": "EasyIMU", "compatibleWith": ["Community experiments", "ROS2", "PX4", "robot_localization", "Nav2"] },
    { "source": "ZED-F9P", "compatibleWith": ["PX4", "RTKLIB", "ROS2", "ArduPilot", "NTRIP", "Survey antenna"] },
    { "source": "UM982", "compatibleWith": ["Dual antenna heading", "ROS2", "RTKLIB", "Agriculture autosteer", "Marine heading", "GPSRTK buying guide"] }
  ],
  "communityPosts": [
    { "title": "Drone RTK hover test", "module": "UM982", "antenna": "Compact multi-band patch", "environment": "Open sky + motion", "issue": "Short FLOAT during aggressive yaw", "solution": "Moved antenna above carbon frame and reduced LTE cable coupling." },
    { "title": "Robot urban sidewalk route", "module": "ZED-F9P", "antenna": "Survey antenna", "environment": "Urban canyon", "issue": "Drift near glass building", "solution": "Added EasyIMU fusion and lowered trust during low C/N0 segments." },
    { "title": "Autosteer base station setup", "module": "UM982", "antenna": "Survey antenna pair", "environment": "Field edge", "issue": "RTCM timeout after 20 minutes", "solution": "Raised serial baud, logged correction age, and moved LTE modem away from GNSS cable." }
  ]
}
