重复访问 NAO 机器人上 ALMemory 中的数据 - 未找到数据

Repeated Access to Data in ALMemory on NAO Robot - Data not found

我在 windows 10.

上使用带有 Choregraphe 2.1.4 的 nao 机器人

在我的流程图中有几个框使用相同的数据。当我第一次使用数据时,它将随后插入到内存中: self.memory = ALProxy("ALMemory") ... self.memory.insertData("dataKey", self.value)

在两个位置我需要访问数据,所以我使用: self.memory = ALProxy("ALMemory") ... self.value = self.memory.getData("dataKey")

当我运行这个程序时(程序甚至没有启动),我立即得到以下错误:

[ERROR] behavior.box :_safeCallOfUserMethod:281 _Behavior__lastUploadedChoregrapheBehaviorbehavior_1172060400__root__unknownProgramName_6__redMarkedBox_2: Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/naoqi.py", line 271, in _safeCallOfUserMethod
func()
File "<string>", line 12, in onLoad
File "/usr/lib/python2.7/site-packages/naoqi.py", line 301, in __call__
return self.__wrapped__.method_missing(self.__method__, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/naoqi.py", line 371, in method_missing
raise e
RuntimeError:   ALMemory::getData
    ALMemory::getData
Data not found dataKey

在我的流程图中,第二个框被标记为红色。

我的问题是:如何从内存中第二次获取数据?

我也试过第二次往内存中插入数据,但是没有任何改变。最近我向受影响的盒子添加了输出和输入,以将所需的数据发送到盒子。但是我的程序越来越混乱。

几种可能性:

  • 在行为开始的某个地方使用 ALMemory.declareEvent,在其余部分之前(或插入一个好的默认值,这可以很好地确保您始终从头开始)
  • 用 try/except RuntimeError 语句包装你对 ALMemory.getData 的使用,这样你就可以处理数据尚未插入的情况

您还应该注意在您的盒子里您进行这些调用的地方;加载图表时调用框的 .onLoad(),然后再触发任何输入,因此如果您尝试读取 ALMemory 的代码在其中,但写入它的位置在 .onStart() 中,那么您得到也就不足为奇了这个错误。