问题标签 [unetstack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
55 浏览

unetstack - unetsim:是否有通过仅指定坐标而不是速度或方向来将节点从一个坐标移动到另一个坐标的功能?

我试图通过以(x,y,z)的形式指定坐标来在特定路径上移动移动 AUV(节点)。据我探索,UnetSim 仅通过指定速度和方向来提供节点移动。有没有办法让节点在部署后按顺序移动到一组特定的位置?

0 投票
1 回答
190 浏览

unetstack - Unetstack 上的 RTS/CTS 协议实现

我正在 UnetStack 中实现 RTS/CTS 握手技术。我已经编写了用于在 2 个节点之间实现 RTS/CTS 的代码(用于测试)。但我在其中面临一些问题。

这是在 UnetStack IDE(1.3 版)上。以下是我面临的问题。1.在fshrc.groovy中,我使用了ReservationReq API来发送RTS。RxFrameNtf 用于获取接收信号的通知,但是当我使用变量“rx”来检查接收信号是否为 CTS 时,我得到一个空值(fshrc.groovy 的第 24 行),这表明我是没有收到任何 CTS。

  1. 当我从节点 1 向节点 2 发送 ReservationReq 时,我不确定 MySimpleHandshakeMac.groovy 、 processRequest 或 processMessage 中的哪个函数被调用,因为它的打印语句都没有执行。

代码 1:fshrc.groovy

代码 2:handshake-sim.groovy

代码 3:MySimpleHandshakeMac.groovy

我正在打印 RxNtf。'null' 被打印为 RxNtf 的值。

0 投票
1 回答
158 浏览

groovy - 如何在unetstack中发送和接收基带信号?

我正在尝试一个项目,该项目涉及在水下通信中实施声学传播损耗模型(基于某篇研究论文)。我们正在尝试在unetstack. 最终目标是创建一个实现了所有损失模型的通道模型类。

但是现在我们已经开始尝试从一个节点向另一个节点发送基带信号,然后尝试捕获接收节点上的频率并计算该给定频率上的损耗模型。(损耗模型是信号频率值的函数)。我尝试关注一些文档和一些博客文章,但我无法传输和接收信号。

作为参考,我已经参考了这些文章:1.) svc-12-baseband 2.) basic-modem-operations-using-unetstack

这是我正在遵循的研究论文,根据不同的损失模型计算损失。

我试图为模拟编写一个 groovy 文件,但它似乎不起作用。如果有人可以请看一下并让我知道我所犯的错误,那将是真正的帮助。我们对 unetstack 以及像这样的水下信号处理主题还很陌生,这是我们第一次尝试在模拟器上实现它。我们正在使用unetsim-1.3

非常感谢任何帮助!提前致谢

在某些情况下,甚至在打印“已发送”之前先打印“已尝试”。这表明(node.address == 2)代码在执行之前先(node.address == 1)执行。

0 投票
2 回答
65 浏览

unetstack - 尝试从命令行运行 UnetStack 模拟脚本时收到“UnetStack 库丢失”错误

我正在尝试使用命令行运行我的 UnetStack 模拟脚本。我的模拟文件位于示例文件夹中,我在该unet文件夹中打开了一个终端窗口(README.txt 所在的位置)。我按照 README.txt 说明进行操作,并尝试从示例文件夹运行其他模拟脚本,但总是出现以下错误:

错误:UnetStack 库丢失...

但是,如果我使用 IDE 运行模拟,一切正常。如果你能帮助解决这个问题,我将不胜感激,所以我通过命令行运行模拟。

我尝试使用命令行运行模拟脚本。我跟着自述文件。txt 指令,但它没有工作。

我试过这个:bin/unet samples/super-tdma/e3-network.groovy和许多其他模拟脚本。

0 投票
0 回答
95 浏览

viterbi - 在unetstack中使用维特比算法进行卷积解码

我曾尝试在 unetstack 中使用 Viterbi 算法实现卷积解码。但是,我面临一些问题。

  1. 数据未发送到节点 2。(arr - MulAgent.groovy 的第 43 行)
  2. 在某些情况下会出错 -

    groovy.lang.MissingMethodException:No signature of method:Script2.send() is applicable for argument types:(java.lang.Integer, java.lang.Integer)
    values: [2,1010]
    // 2, 1010我们给出的输入值在哪里

