Il s'agit d'un article invité de Surrogate, une équipe de développeurs créant des jeux auxquels les gens jouent dans la vraie vie sur Internet.
Nous avons introduit ce concept l'année dernière et avons lancé jusqu'à présent trois jeux. Notre dernier jeu de 2019 était SumoBots Battle Royale – où les joueurs de partout dans le monde peuvent combattre de vrais robots dans une arène de style bataille royale. Le but du projet était de faire fonctionner le jeu de manière semi-autonome, ce qui signifie que les bots pouvaient se réinitialiser automatiquement entre les jeux, et que l'arène pouvait fonctionner seule sans interaction humaine. C'était notre projet le plus complexe à ce jour, et nous voulions partager certaines parties du processus de construction plus en détail, en particulier, comment nous avons construit ces robots et les avons connectés en ligne pour que les gens puissent les contrôler à distance.
Sommaire
Sélection de robots
Nous avons commencé notre processus en choisissant les robots que nous souhaitons utiliser pour le jeu. Il y avait quelques exigences pour les robots lors de l'évaluation:
- Sont capables de résister à une collision 24h / 24 et 7j / 7
- Facilement modifiable et réparable
- Peut tourner au même endroit
- Doit avoir suffisamment d'espace pour s'adapter à l'électronique
Après avoir examiné de nombreux robots grand public, projets de fabricants et robots de combat compétitifs, nous avons décidé d'utiliser les robots JSUMO BB1 pour ce jeu. Nous avons aimé le fait que ces robots ont un boîtier métallique qui les rend très durables, toutes les pièces sont facilement remplaçables et peuvent être achetées séparément, et il dispose de 4 moteurs indépendants (boucliers moteur inclus), un pour chaque roue, ce qui lui permet de tourner au même endroit.
Nous étions assez sceptiques quant à la possibilité d'intégrer toute l'électronique dans le boîtier d'origine, mais nous avons décidé de continuer avec ce robot, car il avait les meilleures caractéristiques globales. Comme ce robot est facilement modifiable, nous pouvons toujours imprimer en 3D un boîtier supplémentaire pour s'adapter à toutes les pièces.
Quelle est la planche?
Maintenant que nous avons décidé du robot, il était temps de définir l'électronique à utiliser dans cette version. Comme d'habitude, tout commence par les exigences. Voici ce dont nous avons besoin pour que le jeu fonctionne correctement:
- Le robot doit pouvoir se remettre de n'importe quelle position
- Peut rester en ligne pendant le chargement
- Prend en charge la connexion réseau WiFi et offre une connectivité fiable
- Facilement programmable et prend en charge les mises à jour OTA
- Peut contrôler quatre moteurs simultanément
Sur la base de ces exigences, nous avions à l'esprit la configuration électronique suivante:
Nous avons dû trouver une carte qui est économe en énergie, peut envoyer des commandes aux moteurs, prend en charge la charge parallèle et a une faible empreinte sur la taille du robot. Avec autant d'exigences, trouver la planche parfaite peut être un défi.
Arduino à la rescousse
Heureusement, Arduino était là pour nous aider. Ils offrent une riche sélection de cartes pour s'adapter à tous les projets de robotique possibles et disposent d'une documentation très détaillée pour chacune des cartes.
Plus important encore, Arduino est connu pour sa haute qualité, ce qui est crucial pour les types d'applications semi-autonomes. Venant d'un environnement logiciel embarqué et devant travailler avec toutes sortes de matériel, nous constatons souvent que certaines fonctionnalités ou fonctionnalités de la carte ne sont pas complètement terminées, ce qui peut conduire à toutes sortes de situations désagréables.
Après avoir examiné la collection de cartes Arduino, nous avons rapidement trouvé un candidat parfait pour notre projet, l'Arduino MKR1000 WiFi. Cette carte répond à toutes nos exigences principales pour les commandes de moteur, est facilement programmable via Arduino IDE, et en raison de sa conception à faible consommation d'énergie est extrêmement économe en énergie, nous permettant d'avoir une batterie de capacité inférieure. De plus, il a une puce WiFi séparée à bord, qui se concentre uniquement sur la fourniture d'une connexion WiFi fiable, ce qui est très important dans notre cas d'utilisation.
Maintenant que nous avons décidé du «cerveau» de notre robot, il était temps de choisir le reste des composants.
Un matériel robuste signifie un logiciel fonctionnel
Il faut garder à l'esprit que lorsque vous travaillez avec du matériel, vous devez toujours essayer d'éviter tout risque possible. Cela signifie que vous devez toujours dépasser vos exigences matérielles minimales lorsque cela est possible. La raison en est que si votre matériel ne fonctionne pas comme prévu, votre pile logicielle entière devient également inutilisable. Choisissez toujours des composants matériels fiables pour les applications critiques.
Certains de nos composants électriques peuvent sembler un peu exagérés, mais en raison de la nature de nos projets, ils sont une exigence critique.
Éviter les explosions de batterie
Comme il y a beaucoup de collision de robots impliqués dans le jeu, nous avons décidé d'utiliser une solution de batterie standard de haute sécurité. Après avoir évalué plusieurs options sur le marché, nous avons décidé de choisir le RRC2040 de RRC (Allemagne). Il a une capacité de 2950 mAh qui nous permet de faire fonctionner les robots jusqu'à cinq heures sur une seule charge. Il a un circuit interne pour la gestion de l'alimentation, des fonctions de protection et il prend en charge les communications SMBUS (presque comme I2C), et est certifié pour toutes les normes de batterie électronique grand public. Pour la charge, nous avons utilisé la solution de charge RRC conçue spécifiquement pour cette batterie et qui offre la possibilité d'alimenter l'application pendant la charge de la batterie.
Remarque: l'Arduino MKR1000 a une solution de charge assez soignée sur la carte elle-même. Vous pouvez connecter la batterie à la carte directement comme source d'alimentation principale et la charger directement via le port micro USB du MKR1000. Nous voulions vraiment l'utiliser pour économiser de l'espace et avoir une conception plus robuste, mais en raison de la grande capacité de notre batterie, nous ne pouvions pas l'utiliser à plein potentiel. Dans nos projets futurs avec des robots à plus petite échelle, nous prévoyons certainement d'utiliser le système de charge interne de la carte, car il fonctionne parfaitement pour les blocs d'alimentation 700-1800 mAh.
Récupération des bots
Pour que le bot puisse se remettre de sa chute sur la tête, nous avons mis en place un servo de retournement. Nous ne voulions pas avoir de risque de couple insuffisant, alors nous avons opté pour le DS3218, qui est capable de soulever jusqu'à 20 kg de poids. Voici comment ça fonctionne:
Tout accrocher ensemble
Maintenant que nous avons décidé de tous les éléments cruciaux de cette configuration, il était temps de connecter tous les éléments ensemble. Comme première étape, nous avons pensé quelle serait la meilleure façon de localiser toutes les pièces dans le bot. Nous avons ensuite imprimé en 3D un boîtier pour protéger l'électronique. Une fois toutes les étapes préliminaires terminées, nous avons câblé tous les composants ensemble et les avons montés à l'intérieur du boîtier. Voici à quoi ça ressemble:
C'était très pratique pour nous que toutes les broches de la carte puissent être connectées simplement en les branchant, cela évite beaucoup de temps passé à souder les câbles de 12 robots et, plus important encore, nous a permis de réduire le risque de mauvaise soudure qui ne peuvent généralement pas être facilement identifiés.
Arduino = Code rapide
Arduino MKR1000 nous a offert la connectivité dont nous avions besoin pour le projet. Chaque robot sumo héberge son propre serveur UDP utilisant les bibliothèques WiFi MKR1000 pour recevoir ses commandes de contrôle pour un PC de contrôle central et diffuser son état de charge de la batterie. Les commandes utilisateur sont converties en trois signaux PWM différents à l'aide de la bibliothèque Arduino Servo pour les contrôleurs de moteur flipping, gauche et droit. La carte utilisée prend en charge la sortie matérielle PWM qui nous a été utile. Dans l'ensemble, nous avons réussi à garder l'ensemble du code Arduino dans quelques centaines de lignes de code en raison de la disponibilité des bibliothèques Servo et Wifi.
Le support ArduinoOTA prêt à l'emploi pour la mise à jour du code via le WiFi s'est avéré utile pendant la phase de développement, mais aussi chaque fois que nous mettons à jour le firmware de plusieurs robots en même temps. Pas besoin d'ouvrir les capots et de brancher un câble USB! Nous avons créé un script Bash simple à l'aide de l'outil de mise à jour OTA intégré à Arduino IDE pour envoyer des mises à jour du firmware à chaque robot en même temps.
Résumer
Il est assez étonnant que nous vivions à une époque où vous pouvez utiliser une carte grand public de petit format comme l'Arduino MKR1000 et avoir tant de fonctionnalités. Nous avons eu une grande expérience dans le développement de notre jeu SumoBots Battle Royale à l'aide de la carte. Cela a rendu l'ensemble du processus très fluide et rationalisé, la documentation était exacte et nous n'avons jamais eu à goulot d'étranglement où le matériel ne fonctionnerait pas comme prévu.
Plus important encore, les planches se sont révélées très robustes au fil du temps. Ces SumoBots ont déjà été utilisés pour plus de 3000 jeux, et nous n'avons pas vu un seul échec du MKR1000. Pour un jeu où vous claquez littéralement les robots à grande vitesse, c'est assez impressionnant pour dire le moins.
Nous avons hâte de travailler avec Arduino sur nos futurs jeux, et nous avons hâte de voir ce qu'ils annonceront en 2020!
Lien de site Web
Commentaires
Laisser un commentaire