Contrôler vos modèles Lego au joypad à l'aide de BrickPi

Magazine
Marque
Hackable
Numéro
29
Mois de parution
avril 2019
Spécialité(s)


Résumé

Dexter Industries propose des cartes d’extension pour Raspberry Pi. Dans cet article, nous allons nous intéresser à la carte BrickPi permettant de piloter les moteurs et senseurs Lego MindStorms. Nous verrons comment piloter notre robot Lego à l’aide d’un joypad. Nous développerons notre programme grâce au langage Python.


Body

Lorsqu’on cherche des vidéos de robots Lego sur Internet, on trouve une multitude de résultats. Ces résultats vont d’un simple robot inerte, tel qu’un robot Ninjago à des robots beaucoup plus complexes, tels que les modèles Mindstorms permettant par exemple de résoudre des Rubicubes. Dans cet article, nous allons commencer en douceur en pilotant un robot Lego à chenilles à l’aide d’un JoyPad.

1. Le matériel

 

IMGP6292

 

Pour commencer, réalisons un petit robot en Lego, voici notre liste de matériel :

  • 1 RaspBerry Pi. Dans notre exemple, nous utiliserons un Raspberry Pi Modèle 1 B ;
  • 1 carte SD ou micro SD en fonction du modèle de Raspberry Pi choisi ;
  • 1 carte d’extension BrickPi [1]. Il existe 3 versions : BrickPi, BrickPi+ et BrickPi3. BrickPi et BrickPi+ utilisent la même librairie, il faudra prendre une nouvelle librairie pour le BrickPi3. Dans notre article, nous utiliserons le vieux modèle : BrickPi ;
  • 2 moteurs Lego MindStorms. Dans notre exemple, nous prendrons 2 « EV3 Large Servo Motor » modèles 45502 ;
  • 1 Lego Technic pour construire notre robot motorisé. Dans notre exemple, nous utiliserons un vieux modèle Lego Technic Bulldozer numéro 6092224 ;
  • 1 joypad reconnu sous Linux. Ici, nous utiliserons un Logitech F710 ;
  • 8 piles AA, de préférence rechargeables, pour alimenter le Raspberry Pi et les moteurs Lego MindStorms.

2. Construction du robot Lego

 

modele

 

C’est la partie où nous pouvons laisser libre cours à notre imagination. Tout est permis, la seule contrainte pour notre robot est l’utilisation d’un moteur permettant de tourner à droite et d’un autre moteur pour tourner à gauche. Pour se simplifier la vie, il est recommandé d’utiliser des chenilles.

Vous trouverez sur le site MecaBricks notre modèle à l’adresse suivante :

3. Configuration logicielle

Nous supposerons ici que nous disposons d’un système Raspbian opérationnel. Par exemple, la version 2018-11-13-raspbian-stretch-lite.img [2].

Dexter Industries propose un script d’installation complètement automatisé. Attention, ce script finit par redémarrer le Raspberry Pi. Le script n’installe pas git, commençons donc par l’installer :

sudo aptitude install git

Si vous posséder un BrickPi ou un BrickPi+, il faudra lancer la commande suivante :

sudo curl -kL dexterindustries.com/update_brickpi_plus | bash

Si vous posséder un BrickPi3, il faudra lancer la commande suivante :

sudo curl -kL dexterindustries.com/update_brickpi3 | bash

La dernière chose dont nous avons besoin, c’est de la librairie python inputs nous permettant de gérer notre joypad :

sudo pip install inputs

4. Principe et fonctionnement

 

 

explications

 

Le but du programme que nous allons écrire est très simple : pouvoir piloter notre robot à l’aide d’un joypad.

Nous allons développer notre programme en Python. Il nous faut donc 2 bibliothèques :

  • inputs : pour nous permettre de récupérer les événements sur le joypad ;
  • BrickPi : pour nous permettre de piloter les 2 moteurs de notre robot Lego.

Nous allons piloter le moteur gauche du robot par la gâchette gauche du joypad et le moteur droit par la gâchette droite.

Les valeurs de la pression sur la gâchette se situent dans l’intervalle 0 à 255. Valeurs retournées par la bibliothèque inputs.

Les valeurs d’entrée du moteur se situent entre -255 et +255 avec un moteur à l’arrêt à 0.

Nous pouvons donc transmettre directement les valeurs récupérées du joypad vers les moteurs.

Nous devons prendre en suite en considération 2 paramètres :

  • la valeur minimale du moteur pour que celui-ci fasse avancer le robot (variable VITESSE_MIN) ;
  • les valeurs de vitesse que l’on veut transmettre au robot. Dans l’absolu, nous pourrions tout transmettre, mais le temps de prise en compte de la vitesse par la librairie BrickPi induit de la latence. Nous définissons donc ici un seuil au-dessus duquel nous propagerons les ordres (variable SEUIL_DETECTION).

