如何指示移动节点在特定的轨迹中移动?节点、中移动、轨迹、指示

2023-09-03 14:55:30 作者:彼堓婲开*

我希望节点A发送节点B应在其中移动的轨迹的详细信息。

例如,我希望节点B以1M/s的速度移动到位置[2.m,0,0]。我将发送一个数据为[2,0,0,1]的数据报。现在,节点B如何从接收到的数据报中提取信息并相应地更改其轨迹?

推荐答案

在节点B上,确保启用了mobility,并设置了locationorigin,这样您就处于以米为单位的本地坐标系中。如果您的坐标系没有地理参考,则可以将origin设置为[NaN, NaN]

def node = agentForService org.arl.unet.Services.NODE_INFO

node.origin = [Float.NaN, Float.NaN]  // or GPS coordinates
node.location = [0, 0, 0]             // or wherever you want to start
node.mobility = true
现在,当您在节点B上收到数据报时,您的代理可以将node.speednode.heading设置为您所需的速度和方向。例如:

node.heading = 90          // head East
node.speed = 1             // at 1 m/s

实际上,您可能需要计算到达所需路点的航向。

分布式系统中的分区问题

您的代理可以监控节点的位置(可能使用TickerBehavior),当到了停止时间(例如,您已经到达足够接近您的路点[2,0,0])时,将速度设置为0:

// if within 1 m of waypoint, stop
if (MathUtils.distance(node.location, [2,0,0] as double[]) < 1) {
  node.speed = 0
}