Journal Le père Noël, Ubuntu, Chrome et le robot Edison sont sur un traîneau...

Posté par  . Licence CC By‑SA.
Étiquettes :
25
26
jan.
2025

Aujourd'hui un petit journal en guise de message de blog personnel. Cette année le Père Noël a apporté un robot programmable du nom d'Edison sous le sapin. J'ai eu un peu de mal a le faire fonctionner sur Ubuntu, donc je me permet ce billet surtout pour dépanner des parents pressés qui rencontreraient les même soucis. Lectrices et lecteurs en quête de lecture à haute valeur technique, attention tu n'apprendras (probablement) rien ici. Commençons donc!

Le robot Edison

Donc, Edison est un petit robot programmable qui s'adresse aux enfants pour les initier à la programmation. Je pose les choses tout de suite: il n'est (malheureusement) pas libre (contrairement à Thymio) mais il a quand même quelques fonctionnalités intéressantes:
- prix attractif (le tiers du prix de Thymio, soit 50€)
- compatible Lego
- la sélection du programme à lancer (détection d'obstacle, suivi de ligne, …) se fait via des barcodes à scanner sur une feuille de papier parmi les programmes pré-enregistrés en ROM.
Edison barcode
- on peut programmer via un navigateur web (nous y reviendrons):
- via des blocs
 edison blocs
- via scratch
 edison scratch
- ou directement en python pour les plus avancés.
 edison python

Conséquence du dernier point, là où une bonne majorité des fabricants imposent l'utilisation d'une tablette pour programmer, ici ça fonctionne aussi sur un ordinateur, y compris sur Linux sans avoir à se soucier de drivers. Ça tombe bien, l'ordinateur des enfants tourne sous Ubuntu…

Pour programmer, tout se passe sur le site du fabricant (à ce stade de non libre, j'espère qu'il survivra encore longtemps…) soit https://www.edblocksapp.com/v3/# pour la version en blocs. Mais, et c'est là que le bat blesse, Firefox ne prend malheureusement pas en compte l'API WebUSB https://developer.mozilla.org/en-US/docs/Web/API/WebUSB_API. Le tableau de compatibilité est à ce jour assez restreint, avec en gros 3 navigateurs: Chrome, Edge, Opera: https://developer.mozilla.org/en-US/docs/Web/API/USB#browser_compatibility

Bon, c'est parti pour une installation de Chromium. Une fois l'interface lancée, j'essaie de lancer la détection du robot. Chromium demande l'autorisation d'accéder au périphérique: je clique sur "oui vas y mon grand". Rien ne s'affiche, je reste bloqué à l'état "not connected". Bon. On est sur GNU/Linux ici, on va donc lire la doc: man edison-robot ou https://meetedison.com/trouble-shooting-edison-v3/, section "Using Edison with Linux".

Also, many Linux distros will restrict access to connected USB devices to only the superuser. This can block browser’s WebUSB access to EdisonV3. If this happens in your linux version, give regular users access to EdisonV3 by creating this udev rule:

Avec un SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="1207", MODE:="0666" à mettre au bon endroit.
Soit, faisons ainsi!

2ème essai: échec toujours, même après avoir "turn it off and on again" le navigateur.

Bien, on est sur GNU/Linux et on va pas se laisser emm***er un 25 décembre quand même! Allons voir les logs: chrome://device-log

USB device added: path=/dev/bus/usb/001/004 vendor=5840 "Microbric", product=4615 "Edison V3", serial="E3A-BcM1ODAzDQAwMzg2", guid=73e5ab19-b30f-415f-8777-6e0fd0c1a217
Failed to open /dev/bus/usb/001/004: Operation not permitted (1)

Bizarre, le robot est bien détecté mais j'ai pas les permissions malgré la règle udev. Allons voir:

ll /dev/bus/usb/001/004
crw-rw-rw- 1 root root 189, 2 janv. 26 13:14 004

Diable, tout est correct pourtant! On va pas se laisser emm***der un 25 décembre quand même, la bûche attend sur la table (et le gamin aussi) au diable les conventions. J'invoque le CHMOD 777 !!!!!
Ben quoi?

Je recharge l'interface, et LÀ QUE VOIS-JE??!!!: ah ben non toujours pas…

J'avoue à ce moment de la journée je suis allé manger la bûche, mais quand même sacrément agacé. Je me dis c'est pas possible, pourquoi je n'aurais pas les bonnes permissions, c'est quand même dingue. Ensuite, je ne sais pas si c'est le sucre, le gras ou l'alcool (j'écris ceci pour les besoins de la narration qui doit tenir le lecteur en haleine, en vrai j'ai été super raisonnable cette année je suis fier de moi!), mais je me dis que c'est quand même bien dommage que faire fonctionner un robot soit aussi compliqué que monter une stack docker de A à Z. Hein? Pardon? Docker? Docker le truc avec des "containers"? Container, genre CES PU***NS d'applications SNAP forcées par Ubuntu?
Je remonte fissa au bureau et en googlant "Webusb chrome snap", je vois que ça semble la malédiction de plein d'utilisateurs avec toute sorte de périphériques: clavier, cartes microbit et j'en passe. La solution: ne pas utiliser snap.

Ça sent bon! Malheureusement, Ubuntu ne fourni plus de versions pas snap de chromium. J'ai cherché un bon quart d'heure et n'ai trouvé que des solutions bancales et pas très sûres sur le long terme (l'ordinateur est sur la LTS 22.04). Jusqu'à trouver un navigateur installable avec un bon vieux .deb qui gère WebUSB, j'ai nommé "Microsoft Edge". J'ai un peu accusé le coup, mais bon quitte à offrir un robot non libre, ma foi je suis plus à ça prêt dans le renoncement… Installons Edge!

