Objectif et contexte
Le but de ce projet est de rajouter une fonctionnalité "détection et destruction de mauvaise herbe" au Farmbot (https://farm.bot/) de l'Ecole des Mines. Une fonctionnalité similaire est déjà présente à travers un "FarmWare" dans la Farmbot Web App. Nous avons essayé d'améliorer ce travail et de construire un meilleur système avec un nouveau module de détection et une nouvelle tête de destruction utilisant de l'eau bouillante. Ainsi, une partie informatique supplémentaire était nécessaire pour faire fonctionner la détection et la destruction.
Software
La pipeline existante initialement est construite autour d'un web server qui permet de contrôler son farmbot à n'importe quel endroit du monde. L'intégration avec le software du farmbot est très complète: chaque pin peut être activée ou désactivée, une carte de son jardin est disponible avec la présence des plantes indiquée, et des fonctionnalités comme l'arrosage et la prise de photos à l'aide d'une caméra relié au farmbot sont déjà présentes. Lorsque la connection au réseau est bonne, c'est une interface très pratique pour piloter le robot.
Un des problèmes principaux est la latence. Cela prend de quelques secondes à une minute pour déplacer le farmbot, et encore plus longtemps pour prendre des photos. Des déconnexions spontanées sont aussi fréquentes.
Installer au serveur local (https://github.com/FarmBot/Farmbot-Web-App) qui imite le service cloud du farmbot s'est révélé être un tâche difficile. Nous avons réussi à faire fonctionner le Web Server et le serveur MQTT, sans toutefois pouvoir se logguer dans le serveur.
Finalement, il semble qu'il était difficile de modifier le système d'exploitation Farmbot OS fonctionnant sur la carte raspberry PI, and le serveur web pour donner un support au software et au hardware additionnel. Nous avons décidé de constuire une nouvelle pipeline résolvant ces problèmes tout en gardant le même esprit que le projet Farmbot originel. Les points principaux à aborder étaient les suivants:
- Latence : Nous voulons un feedback en temps réel de la caméra et un contrôle proche du temps réel du farmbot.
- Mode offline: La pipeline doit fonctionner soit en mode connexion, soit en mode hors-connexion.
- Simplicité: Il doit être facile d'ajouter des fonctionnalités à notre farmbot. Chaque composant doit être modulaire, et écrit de façon claire. L'application doit être multi-plateforme.
- Portable: Le système final doit être indépendant au maximum du software initial et de l'interface fournie par le farmbot.
Nouvelle pipeline
La nouvelle pipeline remplace le serveur cloud externe and utilise une configuration client-serveur où l'utilisateur est le client et la raspberry pi héberge le serveur. La deuxième arduino qui contrôle le chauffe-eau est branché sur la raspberry pi. Celle-ci relaye les messages entre le client and les deux arduinos. Le client process les images et commande les arduinos.
Architecture du code
Le code est divisé en différents modules interagissant les uns avec les autres.
Chaque sous-module est contenu dans son propre sous-dossier dans le repository git suivant: https://github.com/EmilyTripoul/WeedDetection
* lib-detection (https://github.com/EmilyTripoul/WeedDetection/tree/master/lib-detection) contient le code pour analyser les images et détecter les mauvaise herbes
* client (https://github.com/EmilyTripoul/WeedDetection/tree/master/client) contrôle le farmbot et envoie des commandes à la raspberry pi
* raspberry-server (https://github.com/EmilyTripoul/WeedDetection/tree/master/raspberry-server): Le serveur Raspberry tourne sur la raspberry et envoie les messages entre la raspberry et les arduinos.
* arduin-temp-control (https://github.com/EmilyTripoul/WeedDetection/tree/master/arduino-temp-control) : Code pour l'arduino contrôlant le chauffe-eau
* ext/farmbot-arduino-firmware-master (https://github.com/EmilyTripoul/WeedDetection/tree/master/ext/farmbot-arduino-firmware-master) est une fork du farmbot arduino firmware (https://github.com/FarmBot/farmbot-arduino-firmware) disponible sur github.
* ext/farmware_tools: (https://github.com/EmilyTripoul/WeedDetection/tree/master/ext/farmware_tools) est une fork de farmware_tools package (https://github.com/FarmBot-Labs/farmware-tools) modifié pour fonctionner sur windows.
Chaque sous-dossier contient son propre Readme qui explique en détail son fonctionnement.