mul-sim.groovy(打开并要求输入数据的第一个文件)

//包含解码码的程序的代理 import org.arl.fjage.Message import org.arl.unet.* import org.arl.mac.*

类 MulAgent 扩展 UnetAgent {

final static int PROTOCOL = Protocol.DATA int received_data int new_data def arr = new int[4][2] def temp = new int[2] def code=new int[4][2] int i int k int j = 0诠释错误位;int column_error = 0 int row_error = 0 int m = 4 int n = 4 int count

void startup() { def phy = agentForService Services.PHYSICAL 订阅主题(phy) }

void processMessage(Message msg) { if (msg instanceof DatagramNtf && msg.protocol == PROTOCOL) { for(i=0;i<2;i++) { temp[i] = msg.data[i] println "接收数据打印在代理中是 ${temp[i]}" }
for(i=0;i<2;i++) arr[j][i] = temp[i]; println "代理中的数组是 ${arr}}" println "代理中打印的接收数据是 ${temp}"

// 开始 /********************************************** ************************/ /* // 使用维特比进行卷积解码 // ------------------ ------------------------ // Step 1:将输入作为编码数据字 // Step 2 子模块计算汉明距离 //
Step 2 : 使用维特比算法解码的代码 */
/************************************************* ******************/代码=arr;int state[]=[0,,0,0,0,0,0,0] //state int mem[]=[0,0,0,0,0,0,0,0,0,0] //内存int path=0; //路径矩阵 //int data[]=[1,1,0,1] int n,l; for (int j=0;j<4;j++) { for(int i=8;i>=0;i--) { mem[i+i]=mem[i]; //移位一位 } for (int i=0;i<8;i++) { state[i]=mem[i]; } //disp(mem); 状态[i]=0;//引入0 mem[i]=0; // 计算汉明距离 int out1=((mem[1]^mem[2]^mem[4]^mem[5]^mem[6]^mem[7]^mem[8])^ (( mem[1]^mem[2]^mem[3]^mem[5]^mem[6]^mem[7]^mem[8])); //disp(out1); //输出状态为0 [i]=1; //引入 1 mem[i]=1; int out2=((mem[1]^mem[2]^mem[4]^mem[5]^mem[6]^mem[7 ]^mem[8])^ ((mem[1]^mem[2]^mem[3]^mem[5]^mem[6]^mem[7]^mem[8]));

int l=(code[j][0]^out1)+(code[j][1]^out)); //与 out1 的汉明距离 int m=(code[j][0]^out2)+(code[j][1]^out2)); //与out2的汉明距离

println"路径值 =$path" int 代码=数据;}

def codew=new int[4][2] codew=code;//检测0位错误 int correct=0; 诠释检测=0;诠释n; for(i=0;i<2;i++) if(codew[i][j]) codew[i][j]=0;

for(int i=0;i<4;i++)

} if(detect==0) println"检测完成" println"$code" else if(detect!=0) println"检测完成" println"$code"

import org.arl.unet.* import org.arl.unet.phy.* import org.arl.unet.* import org.arl.unet.phy.* import org.arl.unet.mac.* //import org .arl.unet.nodeinfo.NodeInfo //导入 org.arl.unet.PDU import org.arl.fjage.* //导入静态 org.arl.unet.Services.* //导入静态 org.arl.unet.phy 。身体的。*

订阅物理

