Configurer VSCode pour programmer et déboguer Python sur PiStorms

PiStorms est un composant qui permet de programmer, sur un Raspberry Pi, des robots basés sur les moteurs et les capteurs Lego.
La programmations d'applications robotiques sur PiStorms peut s'effectuer avec les outils de programmation habituels disponibles sur le Raspberry Pi, soit directement en connectant sur celui-ci un clavier et un écran (ce qui n'est pas très pratique pour des applications embarquées sur un robot), soit en utilisant une session VNC à distance. Mais une autre solution consiste à utiliser un IDE plus performant que les outils embarqués, comme Visual Studio Code.
Sur le site ev3dev.org, une version de l'API Ev3Dev2, déjà utilisées dans plusieurs articles de ce blog pour programmer la brique Lego EV3 en Python, dédié à PiStorm est disponible en téléchargement. Malheureusement, cette version ne semble pas aboutie est comporte de nombreux bogues :
  • Les capteurs ne sont pas reconnus automatiquement. Il es nécessaire de les configurer explicitement. Encore que cette configuration ne semble pas toujours nécessaire, celle-ci entraînant parfois un plantage des capteurs. 
  • Les classes LargeMotor et MediumMotor relatives aux moteurs EV3 ne sont pas utilisables. Un message indique que ceux-ci ne sont pas connectés. Tous les moteurs sont vus comme des moteurs NXT et ne  peuvent être utilisés que via la classe générique Motor .
  • L'usage des méthodes on_for_rotations() et on_for_degrees() n'est pas fiable. L'angle effectif de rotation des moteurs est souvent inattendu sans rapport avec les paramètres passés. 
  • L'usage des classes MoveTank et MoveStering déclenchent un fonctionnement anarchique des moteurs, le robot devenant incontrôlable.
  • Ces problèmes, remontés dans de nombreux forums, ne sont pas résolus et aucune documentation technique ne permet d'envisager une solution fiable.
Plusieurs articles préconisent de rester sur l'API PiStorm standard diffusé par mindsensors.com programmée via les outils de développement du Raspberry (Scratch, Geany, etc.).
Cet article propose une autre solution de développement en utilisant l'IDE Visual Studio Code. Il décrit les opérations à accomplir pour configurer celui-ci pour programmer et déboguer à distance des programmes Python sur PiStorms.

Pré-requis

Sur le RaspberryPi

Sur le PC de développement

  • Visual Studio Code doit être installer sur le PC. Privilégier Visual Studio Code Insiders (la toute dernière version de VSCode) qui permet de déboguer directement sur le Raspberry Pi.
  • Bien que ce ne soit pas absolument indispensable puisque le robot sera programmé à distance, Python 3 doit être installé sur le PC (puisque c'est le langage utilisé pour programmer le robot). Cela permet de tester en local des modules métiers avant de les embarquer sur le Raspberry Pi, pour ménager la carte microSD de celui-ci.
    Il est recommandé d'utiliser la même version que celle embarquée sur le Raspberry Pi.

Installation des extensions VSCode

Installation de l'extension Python

Si ce n'est déjà fait, il faut installer l'extension Python dans VSCode.
  • Dans VSCode, cliquer l'icône Extension dans la barre verticale à gauche.
  • Dans la zone Search Extensions in MarketPlace, taper python
  • Cliquer le bouton [Install] en face de Python (choisir la version Microsoft qui est la plus sure). Cette version réinstalle la version de Python la plus récente dans  ~/AppData/Local/Programs. Mais il est possible de choisir l'interpréteur Python que l'on souhaite utilisé pour un projet particulier.
  • Cliquer dans sur Python en bas à gauche de la fenêtre de VSCode.
  • Dans la zone Select the workspace to set the interpreter, taper le chemin complet du projet PiStorms. 
  • Puis, sous Enter interpreter path..., choisir l'interpréteur Python installé en pré-requis avec la version utilisée sur le Raspberry Pi.

Installation de l'extension Visual Studio Intellicode

On en profite pour installer également l'extension Visual Studio Intellicode. Cette extension permet d'implémenter la suggestion automatique des propriétés et méthodes des classes d'objets utilisées. Ce qui facilite grandement la programmation et évite des erreurs de saisie. Son installation ne pose pas de problème particulier :
  • Dans VSCode, cliquer l'icône Extension dans la barre verticale à gauche.
  • Dans la zone Search Extensions in MarketPlace, taper Visual Studio Intellicode
  • Il suffit alors de cliquer le bouton [Install] en face de l'extension.

Installation de l'extension Remote Development

L'extension Remote Development fournit tous les outils nécessaires au développement sur des plateforme embarquées telles que le Raspberry Pi. C'est elle qui est au cœur de cet article.
Pour l'installation, on procède comme pour Python :
  • Dans VSCode, cliquer l'icône Extension dans la barre verticale à gauche.
  • Dans la zone Search Extensions in MarketPlace, taper Remote Development
  • Il suffit alors de cliquer le bouton [Install] en face de l'extension.
En réalité l'extension intitulée Remote Development est une combinaison de plusieurs extension VSCode :
  • Remote-Containers est une extension pour fonctionner avec des conteneurs distants comme Docker. Ce type d'application permet aux développeurs de charger d'un coup l'environnement de développement et l'application à développer. Cela évite, lorsqu'on est amené à maintenir plusieurs applications en parallèle, à devoir tout reconfigurer lorsqu'on  passe d'une application à l'autre. Cela permet également de gérer plusieurs version en parallèle.
  • Remote-SSH est une extension pour gérer le répertoire d'un projet embarqué dans une session SSH comme si c'était un répertoire local.
  • Remote-SSH: Editing Configuration Files est une extension qui facilite la configuration des sessions SSH.
  • Remote-WSL est une extension pour gérer le répertoire d'un projet dans WSL (possibilité d'ouvrir une session Linux dans Windows).
L'extension Remote-SSH, dans sa version actuelle, ne permet pas de déboguer à distance. Mais il existe une toute nouvelle version qui le permet. On va donc désinstaller L'extension Remote-SSH et la remplacer par Remote-SSH (Nightly).
  • Sélectionner l'extension Remote-SSH et cliquer le bouton [Uninstall].
  •  Dans la zone Search Extensions in MarketPlace, taper Remote Development
  • Cliquer le bouton [Install] en face de l'extension Remote-SSH (Nightly).

Se connecter à un hôte distant

L'étape d'après consiste à se connecter sur le Raspberry Pi à partir de VSCode.

Ajouter un hôte distant dans VSCode

  • Dans la barre de menu de VSCode, cliquer la commande View/Command Palette... (Shift+Ctrl+P).
  • Derrière le prompt >, taper Remote-SSH. Toutes les commandes du service apparaissent alors.
  • Choisir Remote-SSH: Add New SSH Host...
  • Dans la zone Enter SSH Connection Command, taper ssh pi@192.168.1.102 -A, où 192.168.1.102 est l'adresse IP du Raspberry Pi (qui doit être connecté au réseau...) et pi est l'utilisateur sur le Raspberry Pi (par défaut).
  • Dans la zone Select SSH Configuration file to update, choisir C:\users\myname\.ssh\config, où myname est le nom de l'utilisateur Windows sur le PC.

Se connecter à un hôte distant

  • Dans la barre de menu de VSCode, cliquer la commande View/Command Palette... (Shift+Ctrl+P).
  • Derrière le prompt >, taper Remote-SSH.
  • Choisir Remote-SSH: Connect to Host...
  • Parmi les hôtes déjà utilisés, choisir 192.168.1.102 (l'adresse IP du Raspberry Pi configuré). Une nouvelle fenêtre VSCode s'ouvre.
La première fois, plusieurs questions seront posées. En effet, une partie Serveur de VSCode (25 Mo) doit être installée sur le Raspberry Pi.
  • Dans la zone Select the platform of the remote host "192.168.1.102", choisir Linux.
  • A la question Are you sure to continue ?, répondre Continue
  • Dans la zone Enter password for pi@192.168.1.102, taper le mot de passe de l'utilisateur pi du Raspberry Pi. Le message « Setting up SSH Host 192.168.1.102: (details) Installing VSCode Server » s'affiche en bas à droite de la nouvelle fenêtre de VSCode.
Lorsque la connexion est établie avec l'hôte distant, son adresse IP apparaît en vert dans la barre d'état de la nouvelle fenêtre de VSCode. Il est alors possible de travailler à distance exactement comme en local (création d'un répertoire pour le projet, création d'un nouveau fichier de code, etc.).

Cas particulier de PiStorms

Cela concerne le nom des répertoires et des fichiers du projet. Sur PiStorms, ceux-ci doivent obéir à quelques règles :
  • Les répertoires des projets doivent se trouver dans /home/pi/PiStorms/programs.
  • Seuls les répertoires ou les fichiers préfixé numériquement nn- sont visibles sur le menu de l'écran tactile du PiStorms. Le préfixe numérique sera réservé au fichier Python principal qui permet de lancer le programme du robot. Les autres fichiers des modules utilisé par le programme ne seront pas préfixés pour ne pas polluer l'affichage de l'écran tactile.
  • Le numéro de préfixe détermine l'ordre d'affichage sur l'écran tactile.

Commentaires

Posts les plus consultés de ce blog

Connecter ev3dev2 à Internet en WiFi

Connecter Visual Studio Code à un robot MindStorm EV3 avec ev3dev-browser

Installer les modules EV3DEV2 sur Python