.. note::
Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts.
**Why Join?**
- **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team.
- **Learn & Share**: Exchange tips and tutorials to enhance your skills.
- **Exclusive Previews**: Get early access to new product announcements and sneak peeks.
- **Special Discounts**: Enjoy exclusive discounts on our newest products.
- **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions.
👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today!
.. _py_twist:
Twist
==============
We already know how to make PiCrawler assume a specific pose, the next step is to combine the poses to form a continuous action.
Here, PiCrawler's four feet are up and down in twos, jumping with the music.
**Run the Code**
.. raw:: html
.. code-block::
cd /home/pi/picrawler/examples
sudo python3 twist.py
**Code**
.. note::
You can **Modify/Reset/Copy/Run/Stop** the code below. But before that, you need to go to source code path like ``picrawler\examples``. After modifying the code, you can run it directly to see the effect.
.. raw:: html
.. code-block:: python
from picrawler import Picrawler
from time import sleep
from robot_hat import Music
music = Music()
crawler = Picrawler([10,11,12,4,5,6,1,2,3,7,8,9])
#crawler.set_offset([0,0,0,0,0,0,0,0,0,0,0,0])
def twist(speed):
## [right front],[left front],[left rear],[left rear]
new_step=[[50, 50, -80], [50, 50, -80],[50, 50, -80], [50, 50, -80]]
for i in range(4):
for inc in range(30,60,5):
rise = [50,50,(-80+inc*0.5)]
drop = [50,50,(-80-inc)]
new_step[i]=rise
new_step[(i+2)%4] = drop
new_step[(i+1)%4] = rise
new_step[(i-1)%4] = drop
crawler.do_step(new_step,speed)
def main():
music.background_music('./musics/sports-Ahjay_Stelino.mp3')
music.music_set_volume(20)
while True:
twist(speed=100)
if __name__ == "__main__":
main()
**How it works?**
In this code, you need to pay attention to this part:
.. code-block:: python
def twist(speed):
## [right front],[left front],[left rear],[right rear]
new_step=[[50, 50, -80], [50, 50, -80],[50, 50, -80], [50, 50, -80]]
for i in range(4):
for inc in range(30,60,5):
rise = [50,50,(-80+inc*0.5)]
drop = [50,50,(-80-inc)]
new_step[i]=rise
new_step[(i+2)%4] = drop
new_step[(i+1)%4] = rise
new_step[(i-1)%4] = drop
crawler.do_step(new_step,speed)
Simply put, it uses two layers of for loops to make the ``new_step`` array produce continuous and regular changes, and at the same time, ``crawler.do_step()`` executes the posture to form a continuous action.
You can intuitively get the coordinate value array corresponding to each pose from :ref:`py_posture`.
In addition, the example also played background music. The implementation method is as follows.
Play music by importing the following libraries.
.. code-block:: python
from robot_hat import Music
Declare a Music object.
.. code-block:: python
music = Music()
Play the background music in the ``picrawler/examples/musics`` directory and set the volume to 20. You can also add music to the ``musics`` folder via :ref:`filezilla`.
.. code-block:: python
music.background_music('./musics/sports-Ahjay_Stelino.mp3')
music.music_set_volume(20)
.. note::
You can add different sound effects or music to ``musics`` or ``sounds`` folder via :ref:`filezilla`.