[英]How to avoid that Pepper Robot recognizes the same Landmark more times?
By reason of developing a module to do the self-localization I need to build a python box in Choreragphe which helps to avoid that Pepper Robot recognizes the same Landmark more times. 由于开发了执行自我定位的模块,我需要在Choreragphe中构建一个python框,这有助于避免Pepper Robot多次识别相同的Landmark。 The original landmark is only responsible for detecting the landmark but repeats the process for the same landmark.
原始地标仅负责检测地标,但对同一地标重复此过程。 My basic idea is to build a string including the numbers of the recognized landmarks.
我的基本想法是构建一个字符串,其中包括已识别地标的编号。 But in Choreragphe if we do this based on getting values of the AlMemory module;
但是在Choreragphe中,如果我们基于获取AlMemory模块的值来执行此操作; the variables would be refreshed every time when a landmark is detected regardless of if it's new.
每当检测到界标时,无论它是否是新的,变量都将刷新。 (Please see picture 1)
(请参见图片1)
This code
这段代码
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)
gives this result back: 将此结果返回:
[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]
But if we do this in a python script alone, and then import it to Choregraphe, at that point I was suggested to follow the workflow in the Github project of Mr.Emile, robot-jumpstarter which I have tried but failed to make it work in Choregraphe. 但是,如果我们仅使用python脚本执行此操作,然后将其导入Choregraphe,则建议我遵循Robot -jumpstarter先生Mr.Emile的Github项目中的工作流程,我曾尝试过但未能使其正常工作在Choregraphe中。
Thus,is it possible to do some local python script in Choregraphe (like it in picture3)parallel to the Naomark module to save the detected MarkID in that and so on ? 因此,是否有可能在Choregraphe中与Naomark模块并行地执行一些本地python脚本(如picture3中的脚本),以在其中保存检测到的MarkID,依此类推 ?
I perhaps don't catch the difficulty, anyway it seems very simple to tackle: add a box connected to the output of DetectLandmark and do this kind of code: 无论如何,我似乎都没遇到困难,解决起来似乎很简单:添加一个连接到DetectLandmark输出的盒子并执行以下代码:
def onInput( self, p ):
if p != self.last
self.last = p
self.output(p)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.