Note
Bonjour et bienvenue dans la communauté des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder sur Facebook ! Plongez dans l’univers du Raspberry Pi, d’Arduino et de l’ESP32 avec d’autres passionnés.
Pourquoi nous rejoindre ?
Support d’experts : Résolvez les problèmes après-vente et surmontez les défis techniques avec l’aide de notre communauté et de notre équipe.
Apprenez & Partagez : É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 aux avant-goûts.
Réductions exclusives : Profitez de remises spéciales sur nos nouveaux produits.
Promotions festives et concours : Participez à des concours et à des promotions lors des fêtes.
👉 Prêt à explorer et à créer avec nous ? Cliquez sur [here] et rejoignez-nous dès aujourd’hui !
4. Évitement d’obstacles
Dans ce projet, le PiCar-X détectera les obstacles devant lui pendant qu’il avance, et lorsque les obstacles seront trop proches, il changera de direction pour continuer à avancer.
Exécution du code
cd ~/picar-x/example
sudo python3 4.avoiding_obstacles.py
Après avoir exécuté le code, le PiCar-X avancera.
S’il détecte que la distance de l’obstacle devant est inférieure à 20 cm, il reculera.
Si un obstacle se trouve à une distance comprise entre 20 et 40 cm, il tournera à gauche.
S’il n’y a pas d’obstacle après avoir tourné à gauche ou si la distance de l’obstacle est supérieure à 25 cm, il continuera d’avancer.
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 chemin du code source comme picar-x/example
. Après avoir modifié le code, vous pouvez l’exécuter directement pour voir l’effet.
from picarx import Picarx
import time
POWER = 50
SafeDistance = 40 # > 40 sûr
DangerDistance = 20 # > 20 && < 40 tourner,
# < 20 reculer
def main():
try:
px = Picarx()
# px = Picarx(ultrasonic_pins=['D2','D3']) # déclencheur, écho
while True:
distance = round(px.ultrasonic.read(), 2)
print("distance: ",distance)
if distance >= SafeDistance:
px.set_dir_servo_angle(0)
px.forward(POWER)
elif distance >= DangerDistance:
px.set_dir_servo_angle(30)
px.forward(POWER)
time.sleep(0.1)
else:
px.set_dir_servo_angle(-30)
px.backward(POWER)
time.sleep(0.5)
finally:
px.forward(0)
if __name__ == "__main__":
main()
Comment ça marche ?
Importation du module Picarx et initialisation des constantes :
Cette section du code importe la classe
Picarx
du modulepicarx
, qui est essentielle pour contrôler le robot Picarx. Les constantes commePOWER
,SafeDistance
etDangerDistance
sont définies et seront utilisées plus tard dans le script pour contrôler le mouvement du robot en fonction des mesures de distance.from picarx import Picarx import time POWER = 50 SafeDistance = 40 # > 40 sûr DangerDistance = 20 # > 20 && < 40 tourner, # < 20 reculer
Définition de la fonction principale et lecture du capteur ultrasonique :
La fonction
main
contrôle le robot Picarx. Une instance dePicarx
est créée, ce qui active les fonctionnalités du robot. Le code entre dans une boucle infinie, lisant constamment la distance depuis le capteur ultrasonique. Cette distance est utilisée pour déterminer les mouvements du robot.def main(): try: px = Picarx() while True: distance = round(px.ultrasonic.read(), 2) # [Rest du code]
Logique de mouvement basée sur la distance :
Le mouvement du robot est contrôlé en fonction de la distance lue par le capteur ultrasonique. Si la
distance
est supérieure àSafeDistance
, le robot avance. Si la distance est comprise entreDangerDistance
etSafeDistance
, il tourne légèrement et avance. Si ladistance
est inférieure àDangerDistance
, le robot recule tout en tournant dans la direction opposée.if distance >= SafeDistance: px.set_dir_servo_angle(0) px.forward(POWER) elif distance >= DangerDistance: px.set_dir_servo_angle(30) px.forward(POWER) time.sleep(0.1) else: px.set_dir_servo_angle(-30) px.backward(POWER) time.sleep(0.5)
Sécurité et nettoyage avec le bloc “finally” :
Le bloc
try...finally
garantit la sécurité en arrêtant le mouvement du robot en cas d’interruption ou d’erreur. Cela est essentiel pour éviter tout comportement incontrôlable du robot.try: # [Logique de contrôle] finally: px.forward(0)
Point d’entrée de l’exécution :
Le point d’entrée standard en Python
if __name__ == "__main__":
est utilisé pour exécuter la fonction principale lorsque le script est lancé en tant que programme autonome.if name == "main": main()
En résumé, le script utilise le module Picarx pour contrôler un robot, en utilisant un capteur ultrasonique pour mesurer les distances. Le mouvement du robot est adapté en fonction de ces mesures, garantissant un fonctionnement sécurisé grâce à un contrôle minutieux et à un mécanisme de sécurité dans le bloc finally.