.. note:: こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。 **参加する理由は?** - **エキスパートサポート**:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。 - **学び&共有**:ヒントやチュートリアルを交換してスキルを向上させましょう。 - **独占的なプレビュー**:新製品の発表や先行プレビューに早期アクセスしましょう。 - **特別割引**:最新製品の独占割引をお楽しみください。 - **祭りのプロモーションとギフト**:ギフトや祝日のプロモーションに参加しましょう。 👉 私たちと一緒に探索し、創造する準備はできていますか?[|link_sf_facebook|]をクリックして今すぐ参加しましょう! .. _py_ball_track: 13. ボール追跡 ====================== PiDogは静かに座っています。 それに赤いボールを前に置くと、立ち上がってボールを追いかけます。 .. raw:: html **コードの実行** .. raw:: html .. code-block:: cd ~/pidog/examples sudo python3 13_ball_track.py このコードを実行すると、PiDogはカメラを起動します。 ブラウザで ``http://+ PiDogのIP +/mjpg`` (私の場合は「http://192.168.18.138:9000/mjpg」)にアクセスして、カメラの画像を確認できます。 **コード** .. note:: 以下のコードを **変更/リセット/コピー/実行/停止** することができます。ただし、それにはまず ``pidog\examples`` のようなソースコードのパスに移動する必要があります。コードを変更した後、直接実行して効果を確認することができます。 .. raw:: html .. code-block:: python #!/usr/bin/env python3 from pidog import Pidog from time import sleep from vilib import Vilib from preset_actions import bark my_dog = Pidog() sleep(0.1) STEP = 0.5 def delay(time): my_dog.wait_legs_done() my_dog.wait_head_done() sleep(time) def ball_track(): Vilib.camera_start(vflip=False, hflip=False) Vilib.display(local=True, web=True) Vilib.color_detect_switch(True) sleep(0.2) print('start') yaw = 0 roll = 0 pitch = 0 flag = False direction = 0 my_dog.do_action('stand', speed=50) my_dog.head_move([[yaw, 0, pitch]], immediately=True, speed=80) delay(0.5) while True: ball_x = Vilib.detect_obj_parameter['color_x'] - 320 ball_y = Vilib.detect_obj_parameter['color_y'] - 240 width = Vilib.detect_obj_parameter['color_w'] if ball_x > 15 and yaw > -80: yaw -= STEP elif ball_x < -15 and yaw < 80: yaw += STEP if ball_y > 25: pitch -= STEP if pitch < - 40: pitch = -40 elif ball_y < -25: pitch += STEP if pitch > 20: pitch = 20 print(f"yaw: {yaw}, pitch: {pitch}, width: {width}") my_dog.head_move([[yaw, 0, pitch]], immediately=True, speed=100) if width == 0: pitch = 0 yaw = 0 elif width < 300: if my_dog.is_legs_done(): if yaw < -30: print("turn right") my_dog.do_action('turn_right', speed=98) elif yaw > 30: print("turn left") my_dog.do_action('turn_left', speed=98) else: my_dog.do_action('forward', speed=98) sleep(0.02) if __name__ == "__main__": try: ball_track() except KeyboardInterrupt: pass except Exception as e: print(f"\033[31mERROR: {e}\033[m") finally: Vilib.camera_close() my_dog.close()