1

Kinect カメラが人を検出したときにロボットが話す Webbot シミュレーションを作成しようとしています。

私は Kinect V2 を USB ポートに接続しており、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()
4

1 に答える 1