主要内容

无线传感器网络中的蓝牙Mesh泛洪

此示例使用蓝牙®协议的通信工具箱库™演示蓝牙®网状网络中的网络层泛洪。使用这个例子,你可以:

  • 通过在网格中定位节点来创建和配置蓝牙网状网络。

  • 通过配置节点位置和节点位置分配类型,指定您自己的网络。

  • 将网格节点分类并配置为源节点、目标节点、中继节点和结束节点,并观察网络层泛洪在禁用少数中间中继节点后如何帮助源和目标之间的通信。

  • 从源到目的地的信息流可视化。

该示例还展示了如何在蓝牙网状网络上执行蒙特卡罗模拟,以获得多次迭代平均的数值结果(如所需的中继节点数量,源和目的地之间的关键中继节点)。

蓝牙Mesh Stack

蓝牙核心规格[1]包括用于低速率无线个人区域网络的低能耗版本,称为蓝牙低能耗(BLE)或智能蓝牙。BLE栈由GATT (generic attribute profile)、ATT (attribute protocol)、SMP (security manager protocol)、L2CAP (logical link control and adaptation protocol)、LL (link layer)和物理层组成。BLE被添加到产生少量数据的低能耗设备标准中,例如用于家庭自动化、医疗保健、健身和物联网(IoT)等应用的通知警报。有关BLE协议栈的更多信息,请参见蓝牙协议栈

蓝牙网格配置文件[2]定义了实现BLE网状网络解决方案的基本要求。网格栈位于BLE核心规范的顶层,由模型层、基础模型层、接入层、上层传输层、下层传输层、网络层和承载层组成。蓝牙网状网络可在智能照明、工业自动化、传感器网络、资产跟踪和许多其他物联网解决方案等应用中实现大规模设备网络。金宝搏官方网站有关蓝牙网格堆栈的更多信息,请参见蓝牙Mesh组网

蓝牙网状网络层执行这些主要操作。

  • 使用承载层在网络上传输上层消息

  • 中继网格消息

  • 实施管理泛洪,优化网络泛洪

  • 分配网络地址

  • 配置网络层安全

有关这些网状网络层操作的更多信息,请参见蓝牙Mesh组网

本例使用广告载体演示无线传感器网络中的蓝牙mesh泛洪。

这个例子的主要目标是:

  1. 创建并配置蓝牙网状网络

  2. 可视化消息泛滥

  3. 推导所选源和目标之间的路径

  4. 显示统计资料(请参阅每个节点的网络层统计信息)在每个节点

检查支持包是否安装金宝app

检查“蓝牙协议的通信工具箱库”%支金宝app持包是否安装。comm金宝appSupportPackageCheck (“蓝牙”);

创建并配置蓝牙Mesh网络场景

此示例使您能够创建和配置两个蓝牙网状网络场景。每个场景都是一个50节点的网络。网络中的节点分为中继节点、源节点、目的节点和结束节点。指定源节点和目的节点对应的TTL (time to live)值。在第一个场景中,示例标识源节点和目标节点之间的路径。您可以使用网络层统计信息来可视化网络中的消息流。在第二个场景中,示例禁用了一些中继节点和结束节点。在这种情况下,模拟表明网络有可能在指定的源和目标对之间建立一条路径。

要创建和可视化网状网络,请使用helperBLEMeshNetworkNode而且helperBLEMeshVisualizeNetwork功能。指定节点数量(totalNodes)和节点位置类型(NodePositionType)helperBLEMeshVisualizeNetwork函数。节点位置的默认类型是“Grid”。若要指定您自己的网络,请设置的值NodePositionType到'UserInput'和节点位置到职位