send = { addr, value -> println "发送 $value 到节点 $addr" def y= new int[4]; def a=new int[4]; a=[1, 1, 1, 1] y=[0, 0, 0, 0] int i=3 println "$value" int x=value;

而(x!=0) { y[i]=x%10; println "$y" x=x/10; 一世 - ; } def 代码=新的 int[4][2];

/*使用生成器函数编码的码字 g1=1101 g2=1110 */

for(i=0;i<4;i++) {
int bit = y[3-i]; a[3-i] = 位;
代码[i][0] = a[0]^a[1]^a[3]; 代码[i][1] = a[0]^a[1]^a[2]; }

println"4位编码码字:"

//打印码字

println"$代码"

//println "sending ${value[1]} to node $addr " phy << new DatagramReq(to: addr, protocol: Protocol.DATA, data: code[1]) def txNtf2 = receive(TxFrameNtf, 1000) def rxNtf2 = receive({ it instanceof RxFrameNtf && it.from == addr}, 5000) if (txNtf2 && rxNtf2 && rxNtf2.from == addr) println "从 ${rxNtf2.to} 收到的数据来自 ${rxNtf2.from}是:${rxNtf2.data}"

// println "sending ${value[2]} to node $addr " phy << new DatagramReq(to: addr, protocol: Protocol.DATA, data: code[2]) def txNtf3 = receive(TxFrameNtf, 1000) def rxNtf3 = receive({ it instanceof RxFrameNtf && it.from == addr}, 5000) if (txNtf3 && rxNtf3 && rxNtf3.from == addr) println "从 ${rxNtf3.to} 收到的数据来自 ${rxNtf3.from}是:${rxNtf3.data}"

//println "sending ${value[3]} to node $addr " phy << new DatagramReq(to: addr, protocol: Protocol.DATA, data: code[3]) def txNtf4 = receive(TxFrameNtf, 1000) def rxNtf4 = receive({ it instanceof RxFrameNtf && it.from == addr}, 5000) if (txNtf4 && rxNtf4 && rxNtf4.from == addr) println "从 ${rxNtf4.to} 收到的数据来自 ${rxNtf4.from}是:${rxNtf4.data}"

}

0 投票
1 回答
45 浏览

unetstack - unetsim:是否有通过从另一个节点传递命令将节点从一个坐标移动到另一个坐标的功能?

有没有办法命令一个节点使用另一个节点移动到特定位置,例如特定坐标?如果是这样,请分享示例代码(如果可能)。

谢谢你

0 投票
1 回答
169 浏览

unetstack - 使用带有 groovy 脚本的 unetstack 查找两个节点之间的距离

我正在根据相邻节点之间的距离为水下通信网络实现路由协议。我创建了一个代理并编写了一个脚本来使用测距代理查找相邻节点之间的距离,但出现错误

没有这样的属性:范围为类:。

我会附上我写的脚本。

  1. 3-node-network_test.groovy :这是一个模拟脚本,我在其中部署了 3 个节点。节点 1 是接收节点,将在其中执行测距代理和接收脚本。节点 2 和 3 正在运行“测距代理”和“node_agent”。
  2. sink.groovy:将通过广播信标来初始化信标过程。
  3. node_agent:它从接收器接收信标并识别到接收器的距离。在这里,我编写了脚本来查找下沉距离:

完整的脚本。如何在unetstack中找到距离?

3-node-network_test.groovy:

Sink.groovy:

node_agent.groovy:

0 投票
1 回答
60 浏览

time - Unetstack模拟器中模拟脚本中模拟时间的默认单位

我正在使用DiscreteEventSimulator平台在 UnetStack 模拟器中运行模拟脚本。T我想知道,如果我不指定模拟时间的默认时间单位是什么,模拟器是否以秒为单位?我应该指定时间单位吗?

例如:

在这种情况下,模拟器是否考虑模拟时间18秒?或 18 毫秒或什么?

0 投票
1 回答
147 浏览

unetstack - 使用代理将路由添加到路由表中

我们计划使用 UnetStack 在水下路由协议(多跳通信)领域做最后一年的项目。在计划的路由协议中,每个节点都必须从许多可用的邻居中选择它的下一跳。在深入了解下一跳算法的选择之前,我想看看如何使用 UnetStack 在路由表中配置选定的下一跳。为此,我安装了 5 个节点。节点 1 和 5 分别是目标节点和源节点。节点 5 的邻居是节点 3 和 4。在邻居 3 和 4 中,我想选择节点 3 作为节点 5 的下一跳到达目的地。我无法将节点 3 添加为节点 5 的下一跳。如果您提供一些有关此的输入,这将很有帮助。

我编写了模拟脚本如下:

代理:new_routing_agent 如下:

0 投票
1 回答
73 浏览

unetstack - 将噪声函数添加到通道模型

我有噪音功能,我想将它添加到我自己的通道模型中,除了文档之外,我在哪里可以获得有关通道模型的更多信息。