Как избежать того, чтобы Pepper Robot распознал один и тот же ориентир больше раз?

В связи с разработкой модуля для самостоятельной локализации мне нужно создать ящик Python в Choreragphe, который помогает избежать того, что Pepper Robot распознает один и тот же Landmark больше раз. Исходный ориентир отвечает только за обнаружение ориентира, но повторяет процесс для того же ориентира. Моя основная идея - построить строку, включающую номера распознанных ориентиров. Но в Choreragphe, если мы сделаем это на основе получения значений модуля AlMemory; переменные будут обновляться каждый раз при обнаружении ориентира, независимо от того, новый ли он. (См. Рисунок 1)  ChoregrapheLandmarkDetection Этот код

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 г-на Эмиля, robot-jumpstarter, который я пробовал, но не смог заставить его работать в Choregraphe.

Таким образом, возможно ли выполнить какой-нибудь локальный скрипт python в Choregraphe (как на рисунке 3) параллельно модулю Naomark, чтобы сохранить обнаруженный MarkID в этом и т. д.? ChoregrapheNaoMark


person Frederik Best    schedule 26.10.2018    source источник


Ответы (1)


Возможно, я не улавливаю трудности, в любом случае, это кажется очень простым для решения: добавьте поле, подключенное к выходу DetectLandmark, и выполните такой код:

def onInput( self, p ):
  if p != self.last
    self.last = p
    self.output(p)
person Alexandre Mazel    schedule 06.11.2018
comment
Да, я уже решил свою проблему, написав что-то вроде вашего предложения в поле Process Markslist и забыл удалить этот вопрос ... Я был сбит с толку, потому что думал только о том, чтобы писать что-то в поле GetMarksList ... в любом случае спасибо :) - person Frederik Best; 06.11.2018