Повторный доступ к данным в ALMemory на роботе NAO - данные не найдены

Я использую робота NAO с Choregraphe 2.1.4 на Windows 10.

На моей блок-схеме есть несколько блоков, в которых используются одни и те же данные. Когда я использую данные в первый раз, они будут впоследствии вставлены в память с помощью: 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

На моей блок-схеме это второе поле, отмеченное красным.

У меня вопрос: как получить данные из памяти второй раз?

Еще попробовал вставить данные в память второй раз, но ничего не изменилось. Недавно я добавил выходы и входы к затронутым ящикам, чтобы отправить необходимые данные в ящики. Но моя программа становится запутанной и беспорядочной.


person itz    schedule 20.08.2018    source источник


Ответы (1)


Несколько возможностей:

  • Используйте где-нибудь ALMemory.declareEvent в начале вашего поведения, перед остальным (или вставьте хорошее значение по умолчанию, что может быть хорошо, чтобы вы всегда начинали с чистого листа)
  • Оберните свое использование ALMemory.getData с помощью операторов try / except RuntimeError, чтобы вы могли обработать случай, когда данные еще не были вставлены

Вам также следует обратить внимание на где в ваших ящиках вы делаете эти вызовы; .onLoad () боксов вызывается, когда диаграмма загружается, до того, как сработает какой-либо ввод, поэтому, если ваш код пытается прочитать ALMemory, там, но место его записи находится в .onStart (), неудивительно, что вы получите эта ошибка.

person Emile    schedule 21.08.2018