可以使用前聲納和人類檢測事件「FaceDetected」。
但是,您可以使用PeriodicTask而不是一個while循環。你每次0.5秒檢查事件,你將被允許停止它。
我會那樣做:
class HumanDetector:
def __init__(self, ALMemory):
self.ALMemory = ALMemory
# subscribe to FaceDetected
self.subscriber = self.ALMemory.subscriber("FaceDetected")
self.subscriber.signal.connect(self.on_human_tracked)
self.task = qi.PeriodicTask()
self.task.setCallback(self._task)
self.task.setUsPeriod(50000)
self.task.start(True)
def on_human_tracked(self, value):
print "do something with the face"
def _stop(self):
print "_stop..."
self.task.stop()
self.face_detection.unsubscribe("FaceDetected")
print "_stop done"
def _task(self):
print "_task..."
floatDist = self.memory.getData('Device/SubDeviceList/Platform/Front/Sonar/Sensor/Value')
if floatDist < 1.0:
print "do something with the object in front of the robot"
print "_task done"
所以這是需要的模塊ALMemory裏Python類的一個實例。 使用ALMemory模塊,您將檢查聲納以及是否檢測到臉部。
這是正確的方法!你也可以嘗試「faceDetected」事件,它會比人們的感覺更快地觸發。 – JLS