注釈

こんにちは!SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Raspberry Pi、Arduino、ESP32に関心のある仲間と一緒にさらに深く学びましょう。

参加する理由

  • 専門家のサポート: 購入後の問題や技術的な課題を、コミュニティやチームのサポートで解決できます。

  • 学びと共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。

  • 特別なプレビュー: 新製品の発表や先行公開に早期アクセスできます。

  • 特別割引: 新製品に対して限定割引を楽しめます。

  • 祝祭プロモーションとプレゼント: プレゼントや祝祭プロモーションに参加できます。

👉 私たちと一緒に探求し、創造する準備はできましたか?[ここ]をクリックして、今すぐ参加しましょう!

9. ポーズ

PiCrawlerは座標の配列を記述することで特定のポーズを取ることができます。ここでは、右後足を上げたポーズを取らせています。

../_images/4cood.A.png

コードの実行

cd ~/picrawler/examples
sudo python3 9_do_step.py

コード

#!/usr/bin/env python3
from picrawler import Picrawler
from time import sleep

# Create Picrawler instance
crawler = Picrawler()

# Leg order:
# [right front], [left front], [left rear], [right rear]
new_step = [[45, 45, -75], [45, 0, -75], [45, 0, -30], [45, 45, -75]]

# Get the default stand step from the move list
stand_step = crawler.move_list['stand'][0]


def main():
    action_speed = 80  # Speed for movement actions

    try:
        # Stand up slowly at 40% speed to reduce current spikes
        crawler.do_step('stand', 40)
        sleep(1.0)

        # Continuous action loop
        while True:
            crawler.do_step(stand_step, action_speed)
            sleep(3)

            crawler.do_step(new_step, action_speed)
            sleep(3)

    except KeyboardInterrupt:
        # Handle Ctrl+C for safe exit
        print("\nExiting safely...")

    finally:
        # Return to sitting position before shutting down
        try:
            crawler.do_step('sit', 40)
            sleep(1.0)
        except Exception:
            pass


if __name__ == "__main__":
    main()

仕組みは?

このコードで注目すべき部分は crawler.do_step() です。

do_action() と似ていますが、 do_step() もPiCrawlerの動作を制御できます。 違いは、前者が「前進」のような連続的な動作を行うのに対し、後者は「立つ」や「座る」などの個別の動作を実行するために使われます。

このメソッドには2つの使い方があります。

1つ目: 文字列を記述し、 picrawler ライブラリ内の step_list 辞書を直接利用できます。

crawler.do_step('stand',speed)
# "speed"はステップの速度を示し、範囲は0~100です。

2つ目: 4つの座標値を含む配列を記述できます。

new_step=[[45, 45, -75], [45, 0, -75], [45, 0, -30], [45, 45, -75]]
# これらの4つの座標は、右前足、左前足、左後足、右後足をそれぞれ制御するために使用します。

各足には独立した座標系があります。以下の図のように表示されます。

../_images/4cood.png

各つま先の座標を個別に測定する必要があります。以下の図のように表示されます。

../_images/1cood.png

ちなみに、最初の方法で呼び出す step_list も4つの座標値を含む配列で構成されています。

step_list = {

    "stand":[
        [45, 45, -50],
        [45, 45, -50],
        [45, 45, -50],
        [45, 45, -50]
    ],
    "sit":[
        [45, 45, -30],
        [45, 45, -30],
        [45, 45, -30],
        [45, 45, -30]
    ],

}