{
  "checked": "2026-09-07",
  "status": "document-reviewed-not-runtime-tested",
  "resources": [
    {
      "id": "f01",
      "code": "F01",
      "name": "ArduPilot SITL",
      "group": "fundamentals",
      "github": "https://github.com/ArduPilot/ardupilot",
      "start": "https://ardupilot.org/dev/docs/SITL-setup-landingpage.html",
      "windows": "Windows: WSL2 หรือ Simulation ใน Mission Planner",
      "linux": "Linux: โดยตรงตามคู่มือ",
      "access": "OSS",
      "license": "GPL-3.0",
      "licenseSource": "https://raw.githubusercontent.com/ArduPilot/ardupilot/master/README.md",
      "experiment": "จำลอง Copter บิน waypoint แล้ว RTL; เก็บ log และ parameter ก่อน/หลัง",
      "limitations": "SITL ใช้เฟิร์มแวร์จริงกับแบบจำลอง; ไม่ยืนยันสมรรถนะอากาศยานจริง",
      "hardware": "Flight controller / Copter / Plane / VTOL",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "f02",
      "code": "F02",
      "name": "PX4 SITL + Gazebo",
      "group": "fundamentals",
      "github": "https://github.com/PX4/PX4-Autopilot",
      "start": "https://docs.px4.io/main/en/sim_gazebo_gz/",
      "windows": "Windows: WSL2",
      "linux": "Linux: Ubuntu ตามคู่มือ PX4",
      "access": "OSS",
      "license": "BSD-3-Clause",
      "licenseSource": "https://raw.githubusercontent.com/PX4/PX4-Autopilot/main/README.md",
      "experiment": "รัน x500 เปลี่ยนลมและ mission แล้วเปรียบเทียบ tracking error",
      "limitations": "จับคู่ PX4, Ubuntu, Gazebo ตามรุ่นเอกสาร; อย่าปน Gazebo Classic",
      "hardware": "PX4 flight controller / กล้องจำลอง / VTOL",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "f03",
      "code": "F03",
      "name": "QGroundControl",
      "group": "fundamentals",
      "github": "https://github.com/mavlink/qgroundcontrol",
      "start": "https://docs.qgroundcontrol.com/master/en/qgc-user-guide/getting_started/download_and_install.html",
      "windows": "Windows: native",
      "linux": "Linux: native",
      "access": "OSS",
      "license": "Apache-2.0",
      "licenseSource": "https://raw.githubusercontent.com/mavlink/qgroundcontrol/master/README.md",
      "experiment": "ต่อ SITL ดู telemetry วาง waypoint และ export mission",
      "limitations": "รองรับ MAVLink แต่ความสามารถของ firmware และรถแต่ละชนิดอาจต่างกัน",
      "hardware": "Flight controller / telemetry",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "f04",
      "code": "F04",
      "name": "Mission Planner",
      "group": "fundamentals",
      "github": "https://github.com/ArduPilot/MissionPlanner",
      "start": "https://ardupilot.org/planner/docs/mission-planner-installation.html",
      "windows": "Windows: native; เหมาะเป็นหลัก",
      "linux": "Linux: Mono มีข้อจำกัด; ใช้ QGC/MAVProxy เป็นทางหลัก",
      "access": "OSS",
      "license": "GPL-3.0",
      "licenseSource": "https://raw.githubusercontent.com/ArduPilot/MissionPlanner/master/README.md",
      "experiment": "เปิด Simulation เรียน flight mode และอ่าน DataFlash log",
      "limitations": "เอกสารเตือน Mono บน Linux มีปัญหาและอาจ crash",
      "hardware": "ArduPilot flight controller",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "f05",
      "code": "F05",
      "name": "Webots",
      "group": "fundamentals",
      "github": "https://github.com/cyberbotics/webots",
      "start": "https://github.com/cyberbotics/webots/releases",
      "windows": "Windows: native",
      "linux": "Linux: native ตาม binary ที่รองรับ",
      "access": "OSS",
      "license": "Apache-2.0",
      "licenseSource": "https://raw.githubusercontent.com/cyberbotics/webots/master/README.md",
      "experiment": "เปิดตัวอย่าง quadrotor ตรวจภาพกล้องและค่าจาก sensor จำลอง",
      "limitations": "ต้องมีกราฟิกที่รองรับ; ตัวอย่าง controller ไม่ใช่ PX4/ArduPilot โดยอัตโนมัติ",
      "hardware": "กล้อง / range sensor / robot controller",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "f06",
      "code": "F06",
      "name": "gym-pybullet-drones",
      "group": "fundamentals",
      "github": "https://github.com/learnsyslab/gym-pybullet-drones",
      "start": "https://github.com/learnsyslab/gym-pybullet-drones",
      "windows": "Windows: เสนอ WSL2; upstream ไม่ระบุทดสอบ native",
      "linux": "Linux: README ปัจจุบันทดสอบ Ubuntu 24.04 x64",
      "access": "OSS",
      "license": "MIT",
      "licenseSource": "https://raw.githubusercontent.com/learnsyslab/gym-pybullet-drones/main/README.md",
      "experiment": "เริ่ม pid.py แล้ว downwash.py; เปรียบเทียบ error กับแรงรบกวนก่อนเรียน PPO",
      "limitations": "README ปัจจุบันใช้ Python 3.12 และอาจต้อง build PyBullet; ลิงก์เก่าย้ายองค์กรแล้ว",
      "hardware": "งานควบคุม / reinforcement learning",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "f07",
      "code": "F07",
      "name": "JSBSim",
      "group": "fundamentals",
      "github": "https://github.com/JSBSim-Team/jsbsim",
      "start": "https://github.com/JSBSim-Team/jsbsim",
      "windows": "Windows: native/Python ตาม README",
      "linux": "Linux: native/Python",
      "access": "OSS",
      "license": "LGPL-2.1",
      "licenseSource": "https://raw.githubusercontent.com/JSBSim-Team/jsbsim/master/README.md",
      "experiment": "เปิด aircraft model ตัวอย่าง เปลี่ยนมวลหรือ CG และบันทึก response",
      "limitations": "เป็น flight dynamics engine; ต้องมี aircraft model และโปรแกรมแสดงผลแยกถ้าต้องการภาพ3D",
      "hardware": "Fixed-wing / flight dynamics",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "i01",
      "code": "I01",
      "name": "OpenVSP + VSPAERO",
      "group": "integration",
      "github": "https://github.com/OpenVSP/OpenVSP",
      "start": "https://openvsp.org/download.php",
      "windows": "Windows: native",
      "linux": "Linux: เลือก Ubuntu build ให้ตรงรุ่น",
      "access": "OSS",
      "license": "NOSA-1.3; dependencies แยก",
      "licenseSource": "https://raw.githubusercontent.com/OpenVSP/OpenVSP/main/LICENSE",
      "experiment": "สร้างปีกเปลี่ยน span/chord แล้วเปรียบเทียบ geometry และผลวิเคราะห์",
      "limitations": "NOSA 1.3 และ dependency มีเงื่อนไขเฉพาะ; ผลขึ้นกับสมมติฐาน aerodynamic model",
      "hardware": "Fixed-wing / VTOL geometry",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "i02",
      "code": "I02",
      "name": "eCalc xcopterCalc",
      "group": "integration",
      "github": "",
      "start": "https://www.ecalc.ch/xcoptercalc_mobile.php?lang=en",
      "windows": "Windows: browser",
      "linux": "Linux: browser",
      "access": "Demo/สมาชิกเสียเงิน",
      "license": "ผู้ให้บริการกำหนด; ดูเงื่อนไขที่ลิงก์",
      "licenseSource": "https://www.ecalc.ch/xcoptercalc_mobile.php?lang=en",
      "experiment": "เปลี่ยน motor-prop-battery-payload ดูกระแส thrust และเวลาโดยประมาณ",
      "limitations": "Demo จำกัดตัวเลือก; ตรวจค่าสมาชิกและ coverage ฐานข้อมูลก่อนใช้จริง; ไม่ใช่ผล thrust stand",
      "hardware": "Motor / ESC / propeller / battery",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": false
    },
    {
      "id": "i03",
      "code": "I03",
      "name": "KiCad",
      "group": "integration",
      "github": "https://github.com/KiCad/kicad-source-mirror",
      "start": "https://www.kicad.org/download/",
      "windows": "Windows: native",
      "linux": "Linux: native",
      "access": "OSS",
      "license": "GPL-3.0",
      "licenseSource": "https://raw.githubusercontent.com/KiCad/kicad-source-mirror/master/README.md",
      "experiment": "วาด schematic สาย power/connector และบอร์ดจ่ายไฟตัวอย่าง ตรวจ ERC/DRC",
      "limitations": "GitHub เป็น mirror; library ใช้ CC-BY-SA พร้อม exception แยกจาก license โปรแกรม; ERC ไม่ทดแทนทดสอบกระแส/ความร้อน",
      "hardware": "Power board / PCB / wiring",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "i04",
      "code": "I04",
      "name": "SimScale",
      "group": "integration",
      "github": "",
      "start": "https://www.simscale.com/product/pricing/",
      "windows": "Windows: browser",
      "linux": "Linux: browser",
      "access": "Community/เสียเงิน",
      "license": "ผู้ให้บริการกำหนด; ดูเงื่อนไขที่ลิงก์",
      "licenseSource": "https://www.simscale.com/product/pricing/",
      "experiment": "จำลองแขนรับน้ำหนักแบบ static เปลี่ยนความหนาและ mesh เปรียบเทียบ displacement",
      "limitations": "Community เป็น public; หน้าราคาปัจจุบันระบุผลเชิงปริมาณได้ถึง10 simulations ต่างจากเอกสารเก่าที่บอก unlimited",
      "hardware": "โครงสร้าง / CFD / thermal",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": false
    },
    {
      "id": "c01",
      "code": "C01",
      "name": "FreeCAD",
      "group": "cad-printing",
      "github": "https://github.com/FreeCAD/FreeCAD",
      "start": "https://www.freecad.org/downloads",
      "windows": "Windows: native",
      "linux": "Linux: native/AppImage",
      "access": "OSS",
      "license": "LGPL-2.1",
      "licenseSource": "https://raw.githubusercontent.com/FreeCAD/FreeCAD/main/README.md",
      "experiment": "ออกแบบ camera mount แบบ parametric เปลี่ยนรูยึดและ export STEP/STL",
      "limitations": "FEM ต้องกำหนด material/load/boundary และ solver; ไฟล์ STL อย่างเดียวไม่รับรองความแข็งแรง",
      "hardware": "3D printer / frame / payload mount",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "c02",
      "code": "C02",
      "name": "OpenSCAD",
      "group": "cad-printing",
      "github": "https://github.com/openscad/openscad",
      "start": "https://openscad.org/downloads.html",
      "windows": "Windows: native",
      "linux": "Linux: native",
      "access": "OSS",
      "license": "GPLv2 + CGAL linking exception",
      "licenseSource": "https://raw.githubusercontent.com/openscad/openscad/master/COPYING",
      "experiment": "เขียน parameter ระยะรูและความหนา สร้าง spacer หลายขนาดและ export STL",
      "limitations": "COPYING เป็น GPLv2 พร้อม CGAL exception; เหมาะชิ้นส่วนเชิงพารามิเตอร์มากกว่า interactive assembly",
      "hardware": "3D printer / brackets",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "c03",
      "code": "C03",
      "name": "PrusaSlicer",
      "group": "cad-printing",
      "github": "https://github.com/prusa3d/PrusaSlicer",
      "start": "https://help.prusa3d.com/downloads/prusaslicer",
      "windows": "Windows: native",
      "linux": "Linux: native/Flatpak",
      "access": "OSS",
      "license": "AGPL-3.0",
      "licenseSource": "https://raw.githubusercontent.com/prusa3d/PrusaSlicer/master/README.md",
      "experiment": "นำ STL เข้า เปลี่ยน orientation/wall/infill เปรียบเทียบ preview เวลาและวัสดุ",
      "limitations": "เลือก profile เครื่องและวัสดุจริงก่อนสร้าง G-code; preview ไม่ใช่การทดสอบแรง",
      "hardware": "3D printer หลายยี่ห้อตาม profile",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "c04",
      "code": "C04",
      "name": "Onshape",
      "group": "cad-printing",
      "github": "",
      "start": "https://www.onshape.com/en/pricing",
      "windows": "Windows: browser",
      "linux": "Linux: browser",
      "access": "Free/เสียเงิน/Education",
      "license": "ผู้ให้บริการกำหนด; ดูเงื่อนไขที่ลิงก์",
      "licenseSource": "https://www.onshape.com/en/pricing",
      "experiment": "สร้าง camera mount และ assembly ใน browser แล้ว export แบบทดลอง",
      "limitations": "Free สำหรับ non-commercial และ documents เป็น public; Education มีเกณฑ์แยก",
      "hardware": "CAD / collaborative design",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": false
    },
    {
      "id": "c05",
      "code": "C05",
      "name": "Autodesk Fusion",
      "group": "cad-printing",
      "github": "",
      "start": "https://www.autodesk.com/products/fusion-360/personal",
      "windows": "Windows: native",
      "linux": "Linux: ไม่มี native support ทางการ; ใช้ FreeCAD/Onshape แทน",
      "access": "Personal/Trial/เสียเงิน",
      "license": "ผู้ให้บริการกำหนด; ดูเงื่อนไขที่ลิงก์",
      "licenseSource": "https://www.autodesk.com/products/fusion-360/personal",
      "experiment": "ออกแบบชิ้นส่วนเดียวกับ FreeCAD เพื่อเปรียบเทียบ workflow และ export",
      "limitations": "Personal จำกัดงานส่วนบุคคล non-commercial และรายได้ตามเกณฑ์; ไม่ครอบคลุม commercial training; trial แยก",
      "hardware": "CAD / CAM / 3D printer",
      "checked": "2026-09-07",
      "platforms": [
        "windows"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": false
    },
    {
      "id": "p01",
      "code": "P01",
      "name": "ODM",
      "group": "payload",
      "github": "https://github.com/OpenDroneMap/ODM",
      "start": "https://docs.opendronemap.org/installation/",
      "windows": "Windows: ตามคู่มือ Docker/ช่องทางติดตั้ง",
      "linux": "Linux: native build หรือ Docker",
      "access": "OSS",
      "license": "AGPL-3.0",
      "licenseSource": "https://raw.githubusercontent.com/OpenDroneMap/ODM/master/README.md",
      "experiment": "ประมวลผลภาพ aerial ชุดเล็กเป็น orthophoto/point cloud แล้วเปิดใน QGIS",
      "limitations": "ODM กับ WebODM ปัจจุบันต้องตรวจ engine/รุ่นแยก; Docker Desktop มีสิทธิ์ใช้งานของตนเอง",
      "hardware": "RGB mapping / photogrammetry",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "p02",
      "code": "P02",
      "name": "WebODM",
      "group": "payload",
      "github": "https://github.com/WebODM/WebODM",
      "start": "https://docs.webodm.org/installation/",
      "windows": "Windows: installer ทางการ",
      "linux": "Linux: ติดตั้งตามคู่มือแล้วใช้ browser local",
      "access": "OSS",
      "license": "AGPL-3.0",
      "licenseSource": "https://raw.githubusercontent.com/WebODM/WebODM/master/README.md",
      "experiment": "ใช้ Banana เรียน3D reconstruction แล้ว Mygla เรียนแผนที่",
      "limitations": "ย้ายเป็น WebODM/WebODM; README ระบุ installer ทางการฟรี และรองรับหลาย engine; อย่าใช้ขั้นตอนเก่าแทนรุ่นใหม่",
      "hardware": "RGB mapping / multispectral ตาม engine",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "p03",
      "code": "P03",
      "name": "COLMAP",
      "group": "payload",
      "github": "https://github.com/colmap/colmap",
      "start": "https://colmap.github.io/install.html",
      "windows": "Windows: binary",
      "linux": "Linux: package/build",
      "access": "OSS",
      "license": "new BSD; dependencies แยก",
      "licenseSource": "https://raw.githubusercontent.com/colmap/colmap/main/COPYING.txt",
      "experiment": "นำภาพวัตถุหลายมุมสร้าง sparse reconstruction แล้วดู reprojection error",
      "limitations": "new BSD ของตัวหลัก; dependency แยก; dense/GPU ตรวจ build และ backend ไม่สมมติทุกเครื่องรองรับเหมือนกัน",
      "hardware": "Camera calibration / SfM",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "p04",
      "code": "P04",
      "name": "QGIS",
      "group": "payload",
      "github": "https://github.com/qgis/QGIS",
      "start": "https://www.qgis.org/download/",
      "windows": "Windows: native",
      "linux": "Linux: native",
      "access": "OSS",
      "license": "GPL-2.0",
      "licenseSource": "https://raw.githubusercontent.com/qgis/QGIS/master/README.md",
      "experiment": "เปิด orthophoto/DSM ตรวจ CRS วัดระยะ และคำนวณ raster index",
      "limitations": "ต้องทราบ CRS/vertical datum; ค่า pixel ไม่ใช่หลักฐาน absolute accuracy",
      "hardware": "RGB / multispectral / GIS",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "p05",
      "code": "P05",
      "name": "CloudCompare",
      "group": "payload",
      "github": "https://github.com/CloudCompare/CloudCompare",
      "start": "https://www.cloudcompare.org/release/",
      "windows": "Windows: native",
      "linux": "Linux: Flatpak/build",
      "access": "OSS",
      "license": "GPLv3 ตาม README",
      "licenseSource": "https://raw.githubusercontent.com/CloudCompare/CloudCompare/master/README.md",
      "experiment": "เปิด point cloud วัดระยะ ทำ registration และ cloud-to-cloud distance",
      "limitations": "README ระบุ GPLv3; metadata GitHub ไม่จำแนก SPDX อัตโนมัติ; ICP alignment ไม่ได้พิสูจน์พิกัดจริง",
      "hardware": "LiDAR / photogrammetry point cloud",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "p06",
      "code": "P06",
      "name": "Agisoft Metashape",
      "group": "payload",
      "github": "",
      "start": "https://www.agisoft.com/downloads/installer/",
      "windows": "Windows: native",
      "linux": "Linux: native",
      "access": "Trial/เสียเงิน",
      "license": "ผู้ให้บริการกำหนด; ดูเงื่อนไขที่ลิงก์",
      "licenseSource": "https://www.agisoft.com/downloads/installer/",
      "experiment": "ใช้ชุดภาพเดียวกับ WebODM เปรียบเทียบเวลา reconstruction และ output",
      "limitations": "30-day trial ใช้ save/export ได้; Demo เป็นคนละโหมด; ตรวจ Standard/Professional ให้ตรงงาน mapping",
      "hardware": "Photogrammetry / thermal-multispectral ตาม edition",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": false
    },
    {
      "id": "p07",
      "code": "P07",
      "name": "PIX4D GSD Calculator",
      "group": "payload",
      "github": "",
      "start": "https://support.pix4d.com/hc/en-us/articles/202560249",
      "windows": "Windows: spreadsheet",
      "linux": "Linux: spreadsheet ที่เปิด ODS/XLS ได้",
      "access": "ดาวน์โหลดใช้ตามผู้ให้บริการ",
      "license": "ผู้ให้บริการกำหนด; ดูเงื่อนไขที่ลิงก์",
      "licenseSource": "https://support.pix4d.com/hc/en-us/articles/202560249",
      "experiment": "ใส่ sensor width/focal length/height/image size แล้วเทียบ GSD สองความสูง",
      "limitations": "เป็นไฟล์ Excel/OpenOffice ให้ดาวน์โหลด ไม่ใช่ web app; ไม่พบสิทธิ์ rehost ในหน้าที่ตรวจ",
      "hardware": "Camera / mission geometry",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": false
    },
    {
      "id": "m01",
      "code": "M01",
      "name": "MAVProxy + MAVExplorer",
      "group": "communications",
      "github": "https://github.com/ArduPilot/MAVProxy",
      "start": "https://ardupilot.org/mavproxy/docs/getting_started/download_and_installation.html",
      "windows": "Windows: installer/Python",
      "linux": "Linux: Python",
      "access": "OSS",
      "license": "GPL-3.0",
      "licenseSource": "https://raw.githubusercontent.com/ArduPilot/MAVProxy/master/README.md",
      "experiment": "รับ SITL แล้วส่ง telemetry ไป GCS อีกตัว; เปิด log ด้วย MAVExplorer",
      "limitations": "ตั้ง endpoint และ port ให้ตรง; TLOG กับ onboard log มีข้อมูลต่างกัน",
      "hardware": "Telemetry radio / companion computer",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "m02",
      "code": "M02",
      "name": "pymavlink",
      "group": "communications",
      "github": "https://github.com/ArduPilot/pymavlink",
      "start": "https://mavlink.io/en/getting_started/installation.html",
      "windows": "Windows: Python ตาม toolchain",
      "linux": "Linux: Python",
      "access": "OSS",
      "license": "(L)GPLv3 generator + generated-output exception ตาม COPYING",
      "licenseSource": "https://raw.githubusercontent.com/ArduPilot/pymavlink/master/COPYING",
      "experiment": "อ่าน HEARTBEAT และ ATTITUDE จาก SITL แล้ว export CSV",
      "limitations": "COPYING แยก generator (L)GPLv3 และ exception สำหรับ generated output; ไม่เหมารวม repo ว่า MIT",
      "hardware": "Python / serial / UDP / companion",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "m03",
      "code": "M03",
      "name": "MAVSDK",
      "group": "communications",
      "github": "https://github.com/mavlink/MAVSDK",
      "start": "https://mavsdk.mavlink.io/",
      "windows": "Windows: รองรับ; ตรวจ language package",
      "linux": "Linux: รองรับ",
      "access": "OSS",
      "license": "BSD-3-Clause",
      "licenseSource": "https://raw.githubusercontent.com/mavlink/MAVSDK/main/README.md",
      "experiment": "เริ่ม telemetry example แล้วทดสอบ mission API กับ PX4 SITL",
      "limitations": "ต้องจับคู่ mavsdk_server กับ client package; API บางส่วนขึ้นกับ flight stack",
      "hardware": "PX4 / companion / camera control",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "m04",
      "code": "M04",
      "name": "Wireshark",
      "group": "communications",
      "github": "https://github.com/wireshark/wireshark",
      "start": "https://www.wireshark.org/download.html",
      "windows": "Windows: native; capture driver แยก",
      "linux": "Linux: native",
      "access": "OSS",
      "license": "GPL-2.0",
      "licenseSource": "https://raw.githubusercontent.com/wireshark/wireshark/master/README.md",
      "experiment": "จับ loopback UDP ของ SITL ดู packet rate/ช่วงขาดหายและบันทึก PCAP",
      "limitations": "Npcap/driver มี license แยก; จับ packet ได้ไม่เท่ากับ application รับทุกข้อความ",
      "hardware": "Ethernet / Wi-Fi / telemetry IP",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "m05",
      "code": "M05",
      "name": "GNU Radio",
      "group": "communications",
      "github": "https://github.com/gnuradio/gnuradio",
      "start": "https://wiki.gnuradio.org/index.php/InstallingGR",
      "windows": "Windows: Radioconda/Conda ตามเอกสาร",
      "linux": "Linux: package/Conda/build",
      "access": "OSS",
      "license": "GPL-3.0",
      "licenseSource": "https://raw.githubusercontent.com/gnuradio/gnuradio/main/README.md",
      "experiment": "สร้าง signal+noise+filter flowgraph และดู spectrum โดยไม่ใช้วิทยุจริง",
      "limitations": "งานจำลองไม่ต้อง SDR; เมื่อต่อ hardware ต้องมี driver ที่ตรงอุปกรณ์",
      "hardware": "SDR / RF / radio link",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "v01",
      "code": "V01",
      "name": "OpenCV",
      "group": "computer-vision",
      "github": "https://github.com/opencv/opencv",
      "start": "https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html",
      "windows": "Windows: Python/native",
      "linux": "Linux: Python/native",
      "access": "OSS",
      "license": "Apache-2.0",
      "licenseSource": "https://raw.githubusercontent.com/opencv/opencv/5.x/README.md",
      "experiment": "ทำสี/threshold/edge แล้ว calibration ด้วยภาพ chessboard ตัวอย่าง",
      "limitations": "เริ่ม CPU ได้; license image/model/data ต้องตรวจแยกจาก Apache2 ของโค้ด",
      "hardware": "Webcam / Raspberry Pi / camera payload",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "v02",
      "code": "V02",
      "name": "Ultralytics YOLO",
      "group": "computer-vision",
      "github": "https://github.com/ultralytics/ultralytics",
      "start": "https://docs.ultralytics.com/quickstart/",
      "windows": "Windows: Python",
      "linux": "Linux: Python",
      "access": "AGPL/Enterprise",
      "license": "AGPL-3.0",
      "licenseSource": "https://raw.githubusercontent.com/ultralytics/ultralytics/main/README.md",
      "experiment": "ทดลอง inference บนไฟล์ของตน เปลี่ยน confidence แล้ววัด precision/recall",
      "limitations": "ใช้ AGPL หรือข้อตกลง Enterprise ตามรูปแบบนำไปใช้; model weights และการรวมระบบต้องพิจารณาด้วย",
      "hardware": "CPU/GPU / edge detector",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "v03",
      "code": "V03",
      "name": "PyTorch",
      "group": "computer-vision",
      "github": "https://github.com/pytorch/pytorch",
      "start": "https://pytorch.org/get-started/locally/",
      "windows": "Windows: CPU/GPU ตาม selector",
      "linux": "Linux: CPU/GPU ตาม selector",
      "access": "OSS",
      "license": "BSD-style + third-party notices",
      "licenseSource": "https://raw.githubusercontent.com/pytorch/pytorch/main/LICENSE",
      "experiment": "ฝึก classifier ขนาดเล็ก แยก train/validation/test แล้ว export model",
      "limitations": "BSD-style และ third-party notices; ไม่รับรองสิทธิ์ dataset/weights; เลือก CUDA/ROCm ให้ตรง OS",
      "hardware": "GPU workstation / edge model development",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "v04",
      "code": "V04",
      "name": "ONNX Runtime",
      "group": "computer-vision",
      "github": "https://github.com/microsoft/onnxruntime",
      "start": "https://onnxruntime.ai/docs/get-started/with-python.html",
      "windows": "Windows: CPU/GPU ตาม execution provider",
      "linux": "Linux: CPU/GPU ตาม execution provider",
      "access": "OSS",
      "license": "MIT",
      "licenseSource": "https://raw.githubusercontent.com/microsoft/onnxruntime/main/README.md",
      "experiment": "รันโมเดล ONNX เดียวกันบน CPU วัด latency median/p95 แล้วเทียบ provider",
      "limitations": "เลือก CPU/GPU package อย่างใดอย่างหนึ่งใน environment; model license แยก",
      "hardware": "PC / ARM / edge inference",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "v05",
      "code": "V05",
      "name": "CVAT Community",
      "group": "computer-vision",
      "github": "https://github.com/cvat-ai/cvat",
      "start": "https://docs.cvat.ai/docs/administration/community/basics/installation/",
      "windows": "Windows: WSL2/Docker แล้ว browser",
      "linux": "Linux: Docker แล้ว browser",
      "access": "OSS; hosted plan แยก",
      "license": "MIT",
      "licenseSource": "https://raw.githubusercontent.com/cvat-ai/cvat/develop/README.md",
      "experiment": "label ภาพของตน20ภาพ ตรวจ annotation แล้ว export format สำหรับฝึก",
      "limitations": "MIT ของ Community; cloud quota/terms ไม่ใช่ license self-host; ต้องตั้งสิทธิ์ผู้ใช้เมื่อใช้ร่วมกัน",
      "hardware": "Dataset annotation",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "v06",
      "code": "V06",
      "name": "Google Colab",
      "group": "computer-vision",
      "github": "",
      "start": "https://research.google.com/colaboratory/faq.html",
      "windows": "Windows: browser",
      "linux": "Linux: browser",
      "access": "Free/เสียเงิน",
      "license": "ผู้ให้บริการกำหนด; ดูเงื่อนไขที่ลิงก์",
      "licenseSource": "https://research.google.com/colaboratory/faq.html",
      "experiment": "เปิด notebook ประมวลผลภาพและรันโมเดลเล็ก บันทึกผลออกนอก runtime",
      "limitations": "GPU/เวลารันไม่รับประกันและ quota เปลี่ยนได้; cloud runtime ไม่เหมาะควบคุมบิน realtime",
      "hardware": "Cloud training / PC-first",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": false
    },
    {
      "id": "v07",
      "code": "V07",
      "name": "Roboflow",
      "group": "computer-vision",
      "github": "",
      "start": "https://roboflow.com/pricing",
      "windows": "Windows: browser",
      "linux": "Linux: browser",
      "access": "Public/Trial/เสียเงิน",
      "license": "ผู้ให้บริการกำหนด; ดูเงื่อนไขที่ลิงก์",
      "licenseSource": "https://roboflow.com/pricing",
      "experiment": "ใช้ภาพที่เผยแพร่ได้ ทำ label/train และดูผลใน workflow ทดลอง",
      "limitations": "Public เปิด dataset/models บน Universe; credits จำกัด; ตรวจสิทธิ์ export weights ตาม plan",
      "hardware": "Dataset / cloud model / deployment",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": false
    },
    {
      "id": "v08",
      "code": "V08",
      "name": "Edge Impulse",
      "group": "computer-vision",
      "github": "",
      "start": "https://www.edgeimpulse.com/pricing",
      "windows": "Windows: browser; CLI ตาม target",
      "linux": "Linux: browser; CLI ตาม target",
      "access": "Developer/Enterprise",
      "license": "ผู้ให้บริการกำหนด; ดูเงื่อนไขที่ลิงก์",
      "licenseSource": "https://www.edgeimpulse.com/pricing",
      "experiment": "ใช้ไฟล์ภาพทำโครงการจำแนกหรือ FOMO แล้วดู latency estimate ก่อน export",
      "limitations": "Developer สำหรับทดลอง; deployment license/จำนวนunits ตรวจตารางปัจจุบัน ไม่ยึด blog เก่า",
      "hardware": "Raspberry Pi / embedded / edge AI",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": false
    },
    {
      "id": "v09",
      "code": "V09",
      "name": "Picamera2",
      "group": "computer-vision",
      "github": "https://github.com/raspberrypi/picamera2",
      "start": "https://github.com/raspberrypi/picamera2",
      "windows": "Windows: อ่านโค้ด/ประมวลผลภาพแทน; capture API ไม่ใช่ PC native",
      "linux": "Linux: Raspberry Pi OS และกล้องที่รองรับ",
      "access": "OSS; ต่อ hardware",
      "license": "BSD-2-Clause",
      "licenseSource": "https://raw.githubusercontent.com/raspberrypi/picamera2/main/README.md",
      "experiment": "พื้นฐาน PC ใช้ OpenCV+ไฟล์ภาพ; ขั้นต่อยอดใช้ Pi capture แล้วเทียบ exposure",
      "limitations": "ไม่ใช่ Raspberry Pi camera emulator; ต้องมี Pi เพื่อทดสอบ capture จริง",
      "hardware": "Raspberry Pi / CSI camera",
      "checked": "2026-09-07",
      "platforms": [
        "linux-hardware"
      ],
      "browser": false,
      "pcFirst": false,
      "openSource": true
    },
    {
      "id": "v10",
      "code": "V10",
      "name": "jetson-inference",
      "group": "computer-vision",
      "github": "https://github.com/dusty-nv/jetson-inference",
      "start": "https://github.com/dusty-nv/jetson-inference",
      "windows": "Windows: พัฒนา/ดูตัวอย่าง; runtime เป้าหมายเป็น Jetson",
      "linux": "Linux: Jetson+JetPack ที่รองรับ",
      "access": "OSS; ต่อ hardware",
      "license": "MIT",
      "licenseSource": "https://raw.githubusercontent.com/dusty-nv/jetson-inference/master/README.md",
      "experiment": "พื้นฐาน PC ใช้ ONNX Runtime; บน Jetson ทดลอง detectNet และวัด FPS/power",
      "limitations": "README รองรับ JetPack6 บน Orin; benchmark เก่าห้ามใช้แทนเครื่องใหม่; ต้องตรึง dependency",
      "hardware": "Jetson Orin / TensorRT / USB-CSI camera",
      "checked": "2026-09-07",
      "platforms": [
        "linux-hardware"
      ],
      "browser": false,
      "pcFirst": false,
      "openSource": true
    },
    {
      "id": "t01",
      "code": "T01",
      "name": "ArduPilot WebTools",
      "group": "testing",
      "github": "https://github.com/ArduPilot/WebTools",
      "start": "https://firmware.ardupilot.org/Tools/WebTools/",
      "windows": "Windows: browser",
      "linux": "Linux: browser",
      "access": "OSS/เว็บใช้ได้",
      "license": "GPL-3.0",
      "licenseSource": "https://github.com/ArduPilot/WebTools",
      "experiment": "ใช้ log ดู HardwareReport, FilterReview, PIDReview แล้วเปรียบเทียบ parameter offline",
      "limitations": "หน้ารวมระบุประมวลผล client-side; อย่าเหมารวม Dev/AI tools; FilterReview ต้องมี IMU log ที่เหมาะสม",
      "hardware": "IMU / compass / PID / thrust stand",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "t02",
      "code": "T02",
      "name": "PlotJuggler",
      "group": "testing",
      "github": "https://github.com/PlotJuggler/PlotJuggler",
      "start": "https://github.com/PlotJuggler/PlotJuggler/releases",
      "windows": "Windows: installer",
      "linux": "Linux: AppImage/package",
      "access": "OSS",
      "license": "MPL-2.0",
      "licenseSource": "https://raw.githubusercontent.com/PlotJuggler/PlotJuggler/main/README.md",
      "experiment": "เปิด CSV/log จัดกราฟ target/actual และบันทึก layout สำหรับเทียบ run",
      "limitations": "ตัวหลัก MPL2; plugins อาจต่างกัน; โครงการย้ายองค์กรแล้ว",
      "hardware": "Telemetry / sensors / experiment data",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "t03",
      "code": "T03",
      "name": "pyulog",
      "group": "testing",
      "github": "https://github.com/PX4/pyulog",
      "start": "https://github.com/PX4/pyulog",
      "windows": "Windows: Python",
      "linux": "Linux: Python",
      "access": "OSS",
      "license": "BSD-3-Clause",
      "licenseSource": "https://raw.githubusercontent.com/PX4/pyulog/main/README.md",
      "experiment": "อ่าน ULog จาก SITL ดู topics และ export CSV เพื่อทำสถิติ",
      "limitations": "สำหรับ PX4 ULog ไม่ใช่ parser ทุกชนิดของ ArduPilot",
      "hardware": "PX4 onboard logs",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "t04",
      "code": "T04",
      "name": "PX4 Flight Review",
      "group": "testing",
      "github": "https://github.com/PX4/flight_review",
      "start": "https://review.px4.io/",
      "windows": "Windows: browser",
      "linux": "Linux: browser; self-host ตาม repo",
      "access": "OSS/บริการเว็บ",
      "license": "BSD-3-Clause",
      "licenseSource": "https://raw.githubusercontent.com/PX4/flight_review/main/README.md",
      "experiment": "เปิด public log ตัวอย่าง ดู estimator/vibration/tracking แล้วจึงใช้ log จำลองของตน",
      "limitations": "อัปโหลดขึ้น server; เลือก public หรือ link-only ได้ แต่ผู้มีลิงก์อ่านได้; log อาจมีพิกัด",
      "hardware": "PX4 flight logs",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "t05",
      "code": "T05",
      "name": "Jupyter Notebook",
      "group": "testing",
      "github": "https://github.com/jupyter/notebook",
      "start": "https://jupyter.org/install",
      "windows": "Windows: Python/browser local",
      "linux": "Linux: Python/browser local",
      "access": "OSS",
      "license": "BSD-3-Clause",
      "licenseSource": "https://raw.githubusercontent.com/jupyter/notebook/main/README.md",
      "experiment": "ทำสมุดบันทึกการทดลองรวม input/version/กราฟ/ข้อสรุปและ export รายงาน",
      "limitations": "browser local ไม่เท่ากับ cloud; notebook ที่ดาวน์โหลดต้องอ่านก่อนรัน",
      "hardware": "ทุกหมวด / reproducible analysis",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": true,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "t06",
      "code": "T06",
      "name": "SciPy",
      "group": "testing",
      "github": "https://github.com/scipy/scipy",
      "start": "https://scipy.org/install/",
      "windows": "Windows: Python",
      "linux": "Linux: Python",
      "access": "OSS",
      "license": "BSD-3-Clause",
      "licenseSource": "https://raw.githubusercontent.com/scipy/scipy/main/README.rst",
      "experiment": "ใช้ข้อมูลจำลองคำนวณค่าเฉลี่ย CI และ one-sided t-test ตาม requirement",
      "limitations": "เลือกทิศ hypothesis ก่อนดูผล; CI ของค่าเฉลี่ยไม่รับรองทุกเที่ยวบิน",
      "hardware": "Statistics / signal processing / verification",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    },
    {
      "id": "p08",
      "code": "P08",
      "name": "MicaSense imageprocessing",
      "group": "payload",
      "github": "https://github.com/micasense/imageprocessing",
      "start": "https://github.com/micasense/imageprocessing",
      "windows": "Windows: Python/Jupyter ตาม setup",
      "linux": "Linux: Python/Jupyter ตาม setup",
      "access": "OSS",
      "license": "MIT",
      "licenseSource": "https://github.com/micasense/imageprocessing",
      "experiment": "เปิด sample capture ทำ radiometric correction, band alignment และ reflectance",
      "limitations": "มีภาพตัวอย่างเริ่มได้โดยไม่มีกล้อง; ต้อง Git LFS; เป็นงานชุมชน ไม่ใช่ผลิตภัณฑ์ที่ vendor support โดยตรง",
      "hardware": "RedEdge / Altum / multispectral-thermal",
      "checked": "2026-09-07",
      "platforms": [
        "windows",
        "linux"
      ],
      "browser": false,
      "pcFirst": true,
      "openSource": true
    }
  ]
}