.. 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 [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! .. _py_emotional: 13. Robot Émotionnel ==================== Cet exemple montre plusieurs actions personnalisées intéressantes du PiCrawler. **Exécuter le code** .. raw:: html .. code-block:: 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. .. raw:: html .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python crawler.do_step('sit', 40)