Vous pouvez visualiser tout ceci sur le schéma.

5. Programmation

01: from inputs import get_gamepad

02: from BrickPi import *

03:

04: VITESSE_MIN=65

05: SEUIL_DETECTION=20

06:

07: BOUTON_FIN = 'BTN_START'

08: BOUTON_AV_AR = 'BTN_SOUTH'

09:

10: infos = [[PORT_C,0,'ABS_Z'],[PORT_B,0,'ABS_RZ']]

11:

12: BrickPiSetup()

13: BrickPiSetupSensors()

14: BrickPi.Timeout=10000

15: BrickPiSetTimeout()

16: for moteur in range(2):

17: BrickPi.MotorEnable[infos[moteur][0]] = 1

18:

19: try:

20:    fin=False

21:    avant=True

22:

23:    while not fin:

24:       events = get_gamepad()

25:       for event in events:

26:          if (event.code == BOUTON_FIN):

27:             fin=True

28:          elif (event.code == BOUTON_AV_AR):

29:             if ((infos[0][1] == 0) and (infos[1][1] == 0)) :

30:                avant = (event.state == 1 ) ^ avant

31:          else :

32:             for moteur in range(2):

33:                if (event.code == infos[moteur][2]):

34:                   if (abs(infos[moteur][1]-event.state) >= SEUIL_DETECTION):

35:                      infos[moteur][1]=event.state

36:                      if (infos[moteur][1] < VITESSE_MIN):

37:                         infos[moteur][1] = 0

38:                      BrickPi.MotorSpeed[infos[moteur][0]] = infos[moteur][1] * (1 if avant else -1)

39:                      BrickPiUpdateValues()

40:

41: except Exception as e:

42:    print("Joypad non trouvé" )

43:    print(e)

44:

45: for moteur in range(2):

46:    BrickPi.MotorSpeed[infos[moteur][0]] = 0

47:

48: BrickPiUpdateValues()

Voici une description du fonctionnement de notre programme.

En lignes 01 et 02, nous chargeons les librairies dont nous avons besoin.

En lignes 04 et 05, définition de la vitesse minimale pour un moteur, ainsi que du seuil de détection.

En lignes 07 et 08, définition des boutons que nous allons utiliser pour mettre fin au programme ou pour basculer de marche avant à marche arrière.

En ligne 10, nous définissons les informations pour faire fonctionner notre robot. Voici la description :

[[MoteurGauche,VitesseGauche,JoypadGauche],[MoteurDroite,VitesseDroite,JoypadDroite]]

Des lignes 12 à 17, nous initialisons BrickPi. En ligne 17, nous spécifions où se trouvent les moteurs que nous voulons piloter (dans notre cas PORT_C et PORT_B).

En ligne 19, nous gérons le cas où il y aurait un problème, par exemple, l’impossibilité de trouver un joypad. Dans un tel cas, nous afficherons un message d’erreur : lignes 41 à 42.

En lignes 20 et 21, nous créons 2 variables, la première fin pour déterminer la fin du programme, la seconde avant pour savoir si le robot est en marche avant ou en marche arrière.

En ligne 23, nous bouclons tant que la fin du programme n’est pas déclenchée.

En ligne 24, nous récupérons les actions sur le joypad, nous traitons ces actions en ligne 25.

En lignes 26 et 27, nous détectons la fin du programme.

En ligne 28, 29 et 30, nous détectons si l’on passe la marche arrière.

En ligne 32 et 33 pour chacun des deux moteurs, si l’axe de joypad correspondant change de valeur, alors :

Si le seuil de détection a été dépassé (ligne 34), alors :

On enregistre la valeur de la nouvelle vitesse (ligne 35). Si cette valeur est en dessous de la valeur minimale, la vitesse du moteur reste à zéro (ligne 36).

On envoie les informations de vitesse et de sens au moteur et on applique les changements (lignes 38 et 39).

Entre les lignes 45 à 48 il s’agit de la fin du programme. On passe les vitesses de moteur à 0.

On pourra lancer automatiquement le programme au lancement du Raspberry Pi en rajoutant la ligne :

python /home/pi/robot.py &

dans le fichier /etc/rc.local. Il faudra rajouter la ligne juste avant le exit 0.

Conclusion

Maintenant que nous savons piloter notre robot à l’aide d’un joypad, l’étendue des possibles est infinie :

  • rajouter la camera Raspberry à notre Pi ou bien une webcam et piloter notre robot à l’aide de reconnaissance d’image en OpenCV ;
  • rajouter des senseurs MindStorms : palpeurs, détecteurs de distance… pour détecter les obstacles ;
  • utiliser GPIO pour créer des détecteurs en tout genre : obstacle, distance…

Et pour finir, n’oubliez pas de partager vos créations.

Références

