重复访问NAO Robot上ALMemory中的数据-找不到数据

时间:2018-08-20 13:21:38

标签: python-2.7 nao-robot choregraphe

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

在流程图中,第二个框用红色标记。

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

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

1 个答案:

答案 0 :(得分:0)

多种可能性:

  • 在行为开始时的其他地方使用ALMemory.declareEvent,然后在其他情况之前使用(或插入一个很好的默认值,这可以确保您始终从干净的状态开始)
  • 使用try / except RuntimeError语句包装对ALMemory.getData的使用,以便处理尚未插入数据的情况

您还应该注意框中的位置进行这些呼叫;加载图时,在触发任何输入之前会调用一个盒子的.onLoad(),因此,如果您尝试读取ALMemory的代码位于其中,但编写该代码的位置位于.onStart()中,得到它也就不足为奇了这个错误。