1

我在 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

在我的流程图中是用红色标记的第二个框。

我的问题是:我怎样才能从内存中第二次获取数据?

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

4

1 回答 1

1

几种可能:

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

您还应该注意您的盒子中进行这些呼叫的位置;在加载图表时调用一个盒子的 .onLoad(),在触发任何输入之前,所以如果你的代码试图读取 ALMemory,但写入它的地方是在 .onStart(),那么你得到的也就不足为奇了这个错误。

于 2018-08-21T08:22:20.050 回答