智途投送系统 — 软件体系结构图
按《软件体系结构》课程规范绘制 | 管道-过滤器 / 分层 / 客户端-服务器 / 发布-订阅
图1 系统整体体系结构 — 分层 + 客户端-服务器风格
设计说明:三大子系统各自内部采用分层架构,子系统间采用客户端-服务器风格交互。
上层(单兵APP、Web前端)通过 REST API 与后勤保障系统通信;后勤保障系统通过 ROS 网络与无人机交互。
分层架构的约束:每一层只使用直接下层提供的服务,层与层之间通过定义好的接口协议交互。
图2 声源分析模块 — 管道-过滤器体系结构(我负责部分)
管道-过滤器风格的四个核心特征在本模块的体现:
① 过滤器独立性:每个 Filter(如 FeatureExtractor、GunshotClassifier)都是独立的类,不与其他 Filter 共享状态;
② 数据流驱动:音频数据沿管道单向流动,无循环(符合「不允许出现环」的约束);
③ 局部变换:每个 Filter 只负责一种局部变换(时域→频域→概率→方位→距离);
④ 黑盒复用:GunshotClassifier 可独立替换为其他模型(如 Transformer),只要输入输出 Mel 频谱图格式不变。
图3 声源分析模块 — 分层体系结构(静态视角)
设计说明:通过分层隔离,算法核心层(Layer 1)完全与 ROS、操作系统解耦。
这意味着同一套 C++ 声学算法既可以在 Ubuntu 上作为 ROS 节点运行(控制真实无人机),
也可以在 Windows 上编译为独立可执行文件做离线仿真测试,实现了"一次开发,多处部署"。
图4 无人机感知系统 — 发布-订阅(Pub-Sub)运行时交互
设计说明:发布-订阅风格使得声学分析节点无需关心"谁会使用威胁结果"。
在仿真阶段,可以订阅 /acoustic_threat 做可视化验证;在实机阶段,同一个话题被多模态融合节点订阅。
这种「隐式调用」机制大幅降低了系统各模块间的耦合度。
图5 PIMPL 惯用法 — 信息隐藏与编译隔离
设计说明:PIMPL(Pointer to Implementation)是 C++ 中实现「信息隐藏」的经典惯用法。
它将类的实现细节完全移入 .cpp 文件,头文件中只暴露接口指针。
这符合软件体系结构「接口与实现分离」的原则,也提升了系统的可修改性质量属性。
智途投送系统 — 软件体系结构汇报用图 | 绘制规范参考《软件体系结构》课程