.. note:: こんにちは!SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Raspberry Pi、Arduino、ESP32に関心のある仲間と一緒にさらに深く学びましょう。 **参加する理由** - **専門家のサポート**: 購入後の問題や技術的な課題を、コミュニティやチームのサポートで解決できます。 - **学びと共有**: ヒントやチュートリアルを交換して、スキルを向上させましょう。 - **特別なプレビュー**: 新製品の発表や先行公開に早期アクセスできます。 - **特別割引**: 新製品に対して限定割引を楽しめます。 - **祝祭プロモーションとプレゼント**: プレゼントや祝祭プロモーションに参加できます。 👉 私たちと一緒に探求し、創造する準備はできましたか?[|link_sf_facebook|]をクリックして、今すぐ参加しましょう! .. _py_posture: 10. 姿勢調整 ===================== この例では、キーボードを使ってPiCrawlerの各足を個別に操作し、希望する姿勢を取らせます。 スペースバーを押すと、現在の座標値が表示されます。この座標値は、PiCrawlerの独自のアクションを作成する際に役立ちます。 .. image:: img/1cood.A.png **コードの実行** .. raw:: html .. code-block:: cd ~/picrawler/examples sudo python3 10_do_single_leg.py コードが実行された後、ターミナルに表示されるプロンプトに従って操作を行ってください。 * ``1234`` キーで足を個別に選択します。 ``1`` : 右前足、 ``2`` : 左前足、 ``3`` : 左後足、 ``4`` : 右後足 * ``w`` , ``a`` , ``s`` , ``d`` , ``r`` , ``f`` キーでPiCrawlerの座標値をゆっくりと制御できます。 * ``Ctrl+C`` で終了します。 **コード** .. code-block:: python #!/usr/bin/env python3 from picrawler import Picrawler from time import sleep import readchar crawler = Picrawler() SPEED = 80 STEP_SIZE = 2 manual = ''' -------- PiCrawler Controller --------- ....... ....... <=| 2 |┌-┌┐┌┐-┐| 1 |=> ``````` ├ ┤ ``````` ....... ├ ┤ ....... <=| 3 |└------┘| 4 |=> ``````` ``````` 1: Select right front leg 2: Select left front leg 3: Select left rear leg 4: Select right rear leg W: Y++ R: Z++ A: X-- F: Z-- S: Y-- D: X++ Ctrl+C: Quit ''' legs_list = ['right front', 'left front', 'left rear', 'right rear'] # Axis mapping for cleaner logic move_map = { 'w': (1, +STEP_SIZE), # Y++ 's': (1, -STEP_SIZE), # Y-- 'a': (0, -STEP_SIZE), # X-- 'd': (0, +STEP_SIZE), # X++ 'r': (2, +STEP_SIZE), # Z++ 'f': (2, -STEP_SIZE), # Z-- } def clear_screen(): print("\033[H\033[J", end='') def show_info(selected_leg, coordinate): clear_screen() print(manual) print(f"Selected leg: {selected_leg + 1} - {legs_list[selected_leg]}") print(f"Coordinate: {coordinate}") def main(): selected_leg = 0 try: print(manual) # Stand up first crawler.do_step('stand', 40) sleep(0.5) # Get current coordinates coordinate = crawler.current_step_all_leg_value() show_info(selected_leg, coordinate) while True: key = readchar.readkey().lower() # Select leg if key in ('1', '2', '3', '4'): selected_leg = int(key) - 1 show_info(selected_leg, coordinate) # Move selected leg elif key in move_map: axis, delta = move_map[key] # Update coordinate coordinate[selected_leg][axis] += delta # Send updated position crawler.do_single_leg(selected_leg, coordinate[selected_leg], SPEED) sleep(0.1) show_info(selected_leg, coordinate) sleep(0.05) except KeyboardInterrupt: print("\nExiting safely...") finally: # Return to sitting position on exit try: crawler.do_step('sit', 40) sleep(1) except Exception: pass print("Robot is now sitting. Program ended.") if __name__ == "__main__": main() * ``current_step_all_leg_value()``: すべての足の座標値を返します。 * ``do_single_leg(leg,coordinate[leg],speed)``: 特定の足の座標値を個別に変更します。