将随机数生成器种子设置为“默认”Sprev = rng(“默认”);%指定网状网络中的节点数totalNodes = 50;用类型的对象初始化'bleMeshNodes'向量% helperBLEMeshNetworkNodebleMeshNodes(1, totalNodes) = helperblemeshnetworkknode;为每个网格节点配置唯一标识符idx = 1:totalNodes meshNode = helperblemeshnetworkknode;meshNode。id = idx;meshNode.NetworkLayer.ElementAddresses = dec2hex(idx, 4);bleMeshNodes(idx) = meshNode;结束从MAT文件加载节点位置负载(“bleMeshNetworkNodePositions.mat”);%本例中模拟的场景数numberofscenario = 2;用类型的对象初始化'meshNetworkPlots'向量% helperBLEMeshVisualizeNetworkmeshNetworkPlots(1, numberofscenes) = helperBLEMeshVisualizeNetwork;idx = 1: numberofscenario meshNetworkPlots(idx) = helperBLEMeshVisualizeNetwork;meshNetworkPlots (idx)。NumberOfNodes = totalNodes;%设置节点位置分配类型为“Grid”或%的UserInputmeshNetworkPlots (idx)。NodePositionType =“UserInput”%根据节点数量设置节点位置(适用于% 'UserInput'),单位为米meshNetworkPlots (idx)。职位= bleMeshNetworkNodePositions;根据节点位置设置附近范围,单位为米meshNetworkPlots (idx)。VicinityRange = 25;设置网络可视化的标题meshNetworkPlots (idx)。Title =...“场景”num2str (idx)“蓝牙Mesh flood”];结束

在网状网络中指定源和目标对的数量srcDstPairs参数。为每个源节点上发出的数据包指定TTL值。

指定模拟时间,单位为毫秒simulationTime = 600;启用或禁用可视化enableVisualization = true;%指定源和目的对srcDstPairs = [1 7;13 29];为每个源节点发出的数据包指定TTL值TTL = [25;25);

模拟

要运行模拟并获得结果,请使用helperBLEMeshFloodingSimulation而且helperBLEMeshFloodingSimulationResults函数,分别。

  • 场景1:在这个场景中,网络中的所有50个节点都是活动的。其中一些节点被选为中继,在此场景中没有故障节点。

指定中继节点relayNodeIDs = [3 4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 41 ....42 43 44 45 46 47 48 49];指定失败的节点(不在网络中的节点)failedNodeIDs = [];

该图显示了每个源对和目标对之间的对应路径。的scenarioOneResults工作区变量存储包含场景1中获得的路径的结果。

使用场景1配置运行模拟pathScenarioOne = helperBLEMeshFloodingSimulation(totalNodes, bleMeshNodes, meshNetworkPlots(1),...仿真时间,srcDstPairs, ttl, relayNodeIDs, failedNodeIDs,...enableVisualization);显示场景1的结果scenarioOneResults = helperBLEMeshFloodingSimulationResults(srcDstPairs, pathScenarioOne)
NumberOfHops scenarioOneResults = 2 x4表源目的地路径  ______ ___________ ___________________________ ____________ 1 7 {[1 46 19 4 39 41 48 23 7]} 8 13 29 {[13 5 3 28 36 44 29]} 6

  • 场景2:在此场景下,请关闭节点41的中继特性。将节点3和节点43从网络中移除。

指定中继节点relayNodeIDs = [4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 42 ....44 45 46 47 48 49];指定失败的节点(不在网络中的节点)failedNodeIDs = [3,43];

该图显示了每个源对和目标对之间的对应路径。的scenarioTwoResults工作区变量存储包含场景2中获得的路径的结果。

使用场景2配置运行模拟pathScenarioTwo = helperblemeshflood simulation (totalNodes, bleMeshNodes, meshNetworkPlots(2),...仿真时间,srcDstPairs, ttl, relayNodeIDs, failedNodeIDs,...enableVisualization);显示场景2的结果scenarioTwoResults = helperBLEMeshFloodingSimulationResults(srcDstPairs, pathScenarioTwo)
NumberOfHops scenarioTwoResults = 2 x4表源目的地路径  ______ ___________ ________________________________ ____________ 1 7{[1 46 19 4 8 20 37 45 34 23 7]}十13 29 {[13 30 45 34 28 36 44 29]}7

网络层统计

在每个节点上,示例捕获这些网络层统计信息。

  • 节点发送的消息数

  • 节点接收到的消息数

  • 收到的应用程序消息数

  • 节点转发的消息数

  • 在节点上丢弃的消息数

statisticsAtEachNode工作区变量包含场景1和场景2中所有节点的累计网络统计信息。对于特定的模拟运行,您只能看到前五个节点的网络统计信息。这些是网络中前五个节点的网络统计信息。

