有没有办法命令一个节点使用另一个节点移动到特定位置,例如特定坐标?如果是这样,请分享示例代码(如果可能)。
谢谢你
您可以编写一个代理来接收来自另一个节点的消息,并根据该消息设置自己的位置。示例代码片段:
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
在目标节点的堆栈中启用代理。