我正在尝试创建一个 Webots 模拟,当 Kinect 相机检测到一个人时,我希望我的机器人在其中说话。
我有一个连接到 USB 端口的 Kinect V2,它可以通过使用 PyKinect2 和 pygame 运行我的 Python 代码来自行检测一个人。
下一步,我将该代码放入 Webots 环境中,并添加了一个机器人,以便在 Kinect 检测到用户时与用户交谈。然而,当 Kinect 开始运行并弹出窗口时,Webots 时钟停止计时,机器人不做任何事情。在我关闭 Kinect 窗口后,机器人会说出消息,但该代码应该已在 Kinect 代码中执行,如下所示。
我相信这可能是由于 Kinect 和 Webots 有自己的时钟而导致的同步问题,但我不确定。即使是这样,我也不知道该怎么做。欢迎任何建议。
这是我的代码的相关部分,如果需要,我可以提供完整的代码。Kinect 身体检测是此示例的略微修改版本:
class BodyGameRuntime(object):
# ----- other functions here -----
def run(self):
# -------- Main Program Loop -----------
while not self._done:
# --- frame and window resize logic here
# --- Draw skeletons to _frame_surface
if self._bodies is not None:
# ---------- Body Found ----------
speaker.speak("User detected!", volume=1.0) # Speak to the user
for i in range(0, self._kinect.max_body_count):
body = self._bodies.bodies[i]
if not body.is_tracked:
continue
joints = body.joints
# convert joint coordinates to color space
joint_points = self._kinect.body_joints_to_color_space(joints)
self.draw_body(joints, joint_points, SKELETON_COLORS[i])
# --- copy back buffer logic here
# --- Update the screen with what we've drawn.
pygame.display.update()
pygame.display.flip()
# --- Limit to 30 frames per second
self._clock.tick(30)
# Close our Kinect sensor, close the window and quit.
self._kinect.close()
pygame.quit()
robot = Robot()
speaker = Speaker("Speaker")
#timestep = int(robot.getBasicTimeStep())
__main__ = "Kinect"
game = BodyGameRuntime()
game.run()