路由协议验证)
手把手教你学Simulink--无人机自组网(Ad Hoc)路由协议验证一、为什么要在Simulink里做路由验证NS-3、OPNET适合大规模协议细节验证但Simulink的优势在于能和飞控、任务调度、通信链路放在同一时间轴上适合做通信—控制耦合验证方便后续接硬件在环或半实物仿真。所以这里的目标不是完整复现RFC 3561而是建立一个可验证、可对比、可扩展的Ad Hoc路由仿真骨架。二、系统架构┌──────────────────────────────────────────────┐ │ 场景层N架UAV三维轨迹 / 任务流 │ └──────────────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────────────┐ │ 物理层距离、路径损耗、SNR、连通性 │ └──────────────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────────────┐ │ 路由层邻居发现 / AODV / OLSR / GPSR │ └──────────────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────────────┐ │ 转发层多跳路径、队列、丢包、重传 │ └──────────────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────────────┐ │ 评估层PDR、时延、跳数、开销、连通率 │ └──────────────────────────────────────────────┘三、无人机移动性建模FANET和地面MANET最大区别在于三维高速移动。 拓扑变化会直接触发路由重建。function [pos, vel] uav_mobility_update(pos, vel, dt, vmax, area) % 简化Random Waypoint三维移动 N size(pos, 1); for i 1:N if norm(vel(i,:)) 1e-6 || any(pos(i,:) area) || any(pos(i,:) 0) dest rand(1,3) .* area; dir dest - pos(i,:); d max(norm(dir), 1); vel(i,:) (dir/d) * (vmax * (0.5 0.5*rand)); end pos(i,:) pos(i,:) vel(i,:) * dt; pos(i,:) max(0, min(pos(i,:), area)); end endSimulink里可以用MATLAB Function Bus传递每架UAV的位置、速度、ID和状态。四、空-空链路建模链路是否可用取决于距离、路径损耗和SNR。function [adj, snr_mat] air_to_air_links(pos, comms_range, tx_power, noise_floor, fc) N size(pos, 1); adj false(N); snr_mat zeros(N); c 3e8; for i 1:N for j i1:N d norm(pos(i,:) - pos(j,:)); if d 1 continue; end fspl (4*pi*d*fc/c)^2; rx_power tx_power / fspl; snr rx_power / max(noise_floor, 1e-30); snr_mat(i,j) snr; snr_mat(j,i) snr; if d comms_range snr 10 % SNR门限可配置 adj(i,j) true; adj(j,i) true; end end end end更严谨时可以把自由空间损耗换成3GPP空地路径损耗或加入Rician衰落。五、AODV路由协议核心逻辑AODV是按需路由有数据要发、且没有有效路由时才发起路由发现。 它包含四个关键信令信令作用RREQ源节点广播寻路RREP目的节点或有路由的节点回传路径HELLO周期邻居保活RERR链路中断后通知上游简化AODV实现function [routes, overhead] aodv_step(adj, src, dst, routes, hello_timer, dt) N size(adj, 1); overhead 0; % 1. 邻居发现 / HELLO维护 for i 1:N neighbors{i} find(adj(i,:)); hello_timer(i) hello_timer(i) dt; if hello_timer(i) 1.0 overhead overhead length(neighbors{i}); hello_timer(i) 0; end end % 2. 若已有有效路由直接返回 if isfield(routes, path) ~isempty(routes.path) if all(routes.path N) all(routes.path 0) return; end end % 3. 路由发现BFS泛洪 RREQ visited false(1, N); prev zeros(1, N); q src; visited(src) true; rreq_count 0; while ~isempty(q) cur q(1); q(1) []; rreq_count rreq_count 1; if cur dst % 重建路径 path dst; while path(end) ~ src path(end1) prev(path(end)); end path fliplr(path); routes.path path; routes.hops length(path) - 1; routes.created true; overhead overhead rreq_count; return; end for nb neighbors{cur} if ~visited(nb) visited(nb) true; prev(nb) cur; q(end1) nb; end end end % 4. 未找到路径触发RERR routes.path []; routes.hops 0; routes.created false; overhead overhead rreq_count 1; end如果要对比OLSR可以把邻居发现改为MPR选择 周期拓扑广播。六、数据转发与性能统计路由表给出路径后数据转发可以简化为逐跳传输模型。function [metrics] forward_packets(adj, routes, num_pkts, hop_delay, drop_prob) delivered 0; total_delay 0; total_hops 0; for k 1:num_pkts if isempty(routes.path) || ~routes.created continue; end path routes.path; hops length(path) - 1; % 每跳独立丢包 drop false; for h 1:hops if rand drop_prob || ~adj(path(h), path(h1)) drop true; break; end end if ~drop delivered delivered 1; total_delay total_delay hops * hop_delay; total_hops total_hops hops; end end metrics.pdr delivered / max(num_pkts, 1); metrics.avg_delay total_delay / max(delivered, 1); metrics.avg_hops total_hops / max(delivered, 1); end七、Simulink模型搭建建议推荐结构UAV Swarm Ad Hoc Routing ├── Scenario Generator │ └── UAV Mobility (MATLAB Function) ├── Channel Link Layer │ └── Adjacency Matrix (MATLAB Function) ├── Routing Engine │ ├── AODV Subsystem │ ├── OLSR Subsystem │ └── Route Selector (Protocol Switch) ├── Traffic Generator │ └── CBR / Burst Traffic ├── Forwarding Queue └── Performance Monitor ├── PDR ├── E2E Delay ├── Hop Count └── Control Overhead关键技巧用Bus Creator把每架UAV的位置、速度、ID打包用For Each Subsystem并行处理多节点邻居关系用Stateflow管理路由状态Idle / Discovering / Active / Broken用To Workspace输出时序数据MATLAB后处理画CDF和热力图。八、建议仿真场景场景验证点编队飞行拓扑稳定时路由开销随机分散探索AODV重发现频率中继链路断裂RERR触发与路径恢复节点失效网络连通率变化AODV vs OLSR时延、开销、PDR对比九、建议输出指标仿真结束后至少输出分组投递率 PDR端到端时延均值与P95平均跳数控制开销 / 数据分组比路由重建次数网络连通率随时间变化三维拓扑动态图活跃链路、断裂链路、当前路由路径如果继续扩展可以把路由输出接到编队一致性控制器里验证“路由断裂—控制发散—路由恢复—编队重聚”的完整闭环也可以把AODV的跳数度量替换成链路寿命、SNR、剩余能量做成QoS感知或Q-Learning增强路由。