DistSim¶
DistSim 是 RflySim 工具链中的分布式节点管理与部署工具,用来解决“单机跑不动”以及“多台设备如何协同启动和运行”的问题。它不是仿真器,也不是地面站,而是多节点实验的组织和调度层。
软件定位¶
当实验进入以下场景时,DistSim 基本就会变得重要:
- 多架无人机同时仿真
- 多台主机分担
CopterSim、RflySim3D、算法程序的负载 - Windows、Linux、WSL、Jetson 等混合部署
- 需要远程批量启动脚本和统一查看节点状态
因此,DistSim 主要解决的不是“飞行仿真怎么做”,而是“多台设备如何一起做仿真”。
为什么需要 DistSim¶
单机瓶颈¶
RflySim 的典型单机链路里,同时可能存在:
- 多个
CopterSim实例 - 一个或多个
RflySim3D - PX4 SITL
- Python / ROS 感知与控制程序
当载具数增加或视觉闭环变复杂时,CPU、GPU、内存和网络都会成为瓶颈。
RflySim 的天然分布式属性¶
RflySim 工具链本身就是进程分离、网络互联的设计:
- 动力学解算和三维渲染是分开的
- 飞控仿真和地面站是分开的
- 外部控制与视觉算法也可以独立部署
DistSim 的意义,就是把这种“本来就可以分开”的架构真正组织成可用的集群。
在工具链中的角色¶
DistSim 可以理解为局域网中的实验调度器:
SimCreate / BAT
-> DistSim 发现节点
-> DistSim 选择目标节点
-> DistSim 分发命令或脚本
-> 各节点启动 CopterSim / RflySim3D / Python / SITL
-> DistSim 维持在线状态与执行反馈
和其他核心软件相比:
| 软件 | 主要职责 |
|---|---|
CopterSim |
解算载具运动与飞控接口 |
RflySim3D |
三维渲染与传感器生成 |
QGroundControl |
监控、任务与参数配置 |
SimCreate |
单次实验的配置与启动脚本生成 |
DistSim |
跨主机节点管理与脚本分发 |
分布式架构总览¶
在比较典型的分布式部署里,不同主机往往承担不同角色:
| 节点角色 | 典型职责 |
|---|---|
| 主控节点 | 运行 DistSim GUI、查看在线状态、下发命令 |
| 动力学节点 | 运行多个 CopterSim 实例 |
| 渲染节点 | 运行 RflySim3D / RflySimUE5 |
| 算法节点 | 运行 Python / ROS / MATLAB 控制与感知程序 |
| 嵌入式节点 | 运行 Jetson / Linux 侧算法或服务 |
如果视觉负载很重,渲染节点往往需要单独拿出来;如果只是大规模飞控群体仿真而没有图像链路,则更偏向把算力投入到 CopterSim 节点。
核心功能¶
节点自动发现¶
DistSim 最重要的能力,是让同一局域网中的各节点自动发现彼此。这样用户不需要手工维护复杂的节点列表,就能知道哪些机器在线、哪些角色已经加入集群。
网卡与网络健康管理¶
真实实验室环境里,很多机器同时有:
- 有线网卡
- Wi-Fi
- VMware / Hyper-V 虚拟网卡
- VPN / 代理网卡
DistSim 的一个实际价值,就是尽量自动过滤不适合的虚拟网卡,优先选择真正能参与局域网仿真的物理网卡。
远程命令与脚本执行¶
它可以向目标节点发送:
- 直接命令
- BAT / Shell 脚本
- 多文件打包执行链路
这使得它非常适合把 SimCreate 生成的脚本继续扩展到多机运行。
节点信息管理¶
在大规模实验里,知道“哪台机器是谁”很重要。DistSim 会维护节点名称、操作系统类型、MAC 地址、UAV 范围等信息,方便在集群中定位问题。
运行模式¶
GUI 模式¶
适合:
- 实验室调试
- 节点在线观察
- 手动下发命令
- 现场确认集群状态
守护模式¶
适合:
- Jetson、服务器或无显示器的节点
- Linux 自启动服务
- 后台持续运行的节点发现与执行代理
在真正的分布式集群里,这两种模式往往会同时存在:主控机跑 GUI,边缘节点跑守护模式。
配置与执行方式¶
五阶段思路¶
DistSim 的实验执行常按阶段推进,例如:
- 启动仿真组件
- 检查环境是否就绪
- 启动控制脚本
- 执行人工或任务阶段
- 清理并结束实验
这种阶段化设计的价值在于:多机系统不再是“谁先起来算谁”,而是带有顺序和依赖关系的可控流程。
和 SimCreate 的衔接¶
对很多项目而言,较稳妥的方式是:
- 用
SimCreate生成标准脚本 - 用
DistSim将这些脚本发往不同节点 - 再由各节点运行对应的本地组件
这样可以把“实验描述”和“分布式执行”分开管理。
典型部署场景¶
多台 Windows PC¶
这是最常见的实验室部署方式,适合:
- 多机编队
- 多机 HITL / SITL
- 一台渲染、一台动力学、一台算法的拆分结构
Windows + WSL / Linux¶
适合:
- PX4 SITL 运行在 WSL
- 算法运行在 Linux
- 图形界面和管理端保留在 Windows
Windows + Jetson NX¶
适合:
- 把嵌入式算法节点纳入仿真集群
- 模拟机载计算环境
- 让 Jetson 作为视觉或控制边缘节点
大规模纯仿真¶
如果不跑重视觉链路,而是重点做大规模集群控制,DistSim 可以把多台主机组织成大规模 CopterSim 集群。
重视觉分布式仿真¶
如果每台载具都带相机或 LiDAR,RflySim3D 的 GPU 压力会明显升高,此时 DistSim 的意义更在于把渲染和算法负载摊到多台主机。
使用建议与常见问题¶
推荐做法¶
- 先在两台机器上跑通最小闭环
- 再扩展到三台以上节点
- 先把动力学节点和渲染节点拆开
- 网络优先用有线,不要先上复杂 Wi-Fi 环境
常见问题¶
| 问题 | 更可能的原因 | 处理思路 |
|---|---|---|
| 发现不到节点 | 网段、防火墙、网卡选择有问题 | 先用最简单局域网检查连通性 |
| 节点频繁掉线 | 网络不稳定或错误网卡在发心跳 | 先固定物理网卡环境 |
| 脚本发出去了但没执行 | 权限或工作目录异常 | 先用简单命令验证执行链路 |
| 多机视觉很卡 | 渲染负载集中 | 增加渲染节点或减少单机传感器负担 |
| 大规模集群不同步 | 网络带宽和节点负载不足 | 降低单机实例数并简化数据模式 |
相关例程¶
DistSim 通信与接口¶
- HelloWorld 通信测试:[RflySim安装路径]\RflySimAPIs\10.RflySimSwarm\3.CustExps\e0.CustApiExps\2.DistSimCommAPIExps\1.HelloWorldTestExp
- 四机 DistSim 通信示例:[RflySim安装路径]\RflySimAPIs\10.RflySimSwarm\3.CustExps\e0.CustApiExps\2.DistSimCommAPIExps\2.FourUAVSwarmDistSim
分布式控制部署¶
- 四机分布式部署:[RflySim安装路径]\RflySimAPIs\10.RflySimSwarm\3.CustExps\e2.PyDISCtrlUAVsSim\e4_FourUAVSwarmDistSim
- Windows + WSL:[RflySim安装路径]\RflySimAPIs\10.RflySimSwarm\3.CustExps\e2.PyDISCtrlUAVsSim\e2_FourUAVSwarmTrackWSL
- Windows + Linux 虚拟机:[RflySim安装路径]\RflySimAPIs\10.RflySimSwarm\3.CustExps\e2.PyDISCtrlUAVsSim\e3_FourUAVSwarmTrackVM
- Windows + Jetson NX:[RflySim安装路径]\RflySimAPIs\10.RflySimSwarm\3.CustExps\e2.PyDISCtrlUAVsSim\e5_FourUAVSwarmTrackNx
大规模集群¶
- 30 架无飞控集群:[RflySim安装路径]\RflySimAPIs\10.RflySimSwarm\3.CustExps\e4.NoPX4GMLSSwarm\e2_NoPX4SITLSwarm\1.NoPX4SITL30Swarm
- 100 架无飞控集群:[RflySim安装路径]\RflySimAPIs\10.RflySimSwarm\3.CustExps\e4.NoPX4GMLSSwarm\e2_NoPX4SITLSwarm\2.NoPX4SITL100Swarm
- 200 架双 PC 集群:[RflySim安装路径]\RflySimAPIs\10.RflySimSwarm\3.CustExps\e4.NoPX4GMLSSwarm\e2_NoPX4SITLSwarm\3.NoPX4SITL200Swarm2PC