[PYTHON] Tutoriel Pepper (5): Utilisation d'une tablette

Contenu de ce tutoriel

Dans ce didacticiel, nous expliquerons comment utiliser les boîtes fournies par la bibliothèque de boîtes à tablettes comme méthode de contrôle de la tablette thoracique, qui est une fonctionnalité de Pepper.

  1. Spécifications de la tablette
  2. Panneau de contenu du projet
  3. Comment utiliser la boîte: afficher le contenu
  4. Comment utiliser la boîte: obtenez l'événement tactile

Notez que ** Virtual Robot ne prend pas en charge les services de la tablette et entraînera une erreur **, mais dans ce tutoriel, le contenu de la boîte écrite en Python sera utilisé pour analyser ce que fait la boîte liée à la tablette. Il explique également comment voir, donc si vous êtes intéressé, faites-le.

Spécifications de la tablette

Les principales spécifications de la tablette de Pepper sont les suivantes.

article Contenu
afficher 10.1 pouce
résolution 1280 x 800
Format de fichier multimédia AVI, WMV, ASF, MP4, MKV, MPG, DAT, TS, TP, TRP, 3GP
Codec vidéo DivX, XviD, H.264, WMV 9/8/7, MPEG1
Résolution vidéo Max 1920x1080
Un codec audio MPEG1 Layer 1/2/3, WMA, OGG Vorbis, PCM, FLAC

En plus des sorties telles que l'affichage d'images et de vidéos, il est possible d'acquérir des événements tactiles et de les refléter dans le comportement.

Panneau de contenu du projet

Afin d'afficher le contenu sur la tablette, le contenu que vous souhaitez afficher doit être importé au préalable dans le projet. À ce stade, il est nécessaire de comprendre le panneau ** contenu du projet **, je vais donc l'expliquer en détail ici.

project-content.png

  1. Fichier de projet ... Un fichier inclus dans le projet. Peut être hiérarchisé par répertoire et les fichiers peuvent être déplacés en faisant glisser
  2. Ajouter un fichier / répertoire ... Ajoutez un élément à votre fichier de projet. Le menu suivant apparaîtra
  1. Supprimer le fichier / répertoire sélectionné

Pour la sortie de contenu sur une tablette, ** préparez un répertoire html dans le fichier de projet pour les images et les vidéos **, et placez-y les fichiers que vous souhaitez afficher. Aussi, du côté de la boîte qui fait référence à ces fichiers, le fichier sera spécifié par le chemin ** à partir du répertoire ** html. Les détails de la méthode de fonctionnement seront expliqués dans le tutoriel.

Comment utiliser la boîte: afficher le contenu

Sortie d'image

Tout d'abord, affichons facilement l'image sur la tablette de Pepper. Veuillez préparer un fichier image approprié dans l'un des formats PNG, JPEG et GIF et effectuer le travail.

