Как избежать того, чтобы Pepper Robot распознавал один и тот же Landmark больше раз?
В связи с разработкой модуля для самостоятельной локализации мне нужно построить коробку Python в Choreragphe, которая поможет избежать того, что Pepper Robot распознает один и тот же Landmark больше раз. Исходный ориентир отвечает только за обнаружение ориентира, но повторяет процесс для того же ориентира. Моя основная идея состоит в том, чтобы создать строку, включающую номера признанных ориентиров. Но в Choreragphe, если мы сделаем это, основываясь на получении значений модуля AlMemory; переменные будут обновляться каждый раз, когда обнаруживается ориентир, независимо от того, является ли он новым. (Пожалуйста, смотрите рисунок 1) Этот код
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
#put initialization code here
self.markIDs = []
moreInfo = []
self.memory = ALProxy("ALMemory")
# Connect the event callback.
# Get the services ALMotion & ALRobotPosture.
self.motion_service = ALProxy("ALMotion")
# Get the services ALTextToSpeech, ALLandMarkDetection and ALMotion.
self.motion_service = ALProxy("ALMotion")
self.got_landmark = False
def onLoad(self):
self.logger.debug("Loaded box %s", self.getName())
def onUnload(self):
#puts code for box cleanup here
pass
def onInput_onStart(self, p):
markIDs = []
moreInfo = []
# Generic Extractor output format:
# p = [ [timeStampMaj, timeStampMin], [ tag0, tag1, ... tagN] ] with tag = [ shapeInfo, moreInfo ]
if(len(p) > 0)&(not (moreInfo in markIDs)):
self.logger.info("moreInfo in markIDs=")
self.logger.info((moreInfo in markIDs))
markInfoArray = p[1]
self.logger.info("markInfoArray =")
self.logger.info(markInfoArray)
for markInfo in markInfoArray:
moreInfo = markInfo[1]
# moreInfo = [ landmarkID ]
self.logger.info("markInfo =")
self.logger.info(str(markInfo))
self.logger.info("moreInfo=")
self.logger.info(str(moreInfo))
if not (moreInfo[-1] in markIDs):
self.got_landmark = True
markIDs.append(moreInfo[-1])
self.logger.info("markIDs =")
self.logger.info(str(markIDs))
self.onStopped(markIDs)
возвращает этот результат:
[INFO ] behavior.box :onInput_onStart:30 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: moreInfo in markIDs=
[INFO ] behavior.box :onInput_onStart:31 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: False
[INFO ] behavior.box :onInput_onStart:34 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: markInfoArray =
[INFO ] behavior.box :onInput_onStart:35 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [[[1, 0.18835650384426117, 0.14215253293514252, 0.12947072088718414, 0.12947072088718414, 16], [84]]]
[INFO ] behavior.box :onInput_onStart:40 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: markInfo =
[INFO ] behavior.box :onInput_onStart:41 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [[1, 0.18835650384426117, 0.14215253293514252, 0.12947072088718414, 0.12947072088718414, 16], [84]]
[INFO ] behavior.box :onInput_onStart:42 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: moreInfo=
[INFO ] behavior.box :onInput_onStart:43 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [84]
[INFO ] behavior.box :onInput_onStart:49 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: markIDs =
[INFO ] behavior.box :onInput_onStart:22 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/ProcessMarksList_2: p[0] =
[INFO ] behavior.box :onInput_onStart:23 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/ProcessMarksList_2: 84
[INFO ] behavior.box :onInput_onStart:51 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [84]
[INFO ] behavior.box :onInput_onStart:30 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: moreInfo in markIDs=
[INFO ] behavior.box :onInput_onStart:31 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: False
[INFO ] behavior.box :onInput_onStart:34 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: markInfoArray =
[INFO ] behavior.box :onInput_onStart:40 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: markInfo =
[INFO ] behavior.box :onInput_onStart:42 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: moreInfo=
[INFO ] behavior.box :onInput_onStart:35 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [[[1, 0.18835650384426117, 0.14215253293514252, 0.12947072088718414, 0.12947072088718414, 16], [84]]]
[INFO ] behavior.box :onInput_onStart:49 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: markIDs =
[INFO ] behavior.box :onInput_onStart:43 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [84]
[INFO ] behavior.box :onInput_onStart:41 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [[1, 0.18835650384426117, 0.14215253293514252, 0.12947072088718414, 0.12947072088718414, 16], [84]]
[INFO ] behavior.box :onInput_onStart:51 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [84]
[INFO ] behavior.box :onInput_onStart:30 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: moreInfo in markIDs=
[INFO ] behavior.box :onInput_onStart:31 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: False
[INFO ] behavior.box :onInput_onStart:34 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: markInfoArray =
[INFO ] behavior.box :onInput_onStart:41 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [[1, 0.08169912546873093, 0.14497141540050507, 0.12635093927383423, 0.12635093927383423, 17], [84]]
[INFO ] behavior.box :onInput_onStart:35 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [[[1, 0.08169912546873093, 0.14497141540050507, 0.12635093927383423, 0.12635093927383423, 17], [84]]]
[INFO ] behavior.box :onInput_onStart:43 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [84]
[INFO ] behavior.box :onInput_onStart:42 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: moreInfo=
[INFO ] behavior.box :onInput_onStart:49 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: markIDs =
[INFO ] behavior.box :onInput_onStart:40 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: markInfo =
[INFO ] behavior.box :onInput_onStart:51 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11241679648:/NAOMark_3/Get Marks List_1: [84]
Но если мы сделаем это только на скрипте Python, а затем импортируем его в Choregraphe, на этом этапе мне предложили следовать рабочему процессу в проекте Github Mr.Emile, робота- прыгуна, который я пробовал, но не смог заставить его работать в хореографе.
Таким образом, возможно ли сделать какой-нибудь локальный скрипт на Python в Choregraphe (например, как на рисунке 3) параллельно модулю Naomark, чтобы сохранить обнаруженный MarkID в этом и т. Д.?
1 ответ
Я, возможно, не уловил трудности, в любом случае, кажется, что это очень просто: добавить блок, подключенный к выходу DetectLandmark, и выполнить такой код:
def onInput( self, p ):
if p != self.last
self.last = p
self.output(p)