[1] BrickPi sur le site Dexter Industries : https://www.dexterindustries.com/brickpi/

[2] Site de téléchargement de RaspBian : https://www.raspberrypi.org/downloads/raspbian/

 



Article rédigé par

Par le(s) même(s) auteur(s)

Contrôler vos modèles LEGO Powered Up au Nunchuk à l'aide de votre Arduino

Magazine
Marque
Hackable
Numéro
33
Mois de parution
avril 2020
Spécialité(s)
Résumé

Dans cet article, nous allons voir comment piloter un robot LEGO Powered Up à l’aide d’un Nintendo Nunchuk, grâce à un Arduino. Nous allons installer les librairies nécessaires pour pouvoir piloter notre modèle Powered Up et accéder aux informations du Nunchuk. Nous développerons ensuite notre programme de contrôle en C.

Auto-héberger son agenda avec Baïkal

Magazine
Marque
Linux Pratique
HS n°
Numéro
46
Mois de parution
octobre 2019
Spécialité(s)
Résumé

Il est très utile de pouvoir avoir un calendrier partagé accessible à tout moment sur toute sorte de clients : PC, tablette, téléphone... La solution la plus simple est souvent d’utiliser Google Calendar. Dans cet article, nous allons voir qu’il n’est pas si compliqué d’héberger soi-même un calendrier partagé à l’aide de Baïkal. Nous aborderons l’installation et la configuration de Baïkal. Pour finir, nous découvrirons la configuration des clients Thunderbird, Android et iOS.

Contrôler vos modèles Lego PoweredUp au Joypad à l'aide de votre Raspberry Pi

Magazine
Marque
Hackable
Numéro
30
Mois de parution
juillet 2019
Spécialité(s)
Résumé

Dans cet article, nous allons voir comment piloter un robot Lego PoweredUp à l’aide d’un JoyPad, grâce à un Raspberry Pi. Nous allons installer tout le nécessaire sur notre Raspberry Pi pour pouvoir piloter notre modèle Lego PoweredUp. Nous utiliserons NodeJS, donc le langage JavaScript, pour piloter notre modèle Lego.

Les derniers articles Premiums

Les derniers articles Premium

La place de l’Intelligence Artificielle dans les entreprises

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

L’intelligence artificielle est en train de redéfinir le paysage professionnel. De l’automatisation des tâches répétitives à la cybersécurité, en passant par l’analyse des données, l’IA s’immisce dans tous les aspects de l’entreprise moderne. Toutefois, cette révolution technologique soulève des questions éthiques et sociétales, notamment sur l’avenir des emplois. Cet article se penche sur l’évolution de l’IA, ses applications variées, et les enjeux qu’elle engendre dans le monde du travail.

Petit guide d’outils open source pour le télétravail

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Ah le Covid ! Si en cette période de nombreux cas resurgissent, ce n’est rien comparé aux vagues que nous avons connues en 2020 et 2021. Ce fléau a contraint une large partie de la population à faire ce que tout le monde connaît sous le nom de télétravail. Nous avons dû changer nos habitudes et avons dû apprendre à utiliser de nombreux outils collaboratifs, de visioconférence, etc., dont tout le monde n’était pas habitué. Dans cet article, nous passons en revue quelques outils open source utiles pour le travail à la maison. En effet, pour les adeptes du costume en haut et du pyjama en bas, la communauté open source s’est démenée pour proposer des alternatives aux outils propriétaires et payants.

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Bash des temps modernes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les scripts Shell, et Bash spécifiquement, demeurent un standard, de facto, de notre industrie. Ils forment un composant primordial de toute distribution Linux, mais c’est aussi un outil de prédilection pour implémenter de nombreuses tâches d’automatisation, en particulier dans le « Cloud », par eux-mêmes ou conjointement à des solutions telles que Ansible. Pour toutes ces raisons et bien d’autres encore, savoir les concevoir de manière robuste et idempotente est crucial.

Les listes de lecture

7 article(s) - ajoutée le 01/07/2020
La SDR permet désormais de toucher du doigt un domaine qui était jusqu'alors inaccessible : la réception et l'interprétation de signaux venus de l'espace. Découvrez ici différentes techniques utilisables, de la plus simple à la plus avancée...
8 article(s) - ajoutée le 01/07/2020
Au-delà de l'aspect nostalgique, le rétrocomputing est l'opportunité unique de renouer avec les concepts de base dans leur plus simple expression. Vous trouverez ici quelques-unes des technologies qui ont fait de l'informatique ce qu'elle est aujourd'hui.
9 article(s) - ajoutée le 01/07/2020
S'initier à la SDR est une activité financièrement très accessible, mais devant l'offre matérielle il est parfois difficile de faire ses premiers pas. Découvrez ici les options à votre disposition et les bases pour aborder cette thématique sereinement.
Voir les 33 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous