【问题标题】:How can a mobile node be instructed to move in a particular trajectory?如何指示移动节点沿特定轨迹移动?
【发布时间】:2026-01-15 18:30:01
【问题描述】:

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

例如,我希望节点 B 以 1m/s 的速度移动到位置 [2.m,0,0]。我将发送带有数据 [2,0,0,1] 的数据报。那么节点B如何从接收到的数据报中提取信息并相应地改变它的轨迹呢?

【问题讨论】:

    标签: networking communication unetstack


    【解决方案1】:

    在节点 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
    }
    

    【讨论】: