Layer 1

Python 4D - Machine Vision Consulting

Après plusieurs années dans le développement de machines spéciales à forte valeur ajoutée, vision 3D et robotique, j'ai fait le constat des difficultés de la mise en oeuvre de ces machines.

L'utilisation de scanners, de cameras, de capteurs simples ou complexes est la vitrine incontournable des prestataires de machines de vision, AOI ou machines spéciales.

Mais avant de maîtriser une caméra, un laser de position, une sonde US ou encore un capteur courants de Foucault, les prestataires de solutions en contrôle industriel doivent investir en recherche et développement.

Cet investissement est souvent une perte financière si aucune des briques utilisées n'est rapidement réutilisées dans une prochaine machine.

L'idéal dans la création d'une machine spéciale, est l'utilisation de briques hardware et software déjà maîtrisées. Mais même dans le cas où toutes les briques hardware sont disponibles, le créateur d'une machine de vision doit développer et mettre en oeuvre d'autres briques et liaisons spécifiques à chaque machine :
  • Le synchronisme entre les différentes briques internes et externes de la machine: ces synchronismes sont nombreux et de différents ordres. Ils sont à la base de la justesse des différentes mesures internes et externes à la machine, l'utilisation de triggers et de séquenceurs sont indispensables. On développe alors ce que l'on appelle une machine spéciale temps réel.
  •  L'utilisation d'algorithmes spécifiques: ces algorithmes créent la valeur ajoutée du prestataire de machine spéciale. Ce sont des algorithmes pour des calculs/mesures spécifiques 4D (espace/temps), ou des algorithmes complexes pour la mise en oeuvre des synchronismes indispensables à ces calculs.
  • Développement d'une interface machine: si cette étape semble la plus aisée, elle peut rapidement devenir un cauchemar pour les créateurs de la machine spéciale: souvent mal définie avec le client, l'interface doit être constamment modifiée ou enrichie suivant les exigences de ce dernier. Elle est aussi souvent utilisée pour permettre des paramétrages machines: calibration ou diagnostique machine.
Si le développement des différentes briques mécatroniques, des briques capteurs et des briques software peuvent être développées par un seul ingénieur, l'enjeu, comme nous l'avons déjà mentionné, c'est la réutilisation par d'autres ingénieurs de ces briques pour de futures machines ou pour la maintenance et l'upgrade de machines existantes.

Pour éviter de développer tous ces éléments software avec des logiciels spécialisés (Labview, Matlab, MVtec Halcon,...), la tentation est grande d'utiliser un langage universel, compilé comme le C++: rapidité d'éxécution, SDK/API des briques hardware disponibles, bibliothèques nombreuses (boost, opencv, qt,...).
La difficulté avec le C, est la modularité logiciel: développer un code mono-bloc est plus rapide mais dangereuse,  la création de DLL pourrait être une solution mais elle n'est pas à la portée de tous les ingénieurs et difficilement maintenable. Utiliser le C/C++ comme langage proche du code machine est intéressant dans le monde de l'embarqué, pour définir un produit mais pas pour développer un prototype, ce qu'est, par définition, une machine spéciale. Si le code C/C++ permet une vitesse d’exécution souvent inégalée, quel est le pourcentage du code d'une machine spéciale qui a réellement besoin de cette vitesse d'éxécution: l'interface? l'actionneurs de led/relais? le récupérateur de données sur une liaison série à 9600 bauds? l'écriture des résultats sur un réseau ou un disque?...

Pour éviter un développement mono-bloc ou 'spaghetti' via un langage compilé ou propriétaire, souvent indigeste pour les ingénieurs ou techniciens susceptibles de maintenir les blocs software de la machine, la solution serait d'utiliser un langage facile à apprendre, non propriétaire, non compilé, modulaire, et pouvant piloter l'ensemble des briques internes et externes du système à concevoir sans oublier l'interface machine et le synchronisme machine.

Ce langage n'est pas nouveau, c'est le langage python, conçu par Guido van Rossum en 1991, il est, à l'origine, destiné à simplifier l'accès aux commandes complexes d'un OS. Au cours des années, ce langage de script est adopté par tous les scientifiques et les personnes désirant créer un prototype logiciel très rapidement.

Ce langage répond aux objectifs de la création et de la maintenance d'un système complexe: langage facile à prendre en main, non compilé, modulaire, riche et orienté objet, mais il devient très limité lorsqu'il doit opérer dans le domaine du temps réel: accès limité et très haut niveau des entrées et sorties d'un PC et utilisation de python sur carte embarquée quasi impossible.

Si Python est approprié dans pratiquement tous les secteurs de développements software d'une machine spéciale/vision: GUI, algorithmes scientifiques et mathématiques, multitâche, réseaux, graphique,...; si Python est l'idéal pour  un développement rapide (Agile, Scrum, XP, ...), pour créer des suites de tests (unittest), et pour générer différents threads et/ou embarquer un interpréteur Python; Python sera limité dans l'accès au matériel hardware et peinera dans le domaine des synchronismes évoqués précédemment.

Python4D vous propose de répondre au limitation du langage python dans le domaine particulier des machines de vision et des machines uniques de contrôle industriel. Python4D vous propose d'intégrer une brique hardware ou de mettre en œuvre un système robuste de synchronisation du système final:
  • Développement de wrapper python pour des éléments harware particuliers avec les méthodes ctypes ou l'utilisation de Cython .
  • Développement sous IPython pour le développement multitâche : GUI, interpréteur Python, thread pour différentes briques externes ou internes du système.
  • Développement de synchronismes indépendants, bas-niveau, pour la cohérence des données entre différents capteurs ou élément mécatroniques.

Python4D accompagne vos équipes de développement dans l'utilisation "industrielle" du langage:
  • Formation sur le langage: l'utilisation du python dans le monde industriel est répandu mais souvent confidentiel. Il est pourtant à la portée de n'importe quel technicien/ingénieur non informaticien.
  • Formation sur des modules spécifiques: Python est un langage ouvert, très documenté et open-source. Le revers de la médaille est de trouver la meilleure librairie pour l'utilisation d'un port ethernet ou série, la meilleure librairie pour du calcul statistique ou traitement image, le meilleur IDE, outil de développement GUI, framework web... Grâce à l'expérience de Python4D, vos équipes R&D seront rapidement où trouver toutes ces pépites du langage Python.
  • Formation sur le portage de vos librairies C/C++. Dans l'esprit open-source, Python4D vous propose de former vos équipes d'ingénieurs R&D à développer eux-même des wrappers python de vos DLL C/C++ et ainsi permettre l'utilisation aisée d’éléments hardware ou software de vos systèmes et machines spéciales.


Aucun commentaire:

Enregistrer un commentaire