[PYTHON] Traitement des messages de journal sur les tablettes Pepper

La tablette de Pepper a Android 4.0.4, sur lequel le navigateur Web est en cours d'exécution. Il semble probablement que ce soit le navigateur par défaut d'Android, et JavaScript, etc. (bien que ce soit 4.0.4, donc cela peut être difficile) fonctionne. Cependant, même si vous utilisez la boîte par défaut, etc., l'environnement du journal est un peu médiocre et le développement semble difficile. C'est pourquoi j'en ai essayé, donc ce mémo.

Le code d'essai pour cette fois peut être trouvé à https://github.com/yacchin1205/pepper-tablet.

Définissez le contenu de la tablette dans votre application

Tout d'abord, résumons brièvement comment définir les ressources pour les tablettes dans votre application. Fondamentalement, comme dans Prendre une image avec Pepper et l'afficher sur une tablette.

  1. Créez un dossier html dans votre application et mettez-y ʻindex.html` et les autres ressources nécessaires.

    html-resources.png

  2. Placez la zone Afficher l'application dans la bibliothèque de la zone tablette. En gros, seules les cases suivantes sont OK

    pepper-load-app-box.png

Cependant, avec la version de Choregraphe distribuée à Pepper TechFes 2014, il y a un problème avec la configuration du chemin que la boîte liée à la tablette suppose, donc Regardez l'implémentation de la boîte Afficher l'image -Akihabara / items / 87def938b6553ee9c1e9 #% E8% A3% 9C% E8% B6% B3show-image% E3% 83% 9C% E3% 83% 83% E3% 82% AF% E3% 82% B9% E3% 81% AE% E5% AE% 9F% E8% A3% 85% E3% 82% 92% E3% 81% BF% E3% 81% A6% E3% 81% BF% E3% 82% 8B) Il est nécessaire de modifier la partie traitement.

Vous devriez maintenant voir le contenu défini dans ʻindex.html` sur votre tablette. L'affichage du contenu lui-même est relativement simple.

L'atmosphère du répertoire «html» dans l'application est similaire à celle du répertoire «public_html» du répertoire personnel de l'utilisateur visible via le serveur Web. Il semble que le serveur Web local de Pepper puisse être référencé à partir du navigateur de la tablette.

Recevez les messages qui apparaissent dans le navigateur de votre tablette

Par défaut, même si une erreur survient en JavaScript, il semble que rien ne soit dit sur le journal du Chorégraphe, donc même si une erreur survient, je ne sais pas du tout. C'est un développement pénible, vous voudrez donc enregistrer l'erreur ou afficher le statut avec console.log.

De plus, cette fois, j'ai essayé d'afficher le contenu suivant sur la tablette et je l'ai testé. Il y a des boutons qui déclenchent intentionnellement une erreur et des boutons qui appellent console.log, comme indiqué ci-dessous.

chrome-html.png

Eh bien, je veux quelque chose comme les outils de développement Chrome comme la capture d'écran, mais de toute façon, seul le journal est sorti ...

Événement Get in Memory

Pour le moment, compte tenu de l'architecture de NAOqi, je me suis demandé si les journaux apparaissaient comme des événements de mémoire, et quand j'ai consulté la documentation de l'API, j'ai trouvé beaucoup de choses.

Event: "ALTabletService/message" callback(std::string eventName, std::string subscriberIdentifier)

Raised when message occurs.

Lorsque vous surveillez ʻALTabletService / message` avec un observateur de mémoire, si vous faites intentionnellement une erreur dans le contenu, cela ressemble à ceci.

webview-logview.png

Euh ...!

Eh bien, il est un peu difficile de vérifier s'il ne s'agit que d'un observateur de mémoire (probablement seul le dernier journal de sortie est affiché). L'humanité est ce qui vous donne envie de le voir au moins dans le visualiseur de journaux.

Flux pour se connecter

Quand je regardais la documentation de l'API, j'ai trouvé ʻALTabletService :: onConsoleMessage (message) `. Il semble que l'acquisition d'événements tactiles de la bibliothèque de la boîte de la tablette soit effectuée par ce mécanisme de signaux, et le traitement avec ce signal semble être le style API AL TabletService. J'ai donc modifié la zone Afficher l'application comme suit.

Vous pouvez trouver la version modifiée du code dans le projet webview-console sur github où je l'ai écrit pour la première fois.

Ajouter la méthode consoleMessageCallback

Créez une méthode pour recevoir le message de la console. Ajoutez le code suivant à la fin du script Python dans la zone Afficher l'application.

    def consoleMessageCallback(self, message):
        self.logger.info("[ConsoleMessage] %s" % message)

Lorsque je reçois le message, j'utilise self.logger pour sortir le journal.

Modifier la méthode onInput_onStart

Ajoutez le code suivant avant d'exécuter tabletService.loadApplication.

                #Commencez à surveiller la console
                if not self.consoleConnectId:
                    self.consoleConnectId = tabletService.onConsoleMessage.connect(self.consoleMessageCallback)

Vous pouvez maintenant configurer consoleMessageCallback pour répondre à ʻonConsoleMessage`.

Modifier les méthodes onLoad et onUnload

Annulez l'enregistrement du gestionnaire lors du déchargement. Ajoutez le code suivant à la méthode ʻonUnload`.

        #Fin de la surveillance de la console
        if self.consoleConnectId:
            try:
                self._getTabletService().onConsoleMessage.disconnect(self.consoleConnectId)
                self.consoleConnectId = None
            except Exception as e:
                self.logger.error(e)

Également, initialisez les membres lors du chargement. Ajoutez le code suivant à la méthode ʻonLoad`.

        self.consoleConnectId = None

bouge toi

Si vous exécutez le projet avec cette modification, vous pouvez voir le journal dans la visionneuse de journaux. Si une erreur se produit, cela ressemble à ceci.

[INFO ] behavior.box :consoleMessageCallback:80 _Behavior__lastUploadedChoregrapheBehaviorbehavior_1143658480__root__ShowApp_2: [ConsoleMessage] Uncaught TypeError: Cannot call method 'call' of null

J'ai oublié de l'enregistrer, mais je peux voir la sortie de console.log. Ce n'est pas suffisant, mais je pense que cela rendra le débogage beaucoup plus facile. Attendu. Je voudrais jouer avec combien cela fonctionne avec JavaScript sur la tablette de Pepper ...

Recommended Posts

Traitement des messages de journal sur les tablettes Pepper
Shell de surveillance des messages de journal