Création d’un robot autonome pour l’exploration et la mesure de surfaces

Récemment, notre département en Intelligence Artificielle a livré une preuve de concept d’un robot autonome utilisé pour explorer et cartographier des espaces industriels et résidentiels inconnus tout en identifiant les différents types de sols.

Le robot (à l’exception de son châssis Roomba) est entièrement construit à partir de composants matériels et logiciels open-source (OS). Le résultat est un mélange d’algorithmes génétiques et de réseaux de neurones qui permettent au robot de cartographier, d’étudier et de mesurer de façon autonome des espaces intérieurs / extérieurs non-triviaux.

Dans un cas d’utilisation industrielle, l’équipe a présenté une démonstration où le robot est utilisé par une entreprise de nettoyage fictive afin d’optimiser ses coûts. Le robot est alors placé dans un entrepôt fictif où il explore les surfaces après les heures de travail. Ensuite, il envoie un rapport détaillé à la société de nettoyage avec une carte des différentes zones, sections et types de sols. Ce rapport aide l’entreprise de nettoyage à facturer efficacement son client dans le cadre d’un contrat de maintenance régulier et à ainsi réduire le facteur humain d’une partie de son processus d’acquisition de clients, optimisant ainsi les coûts.

Le projet en est encore à ses débuts et nous sommes convaincus que de nombreux cas d’utilisations seront découverts tout au long du processus de développement  par exemple en ajoutant la possibilité d’explorer les espaces extérieurs.

Même si la nouveauté réside principalement dans la partie logicielle, notre équipe IA a baptisé leur robot, SMOB – abréviation de Self-Maping Open Bot.

Création d'un robot autonome pour l'exploration et la mesure de surfaces, un projet R&D en Intelligence Artificielle
Le SMOB en action, surveillant et cartographiant les bureaux de Savoir-faire Linux

Comment fonctionne le SMOB ?

Le projet est un mélange unique de conception matérielle et logicielle. Comme le robot devait être résistant aux collisions avec des objets et devait pouvoir voyager à une vitesse raisonnable, utiliser l’ensemble du kit TurtleBot n’était pas une option dans de telles conditions. L’équipe a résolu le problème en associant la base Roomba Create (qui convient bien aux opérations lourdes) à l’IMU (Inertial Measurement Unit – Navigation inertielle), au LIDAR (LIght Detection And Ranging – Détection et estimation de la distance par la lumière) et au Raspberry Pi3 du kit TurtleBot 3 DIY. Afin d’atteindre les latences requises pour des opérations fluides, l’équipe a également modifié le noyau Debian pour prendre en charge le jeu d’instructions 64-bits disponible sur le processeur ARMv9 (les modifications étaient basées sur le projet PI64).

Les algorithmes de SMOB

SMOB combine deux techniques différentes pour atteindre ses objectifs : En premier lieu, l’algorithme de découverte spatiale est une implémentation de l’algorithme génétique proposé par Mohamed Amine Yakoubi et Mohamed Tayeb Larski. L’algorithme est réalisé en Python afin de pouvoir travailler avec le framework ROS, qui alimente les mouvements du robot.
La partie la plus complexe a été la réalisation du réseau neuronal convulsif, qui est responsable de la classification des types de sols. Le principal défi était d’identifier correctement les propriétés d’une image (netteté, luminosité, taille, position de la caméra, etc.) afin que le réseau soit le plus efficace possible – une recherche qui a nécessité de nombreux essais et erreurs.

Résultats de tests

Nos expériences montrent une performance de couverture d’environ 1m^2 par minute pour un robot à bas coût (environ 600 USD).

Qu’est-ce qui fait de SMOB un robot unique?

SMOB est unique, car il fait partie des premières expérimentations où un robot exécute plusieurs tâches complexes sur du matériel embarqué. On peut affirmer avec certitude que la conduite automatisée utilise déjà des algorithmes qui sont très en avance sur ce que SMOB peut faire, mais ils sont aussi beaucoup plus complexes que les solutions de base et à faible coût de traitement de SMOB. Le robot SMOB se base sur le minimalisme – il est question d’une tentative de créer des solutions simples à des problèmes qui sont actuellement résolus par beaucoup plus de puissance et par des algorithmes qui demandent beaucoup plus de mémoire.

L’avenir de SMOB dans le domaine de la robotique

L’un des plus grands défis en amont de ce projet comprend le traitement des opérations extérieures liées aux capteurs LIDAR et les problèmes qui y sont associés. LIDAR – un appareil qui cartographie des objets en 3-D en faisant rebondir les faisceaux laser hors de son environnement réel – est l’un des composants les plus cruciaux et les plus litigieux de tout véhicule (dans ce cas, le SMOB) qui est censé se conduire (Lire par exemple: Simonite, 2017). Le LIDAR de SMOB est incapable d’identifier le verre. Il a également des difficultés dans la détection de fermetures de boucles et à naviguer sur des surfaces complexes. Par exemple, un SMOB conçu pour détecter des nids de poule à l’extérieur aurait très probablement besoin d’un châssis et d’un système de propulsion différents, mais devrait être aussi capable de détecter les nids de poule avant de les atteindre; sinon, il ne sera peut-être pas capable d’en sortir une fois piégé à l’intérieur.

Références
Simonite, T. (2017, March 20). Self-Driving Cars’ Spinning-Laser Problem. MIT Technology Review.

Retours sur le DrupalCamp 2018 de Montréal

En juin dernier, Savoir-faire Linux a participé à la 10ᵉ édition du DrupalCamp Montréal, qui a eu lieu à l’Université Concordia. Ce fût l’occasion de voir une bonne partie de la communauté de développeurs Drupal montréalaise, d’échanger avec les autres entreprises qui travaillent avec cette technologie et de faire l’état de l’évolution de Drupal de cette dernière année et à l’avenir.

Voici quelques retours des sessions du DrupalCamp écrit par notre développeur senior Drupal, Maxime Turcotte :

Migrez en un, migrez les tous : Migrons ensemble vers Drupal 8

Avec les avantages qu’offre Drupal 8 comparativement à Drupal 7, en particulier au niveau du support multilingue, de plus en plus de sites font la migration vers la dernière version et ce, malgré certains obstacles. Par exemple, bien que l’API du système de migration ait été depuis peu stabilisée, les migrations des traductions de contenus ne sont pas encore totalement supportées.

En plus de fournir un excellent aperçu du processus de migration et de la création de migrations personnalisées, cette présentation apporte des solutions et des exemples pour ceux et celles qui cherchent à migrer leurs sites multilingues de Drupal 7 à Drupal 8.

Besoin d’héberger des sites Drupal ? Utilisez Aegir !

Que ce soit pour un seul site ou pour une plate-forme multi-site, si vous aimez bâtir votre propre infrastructure avec des solutions libres et gérer vos sites à l’aide d’une interface web ou d’un outil en ligne de commande, Aegir est pour vous.

Dans cette présentation, on apprend les raisons historiques qui ont fait naître un système comme Aegir, les défis architecturaux, les problèmes actuels de cette architecture, quelques conseils et idées pour des situations courantes, les projets de refonte et d’amélioration des versions à venir et bien d’autre choses.

Ce que j’ai appris depuis 10 ans en gérant une boutique Drupal

Diriger une entreprise de services dans un milieu compétitif et en constante transformation comme le Web est très difficile. Quoi de mieux que de bénéficier de l’expérience accumulée par deux professionnels qui ont démarré leur entreprise Drupal il y 10 ans?

Tout le monde fait des erreurs et il y en aura toujours d’autres à faire, c’est une des leçons de cette présentation. Le risque est bien sûr nécessaire pour réussir dans ce domaine, mais la gestion du risque est ce qui différencie parfois ceux et celles qui réussissent des autres qui échouent. Que ce soit dans la recherche et le développement, dans le choix des contrats que l’on courtise ou dans les dépenses que l’on accepte ou refuse de faire, il faut être capable de prévoir si le risque en vaut la peine.

Mais outre le risque et la compétition, la collaboration et l’implication dans la communauté est ce qui semble rester le plus important pour ces deux chefs d’entreprise.

Les push notifications dans le logiciel de communication Ring

Les push notifications dans le logiciel de communication Ring

Essentielles aux applications de messagerie, de courriels ou tout autre type de communication, les push notifications sont maintenant disponibles pour Ring dans ses versions Android et iOS. Retour sur l’ajout de cette nouvelle fonctionnalité permettant d’informer l’utilisateur de nouveaux messages ou appels lorsque son téléphone intelligent est en veille.

Pour plus de détails, rendez-vous sur : https://ring.cx/fr/nouvelles

 

Comment concevoir un thème personnalisé et léger sous Liferay ?

Cet article survient suite à la réalisation, par notre équipe Plateformes d’intégration et Intelligence Artificielle, d’un site informationnel pour l’un de nos clients, une grande entreprise canadienne de télécommunication et de médias, en utilisant Liferay 7 (la dernière version du portail Liferay).

Alexis, développeur front-end, vous partage son expérience sur ce projet afin de vous expliquer comment il est possible de créer un thème léger et rapide à charger avec Liferay.

En 2015, nous avons découvert le site de Bugaboo, réalisé sous Liferay 6.2. Une chose nous a surpris : l’absence des librairies front-end du thème Liferay.
Depuis l’idée a fait son chemin et un mandat similaire est arrivé à Savoir-faire Linux : Réaliser le site web informationnel d’une grande entreprise canadienne de télécommunications et média, avec Liferay.

Avant toute chose, nous devons nous accorder sur un point, la vitesse de chargement d’un site web est un élément déterminant de la rétention des utilisateurs : après 3 secondes [de chargement], jusqu’à 40% d’entre eux vont quitter le site » (Gomez Inc., 2010, en anglais). Pour plus d’informations, voir Lara Callender Hogan (en anglais).

Liferay n’est pas en soi une solution technique qui peut répondre à tous les besoins. Il est tout à fait possible de faire des sites web avec, mais malheureusement la méthode « recommandée », c’est-à-dire étendre le thème Liferay par défaut, aurait été un échec technique pour le site informationnel de notre client à cause d’un allongement considérable du temps de chargement. C’est alors que, basé sur nos expériences avec nos précédents projets, il a été choisi d’adapter en profondeur le thème Liferay afin de pouvoir répondre aux besoins précis de notre client. Dans ce qui va suivre, nous partageons avec vous notre retour et nos résultats.

Le portail Liferay, un outil puissant qui a besoin d’accompagnement

Liferay est un gestionnaire de contenu (CMS) et un portail écrit en Java fournissant de nombreuses fonctionnalités spécifiques aux développeurs comme une gestion avancée des utilisateurs, des droits d’accès, des documents, etc. Dans notre cas, en tant que société de services, nous avons la possibilité de l’adapter autant que nous le voulons aux besoins de nos clients. Par contre, étant pensé pour être un portail modulaire, il y a quelques défauts liés aux thèmes et aux performances à considérer avant de concevoir un site web avec. En voici la liste :

  • Le thème de base de Liferay charge par défaut toutes les librairies front-end ainsi que l’ensemble des styles que Liferay et ses portlets ont besoin. Cependant, une grande partie du code et des dépendances s’avère inutile pour un visiteur non-connecté (soit la majorité de nos utilisateurs dans le cadre de ce projet). De nombreux problèmes de performance apparaissent donc à cause de cette surcharge inutile de code.
  • Liferay impose la présence de son Design Language, Lexicon (ou plutôt, sa seule implémentation: Clay). Cela provoque également plusieurs problèmes :
    • Manque de correspondance entre le Design Language et les besoins visuels requis pour ce projet, limitant grandement les designs réalisables et ou en compliquant grandement la personnalisation,
    • Conflits au sein des règles CSS, augmentant le temps de développement,
    • Les mises à jour et corrections du thème de base de Liferay peuvent briser les styles développés provoquant alors une augmentation significative du temps de maintenance,
    • L’administration des contenus étant à même les pages, les styles développés peuvent briser le comportement des styles d’administration participant aussi à l’augmentation du temps de développement et de maintenance.