15min plus tard (oui, l'ordi tourne sur un fier Intel Core 2 Duo avec 4Go de RAM au bout d'une ligne ADSL de montagne… ), le saint graal apparaît enfin: "Device Connected".

Bon et bien voilà, je remercie chaleureusement tous les protagonistes de cette belle journée: Ubuntu, Google, Mozilla et 1000 merci à Microsoft d'avoir sauvé ce petit robot innocent!
Blague à part, j'avoue que ces derniers temps les applications snap commencent à me gonfler car à titre personnel, c'est le même programme qu'avant en .deb pour des fonctionnalités identiques mais avec des ennuis en plus: plus lent, plus volumineux, des problèmes de permissions. Je comprends bien l'intérêt pour ceux qui packagent les applications mais v'là la session de debug du 25 décembre quoi… Je trouve ça dommage, peut être que le vrai responsable n'est pas Ubuntu mais Google (chrome), peu importe, pour le pékin moyen (qui a un PC sous Windows je le concède) ça devient vite compliqué cette affaire. J'ai remonté le problème à la société qui fabrique Edison en leur suggérant de peut être mentionner le problème dans leur FAQ, le support m'a répondu qu'ils faisaient suivre à l'équipe de dev.
J'espère surtout que ce journal pourra servir à quelqu'un qui rencontre un problème avec son périphérique USB à connecter avec chrome sur Ubuntu.

  • # pérennité

    Posté par  (Mastodon) . Évalué à 3 (+0/-0). Dernière modification le 26 janvier 2025 à 22:08.

    À supprimer, j'ai lu un peu trop en diagonale.

  • # snap connect|hardware-observe

    Posté par  . Évalué à 9 (+7/-0). Dernière modification le 27 janvier 2025 à 07:55.

    Les 2 commandes magiques, sans que je n'ai pu les tester sont sans doute :

    snap connect firefox:hardware-observe
    snap connect firefox:raw-usb
    • [^] # Re: snap connect|hardware-observe

      Posté par  . Évalué à 1 (+0/-0).

      Je n'avais pas creusé beaucoup plus loin le jour de Noël et m'étais tenu à installer Edge, mais merci ça fonctionne!

      snap connect chromium:hardware-observe
      snap connect chromium:raw-usb

      Je garde ça précieusement sous le coude pour le prochain périph usb à connecter.

  • # Premier lien incorrect

    Posté par  . Évalué à 4 (+2/-0).

  • # Accès aux périphériques USB depuis les navigateurs

    Posté par  (site web personnel) . Évalué à 3 (+2/-0).

    Cette information me fait tiquer.
    Je comprends bien le principe, éviter l'installation d'un logiciel spécifique pour interagir avec un périphérique branché en USB.
    D'un côté ça peut être vu comme une chance pour le desktop sur GNU Linux car les constructeurs n'auront plus d'efforts à faire pour être multi-systèmes.
    De l'autre, la fonction d'un navigateur Web étant d'être connecté au monde entier, je vois cette fonctionnalité comme la porte ouverte à tous les courants d'air. En particulier quand des petits malins trouveront des failles pour contourner l'autorisation explicite de l'utilisateur par exemple. Bonjour le disque USB cryptolocké en direct depuis le Web…

    • [^] # Re: Accès aux périphériques USB depuis les navigateurs

      Posté par  . Évalué à 6 (+4/-0).

      Cette information me fait tiquer.

      ça semble aussi avoir fait tiquer les devs de Firefox: https://github.com/mozilla/standards-positions/issues/100

      Il y a par contre un projet d'un tiers qui permet d'ajouter le support de webserial à Firefox pour ceux qui en ont besoin (je ne l'ai pas testé, je ne sais pas si c'est suffisant ou pas pour ce projet ci):
      https://github.com/kuba2k2/firefox-webserial

    • [^] # Re: Accès aux périphériques USB depuis les navigateurs

      Posté par  . Évalué à 3 (+2/-0).

      Il y a même tout un pavé sur la sécurité dans la page wikipedia associée: https://en.wikipedia.org/wiki/WebUSB#Security_considerations

      On y lit des choses "rigolotes":

      The threat surface of a USB however is bi-directional and a malicious peripheral device could attack the host. An infected edge device cannot easily be mitigated by WebUSB API's. In many device configurations trusted USB ports are used to deliver firmware upgrades and a malicious edge device could grant attackers persistence in a system

      Et les notes de bas de pages sont tout aussi "hilarantes": https://www.xda-developers.com/google-disables-chrome-webusb/ (ou comment contourner une clé usb d'authentification en 2018)

      Plus sérieusement, de toute façon c'est dans chrome donc le risque est là de facto vu sa part de marché. Même si je comprend la réticence de firefox, ça restera vu comme une fonctionnalité manquante qui oblige à installer autre chose pour faire marcher le device concerné, donc je préférerais que ça soit disponible.
      Là j'ai du expliquer aux enfants que "edge c'est que pour edison, et pour le reste vous utilisez firefox et pas autre chose". C'est un peu dommage je trouve question simplicité pour des enfants.

      • [^] # Re: Accès aux périphériques USB depuis les navigateurs

        Posté par  (Mastodon) . Évalué à 4 (+1/-0). Dernière modification le 27 janvier 2025 à 11:41.

        Là j'ai du expliquer aux enfants que "edge c'est que pour edison, et pour le reste vous utilisez firefox et pas autre chose". C'est un peu dommage je trouve question simplicité pour des enfants.

        En même temps tu connaissais une alternative sous libre qui fournit un flatpak et tu as choisis de voter avec ton porte-monnaie pour le choix propriétaire. Tu ne peux t'en prendre qu'à toi-même.

        Alors oui je sais on passait de 59 à 150€ mais bon les chinoiseries proprio ce sera toujours moins cher ça on le sait.

        • [^] # Re: Accès aux périphériques USB depuis les navigateurs

          Posté par  . Évalué à 2 (+1/-0).

          J'ai déjà un Thymio. Il n'est pas exempt de reproches non plus. Et il faut aussi s'avoir s'adapter à chacun de ses enfants, et là en l'état des choses un 2ème Thymio c'était non car ça impliquait d'autres renoncements par ailleurs (pour cet enfant là).
          C'était le compromis, le compromis vient avec du non libre, soit.

  • # Une fois de plus, je m'incruste…

    Posté par  (site web personnel) . Évalué à 4 (+2/-0).

    …mais il y a, on va dire, (beaucoup) plus polyvalent que les Thymio, Edison et consorts.

    Il y a ça, par exemple :

    FRobot bipède basé sur un Raspberry Pi Pico

    Et ça a quand même plus de gueule, pour un prix équivalent. En tout cas, il a son petit succès quand je l'exhibe, autant auprès des petits que des grands. Je l'ai appelé Felix, (ce n'est pas difficile de deviner pourquoi :->).

    Outre les 4 servomoteurs pour les jambes et les pieds, il est équipé de 4 LEDs RGB, d'un buzzer, d'un haut-parleur, et d'une matrice de LEDs, ainsi que d'un capteur ultra-sonique, d'un capteur infrarouge (pour la télécommande) et d'un module Bluetooth.

    Ce modèle s'appuie sur un Raspberry Pi Pico. On peut l'acheter sans Pico, avec le Pico de base (sans WiFi), ou avec un Pico W (avec WiFi). Il est fournit en kit, donc il faut le monter. Ça prend du temps, mais c'est bien expliqué (la preuve : j'y suis arrivé). Même monté, on peut facilement retirer le Pico pour l'utiliser dans d'autres projets.

    Ayant déjà un Pico W, j'ai acheté la version sans Pico. En théorie, avec un Pico W, le module Bluetooth est inutile, puisque le Pico W est également équipé du Bluetooth. On devrait aussi pouvoir utiliser un Pico 2 (W).

    Voilà pour la partie matérielle.

    Pour ce qui est de la partie logicielle, il y a une série de programmes C++ sous forme de sketches à utiliser avec l'IDE Arduino. En plus d'un ensemble de programmes ciblant chacun un composant précis, il y en a un dédié au calibrage des servomoteurs, ainsi qu'un autre dit multi-fonction qui permet de piloter le robot via la télécommande ou une application mobile. Je n'ai jamais réussi à me connecter au robot avec l'application mobile, mais, vu la description qui en est faite et ce qu'il m'a été possible de faire avec la télécommande, il y a déjà de quoi s'amuser.

    Les logiciels fournis ne m'intéressaient pas plus que ça, car j'ai acheté ce robot pour tester la bibliothèque Python qui me permet de piloter des microcontrôleurs via le WiFi (https://github.com/epeios-q37/ucuq-python).

    Comme indiqué, pour pouvoir utiliser cette bibliothèque, il faut installer Micropython sur le microcontrôleur, ainsi que le programme de contrôle, et un fichier de configuration. Ça a été très facile avec le Pico, et j'ai, en effet, pu alors développer, en Python, des applications pour contrôler à distance tous les élément du robot, sans jamais avoir à reconnecter le Pico à mon ordinateur.

    J'en ai profité pour écrire une application servant au calibrage des servomoteurs (l'application Tweak), ainsi qu'une autre dédiée aux servomoteurs (Servos).

    Cette dernière gère une sorte de langage de pilotage de servomoteurs. Ainsi, pour faire avancer le robot ci-dessus, j'utilise la séquence :

    l-3:r L+20:R+20 l:r+3 L-20:R-20
    

    L correspond à la jambe gauche du robot, l son pied gauche, r son pied droit et R sa jambe droite, les + et - permettent de spécifier le sens de rotation suivi de l'angle en °. Lorsqu'il n'y a pas d'angle de spécifié, cela correspond à l'angle 0, et le : est pour actionner plusieurs servomoteurs en même temps.

    Voilà une autre séquence permettant de faire « danser » le robot.

    L-25 R-25 L:R L-25:R+25 L+23:R-23 L-15:R+15 l+20:r-20 r l r-15:R+15:l+5 r:R
    l+10:L+15 R-10:r-15 l:L+15 R+15:r L-15:R-15 l-15: l:L-15 R+15:L-15:r-25 R-15:L-15
    R+10:L+10:r:l r+20:l+20 r:l l:r+40 L-15:R-15 l-25:r R+25:L+25:r+30 R-25:L-25:r-30
    %40 r+30 r-30 R+30:r+30 r-30 % l:r:R:L
    

    Le % permet de modifier la vitesse de rotation des servomoteurs.

    Cette application n'est pas propre à ce robot. Pour l'utiliser avec d'autres robots (comme celui ci-dessous), il suffit de lui fournir un fichier de configuration faisant le lien entre les identifiants (les L, l, r et R ci-dessus, mais on peut en choisir d'autres) et les différents servomoteurs.

    J'aime bien cette application car elle permet de faire faire tous les mouvements que l'on veut à un robot, ce que ne permettent pas les applications fournies avec ces robots, qui ne proposent qu'un ensemble de mouvements préprogrammés.

    Pour résumer, il suffit d'installer Micropython sur le Pico, plus le programme de contrôle et le fichier de configuration, et, coté ordinateur, récupérer le dépôt ci-dessus (qui n'a pas de dépendances) pour pouvoir piloter le robot à distance à partir d'un environnement de développement Python tout ce qu'il y a de plus classique.

    Et cela fonctionne aussi avec des ESP32, comme pour le robot suivant :

    Robot chien basé sur un ESP32

    Avec une imprimante 3D ou une découpeuse laser, on peut aller jusqu'à créer son propre robot basé, comme les modèles ci-dessus, sur des servomoteurs connectés à un microcontrôleur.

    On peut également piloter ses propres montages, comme celui-ci que j'ai crée à partir de composants bon marché achetés séparément :

    Montage DIY basé sur un ESP32

    Les robots ci-dessus ne sont que quelques exemples parmi la multitude de robots et de kits basés sur un ESP32 ou un Raspberry Pi Pico. Ils peuvent, tous, bénéficier de cette bibliothèque.

    Pour en venir (enfin !) au sujet évoqué par ce journal, on peut faciliter la mise en œuvre de ces robots en utilisant Brython, qui permet d'exécuter du code Python dans un navigateur web. Ainsi, une fois le microcontrôleur préparé comme indiqué ci-dessus, on peut le piloter en Python directement avec une application web, sans rien avoir à installer. Et pour se rapprocher encore plus des outils éducatifs proposés par les solutions évoqués dans ce journal, on peut, grâce à Blockly, piloter robots et montages électroniques par assemblage de blocs, à l'instar de Scratch.

    Exemples : https://zelbinium.q37.info/fr/ucuq/online.

    Les prochaines versions de cette bibliothèque prendront en charge plus de composants, et en particulier tout ce qui est capteur.

    Zelbinium, la programmation ludique

    • [^] # Re: Une fois de plus, je m'incruste…

      Posté par  . Évalué à 1 (+0/-0). Dernière modification le 27 janvier 2025 à 13:09.

      Nan nan c'est pas de l'incruste, c'est toujours sympa de voir ce qui se fait ailleurs. C'est super intéressant, par contre je viens d'aller voir la tête des programmes en blockly, ça me semble quand même assez compliqué à comprendre pour des enfants en primaire.

      Dans le même esprit en plus "abordable" (techniquement), j'ai aussi ça à la maison: https://www.ecolerobots.com/

      Ça donne des montages de ce genre:
      Robot roulant

      Dinosaure

      Il faut ET monter le robot avec des briques, ET faire le soft en scratch mais il y a déjà la notion d'adressage des composants genre "va lire la valeur du capteur de lumière à l'adresse A1" donc il faut bien faire la connexion intellectuelle entre le montage électrique et le software.
      C'est libre, par contre heureusement que j'ai trouvé une boite d'occasion car le prix pique un peu. C'était "le gros cadeau d'anniversaire" pour mon aîné!

  • # merci !

    Posté par  . Évalué à 1 (+0/-0).

    Merci pour ce retour.
    Nous allons avoir des Edisons à l'ecole, et nos PC sont sous Fedora et PrimTux (base Mint) donc a priori pas de soucis de Snap.

    Du coup ça marche avec Firefox ou pas?

    • [^] # Re: merci !

      Posté par  . Évalué à 1 (+0/-0).

      Firefox ne prenant pas en compte l'API WebUSB, la réponse est non.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.