Note
Bonjour, bienvenue dans la communauté des passionnés de Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez plus profondément dans l’univers du Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.
Pourquoi rejoindre ?
Support d’experts : Résolvez vos problèmes après-vente et défis techniques grâce à l’aide de notre communauté et de notre équipe.
Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.
Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et obtenez des aperçus exclusifs.
Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.
Promotions et concours festifs : Participez à des concours et à des promotions spéciales pendant les fêtes.
👉 Prêt à explorer et à créer avec nous ? Cliquez sur [ici] et rejoignez-nous dès aujourd’hui !
13. Robot Émotionnel
Cet exemple montre plusieurs actions personnalisées intéressantes du PiCrawler.
Exécuter le code
cd ~/picrawler/examples
sudo python3 13_emotional_robot.py
Après avoir lancé le programme, le robot se met d’abord debout lentement afin d’atteindre une posture stable.
Il exécute ensuite une série de mouvements, notamment des mouvements semblables à la nage, des pompes, des gestes de salut avec les pattes avant et une danse de torsion. Ces actions sont exécutées successivement, créant un comportement dynamique et expressif.
Si Ctrl+C est pressé, le programme se termine en toute sécurité et le robot revient à une position assise.
Code
Note
Vous pouvez modifier/réinitialiser/copier/exécuter/arrêter le code ci-dessous. Mais avant cela, vous devez vous rendre dans le répertoire contenant le code source, tel que picrawler\examples. Après avoir modifié le code, vous pouvez l’exécuter directement pour voir l’effet.
from picrawler import Picrawler
from time import sleep
crawler = Picrawler()
def get_sit_step():
# Get a valid sit step used as the base pose for hand actions
try:
return crawler.move_list['sit'][0]
except Exception:
return None
def handwork(speed):
base = get_sit_step()
# If a valid sit step cannot be retrieved, just perform a sit action
if not base or len(base) < 4:
crawler.do_step('sit', speed)
sleep(0.6)
return
# Generate hand poses by modifying the sit step
left_hand = crawler.mix_step(base, 0, [0, 50, 80])
right_hand = crawler.mix_step(base, 1, [0, 50, 80])
two_hand = crawler.mix_step(left_hand, 1, [0, 50, 80])
crawler.do_step('sit', speed)
sleep(0.6)
crawler.do_step(left_hand, speed)
sleep(0.6)
crawler.do_step(two_hand, speed)
sleep(0.6)
crawler.do_step(right_hand, speed)
sleep(0.6)
crawler.do_step('sit', speed)
sleep(0.6)
def twist(speed):
# Initialize the base position for all four legs
new_step = [[50, 50, -80], [50, 50, -80], [50, 50, -80], [50, 50, -80]]
# Create a twisting motion by alternating rise and drop movements
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)
sleep(0.02)
def pushup(speed):
# Two poses used to simulate a push-up motion
up = [[80, 0, -100], [80, 0, -100], [0, 120, -60], [0, 120, -60]]
down = [[80, 0, -30], [80, 0, -30], [0, 120, -60], [0, 120, -60]]
crawler.do_step(up, speed)
sleep(0.6)
crawler.do_step(down, speed)
sleep(0.6)
def swimming(speed, loops=100):
# Simulate a swimming-like motion by gradually adjusting leg coordinates
for i in range(loops):
crawler.do_step(
[
[100 - i, i, 0],
[100 - i, i, 0],
[0, 120, -60 + i / 5],
[0, 100, -40 - i / 5]
],
speed
)
sleep(0.01)
def main():
speed = 100
try:
# Stand up slowly before performing actions
crawler.do_step('stand', 40)
sleep(1.0)
swimming(speed)
pushup(speed)
handwork(speed)
twist(speed)
except KeyboardInterrupt:
print("\nCtrl+C detected, exiting...")
finally:
# Return to a sitting posture before exiting
try:
crawler.do_step('sit', 40)
sleep(1.0)
except Exception:
pass
if __name__ == "__main__":
main()
Comment cela fonctionne ?
Lorsque le programme démarre, le robot se met d’abord debout lentement afin d’atteindre une posture stable.
crawler.do_step('stand', 40) sleep(1.0)
Après s’être levé, le programme exécute ensuite plusieurs mouvements prédéfinis en séquence.
Mouvement de nage
Le robot effectue un mouvement semblable à la nage en ajustant progressivement les coordonnées des pattes.
for i in range(loops): crawler.do_step([ [100-i, i, 0], [100-i, i, 0], [0,120,-60+i/5], [0,100,-40-i/5] ], speed)
Mouvement de pompes
Deux postures sont définies pour simuler un mouvement de pompes.
up = [[80,0,-100],[80,0,-100],[0,120,-60],[0,120,-60]] down = [[80,0,-30],[80,0,-30],[0,120,-60],[0,120,-60]] crawler.do_step(up, speed) crawler.do_step(down, speed)
Mouvement de salut (handwork)
Le programme modifie les coordonnées des pattes avant en utilisant
mix_step()afin de créer un geste de salut.left_hand = crawler.mix_step(base,0,[0,50,80]) right_hand = crawler.mix_step(base,1,[0,50,80])
Mouvement de torsion
Le robot effectue une torsion du corps en levant et en abaissant les pattes diagonales.
rise = [50,50,(-80+inc*0.5)] drop = [50,50,(-80-inc)] crawler.do_step(new_step, speed)
Si Ctrl+C est pressé, le programme se termine en toute sécurité et le robot revient à une position assise.
crawler.do_step('sit', 40)