Comment alors réaliser un thème léger sous Liferay ?

La solution pour bénéficier de la puissance de Liferay tout en gardant le contrôle de la vitesse de chargement des pages est de créer un thème léger ne contenant aucune des librairies Liferay front-end comme senna.js, AlloyUi, Lexicon/Clay, etc.

Cependant, dans Liferay 7, ce n’est pas aussi facile que cela n’y paraît, notamment dû à l’impossibilité d’avoir une vue d’administration (indépendante) pour le site. Pour échapper à cela, nos fantastiques développeurs back-end de l’équipe ont développé un module, le « Theme Switcher », qui permet de forcer l’affichage d’un thème en fonction du rôle d’un utilisateur. Dans notre cas, cela nous permet d’afficher un thème classique Liferay uniquement aux administrateurs du site. Voici le lien vers le GitHub du « Theme Switcher » : savoirfairelinux/liferay-theme-switcher

5 étapes pour la mise en place d’un thème léger sous Liferay

Un exemple de thème léger pour Liferay disponible sur notre GitHub : savoirfairelinux/lightweight-liferay-theme. Ce thème utilise une architecture Maven, mais libre à vous de le modifier.

Étape 1 – Nettoyage du thème

Retirez les inclusions du fichier portal_normal.ftl, principalement: <@liferay_util["include"] page=top_head_include />. Mais aussi <@liferay_util["include"] page=body_top_include /> et j’en passe…

Étape 2 – Réparation du thème

Malheureusement la variable top_head_include ne contient pas que les librairies CSS et javascript de Liferay, mais aussi beaucoup d’autres choses. Il est donc nécessaire de ré-inclure les balises du head qui nous intéressent.

Par exemple,

  • Les meta-tags que l’utilisateur peut définir dans chaque pages (keywords, description, etc…):

<@liferay_theme["meta-tags"] />

  • La définition des urls canoniques:
<#if !is_signed_in && layout.isPublicLayout() > 
  <#assign completeURL = portalUtil.getCurrentCompleteURL(request) > 
  <#assign canonicalURL = portalUtil.getCanonicalURL(completeURL, themeDisplay, layout) > 

  <link href="${htmlUtil.escapeAttribute(canonicalURL)}" rel="canonical" /> 

  <#assign availableLocales = languageUtil.getAvailableLocales(themeDisplay.getSiteGroupId()) > 

  <#if availableLocales?size gt 1 > 
    <#list availableLocales as availableLocale> 
      <#if availableLocale == localeUtil.getDefault() > 
        <link href="${htmlUtil.escapeAttribute(canonicalURL) }" hreflang="x-default" rel="alternate" /> 
      </#if> 
      <link href="${htmlUtil.escapeAttribute(portalUtil.getAlternateURL(canonicalURL, themeDisplay, availableLocale, layout)) }" hreflang="${localeUtil.toW3cLanguageId(availableLocale)}" rel="alternate" /> 
  </#list> 
  </#if> 
</#if> 

Pour savoir quoi aller chercher, et comment, basez-vous sur la jsp qui est utilisée pour générer la variable top_head_include : https://github.com/liferay/liferay-portal/blob/7.0.x/portal-web/docroot/html/common/themes/top_head.jsp

Étape 3 – Organisation

Un des problèmes, et vous l’aurez peut-être deviné : les tâches liferay-theme-tasks fonctionneront difficilement.

