2

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

谢谢你

4

1 回答 1

3

您可以编写一个代理来接收来自另一个节点的消息,并根据该消息设置自己的位置。示例代码片段:

void processMessage(Message msg) {
  if (msg instanceof DatagramNtf && msg.protocol == MY_PROTOCOL) {
    // extract location x, y from msg based on your PDU encoding
    def node = agentForService Services.NODE_INFO
    node.location = [x, y]
  }
}

此方法将允许您在代理中实现复杂的行为,例如将节点缓慢移动到该位置。

作为替代方案,如果您只需要立即更改位置,您还可以考虑使用目标节点(例如 2)上的远程服务运行命令/脚本来设置自己的位置(例如 [10,10]):

send new RemoteScriptReq(to: 2, scriptName: '@node.location = [10,10]')

@前缀导致scriptName被解释为命令,而不是本地存储的脚本。请注意,此前缀将在 1.4 之前的版本中使用,但在即将发布的 UnetStack 版本中将更改行为以使用新消息RemoteExecReq

send new RemoteExecReq(to: 2, command: 'node.location = [10,10]')

要使远程服务正常工作,您需要RemoteControl在目标节点的堆栈中启用代理。

于 2019-04-13T19:01:59.683 回答