statisticsAtEachNode = helperblemeshflood simulationresults (bleMeshNodes);statisticsForFirstFiveNodes = statisticsAtEachNode(1:min(5, totalNodes),:)
statisticsForFirstFiveNodes = 5x6 table NodeID TotalTxMsgs TotalRxMsgs TotalAppRxMsgs TotalRelayedMsgs TotalDroppedMsgs ______ ___________ ___________ ______________ ________________ ________________ 1 2 4 0 0 4 2 0 8 0 0 8 3 0 5 0 2 3 4 0 10 0 4 6 5 0 9 0 4 5

进一步的探索

为了获得多次模拟的平均数值结果,本例实现了蒙特卡罗方法[3.].当需要分析启用或禁用中继节点后,消息从源节点下发到目的节点的概率时,使用helperBLEMeshMonteCarloSimulations脚本。每个模拟运行都遵循以下步骤。

  1. 使用一个新的种子来生成一个随机数。

  2. 随机禁用中继节点,直到源节点和目标节点之间只存在一条路径。

  3. 存储路径。

蒙特卡罗模拟输出这些统计数据。

  • 当网络中的中继节点被随机禁用时,从源到目的地的消息传递的概率

  • 源节点和目的节点之间的平均跳数

  • 确保数据包从源发送到目的地所需的关键继电器

该示例通过使用这些配置参数执行蒙特卡罗模拟。

源节点和目的节点srcDstPair = [16 12];%源自上述源节点的消息的TTL值TTL = 25;%中继节点relayNodeIDs =[21 15 25 11 38 19 46 8 39 20 37 32 30 5 45 49 43 3 28 36 47。...34 23 48 41 44 42 10 4];%失败的节点(不在网络中的节点)failedNodeIDs = [];

该示例使用上述配置执行10,000次模拟。如需查看仿真结果,请参见bleMeshMonteCarloResults.mat垫文件。

负载(“bleMeshMonteCarloResults.mat”);disp ([节点间路径的概率num2str (srcDstPair (1))...'和Node 'num2str (srcDstPair (2))' is '...num2str (probabilityOfSuccess)“%”。]);disp (['节点间平均跳数'num2str (srcDstPair (1))'和Node '...num2str (srcDstPair (2))' is '...num2str (averageHopCount)“。”]);disp ([获取节点间路径所需的关键中继节点num2str (srcDstPair (1))...'和Node 'num2str (srcDstPair (2))' are ['num2str (criticalRelaysInfo{1:5, 1}”)...“]”。]);恢复之前生成随机数的设置rng (sprev);
节点16和节点12之间存在路径的概率为88.6428%。节点16和节点12之间的平均跳数为8。获得节点16和节点12之间路径所需的关键中继节点为[39 37 8 38 4]。

要为自定义配置参数执行蒙特卡罗模拟,请修改并运行helperBLEMeshMonteCarloSimulations脚本。

通过本示例,您可以创建和配置一个多节点蓝牙网状网络,并对网络层泛洪进行分析。为了研究驱油行为,本例考虑了两种模拟场景。在第一种场景中,通过选择一些中间节点作为中继节点,可以识别和显示源节点和目标节点之间的路径。在第二种场景中,一些节点(Relay和End)被丢弃,一些中继节点的中继特性被禁用。得到的结果表明,即使网络中的节点(Relay和End)随机故障,源节点和目的节点之间也存在一条路径。

这个示例使您能够创建自己的蓝牙mesh网络,并可视化mesh泛洪和网络统计信息。为了获得多次迭代的平均数值结果,您可以在蓝牙网状网络上执行蒙特卡罗模拟。

附录

下面的例子使用了这些helper:

选定的参考书目

  1. 蓝牙特别兴趣小组(SIG)。“蓝牙核心规范”。5.0版。https://www.bluetooth.com/

  2. 蓝牙特别兴趣小组(SIG)。“蓝牙Mesh Profile”。1.0版。https://www.bluetooth.com/

  3. 大都会,尼古拉斯和S.乌兰。“蒙特卡罗方法。”美国统计协会杂志44岁的没有。247(1949年9月):335-41。https://doi.org/10.1080/01621459.1949.10483310

相关的话题