Cependant, bonne nouvelle : Vous pouvez organiser votre futur thème de la manière dont vous le souhaiter et selon les standards de développement de votre équipe (sass, less, es6, etc.). Dans le cas de notre client, nous avons utilisé et agrémenté le gulpfile habituel pour nos projets web. Le tout chapeauté par Maven et des modules front-end.

Étape 4 – Automatisation du déploiement du thème léger

Cette partie a été la plus longue, je vous avoue, mais elle vous est maintenant disponible clé en main, dans la tâche gulp ‘deployLocal:syncTheme’ du thème d’exemple !

Il s’agit de la mise en place d’un déploiement « live » des fichiers du thème.

D’un point de vue global, le but est de ne pas avoir à compiler ni à attendre le déploiement du thème pour chaque modification de CSS ou de javascript (fonctionnalité normalement présente dans les liferay-theme-tasks). Dans le contexte OSGI de Liferay 7, il n’est pas facile d’accéder directement aux fichiers du thème (CSS, javascript, templates, etc.).

L’idée est alors de modifier la manière dont le thème est déployé dans OSGI, en le faisant pointer non pas vers le fichier .war du thème compilé (en mode webbundle, celui par défaut), mais plutôt vers le dossier extrait de ce .war (en mode webbundledir).

Étape 5 – Profitez

Vous avez maintenant un thème Liferay, qui contient uniquement ce que vous désirez pour votre projet, et qui est déployable comme n’importe quel autre thème Liferay.

Tests et résultats

Dans le but d’évaluer les avantages en terme de performances de la mise en place d’un thème léger, vous pouvez lancer un test, sur une même page avec le même contenu, avec 3 cas possibles de choix de thème. De notre côté, nous avons lancé ces tests sur un serveur Liferay configuré pour la production avec 8 CPU, 28Go de RAM et un disque SSD. Ci-dessous les 3 cas pour lesquels nous avons lancé le test.

Les 3 cas possibles de choix de thème

  1. Utilisation d’un thème vanille de Liferay, un thème classique
  2. Utilisation du thème léger que nous avons développé pour le site informationnel de notre client
  3. Utilisation du thème classique avec l’ajout des styles CSS et javascript du thème que nous avons développé pour notre client

Pour réaliser les mesures, nous avons utilisé une instance locale de speedtest.io (6.0.3) avec Chrome 62. Pour chacun des cas, 10 appels ont été réalisés. Ci-dessous un résumé des résultats :

Résultat du cas 1 : Le thème classique de Liferay

  • 52 requests
  • 1064.77 kb
  • DOMContentLoaded : 1.24s (±31.95ms)
  • Chargement : 2.06s (±52.89ms)
  • speedIndex : 1349 (±34.99)

Nous considérons ces résultats comme corrects car ils se trouvent dans la moyenne que l’on peut trouver actuellement sur le web. Néanmoins, il y a tout de même un grand nombre de requêtes, dépassant le seuil des 40, habituellement recommandé.

Résultat du cas 2 : Le thème léger

  • 37 requests
  • 800.38 kb
  • DOMContentLoaded : 588ms (±42.96ms)
  • Chargement : 1.17s (±55.17ms)
  • speedIndex : 863 (±39.57)

Moins de requêtes, une page plus légère, ce thème personnalisé est plus performant que le thème classique de Liferay !

Résultat du cas 3 : Le thème classique avec les CSS et javascript du thème léger de notre client

  • 56 requests
  • 1214.59 kb,
  • DOMContentLoaded: 2.22s (±457.34ms),
  • Load: 2.97s (±458.11ms)
  • speedIndex: 2475 (±456.71)

Ce résultat est très important, car il s’agit d’un cas qui pourrait être réel. Un thème Liferay, avec un visuel complètement personnalisé mais plus que deux fois plus lent à charger…

Conclusion

Dans l’ensemble, cette expérience fut instructive et nous a fourni, ainsi qu’à notre client, des résultats à la hauteur de nos espérances.

