English | 简体中文 | Deutsch | Français | Español
Voici quelques termes que nous utiliserons dans ce document :
Robot, bot
- c'est le logiciel Android fonctionnant sur le téléphone du véhicule OpenBot.Serveur
- le serveur node, la partie serveur de ce projet.Client, UI
- c'est la partie client de ce projet. Elle fonctionne dans le navigateur.
Ceci est un projet basé sur Node.js agissant comme un contrôleur pour le véhicule OpenBot. Le logiciel comprend deux parties : un serveur et un client. Le serveur est une application Node.js fonctionnant sur un ordinateur du même réseau que le Robot. La partie client fonctionne dans le navigateur.
Voici une capture d'écran du navigateur :
Vous pouvez exécuter ce logiciel sur un PC, un appareil de type RaspberryPi ou même des appareils Pi Zero qui supportent l'environnement Node.js
. Assurez-vous d'abord d'avoir installé Node.js, version 10 ou plus récente. Vérifiez la version :
node --version
Le logiciel se trouve dans le répertoire /controller/node-js
du projet OpenBot. Après avoir récupéré le code depuis github, changez de répertoire et exécutez les commandes suivantes :
npm install
npm start
La dernière commande démarrera le serveur. Si vous souhaitez exécuter le serveur en arrière-plan sans terminal, sur Linux/MacOS
vous pouvez exécuter :
npm run start-nohup
ou simplement :
nohup npm start
Pointez votre navigateur vers l'adresse IP du serveur au port 8081, par exemple http://localhost:8081, ou http://192.168.1.100:8081. Notez que vous pouvez accéder au serveur depuis un autre ordinateur, mais le Robot, le serveur et le PC navigateur doivent être sur le même réseau. À l'avenir, nous pourrons ajouter la possibilité d'accéder au serveur à distance.
Assurez-vous que votre Robot est connecté au même réseau. Sur l'application Android du Robot, allez dans le panneau Général
et sélectionnez Phone
comme contrôleur. Cela connectera l'application Android au serveur Node, et une vidéo apparaîtra sur l'UI.
-
Le serveur Node crée et publie un service DNS de type
openbot.tcp
et un nomOPEN_BOT_CONTROLLER
au port 19400. Cela permet au Robot de trouver automatiquement le serveur sans connaître son adresse IP. Le Robot recherche ce service et établira une connexion Socket lorsqu'il sera mis en mode contrôleurPhone
. -
Le serveur Node crée un serveur HTTP au port 8081 et commence à servir les requêtes du navigateur.
-
De plus, le serveur node crée un serveur WebSocket au port 7071. Cela sera utilisé pour communiquer directement avec le navigateur. Pour résumer jusqu'à présent, le serveur a créé deux connexions Socket, une vers le Robot et une vers le Navigateur.
-
L'utilisateur entre des commandes clavier depuis le navigateur. Ces pressions de touches sont envoyées au Serveur via le WebSocket. Le serveur les convertit en commandes que le Robot peut comprendre, comme
{driveCmd: {r:0.4, l:0.34}}
(une liste de toutes les commandes peut être trouvée dans la documentation du contrôleur Android ici). Ces commandes sont envoyées au Robot via la connexion Socket. -
Le Robot envoie des informations de statut au serveur sur la connexion Socket, et le serveur les transmet à l'UI. L'UI peut utiliser ces informations pour améliorer son apparence, comme afficher des indicateurs clignotants, etc., mais actuellement ce statut est ignoré.
-
Le serveur node agit également comme un proxy de signalisation WebRTC. Il transmet les commandes de négociation WebRTC entre le robot et le navigateur. Il réutilise les connexions socket ouvertes à cet effet, donc aucune connexion ou configuration supplémentaire n'est nécessaire.
Ce code utilise snowpack pour un outil de construction rapide et léger.
Nous utilisons eslint pour le linting et le formatage automatique de votre code. Il est recommandé d'exécuter le lint et de corriger les erreurs avant de valider un nouveau code. Si vous utilisez Visual Code, vous pouvez obtenir un plugin ici. Exécutez le linter comme ceci :
npm run lint
Pour construire une version de production du client
, exécutez :
npm run build
Cela optimisera le code client dans un répertoire build
, qui peut être déployé sur un serveur. De plus, nous devons configurer un gestionnaire de processus pour redémarrer le serveur, et éventuellement un proxy inverse comme nginx, ce qui n'est pas encore fait.
- Parfois, le navigateur n'affiche pas le menu des commandes, juste le titre. Cela signifie que la connexion WebSocket n'a pas pu être établie. Cela se produit généralement juste après le démarrage du serveur. Si vous examinez la console du navigateur, vous pouvez trouver un message indiquant qu'il n'a pas pu se connecter, quelque chose comme
WebSocket connection to 'ws://localhost:7071/ws' failed
. Tuez tous les processus node (pkill -9 node) et redémarrez-le. Rechargez la page et la connexion devrait être établie. - Si vous ne pouvez pas connecter le téléphone à l'application, assurez-vous qu'une autre instance de cette application ne fonctionne pas sur cette machine ou une autre machine sur le même réseau.
Aucun.
- Nous devons étudier si nous pouvons nous connecter au serveur à distance, et si WebRTC fonctionnera toujours. Nous devrions documenter la configuration du pare-feu pour rendre cela possible.
- Nous devons créer une configuration
production
, éventuellement en utilisant pm2 process manager et nginx.