本项目围绕 GFSK 无线链路,完成了从业务数据构造、链路帧生成、GNU Radio 调制/解调,到 TCP 解析与外部联调的完整流程。
radar-sdr/:项目使用的 Python 虚拟环境目录。- 建议先激活该环境,再运行生成、调试和联调脚本。
source radar-sdr/bin/activatemessage_value_generate.py:生成业务消息,包含位置、血量、弹量、经济与增益等字段。noisekey_value_gengerate.py:生成噪声密钥消息,包含sdr_behavior和 6 个密钥字节。frame_generate.py:负责链路层封装,每 15 字节负载前添加access_code、header_1和header_2。launch_tofile.py:离线生成测试文件的入口,会输出message_package.bin和noisekey_package.bin。
GFSK_Transmmit_signal.py:信号侧 GFSK 流图脚本。GFSK_Transmmit-noise.grc和GFSK_Transmmit_noise.py:干扰侧链路脚本。GFSK_Receiver.grc、Receiver_noise.grc、Receiver_noise.py:接收侧链路脚本。- 文件名中的
Transmmit、infentry等拼写保持了当前项目约定,除非做全局重构,否则不要单独改名。
tcp_comm.py:TCP 连接、断线重连和字节流解析的核心实现。tcp_comm.py:TCP 连接、断线重连和字节流解析的核心实现。
gnuradio_control.py:启动 GNU Radio 线程,并在内部轮询更新参数。
gnuradio_frame_parser.py:把 GNU Radio 输出的字节流解析成信号信息和噪声密钥结构。datacenter_package_parser.py:把数据中心来的自动决策包解析成RadarInfo。noise_window_tracker.py:噪声密钥窗口统计逻辑。signal_window_tracker.py:信号窗口统计逻辑。
当前代码里实际使用的端口如下:
127.0.0.1:2000:GNU Radio 信号流输入,解析后更新RoboMaster_Signal_Info127.0.0.1:2500:GNU Radio 噪声密钥流输入,解析后更新RoboMaster_Noise_Key192.168.1.10:1500:数据中心回传接收端,解析后更新RadarInfo192.168.1.10:1000:数据中心转发发送端,向 Unity 或外部客户端发包
如果改动这些端口,必须同步检查 tcp/tcp_comm.py、GNU Radio 流图和外部客户端配置。
这个结构承载 GNU Radio 信号流解析结果,主要字段分为几类:
- 位置:
hero_position、engineer_position、infentry_position_1、infentry_position_2、drone_position、sentinel_position - 血量:
hero_blood、engineer_blood、infentry_blood_1、infentry_blood_2、saven_blood、sentinel_blood - 弹量:
hero_amnunition、infentry_amnunition_1、infentry_amnunition_2、drone_amnunition、sentinel_amnunition - 经济与占点:
econmic_remain、economic_total、occupation_status - 增益:
hero_gain、engineer_gain、infentry_gain_1、infentry_gain_2、sentinel_gain、sentinel_posture
这个结构承载 GNU Radio 噪声密钥流解析结果:
sdr_behaviorsdr_key_1到sdr_key_6
这个结构承载数据中心自动决策同步信息:
EncryptionRankIsModifierKeyAble
RadarInfo 是数据中心解析的结果,内部包含:
radar_message_auto_decision_synchronization
launch/message_value_generate.py和launch/noisekey_value_gengerate.py生成业务层消息。launch/frame_generate.py将业务消息按 15 字节切片并封装链路头。launch/launch_tofile.py输出message_package.bin和noisekey_package.bin。- GNU Radio 流图读取对应输入文件,执行 GFSK 调制并通过 Pluto 发射。
- 接收端流图完成解调后通过本地 TCP 服务输出。
thread_init.py启动线程入口,完成 TCP 接收、密钥统计与 GNU Radio 控制。
python launch/launch_tofile.py可选方式:
- 打开并运行
gnu radio /GFSK-Transmmit-signal.grc - 或直接运行导出脚本
gnu radio /GFSK_Transmmit_signal.py
python thread_init.pytcp/tcp_comm.py已支持断线重连。- 解析入口已迁移至
parser/gnuradio_frame_parser.py和parser/datacenter_package_parser.py。 - GNU Radio 导出脚本中的文件路径需要和当前仓库目录一致,运行前请确认输入文件位置。
- 文件与类名存在拼写
Transmmit(双 m)的情况,属于当前项目命名约定,引用时需保持一致。
- 在解析链路中补充基于
access_code + header的切帧器。 - 在解析器中增加 CRC8/CRC16 校验与命令字分发解析。
- 统一 GNU Radio 输入文件路径,避免导出脚本与仓库目录分叉。
如果虚拟环境中无法通过 pip 安装 gnuradio,可以让虚拟环境使用系统已安装的 GNU Radio 包。
export PYTHONPATH=/usr/lib/python3/dist-packages:$PYTHONPATH
/home/pinkpanda/linux-RADAR/RADAR-2026/RADAR-SDR/radar-sdr/bin/python thread_init.py编辑 radar-sdr/pyvenv.cfg,将 include-system-site-packages = true,然后重新激活虚拟环境:
source radar-sdr/bin/activate也可以使用系统包管理器或 conda 安装 GNU Radio:
sudo apt update
sudo apt install gnuradio python3-gnuradio
# 或使用 conda:
conda install -c conda-forge gnuradio pyqt如果仓库里有 init.sh 并包含 export PYTHONPATH=...,也可以直接运行:
source init.sh