Néanmoins, la mise en place d’un thème léger ne peut pas s’appliquer pour n’importe quel type de site web et devenir une solution unique pour vos projets web. De plus, avec cette méthode, certaines fonctionnalités (front-end) de plusieurs Portlet Liferay se trouvent inaccessibles.

 

Que retenir du FOSDEM 2018 ?

Les 3 et 4 février derniers, 2 membres de l’équipe de développement de Ring ont participé au FOSDEM 2018 à Bruxelles. Événement européen majeur pour les développeurs de logiciels libres et à code ouvert, le FOSDEM (Free and Open Source Software Developers’ European Meeting) se tient depuis 2000 en fin de semaine début février à l’Université Libre de Bruxelles. Sébastien B., développeur sur le projet Ring, nous propose son retour sur les faits marquants et découvertes à suivre dans le monde du logiciel libre.

Public lors du FOSDEM

Cette année fut ma première fois au FOSDEM ! Arrivé quelques jours avant, j’en ai profité pour visiter cette belle capitale européenne qu’est Bruxelles avant de me plonger dans 2 jours de conférences et de rencontres.

Éléments à retenir du FOSDEM 2018

Lors du FOSDEM, il est possible de rencontrer de nombreuses personnes, d’assister à un grand nombre de conférences, mais aussi de voir d’innombrables stands de projets libres et à code ouvert. De mon côté, je devais présenter 2 conférences au sujet de Ring et d’OpenDHT avec Adrien B., mais aussi rencontrer certaines personnes que je ne peux pas voir le reste de l’année. De ce fait, je n’ai pas pu voir autant de conférences que je voulais, néanmoins, voici un retour sur les conférences auxquelles j’ai pu participer :

À ce jour, je suis toujours en attente des vidéos de ces conférences :

J’ai vraiment envie de voir ces projets émerger !

Autres nouvelles

Également lors du FOSDEM, de nombreux stands étaient présents dans le bâtiment K : l’une des meilleures places pour découvrir de nouveaux projets, des nouveautés sur des projets existants mais aussi pour rencontrer des gens. Voici ce que j’ai découvert à cet endroit :

  • La version 3.0 de Godot est en ligne !
  • VLC 3.0 arrive bientôt !
  • Krita est maintenant compatible avec des scripts Python
  • GitMate.io, que je vais bientôt essayer

J’ai aussi découvert d’autres nouveautés sur les projets Fedora, Mozilla, Qubes OS, Nextcloud, SecureDrop, Tor, etc.

Mes conférences

Lors de cette fin de semaine bruxelloise, j’ai eu la chance de donner 2 conférences avec Adrien B :

Ring comme plateforme de communication libre, universelle et distribuée

Une conférence concernant l’état de Ring en 2018. La vidéo se trouve ici, les diapositives ici et les sources de Ring ici.

OpenDHT : faites de votre projet un projet distribué

Une conférence concernant OpenDHT. Lors de cette conférence, j’ai principalement abordé la fonctionnalité proxy et le support des push notifications. La vidéo est à cette adresse : https://fosdem.org/2018/schedule/event/opendht/

C’était la première fois que je donnais des conférences en anglais devant plus de 200 personnes. Et c’était … impressionnant ! Le public était réceptif, les questions précises et ont donné des discussions intéressantes à la suite des conférences.

Remerciements

Premièrement, merci à Savoir-faire Linux de m’avoir donné l’opportunité de donner des conférences au FOSDEM. Et merci également à l’équipe du FOSDEM, l’organisation était juste impressionnante (environ 10 000 personnes présentes, le matériel à gérer, les vidéos à publier rapidement [un jour après, des centaines de vidéos sont disponibles]). J’ai aidé à organiser quelques événements et je sais comment cela peut être difficile, mais WOW !

Le seul retour négatif que je peux avoir serait peut-être un manque de diversité ? En tout cas, j’espère que je pourrais être présent lors de la prochaine édition.