
OpenRemoteID
OpenDrone-hw/OpenRemoteID
Open hardware concept for a standalone Remote ID module: ESP32-C3 plus GNSS receiver. Incomplete, not a compliant product.

AI-driven SDR & VNA system: LLM-callable tools over MCP with human-approval gates (C++/Qt6 + Python + Flutter)
Ai sdr mini is an open-source printed circuit board by HaohanHe, from the HaohanHe/MBDSDR repository on GitHub, published under the MIT licence. It is a 2-layer board of 76 × 56 mm with 62 parts on 37 nets.
It is built around the ATGM336H-5NR32-G, ESP32-S3-WROOM-1-N8R8 and SI4732-A10-GSR, with the AMS1117-3.3, BMI260 and USB2514B-AEZC among its other parts. Its parts include 23 capacitors, 19 resistors, 7 ICs, 4 diodes and 2 crystals. It belongs with the radio and wireless boards and the ESP32 boards of this library.
30 秒读懂:这是一套把示波器/矢网/软件无线电(SDR)的每个动作封装成 LLM 可调用工具的系统——外部 AI agent 通过 MCP 协议直接遥控真实硬件: 测天线、收信号、解调、解码、抓星历。没有 mock、没有假数据:没插硬件 就报空,未校准就标口径。
真机实证(2026-10):NanoVNA-H 实测自制天线谐振与馈线时延、 RTL-SDR 实抄 435MHz 业余频段载波、外部 agent 经 MCP 遥控收发全链路、 设备屏幕截图回传——全部见
docs/learn/agent-onboarding-runbook.md。
把 SDR 的接收 / 解调 / 解码 / 卫星过境 / AR 指向,全部封装成 LLM 可调用的工具(function calling), 由智能体编排成"一键工作流"。本仓库是同一套体系在三个端 + 一套论文实验 + 一套真机工具上的落地。
| 组件 | 位置 | 是什么 |
|---|---|---|
| 原生桌面端 | cpp/ | C++/Qt 原生 SDR 接收软件(UI 与 DSP 同进程,不依赖 Python 运行时)。AI 助手工具面(read/write 双态、写动作在手动模式被门拦截;数量随版本漂移,实时口径以 cpp/src/ai/tool_schema.cpp 注册表为准),并内置 ControlHub HTTP 控制通道 |
| 手机端 | mobile/ | Flutter 一套代码(Android/iOS),手机作 AI 的"眼睛和手臂":定位+罗盘指向+rtl_tcp 直连外置 SDR;经 ControlHub HTTP 只读对接桌面引擎 |
| Python 智能体内核 | mbdsdr_ai/ | 研究原型:注册大量 LLM 可调用工具(数量随版本漂移,实时口径见该 README §1 与运行时 tool_registry.list_tools())+ 工作流引擎。这是原型期工具面,不是随桌面交付的工具集 |
| 论文实验管线 | experiments/ | 可复现实验(Eb/N0 解码成功率 / 多普勒定轨 / AMR 基线 / LLM 基线),固定种子、逐图标口径 |
| 真机工具 | tools/ | 一键只读自检 hw_selfcheck + 联调向导 onboarding |
| 重复实现台账 | docs/learn/dedup-ledger.md | 同主题多份实现的状态台账(已收敛/有意分层/待收敛)+ 成对工具自洽审计方法与已修缺陷 |
| 能力地图 | docs/learn/capability-map.md | 任务→积木编排对照表(气象对星接收/多普勒定轨/ASTU-1遥测/前端搭建/链路自测)+ 新积木参数速查 + 诚实边界 |
| 学习与阶段规格 | docs/learn/ | 上游真实源码精读(sdrpp/gnuradio/librtlsdr…)+ phase3–6 实现规格与审计 |
许可证:MIT(见 LICENSE、第三方归属 NOTICE.md)。
工程口径:全仓 MIT 发布,第三方上游项目与许可归属见 NOTICE.md;
协议栈(FT8/LRPT/CCSDS 等)按公开标准与协议事实独立实现 · LLM 工具三通道(Agent / ControlHub /
HTTP)行为一致且有测试钉住,写动作一律过人工门 · 已对 SDR++、SatDump、
nanovna-saver、NanoVNA-App、kimi-code、kilocode 六个上游项目做过源码级
克隆审计(见 docs/learn/)。
MBDSDR は「AI が計測器を直接操作するシステム」です。 SDR(ソフトウェア無線)と 向量网络分析仪(NanoVNA)の全操作を LLM から呼び出せるツールとして実装し、 MCP(Model Context Protocol)を通じて外部エージェントが実機を遠隔操作できます。 「専用機器が使いにくい」という問題を、AI に操作させることで解く——これが本作の 出発点です。
実機検証済み(2026年10月、ダミーデータなし): NanoVNA-H による自作アンテナの共振周波数・給線路遅延の実測 / RTL-SDR による 435MHz 帯アマチュア周波数の実キャリア受信・FM 復調 / 外部エージェントからの MCP 遠隔操作(list_devices→connect→set_frequency→get_status 全闭环)。
工程口径:全倉庫 MIT(クリーンルーム自願実装、GPL コード非流用)· LLM ツールは三チャネル(Agent / ControlHub / HTTP)で動作一致・書き込みは 人工承認ゲート必須 · SDR++・SatDump・NanoVNA-App・kimi-code 等の主要 OSS 6 件をクローンして源码監査済み。
零硬件演示:python3 -m mbdsdr_ai.aigui_demo --out demo.html(AI 编排 UI
的完整闭环)、python3 -m pytest mbdsdr_ai/tests -q(离线确定性测试)。
cd cpp
cmake -S . -B build && cmake --build build -j"$(nproc)"
./build/mbdsdr # 无硬件且未加载离线捕获文件时,显示诚实"未连接"空状态
# 需要合成调试信号时必须显式 --test-source / MBDSDR_TEST_SOURCE=1
# 设计红线:never invent synthetic IQ by default, no fake hardware is ever shown依赖(Qt 6.8 / librtlsdr 2.x / CMake 3.16+)、测试与完整功能清单见 cpp/README.md。
启动后桌面引擎在回环 127.0.0.1:50732 起一条 ControlHub HTTP 控制通道(具名常量 tokens::kControlHttpDefaultPort,QSettings/env 可配):
本机浏览器开 http://127.0.0.1:50732/ 即可查看状态 / 下命令;端点只绑回环,跨机控制走 SSH 隧道(如 ssh -N -L 50732:127.0.0.1:50732 user@接收机)。
Chromebook / Crostini 当远程控制端的完整拓扑与隧道步骤见 docs/CHROMEOS_CROSTINI_SDR.md。
真机(RTL-SDR + GNSS + 天线)在用户本地;云开发环境无任何硬件透传:
# 只读自检:USB/udev、rtl_test tuner、rtl_sdr 实读丢包、声卡、GNSS 串口、Python 依赖
python3 tools/hw_selfcheck/selfcheck.py
# 一条命令从"插好 RTL-SDR"走到"出图/出报文"(ADS-B 飞机报文,1090 MHz)
python3 tools/onboarding/onboard.py --step all --freq 1090e6 --mode adsb--json 输出结构化结果;无硬件时每步明确失败原因,绝不 mock、绝不造假数据。docs/learn/phase6/P2-hw-report-format.md
的回传格式把 JSON 贴回。tools/onboarding/README.md、
tools/hw_selfcheck/README.md。# 工具自测(离线、确定性、不碰真机)
python3 -m pytest tools/hw_selfcheck/test_selfcheck.py tools/onboarding/test_onboarding.py -q
# 复现一个仿真实验(固定种子,产物落被 gitignore 的 paper/experiments/)
python3 experiments/exp_ebno_decode.py --trials 50 --seed 20261001见 mbdsdr_ai/README.md(工具面 / 摘除项 / 诚实标注项)与
experiments/README.md(口径红线与全部复现命令)。
docs/learn/phase6/P2-hw-report-format.md。AGENTS.md §5,随每轮工程实测更新;验证能力以可复现命令
(见上方命令区)与云端 CI(.github/workflows/ci.yml)为准,不设数字标语——数字随时间浮动,
写入即过期(AGENTS.md §1)。无硬件环境下的用例以诚实 SKIP 结算,换机 / 真机后需重测,不代表真机已验。docs/learn/phase41/open-items.md。实验管线里的 LLM 基线(experiments/exp_llm_baseline.py)仅在配置 API key 时才真调在线模型。
云内 / 无 key 环境下:经典规则与 KNN 在本地真算,LLM 整列输出 PENDING_ONLINE_RUN——
不伪造数值、不联网、不花钱。key 只从环境变量读(MBDSDR_LLM_API_KEY),代码与文档中无任何 key 字面量。
桌面 / 移动端的 AI 聊天(cpp/src/ai/llm_worker)同理:无 key 或 401/403 时诚实报 PENDING、不 mock 输出;
transport 层已透传真实 HTTP 状态码(llm_client.cpp 读 HttpStatusCodeAttribute),按码分类
(429/5xx 退避重试、4xx 终态如实报错)。但真实在线重试 e2e 从未在带 key / 联网环境跑过——
分类与退避路径由离线纯函数测试钉住,在线一次实跑仍属未决(见总账)。
DMR / P25 / C4FM 等涉及专利或许可受限的语音编码器不内置本仓库。需要时由用户自行上传合法的外部
解码器/二进制;系统在检测到外部组件时接线、没有时诚实标注不可用。本仓库为 MIT 独立实现实现,
上游项目(sdrpp / gnuradio / librtlsdr 等)的协议事实与交互范式是实现依据,
项目与许可归属见 NOTICE.md。
cpp/ 原生 C++/Qt 桌面 SDR(引擎/解调/录制/解码/卫星过境/世界地图/AI 助手)
mobile/ Flutter 手机端(Android/iOS):rtl_tcp 客户端 + 解调 + 录音/回放 building blocks + GNSS
desktop/ 早期 Python/Qt 桌面 GUI 原型(面板式,非当前主推原生端)
mbdsdr_ai/ Python 智能体内核:agent.py 装配、sdr_tools.py 工具面、workflow_engine、scheduler、pose
experiments/论文实验管线(common/ 公共库 + exp_*.py 脚本 + tests/)
tools/ hw_selfcheck(真机只读自检)、onboarding(联调向导)
docs/learn/ 上游精读笔记 + phase3–41 实现规格与审计(交付状态横幅见各 _PHASE*_SPEC.md 顶部;总账见 phase41/open-items.md)
paper/ 论文与实验产物(被 .gitignore,生成物由脚本一键再生成)
repos/ 克隆的上游源码(仅供学习,不入产品路径)根目录另存历史设计稿(白皮书、IEEE 论文初稿、卫星指向雷达图)与硬件工程 (KiCad、BOM、接线表),均为阶段性交付物,不参与三端构建。
python3 -m mbdsdr_ai.nanovna_dump --port /dev/ttyACM0 --json-pretty --out sweep.json--selftest 跑通流程(合成演示,非真实测量)。详见 docs/learn/nanovna/hardware-quickstart.md。按域分组;写=手动模式 gate 拦截,读=不拦截。
| 工具 | 写/读 |
|---|---|
| tune_frequency | 写 |
| set_mode | 写 |
| set_bandwidth | 写 |
| get_status | 读 |
| get_spectrum_status | 读 |
| list_vfos / add_vfo / delete_vfo(rename_vfo/switch_vfo 同) | 读/写 |
| set_vfo_frequency / set_vfo_mode / set_vfo_bandwidth / set_vfo_armed | 写 |
| 工具 | 写/读 |
|---|---|
| set_squelch / get_squelch_status | 写/读 |
| set_ctcss / get_ctcss_status | 写/读 |
| set_cdcss / get_cdcss_status | 写/读 |
| set_ft8 / get_ft8_status | 写/读 |
| get_ft8_history | 读 |
| set_lrpt / get_lrpt_status | 写/读 |
| set_noise_blanker / get_noise_blanker_status | 写/读 |
| get_acars_packets / get_navtex_messages / get_pocsag_messages / get_m17_calls / get_vor_radial / get_adsb_aircraft / get_aprs_messages / get_color_maps | 读 |
| 工具 | 写/读 |
|---|---|
| set_vna_sweep | 写 |
| get_vna_data / get_vna_status | 读 |
| 工具 | 写/读 |
|---|---|
| vna_tdr_cable | 写 |
| analyze_vna_resonance / analyze_vna_filter / analyze_vna_equivalent / analyze_vna_touchstone / analyze_vna_match | 读 |
| 工具 | 写/读 |
|---|---|
| vna_calibration | 写(step=status 为只读引导) |
| vna_device | 写(action=status/vbat/freq_offset 读为只读,整体手动 gate) |
| 工具 | 写/读 |
|---|---|
| start_recording / stop_recording / delete_recording / export_recording / export_iq_segment / list_recordings / get_recording_state | 写/读 |
| export_vna_snapshot / export_spectrum_snapshot / export_peaks_csv / export_ft8_results | 写 |
| 工具 | 写/读 |
|---|---|
| list_bookmarks / add_bookmark / tune_to_bookmark / delete_bookmark | 读/写 |
| scan_band / start_scan_link / stop_scan_link / get_scan_link_status | 写/读 |
| connect_network_source / set_network_audio_sink / get_network_audio_status | 写/读 |
| list_templates / run_template | 读/写(确定性任务模板:list 列举 3 模板;run 按名构建并登记计划 executed=false,不同步调谐/录制,手动 gate) |
| get_task_history | 读(TaskRunner 完成任务历史:列表最近 N 条 + id 详情含 steps 数组,无记录 runs=[] 诚实空态) |
| 工具 | 写/读 |
|---|---|
| calibrate_frequency / apply_frequency_correction / predict_passes / list_satellites | 读 |
| set_fft_params / set_color_map / set_doppler_compensation / get_capabilities | 写/读 |
| 工具 | 写/读 |
|---|---|
| set_gain / set_sample_rate / set_decimation / set_direct_sampling / set_offset_tuning / set_agc / set_bias_tee(馈电风险)/ set_force_mono / set_anr | 写 |
| set_audio_output / set_tune_step | 写 |
| 工具 | 写/读 |
|---|---|
| set_recording_target / set_recording_dir / set_recording_template / set_recording_stereo / set_recording_ignore_squelch / set_recording_max_segment / set_gated_recording / set_watch_recording | 写 |
| 工具 | 写/读 |
|---|---|
| set_scan_params | 写 |
| set_persistence / set_waterfall_depth / set_waterfall_speed / set_builtin_palette / set_spectrum_db_range / set_spectrum_zoom / set_db_grid_step / set_peak_threshold / set_peak_hold / set_edge_rail_visibility | 写 |
| 工具 | 写/读 |
|---|---|
| set_source_type / set_spyserver / connect_gnss / set_map_layers / set_station_position / set_sat_pass_template | 写 |
| 工具 | 写/读 |
|---|---|
| vna_connect | 写 |
| analyze_vna_permeability | 读 |
| 工具 | 写/读 |
|---|---|
| set_cat_control / send_cw / send_ax25_beacon / soapy_transmit | 写 |
| 工具 | 写/读 |
|---|---|
| set_ui_scale / set_language / set_left_groups | 写 |
| 工具 | 写/读 |
|---|---|
| memory_add / memory_update / memory_flush / memory_delete | 写(手动 gate;add/update 入队异步落库,flush 同步排空;delete 按 (scope,key) 同步删,不存在返回 deleted=false 空操作) |
| memory_search / checkpoint_status / memory_stats | 读 |
| 工具 | 写/读 |
|---|---|
| arrange_workspace / reset_workspace / update_component_data | 写(手动 gate;按编译期白名单调整 splitter 尺寸/tab 可见性,未知 id 诚实占位;update_component_data 为 A2UI updateDataModel 最小子集 upsert/清空组件数据槽,不碰 DSP/音频/硬件) |
| get_workspace_layout / list_ui_components | 读 |
全部工具以注册表为唯一事实源(运行时 list_tools() 取实时口径),文档不复制浮动数字。域分组口径见 docs/learn/phase31/agent-tool-documentation.md。
两套 MCP server 同仓并存、互为镜像:
tools/list 均按域分组(C++ 10 域、Python 11 域——Python 前 10 域与 C++ 同集合,另含「解码器长尾」扩展域;钉扎测试保证不漂移)。mbdsdr-mcp:面向外部第三方 agent 的 stdio 接入面(接入细节见 docs/learn/phase63/third-party-agent-mcp.md),工具本体与桌面 Agent 同一套 registeredToolSpecs(),不另立实现。mbdsdr_ai/core/mcp_server.py:面向脚本/嵌入式控制器的本地调用面,便于在测试台与自动化脚本里直接驱动同一工具语义。arm_manual / 手动 gate,人在环确认,不会因接入面不同而绕过。| Qty | Value | Footprint | References |
|---|---|---|---|
| 16 | 100nF | ai-sdr:0402 | C3, C4, C5, C6, C8, C10, C12, C13, C14, C16, C19, C20, C21, C22, C23, C24 |
| 7 | 10k | ai-sdr:0402 | R7, R8, R11, R13, R14, R15, R16 |
| 4 | 10uF | ai-sdr:0805 | C7, C9, C11, C15 |
| 4 | 1k | ai-sdr:0402 | R1, R2, R3, R4 |
| 4 | LED_YELLOW | ai-sdr:0603_LED | LED1, LED2, LED3, LED4 |
| 3 | 4.7k | ai-sdr:0402 | R5, R6, R19 |
| 2 | 100k | ai-sdr:0402 | R17, R18 |
| 2 | 18pF | ai-sdr:0402 | C17, C18 |
| 2 | 5.1k | ai-sdr:0402 | R9, R10 |
| 1 | 100nH | ai-sdr:0402 | L2 |
| 1 | 12k | ai-sdr:0402 | R12 |
| 1 | 12pF | ai-sdr:0402 | C1 |
| 1 | 24MHz | ai-sdr:CRYSTAL-3225 | X2 |
| 1 | 32.768kHz | ai-sdr:CRYSTAL-3215 | X1 |
| 1 | 500mA | ai-sdr:0805 | F1 |
| 1 | AMS1117-3.3 | ai-sdr:SOT-223 | U7 |
| 1 | ATGM336H-5NR32-G | ai-sdr:ATGM336H-5N | U6 |
| 1 | BMI260 | ai-sdr:LGA-14-2.5x3 | U5 |
| 1 | ESP32-S3-WROOM-1-N8R8 | ai-sdr:ESP32-S3-WROOM-1 | U4 |
| 1 | SI4732-A10-GSR | ai-sdr:SOIC-16 | U2 |
| 1 | SMA-F | ai-sdr:SMA-FEMALE | RF1 |
| 1 | TMAG5273A1QDBVT | ai-sdr:SOT-23-6 | U3 |
| 1 | TS-1101 | ai-sdr:BUTTON-3x4 | SW1 |
| 1 | TYPE-C-6P | ai-sdr:TYPE-C-6P | J1 |
| 1 | UFL-F | ai-sdr:UFL-FEMALE | RF2 |
| 1 | USB-A-F | ai-sdr:USB-A-FEMALE | USB1 |
| 1 | USB2514B-AEZC | ai-sdr:QFN-36-6x6 | U1 |
It measures 76 × 56 mm and has 2 copper layers, 1.6 mm thick.
62 parts, built around the ATGM336H-5NR32-G, ESP32-S3-WROOM-1-N8R8, SI4732-A10-GSR and AMS1117-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the HaohanHe/MBDSDR repository on GitHub, at the commit this page was made from: the board is ai-sdr-mini-kicad/ai-sdr-mini.kicad_pcb and its schematic ai-sdr-mini-kicad/ai-sdr-mini.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

OpenDrone-hw/OpenRemoteID
Open hardware concept for a standalone Remote ID module: ESP32-C3 plus GNSS receiver. Incomplete, not a compliant product.

Ballistyxx/hqcam
Code + physical documentation of the 3rd revision of my digital microscope


Danzibob/Titania3
The project goal is to create a datalogger small and light enough for an 18mm A8-3 rocket, but capable enough to use as a backup logger for mid and high power flights.



cubicap/usb4-thing
An attemt at creating a USB4 multiplexer controlled by ESP32-S3.
