首页 / 资讯中心 / 文章详情

多无人机通信模式动态选择:概率模型与Matlab仿真实践

多无人机通信模式动态选择:概率模型与Matlab仿真实践 ★ FEATURED ARTICLE
多无人机协同这件事我一开始以为最难的是编队控制后来实际跑起来才发现通信链路的好坏才是决定任务成败的天花板。前两年我在做城市环境多机巡检项目地面站调度模式下一架处于楼宇遮挡区的无人机丢包率飙升到超过 40%飞手手动切了好几组链路参数也不见好转。那时我们用的还是“飞行前定死通信模式”的老思路任务差点失败。后来项目组开始认真关注一个方向能不能让无人机在飞行过程中根据动态环境的实时数据自己决定通信模式这就是这个标题里的核心——“自主多无人机系统通信模式选择的概率模型”。简单说就是把星型、mesh 自组网、分簇、点对点直连这几种通信模式作为一组可选动作实时评估各自的获胜概率按概率选择或切换而不是靠人提前拍板。模型侧我用 Matlab 实现做了完整的仿真验证包括信道衰落、动态编队、模式切换代价等。这篇文章就是完整的复盘。适合谁看如果你正在做多无人机协同、集群任务规划、通信资源分配或者只是想在 Matlab 里跑一个有实际意义的概率决策模型都可以拿这篇文章当参考。我会从模型设计讲起再把 Matlab 核心代码逐段拆开最后聊聊调试中的坑和从仿真到实物的差异。这个项目解决的核心问题就是让通信系统在环境中“自己长出决策能力”而不是永远依赖预设。1. 为什么要做通信模式选择而不是固定一种模式1.1 多无人机系统里的通信模式都有哪些在无人机集群的语境下通信模式一般不是指 WiFi 还是 4G 这种物理空中接口而是指网络拓扑的组织方式。我做仿真和实飞时最常用的有四类星型/集中式所有无人机都直接和地面站或空中指挥节点通信地面站负责转发和调度。优点是简单、可控缺点是远端链路一旦被遮挡就是单点瓶颈。Mesh 自组网所有节点地位平等数据可以多跳转发。抗毁性最强但路由开销、洪泛冗余很大高负载下时延容易失控。分簇式无人机按空间位置或任务编组选出簇头普通节点先传给簇头簇头再统一往外传。兼顾了扩展性和资源消耗但簇头压力大。点对点直连两架无人机之间直接建立链路中间不经过任何中继。延迟最低但只适合局部小范围数据交互。开篇先列清楚这四类模式是因为后面的概率模型是在它们之上做动作空间设计的。这个问题上我最常被问的一句话是Mesh 那么好为什么不全用 Mesh原因在于Mesh 模式下每个节点都要维护路由表、周期性广播 HELLO 包无人机数量一多信道占用率会指数级上升。在 20 架无人机规模的集群里全 Mesh 的控制开销大概要占用 30% 到 40% 的有效带宽这在实时巡检和侦察任务里是不可接受的。所以真正靠谱的做法不是从四选一中挑一个“最好”的而是根据当前链路状态、任务紧急程度和能耗余量动态决定当前时刻用哪一种。这就像开车不能全程只用一挡或者五挡得根据转速、坡度、路况实时换挡换挡时机选好了车才又省油又稳。1.2 固定通信模式的三个典型坑第一个坑是遮挡失效。城市 CBD 环境下楼宇会把地面站和一部分无人机之间的视距直接切断。此时哪怕星型模式的地面站天线功率调得再高绕射损耗也完全没办法补偿丢包率直接飙升。我实测过一次楼顶到地面站的直线距离只有 800 米中间隔了两栋楼信号强度从 -55dBm 掉到 -95dBm链路基本不可用。但同一时刻这架飞机和旁边的僚机之间距离只有 150 米完全是视距。这时候最优选择显然应该是切换成点对点或分簇模式通过僚机中继出去但固定模式的系统只会在那傻等这就是最典型的失败场景。第二个坑是带宽拥挤。有一次做大规模植保无人机协同作业我用了固定 Mesh 组网。前几分钟很顺畅等 15 架飞机一起上传高清作业图时整个信道的握手包、数据包、路由维护包全部挤在一起平均端到端时延从 30ms 拉到了 500ms。任务根本没法实时协同因为无人机之间的位置同步数据都到不了对方那边。Mesh 在节点密度高的瞬间需要广播洪泛这是它的天然本性不是参数能修的。换成“高密度时切星型、低密度时切 Mesh”的动态策略问题立刻缓解。第三个坑是任务阶段变化。多无人机系统常常不是从头到尾做一个动作。编队转场阶段需要低时延的位置共享可以用点对点或小范围广播到达作业区后需要大量图像回传则由分簇模式下的簇头统一汇聚撤离阶段通信负载下降Mesh 又变成稳妥选择。如果系统不支持模式切换就只能按最极端工况设计固定方案资源浪费非常严重。1.3 把“选模式”变成概率决策的好处我最早尝试的是规则切换比如“信号强度低于 -85dBm 就切换到 Mesh”。这种方案在实验室挺好用一到真实环境就露馅信号强度本身是剧烈抖动的你今天在郊区标定的阈值明天换个城区环境就全是误报系统会在星型和 Mesh 之间来回横跳。概率模型解决的是这个问题。它不给出一个硬邦邦的“切 or 不切”结论而是输出一个概率分布例如“当前星型模式成功率 0.15、Mesh 模式成功率 0.72、分簇模式成功率 0.10、点对点模式成功率 0.03”。这种输出有三个好处一是有风险量化能力切换决策知道自己在冒险二是可以支持模式混合比如 30% 流量走 Mesh、70% 流量走星型三是模型可解释任何一个输出都能拆开看是哪个特征贡献了分数这对调试和后期写分析报告帮助非常大。2. 概率模型的核心设计逻辑不能让无人机瞎猜2.1 建模框架选型为什么是马尔可夫决策过程通信模式选择本质上是一个连续决策问题每一时刻要看当前状态做出一个动作选择然后系统跳转到新的状态。这个结构天然适合用马尔可夫决策过程MDP来描述。如果进一步考虑我们无法得到完整精确的环境状态——比如电磁干扰图我们只能通过丢包率间接推断——那就升级为部分可观测马尔可夫决策过程POMDP。但在工程实现上我不会把 POMDP 那套完整的信念状态维护全部搬进来那计算量在机载平台上扛不住。实际做法是用马尔可夫状态转移作为骨架把实时观测做成特征向量再用贝叶斯更新和 softmax 机制完成“概率估计 → 动作选择”的闭环。这个方案等于在严格理论和工程可行性之间取了一个平衡点仿真验证下来效果很好也跑得动。另外使用概率模型而不是直接查表还因为要在决策中保留不确定性。环境观测永远是有噪声的信号强度可能瞬间跳变邻居位置可能有 10 米左右的误差。查表式规则把这些不确定性当成确定值处理结果就是边界状况误判概率模型则会自然地把噪声纳入概率计算同等条件下输出一种“这几条路看起来都行”的分布不会盲目自信。2.2 状态向量怎么构造把实时数据压缩成特征每架无人机在每个决策时刻都要算一个特征向量这个向量是概率模型唯一的输入。特征选得好模型就成功了一大半特征选得烂后面调什么参数都白搭。我常用的特征维度如下表特征名计算方式作用平均 RSSI5 秒窗口内接收信号强度中位数链路质量基线实时丢包率5 秒窗口内丢包数 / 总发包数指示当前链路恶化程度邻居数量距离小于阈值 R 的无人机数量评估 Mesh 和分簇可行性邻居链路质量与邻居节点的平均链路评分判断中继是否可靠任务紧急度根据任务阶段映射到 0~1高紧急度时倾向低延迟模式剩余电量电池剩余比例控制切换带来的额外能耗簇头负载当前所在簇的簇头通信负载分簇模式需要看簇头是否过载这些特征类型差异很大RSSI 是负几十到负一百多的数电量是 0 到 1邻居数量是整数。直接送进模型值域大的特征会压过值域小的所以必须归一化。我一般用滑动窗口的 min-max 归一化再把每个特征做一阶低通滤波避免瞬时跳变传导到最终概率输出。这一步看起来小实际效果非常关键我后面排查概率震荡问题时会再提到。2.3 动作空间与 softmax 概率选择动作空间就是前面说的四种通信模式星型、Mesh、分簇、点对点。每一轮决策模型计算每个模式的得分然后通过 softmax 函数转成概率分布。得分到概率的转换公式是p_i exp(score_i / T) / sum(exp(score_j / T) for j 1..4)其中 T 是温度参数。温度高的时候各个模式的概率趋近相同相当于探索温度低的时候得分最高的模式概率会被放大相当于利用。我给小白读者举个具体例子某时刻四个模式的得分是 [12, 6, 1, 5]当 T1 时softmax 后概率大约是 [0.86, 0.07, 0.002, 0.05]几乎没有悬念就是星型但如果把 T 调到 4概率变成 [0.42, 0.22, 0.11, 0.20]明显柔软了很多。这就是温度参数的作用它可以控制系统“守旧还是尝新”的程度。选择动作的时候我并不直接取概率最大的那个模式而是按概率采样。也就是说会有小概率选择次优模式。这样做不是为了搞随机而是为了避免系统过早锁定某个模式不放给自己留探索组合模式的空间。如果想更稳一点还可以把概率当作流量分配权重星型 0.7、Mesh 0.3同一个决策周期内 70% 的数据走星型30% 走 Mesh。这个设计在真实链路里很有用因为通信不像机械动作只能选一个数据包是可以分流的。2.4 评分函数把任务目标变成可计算的数值通信模式评分不能只考虑信号好坏必须把任务因素和资源因素一起算进去。我这里用一个带权重的线性评分再加惩罚项score_i w1 * 链路质量分_i w2 * 拓扑适配分_i w3 * 任务紧急度匹配分_i - w4 * 能耗代价_i - w5 * 切换惩罚_i链路质量分来自当前模式下链路预测成功率拓扑适配分来自邻居数量和分布合理度任务紧急度匹配分则是给延迟更低的模式加分比如侦察跟踪任务里任务紧急度为 1点对点模式就有天然优势。能耗代价要按模式分别标定Mesh 转发模式单位比特能耗最高星型居中点对点最低。切换惩罚则是当选择结果和前一轮模式不一致时减去一个固定代价用来抑制频繁切换。权重 w1 到 w5 的取值没有通用答案我的经验是先设成等权然后跑几组模拟看哪个模式被不公平地压制了再针对性调整。最常出问题的是切换惩罚设太大系统就不敢切换设太小模式切换频繁。我最后采用的方案是给切换惩罚再加一个“最小驻留时间”即某模式一旦启用必须至少持续 2 个决策周期这个比单纯调权重稳定得多。2.5 为什么先用概率模型而不是直接上 DQN/PPO这几年深度强化学习在无人机领域大火Matlab 里也集成了 DQN 和 PPO 工具包很多同学一上来就想着用强化学习解决通信模式选择问题。我的态度是可以用但别把它当第一选择。原因有三点。一是计算资源。DQN 在线决策时虽然只跑一次前向推理但训练阶段需要的经验回放和参数更新我是在机载边缘节点上做的算力根本不够。反过来概率模型加一个 softmax 的操作量级在几百次浮点运算内任何一颗机载处理芯片都能跑。二是可解释性。通信是安全关键系统出了问题得能追溯到原因。概率模型的每个模式得分都能拆分成链路、拓扑、能耗、任务几项一眼看出是谁把分数拉低了深度强化学习给不出这种解释只能靠分析 Q 值实际排查效率很低。三是样本效率。DQN/PPO 动辄需要上百万步仿真才能收敛概率模型是白盒设计工程师能直接根据物理规律把先验知识写进评分函数几百个回合就能达到可用水平。但概率模型并不是终点。我的实际做法是把概率模型当作一个轻量级基线先用它跑通整个链路后期如果集群规模扩大到 50 架以上、状态空间确实复杂到人工特征表达不了再引入 PPO 作为上层策略概率模型输出的概率分布作为训练特征的一部分。这样的混合架构比一上来就上强化学习要稳得多。3. Matlab 实现核心代码和参数细节3.1 仿真框架整体设计我在 Matlab 里的仿真结构是典型的时序循环初始化环境 → 按决策周期循环 → 更新无人机位置和信道 → 计算评分 → softmax 选择模式 → 模拟数据传输 → 记录指标 → 可视化。决策周期我习惯设成 0.5 秒太短环境变化不大还徒增计算量太长又来不及应对突发遮挡。我先把仿真环境相关的参数每配置一套%% 仿真参数配置 numUAV 12; % 无人机数量 simTime 120; % 仿真时长秒 dt 0.1; % 物理仿真步长秒 decisionInterval 0.5; % 通信模式决策周期秒 T 1.2; % softmax 温度初始值 minDwellTime 2; % 最小驻留时间决策周期个数 numMonteCarlo 20; % 蒙特卡洛次数初始化无人机结构体时我会记录位置、速度、剩余电量、当前通信模式、链路质量记录等。对新手朋友提醒一句Matlab 里的 struct 数组很好用但千万别在循环里用[s.field]四处拷贝数据量大了会很慢先初始化好整个结构体数组再操作。3.2 信道模型仿真里最容易被低估的一环概率模型的输入是信道数据所以信道模型必须接近真实。我用的不是一个固定信噪比而是大尺度路径损耗加小尺度衰落再加遮挡阴影衰落function [snr, lost] channelSimulate(posTx, posRx, obstacles, Pt, N0) % 简化信道模型自由空间路径损耗 对数正态阴影 遮挡衰减 d norm(posTx - posRx); PL 32.4 20*log10(d) 20*log10(2.4e9/1e6); % dB, 2.4GHz 自由空间 shadow 8 * randn(); % 阴影衰落标准差 8dB PL PL shadow; % 遮挡物检测LOS 路径是否穿越障碍物 for k 1:size(obstacles, 1) if lineSegmentIntersect(posTx, posRx, obstacles(k, 1:2), obstacles(k, 3:4)) PL PL 15; % 穿越遮挡物增加 15dB 损耗 end end snr_dB Pt - PL - N0; lost snr_dB 10; % SNR 低于 10dB 视为此数据包丢失 end这里面最容易被忽略的是遮挡判定。很多初版仿真只算距离和衰落得出的结论是“Mesh 永远最优”因为没有任何链路会被挡住这完全失真。加了遮挡物之后Star 模式在城市环境下失效的频率就真实多了。lineSegmentIntersect是别人的工具函数你也可以自己写判断式根据二维平面上的叉积符号算。3.3 评分函数实现function scores computeModeScores(env, uav) % 输入env 环境结构体uav 当前无人机结构体 % 输出四种模式的得分向量 scores zeros(1, 4); % 星型模式看地面站链路质量与地面站负载 gsLq env.groundStation.linkQuality(uav.id); scores(1) 0.5 * gsLq 0.3 * uav.taskUrgency 0.2 * (1 - env.gsLoad); % Mesh 模式看邻居数量与邻居链路平均质量 if ~isempty(uav.neighbors) nbrLq mean([env.uavs(uav.neighbors).linkQuality]); scores(2) 0.4 * nbrLq 0.25 * (min(length(uav.neighbors), 8) / 8) 0.25 * uav.taskUrgency; else scores(2) -0.5; end % 分簇模式看簇头负载与自己到簇头的链路 if uav.clusterHead 0 chLq env.uavs(uav.clusterHead).linkQuality; clusterScore 0.4 * chLq 0.4 * (1 - env.uavs(uav.clusterHead).load); scores(3) clusterScore 0.2 * uav.taskUrgency; else scores(3) -1; end % 点对点模式看任务目标节点链路质量 if uav.targetID 0 targetLq env.uavs(uav.targetID).linkQuality; scores(4) 0.6 * targetLq 0.4 * uav.taskUrgency; else scores(4) -1; end % 能量惩罚Mesh 模式能耗最高点对点最低 energyPenalty [0.2, 0.5, 0.3, 0.1] * uav.battery; scores scores - energyPenalty; % 切换惩罚和当前模式不一致时需要扣分 for k 1:4 if k ~ uav.currentMode scores(k) scores(k) - 0.15; % 切换惩罚权重 end end end注意函数里的energyPenalty用的是剩余电量乘奖励系数。如果剩余电量低本该被选的 Mesh 模式会受到更大惩罚迫使系统省电。这个写法很实用相当于把续航问题也纳入了通信决策而不只是把通信当孤立模块。3.4 softmax 概率选择与主循环function [probs, chosenMode] selectModeByProb(scores, T) maxS max(scores); expS exp((scores - maxS) / T); probs expS / sum(expS); if nargout 1 cdf cumsum(probs); r rand(); chosenMode find(cdf r, 1, first); end end主循环里最值得注意的一点是决策时序。物理仿真步长是 0.1 秒通信模式决策是 0.5 秒一次所以决策代码要有“每隔 5 个物理步长执行一次”的时序控制。另外每个模式被选中后要检查最小驻留时间是否满足不满足就直接沿用当前模式然后把剩余时间减一。这段逻辑虽然零碎但少了它概率模型会在两个模式之间疯狂摆动后面你会看到概率震荡问题。仿真结束后我会把每次蒙特卡洛实验的成功率、平均端到端时延、累计带宽、切换次数记录到表格里再画成箱线图对比不同温度、不同切换惩罚参数下的表现。这套评估流程是整个项目的“裁判系统”没有它参数调优就变成了玄学。4. 实时数据接入从 Matlab 仿真到半实物验证4.1 要让模型做决策需要哪些实时数据仿真里环境是理想化的真实项目中状态向量来自无人机机载传感器和地面端遥测系统。要做实时通信模式决策至少需要四路数据自身状态GPS/RTK 位置、IMU 姿态、电池电压这些从飞控的 MAVLink 协议里解析即可。链路质量通信电台或数传模块的 RSSI、信噪比、丢包计数器。很多商用数传链路都有这些原始值输出关键是在 5 秒滑动窗口里统计平均值不能拿瞬时值直接用。邻居发现邻居无人机的位置、编号、数量通常通过机间广播报文共享。频率不一定很高2Hz 到 10Hz 都能接受。任务上下文当前任务阶段、目标点位置、任务紧急度这些从任务规划层下发。我在仿真里把上述数据抽象成了特征向量工程化时只是把输入源换一下模型核心代码几乎不用动。这也是当初坚持把特征工程和决策逻辑分开的原因架构上做对了后面换数据源就像换水管不用拆房子。4.2 Matlab 怎么接入实时数据流常见的实时数据接入方式有三种串口、UDP/TCP、ROS2 或 WebSocket。我做半实物仿真时经常用 UDP因为无人机地面站的遥测链路大多是 UDP 通道数据包格式也是现成的。Matlab 里监听 UDP 端口非常直接uReceiver udpport(LocalPort, 9000, EnablePortSharing, true); flush(uReceiver); while true if uReceiver.NumBytesAvailable 0 data read(uReceiver, uReceiver.NumBytesAvailable, uint8); % 解析自定义协议前4字节为无人机ID后续字节为特征字段 % 解析完成后调用 computeModeScores 和 selectModeByProb end % 每次决策完成后通过 write() 将模式选择结果回传给地面站 write(uReceiver, modeBytes, uint8, remoteHost, remotePort); pause(decisionInterval); endWebSocket 方式在需要跨平台网页端监控时可以配合使用Matlab 2023b 之后的版本本身支持 websocket 客户端函数。对于想要把模型嵌入真实任务链路的读者我的建议是优先走 ROS2 接口。因为多无人机系统的位置、状态、链路信息本来就经常通过 ROS2 topic 分发Matlab 里可以直接通过 Robotics System Toolbox 订阅这些 topic省掉自己写协议解析的一堆麻烦。4.3 时间戳对齐实时系统最容易翻车的点我在这里栽过一个大跟头。半实物验证阶段把 GPS 位置、RSSI、任务状态三路数据都接入模型后概率输出变得很怪。排查了很久才发现三路数据的更新时间差最多有 300ms模型拿旧位置和新信号强度组合在一起算特征相当于把不同时间的信息拼成了一个“鬼特征”。解决办法是给所有接入数据强制打时间戳并在决策前做一个时间对齐缓冲每路数据保留最近 1 秒的历史记录决策时刻取对应决策时刻最接近的数据。这套机制写起来不难但能避免大量诡异行为。工程上我还会在决策循环里加入数据新鲜度检查如果某路数据超过 1.5 秒没有更新这一个周期的特征会标记异常概率模型需要退回安全模式而不是继续乱猜。5. 调试中的常见问题和避坑指南5.1 概率输出频繁跳变怎么办这是最常遇到的问题。现象是模型输出的概率分布每个周期都在变上一轮 Mesh 概率 0.8下一轮星型概率 0.7再下一轮又回到 Mesh。本质原因是底层的信号特征本身就抖softmax 对输入扰动非常敏感一点噪声就会被放大成大幅概率变化。我的排查步骤是先看特征向量有没有做低通滤波。RSSI 这种量受多径干扰影响剧烈直接拿瞬时值参与计算就会出现这种情况我在 2.2 节提到的滑动窗口和一阶低通滤波不是可选项是必选项。其次检查温度 T 是否太低。T 设成 0.5 时任何微小的得分差异都会被极端放大概率分布几乎变成 0 或 1 的二值输出。我的经验是 T 取值在 1.0 到 1.5 之间比较稳。最后加上最小驻留时间保证一个模式启用后至少保持两三个决策周期从机制上杜绝乒乓切换。5.2 概率模型退化成一个固定模式不切换了另一种情况是完全相反模型学成了“懒汉”概率长期集中于某一种模式其他模式的概率接近于 0几乎退化成固定模式。我遇到一次是在仿真中某种模式的能量惩罚设得太大比如 Mesh 的energyPenalty写高了导致得分被压得很低softmax 里它的概率永远出不来模型就再也不尝试切换了。解决的思路是在概率模型里增加“强制探索机制”。比如每个决策周期有 5% 的概率随机选择一个非当前模式或者在评分函数里加入一个动态的“好奇项”如果一个模式很长时间没被选中就在它的得分上额外加一个奖励鼓励模型重新尝试。这种探索机制是仿照强化学习里的 epsilon-greedy 思想但对概率模型同样适用而且很容易 Debug因为机制完全可见。5.3 模式切换时出现短暂丢包物理世界里切换通信模式不是一个瞬间动作。从星型切到 Mesh电台需要重新建立路由、完成邻居发现和数据缓冲这个过程可能有几百毫秒的通信中断。如果仿真里把切换当成零代价落地就会被打懵。处理办法是给切换过程建模在仿真中把切换时间设成 0.2 到 0.5 秒期间该无人机通信能力降级为 30%。另外真实系统要设计切换握手流程。我会采用“先建后断”策略先在新模式下建立链路并确认可用再释放旧模式链路这样丢包率可以控制在很低水平。这套流程在仿真里用状态机实现也不算复杂但意义重大直接影响任务成功率指标。5.4 实时系统中传感器数据缺失如何处理真实环境里数据缺失非常常见GPS 掉星、数传断链、电池电压跳空都会导致某个特征维度彻底不可用。Matlab 里最简单的处理是用上一次有效值填充但只在缺失持续很短时间时有效。更稳的是在特征向量里加一个“数据置信度”维度缺失时置信度为 0模型对那个模式明显降权。这个设计举个小例子RSSI 缺失时星型模式依赖链路质量特征的得分会被大幅拉低而 Mesh 模式本身更多依赖邻居数量这些数据如果还在Mesh 模式就会成为更安全的选择。这比“统一填 0”高明多了因为模型能感知哪个维度不可用而不是把缺失值当作真实值去参与计算。5.5 Matlab 版本和仿真性能的注意点这套代码我在 Matlab 2023b 上完整跑通过理论上 2019b 以后都能运行主要是用了udpport、struct数组和基本矩阵函数。如果你需要跑 50 架以上无人机的集群仿真我建议把物理步长从 0.1 秒调到 0.05 秒并且把无人机初始化、信道仿真、评分计算写成函数而不是脚本否则主循环会慢到让人失去耐心。另外做蒙特卡洛实验时记得每次实验前重置随机种子并且随机化障碍物位置排列否则 20 次实验结果跑出来的都是同一个场景的重复统计指标毫无意义。我会把每次实验的随机种子保存在结果表格里这也让实验结果可复现写报告时能拿出让人信服的细节。最后再分享一个我自己的习惯在把 Matlab 代码搬上实际任务链路之前我会留一周时间只做“决策日志回放”。把真实飞行中记录的链路数据离线灌入模型对比模型当时会做出的选择和系统实际选择之间的差距然后把每一帧的评分、概率、切换原因打印出来仔细看。这个习惯救了我好几次因为在实验室仿真里完美的模型到了真实数据上往往会暴露出训练时完全没见过的特征分布提前用回放把问题暴露出来比带着问题真机上试错要省太多成本。概率模型的价值不在于本身多么高深而在于它诚实——每个决定都有可追溯的理由这正是通信这种安全关键系统最需要的品质。如果你正准备做类似的多无人机通信决策项目我建议从这套概率模型起步先跑通流程再考虑增加模型复杂度稳扎稳打。
阅读完成 · 觉得有帮助?
咨询建站