Essayer de faire

  1. Préparation de la boîte à utiliser ... Utilisez la boîte sur l'onglet de la tablette
    • tablet > Show Image
  2. Connectez les boîtes show-image.png
  1. Créez un répertoire html pour votre tablette Cliquez sur le bouton Ajouter dans le panneau de contenu du projet, puis sur ** Créer un répertoire ... ** create-html-directory.png La création du nom en html crée un répertoire html en tant que fichier de projet new-html-directory.png

  2. Importez l'image ** Cliquez sur Importer un fichier ... ** pour ouvrir la boîte de dialogue de sélection de fichier. Lorsque vous sélectionnez le fichier image que vous souhaitez afficher, le fichier image sera enregistré en tant que fichier projet. add-image.png

  3. Faites glisser le fichier image et déplacez-le dans le répertoire html move-image.png Le fichier image est maintenant prêt à être visualisé sur votre tablette.

  4. Cliquez sur le bouton de paramètre dans la zone Afficher l'image et entrez le nom du fichier image dans ImageUrl show-image-params.png Cette valeur est une représentation de chemin à partir du répertoire html.

  5. ** [Magic] ** Déplacer le comportement hors du répertoire Comme astuce pour faire fonctionner Show Image, changez la position du comportement (enregistré dans le fichier behavior_1 / behavior.xar après la création d'un nouveau projet). Faites glisser behavior.xar hors du répertoire behavior_1 et déplacez-le vers le niveau supérieur du fichier projet, comme illustré ci-dessous. move-behavior.png J'expliquerai pourquoi c'est magique en explorant comment Show Image est réalisé.

Vous disposez désormais d'une application qui affiche des images sur votre tablette.

Contrôle de fonctionnement

Pour vérifier l'opération, connectez-vous à Pepper et jouez.

Dans le cas d'un robot virtuel, la zone Afficher l'image devient rouge pour indiquer une erreur et le message d'erreur suivant s'affiche dans la vue du journal.

[ERROR] behavior.box :_getTabletService:20 _Behavior__lastUploadedChoregrapheBehavior1798150472__root__ShowImage_13: Cannot find service 'ALTabletService' in index
[WARN ] behavior.box :onInput_onStart:58 _Behavior__lastUploadedChoregrapheBehavior1798150472__root__ShowImage_13: No ALTabletService, can't display the image.

(Supplément) Voyons l'implémentation de Show Image box

Un moyen rapide de découvrir la raison magique de behavior.xar est de regarder la zone Afficher l'image. La boîte Afficher l'image est une ** boîte Python **, donc contrairement à la boîte de diagramme de flux et à la boîte de chronologie, un double-clic sur la boîte ouvre l'éditeur de script.

script-editor.png

Jetons un coup d'œil au contenu du code. De ce code, le code suivant est appelé par onStart.

    def onInput_onStart(self):
        # We create TabletService here in order to avoid
        # problems with connections and disconnections of the tablet during the life of the application
        tabletService = self._getTabletService()
        if tabletService:
            try:
                url = self.getParameter("ImageUrl")
                if url == '':
                    self.logger.error("URL of the image is empty")
                if not url.startswith('http'):
                    url = self._getAbsoluteUrl(url)
                tabletService.showImage(url)
            except Exception as err:
                self.logger.error("Error during ShowImage : %s " % err)
                self.onStopped()
        else:
            self.logger.warning("No ALTabletService, can't display the image.")
            self.onStopped()

Dans le robot virtuel, le ALTabletService à acquérir dans ce self._getTabletService () est introuvable et une erreur se produit.

En passant, ce qui est lié à la magie est cette partie self._getAbsoluteUrl (url) qui convertit le chemin en URL absolue. En regardant plus loin,

    def _getAppName(self):
        import os
        if self.frameManager:
            behaviorPath = os.path.normpath(self.frameManager.getBehaviorPath(self.behaviorId))
            appsFolderFragment = os.path.join("PackageManager", "apps")
            if not (appsFolderFragment in behaviorPath):
                self.logger.error("appsFolderFragment is not in behaviorPath")
            fragment = behaviorPath.split(appsFolderFragment, 1)[1]
            return fragment.lstrip("\\/")
        else:
            self.logger.warning("No ALFrameManager")

    def _getAbsoluteUrl(self, partial_url):
        import os
        subPath = os.path.join(self._getAppName(), os.path.normpath(partial_url).lstrip("\\/"))
        # We create TabletService here in order to avoid
        # problems with connections and disconnections of the tablet during the life of the application
        return "http://%s/apps/%s" %(self._getTabletService().robotIp(), subPath.replace(os.path.sep, "/"))

Dans le processus de génération de l'URL pour instruire la tablette, le chemin du comportement auquel appartient la boîte Afficher l'image est utilisé, qui est obtenu par self.frameManager.getBehaviorPath (self.behaviorId). Si le comportement n'est pas en haut du fichier de projet, l'URL supposée ici ne peut pas être obtenue et l'affichage de l'image échouera.

En plus de repositionner le comportement, vous pouvez également insérer le code suivant dans le code Python dans la zone Afficher l'image pour contourner ce problème.

    def _getAppName(self):
        import os
        if self.frameManager:
            behaviorPath = os.path.normpath(self.frameManager.getBehaviorPath(self.behaviorId))
            appsFolderFragment = os.path.join("PackageManager", "apps")
            if not (appsFolderFragment in behaviorPath):
                self.logger.error("appsFolderFragment is not in behaviorPath")
            fragment = behaviorPath.split(appsFolderFragment, 1)[1]
            #Ajoutez la ligne suivante
            fragment = fragment.split('/')[1]
            return fragment.lstrip("\\/")
        else:
            self.logger.warning("No ALFrameManager")

De cette façon, vous pouvez vérifier le contenu de la boîte Python pour approfondir votre compréhension de la boîte, ajouter le code de sortie du journal et apporter d'autres modifications.

Sortie vidéo

Vous pouvez également lire le fichier vidéo de la même manière que le fichier image. Il prend en charge mp4 et mov.

Essayer de faire

  1. Préparation de la boîte à utiliser ... Utilisez la boîte sur l'onglet de la tablette
    • tablet > Play Video
  2. Connectez les boîtes play-video-flow.png
  1. Créez un répertoire html et importez le fichier vidéo import-movie.png
  1. Définissez le chemin d'accès au fichier vidéo dans le paramètre de la zone Lire la vidéo. play-video-props.png

  2. ** [Magic] ** Déplacer le comportement hors du répertoire Comme pour le fichier image, nous effectuerons également la magie

Vous pouvez maintenant avoir une application qui lit la vidéo et met fin au comportement une fois la lecture terminée.

Contrôle de fonctionnement

Connectez-vous à Pepper et essayez de jouer. La vidéo doit être lue sur votre tablette.

La boîte de lecture vidéo a également des entrées telles que onPauseVideo (pause) et onResumeVideo (reprendre), par exemple, elle continue de lire la vidéo uniquement lorsqu'il est jugé qu'il y a une personne devant vous et arrête la vidéo lorsqu'il n'y a plus de personnes. Cela peut être intéressant de le faire.

Comment utiliser la boîte: obtenir des événements tactiles

Il est également possible de traiter avec un événement tactile pour la tablette. Ici, disons "oui" lorsque la tablette est touchée.

Essayer de faire

  1. Préparation de la boîte à utiliser
  1. Connectez les boîtes tablet-flow.png

  2. Définissez les paramètres touch-params.png

  1. Personnalisez la boîte Say touch-say.png

Vous pouvez maintenant exécuter la zone Say lorsque vous le touchez.

Contrôle de fonctionnement

Essayez de vous connecter à Pepper, de jouer et de toucher votre tablette. Dites «oui» et vous réussissez.

La sortie onTouched reçoit des informations sur les coordonnées touchées. Il pourrait être intéressant de pouvoir changer le comportement de Pepper avec ces informations.

Les comprimés sont un élément très puissant dans la présentation des informations de Pepper aux humains. En plus des images et des vidéos répertoriées ici, vous pouvez effectuer diverses actions telles que l'affichage de fichiers HTML.

Recommended Posts

Tutoriel Pepper (5): Utilisation d'une tablette
Tutoriel Pepper (7): Reconnaissance d'image
Apprenez librosa avec un tutoriel 1
[Tutoriel PyTorch ④] FORMATION D'UN CLASSIFICATEUR
Utiliser une imprimante avec Debian 10
Un mémorandum d'utilisation de eigen3
[Tutoriel] Créez un extracteur d'expressions unique en 30 minutes à l'aide de l'apprentissage automatique
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
Générer une image Docker à l'aide de Fabric
Un mémorandum lors de l'utilisation d'une belle soupe
Créer une application Web avec Flask ②
J'ai fait un Line-bot avec Python!
Apprenez Zundokokiyoshi en utilisant un simple RNN
Créer une interface graphique python à l'aide de tkinter
Créer une boîte à Tweet pour Pepper
Dessiner une courbe Silverstone en utilisant Python
Créer un outil de reconnaissance de visage à l'aide de TensorFlow
Créer un dictionnaire imbriqué à l'aide de defaultdict
Créer un tableau simple à l'aide de prettytable
Créer un service SlackBot sur Pepper
Créer une application Web avec Flask ①
Utilisation d'une console série sur Ubuntu 20.04
Créer un modèle d'apprentissage à l'aide de MNIST
L'histoire de l'utilisation de la réduction de Python
Créer une application Web avec Flask ③
Créer une API CRUD à l'aide de l'API rapide
Détection de visage à l'aide d'un classificateur en cascade
Créer une application Web avec Flask ④
Utiliser une webcam avec Raspberry Pi
Tutoriel de recommandation utilisant l'analyse d'association (concept)
Créez un wrapper de langage C à l'aide de Boost.Python