[PYTHON] Points à noter lors du passage de NAOqi OS 2.4.3 à 2.5.5

introduction

Une mise à jour pour NAOqi OS 2.5.5 sera disponible pour Pepper for Biz le 4 avril 2017.

Avis de publication du logiciel [Pepper for Biz] "NAOqi OS 2.5.5"

Cette mise à jour inclut certaines modifications incompatibles avec les systèmes d'exploitation précédents. Les applications qui s'exécutaient sur NAOqi OS 2.4.3 peuvent cesser de fonctionner. Cet article répertorie certaines des mises en garde que j'ai trouvées lors de la migration d'applications qui exécutent déjà NAOqi OS 2.4.3 vers 2.5.5.

De plus, je n'ai pas abordé les parties qui ont déjà été officiellement annoncées et doivent être modifiées. Voir ci-dessous pour plus d'informations. [Avis de mise à niveau de la version NAOqi (v2.5.5) .pdf](https://developer.softbankrobotics.com/Software/documentation/NAOqi%E3%83%8F%E3%82%99%E3%83%BC%E3 % 82% B7% E3% 82% 99% E3% 83% A7% E3% 83% B3% E3% 82% A2% E3% 83% 83% E3% 83% 95% E3% 82% 9A (v2.5.5) )% E3% 81% AE% E3% 81% 8A% E7% 9F% A5% E3% 82% 89% E3% 81% 9B.pdf)

Conditions préalables

Toutes les descriptions suivantes ont été confirmées pour fonctionner avec Pepper for Biz.

Speech Reco, Dialog on Arrêt de la synchronisation de sortie lorsque Internet n'est pas connecté

Vous devez d'abord remplacer

La boîte de dialogue et la boîte de dialogue Speech Reco, qui sont souvent utilisées dans les applications Pepper, sont décrites dans «Introduction» [document PDF](https://developer.softbankrobotics.com/Software/documentation/NAOqi%E3%83%8F % E3% 82% 99% E3% 83% BC% E3% 82% B7% E3% 82% 99% E3% 83% A7% E3% 83% B3% E3% 82% A2% E3% 83% 83% E3 % 83% 95% E3% 82% 9A (v2.5.5)% E3% 81% AE% E3% 81% 8A% E7% 9F% A5% E3% 82% 89% E3% 81% 9B.pdf) , Il est décrit comme "Remplacement BOX incompatible", donc si vous souhaitez exécuter une application existante sur NAOqi OS 2.5.5, vous devez remplacer la box par Choregraphe 2.5.5.

Qu'est-ce qui ne va pas

«Quand Internet n'est pas connecté» signifie que l'ordinateur est connecté uniquement au LAN et que l'état du réseau sur l'écran de réglage Pepper est orange.

screen.png

Fondamentalement, il est recommandé d'utiliser Pepper dans un environnement avec une connexion Internet, mais il peut être surprenant qu'il puisse fonctionner dans un environnement tel qu'un lieu d'événement ou un sous-sol où il peut être connecté à un réseau local mais pas à Internet. Les événements suivants se produisent lors de l'exécution de l'application dans un tel environnement.

Voici un cas d'utilisation courant de Speech Reco. Après avoir reconnu la voix, la boîte de reconnaissance vocale elle-même est arrêtée et le processus suivant est lancé. Cela empêchera Pepper d'écouter ses propres lignes et d'entrer dans une boucle infinie, ou vous pouvez basculer la liste de mots qu'il reconnaît lors de l'utilisation de plusieurs boîtes de reconnaissance vocale vers une autre boîte de reconnaissance vocale. ..

スクリーンショット 2017-03-29 13.09.55.png

Sans connexion Internet et NAOqi OS 2.4.3, en utilisant les boîtiers Speech Reco ou Dilalog, la sortie onStopped prend ** secondes pour se déclencher. ** ** Cependant, lors de l'exécution sur NAOqi OS 2.5.5, la sortie onStopped est déclenchée lorsqu'elle entre dans l'entrée onStop.

Si vous prévoyez que cela prendra quelques secondes lorsque vous n'êtes pas connecté à Internet, onStopped peut se déclencher à un moment inattendu et se comporter de manière inattendue lorsque vous l'exécutez avec 2.5.5.

Solution

Pour résoudre (ou plutôt traiter) ce problème, comprenez parfaitement que la sortie onStopped est déclenchée à des moments différents lorsque vous utilisez la boîte de dialogue Speech Reco, avec NAOqi OS 2.5.5 lorsque Internet n'est pas connecté. Vous devez le mettre en œuvre.

Comment écrire les paramètres de la boîte Expression Watcher

Qu'est-ce que Expression Watcher Box?

La boîte Expression Watcher est une boîte qui surveille les données d'ALMemory, divers événements qui se déclenchent pendant l'exécution de Pepper. C'est une boîte qui affiche vrai et faux en spécifiant des conditions pour les valeurs de données, plutôt que de simplement dire «déclenché».

スクリーンショット 2017-03-29 10.52.57.png

Regardons un exemple. Tout d'abord, entrez les conditions suivantes dans le paramètre "Condition" de la boîte Expression Watcher.

('MyData' == 1) ~2

C'est le cas si les données de la clé «MyData» sont 1 pendant 2 secondes.

Essayez de taper "MyData" pour le paramètre "clé" dans la zone Insérer des données. La disposition des boîtes ressemble à ceci.

スクリーンショット 2017-03-29 11.02.47.png

Si vous démarrez l'application dans cet état, false sera généré soudainement à partir de la zone Expression Watcher. Ce sera faux car les conditions spécifiées ne sont pas encore remplies. Maintenant, double-cliquez sur l'entrée onStart dans la zone Insérer des données.

スクリーンショット_2017-03-29_11_02_47_のコピー.png

Ensuite, l'écran de saisie sera affiché, alors entrez "1" et cliquez sur "OK". Et attendez 2 secondes ...

スクリーンショット 2017-03-29 11.09.04.png

true est la sortie. De cette manière, vous pouvez spécifier des conditions temporelles pour la valeur. De plus, c'est une boîte très pratique car vous pouvez combiner plusieurs conditions.

Veuillez consulter la documentation de Choregraphe pour plus de détails sur le format conditionnel. Launch trigger conditions — Aldebaran 2.4.3.28 documentation

Qu'est-ce qui ne va pas

L'introduction est devenue longue, mais c'est le sujet principal.

Lorsque j'ai essayé d'exécuter une application qui fonctionnait sur NAOqi OS 2.4.3 sur 2.5.5, j'ai eu l'erreur suivante dans la boîte Expression Watcher.

RuntimeError: Invalid expression syntax: "bang(myEvent) && 'myEvent' == 1"  

Apparemment, c'est une erreur de syntaxe. Les conditions dans l'application réelle n'étaient pas aussi simples que l'exemple ci-dessus, il a donc fallu un certain temps pour savoir exactement quelle était la cause de l'instruction de condition.

Solution

À titre de test, si vous regardez la description dans le paramètre "Condition" de la boîte par défaut Expression Watcher dans Choregraphe 2.4.3 et 2.5.5, c'est comme suit.

Pour 2.4.3

bang(myEvent) && 'myEvent' == 1

Pour 2.5.5

bang('myEvent') && 'myEvent' == 1

En 2.5.5, il semble qu'il soit strictement vérifié de mettre entre guillemets le nom de clé de ALMemory spécifié dans la condition.

Si un événement similaire se produit, veuillez vérifier la chaîne de caractères spécifiée dans la condition.

Demande la version de bibliothèque vers le bas

Poivre et demandes

requêtes est une bibliothèque HTTP couramment utilisée en Python. (Je vais omettre l'explication sur la façon de l'utiliser) Requests: HTTP for Humans

Puisque cette bibliothèque est installée dans Pepper lui-même, ** si elle est connectée à la machine Pepper réelle **, par ʻimport` dans l'application, gardez en particulier la bibliothèque de requêtes dans l'application. Peut être utilisé sans. (Si vous souhaitez utiliser la bibliothèque de requêtes avec un robot virtuel, vous devez passer le chemin vers la bibliothèque de requêtes conservée dans l'application)

Avec cette mise à jour NAOqi OS 2.5.5, la version de cette bibliothèque a été abaissée comme suit.

NAOqi OS ver requests ver
2.4.3 2.5.1
2.5.5 2.3.0

Qu'est-ce qui ne va pas

Dans les requêtes, écrivez ce qui suit lors du POST des paramètres.

url = 'https://api.github.com/some/endpoint'
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, data=payload)

À ce stade, lors de l'envoi du paramètre POST au format JSON, la méthode d'écriture suivante est possible. (** demandes 2.4.2 ou version ultérieure **)

url = 'https://api.github.com/some/endpoint'
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, json=payload)

Comme indiqué en gras, les requêtes POST au format JSON au format ci-dessus sont disponibles dans les requêtes version 2.4.2 et supérieures. J'ai pu l'exécuter sur NAOqi OS 2.4.3 Pepper, mais j'obtiens une erreur sur 2.5.5 Pepper.

Solution

La solution simple est d'arrêter d'utiliser la fonction de conversion automatique avec l'argument de mot-clé json. Ce qui suit est un exemple.

import json
url = 'https://api.github.com/some/endpoint'
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, data=json.dumps(payload))

Cela n'a affecté que notre application, mais lors de l'utilisation de requêtes avec NAOqi OS 2.5.5, Certains problèmes peuvent être résolus en gardant à l'esprit que la version des demandes a été réduite.

Résumé

Dans cet article, nous avons décrit les points que nous avons remarqués lors de la migration de notre application de NAOqi OS 2.4.3 vers 2.5.5. Je pense que le comportement est différent pour les autres boîtes, et il peut être nécessaire de traiter la partie de l'implémentation d'origine, mais j'espère que cela aide même un peu.

Recommended Posts

Points à noter lors du passage de NAOqi OS 2.4.3 à 2.5.5
Points à noter lors de la mise à jour vers WSL2
Points à noter lors de la suppression de plusieurs éléments de la liste
Précautions lors de l'exécution de la régression logistique avec Statsmodels
(Note) Points auxquels il faut être accro lors de l'installation de Scilab sur ArchLinux
Points à noter lorsque les pandas lisent le csv de la sortie Excel
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Résumé des avantages (inconvénients) lors du passage de CUnit à Google Test
[Note] [PyTorch] De l'installation à la simplicité d'utilisation
Points à considérer lors de l'utilisation de l'API de SoftLayer à partir d'une application sur Bluemix
[Amazon Linux] Passage de la série Python 2 à la série Python 3
Une histoire qui a souffert d'une différence de système d'exploitation lors de la tentative d'implémentation d'un article
Remarque Python: lors de l'attribution d'une valeur à une chaîne
Ce que j'ai fait lors de la mise à jour de Python 2.6 vers 2.7
Ce qui a échoué lors du passage de Javaer à Pythonista
Somme de 1 à 10
Trajectoire lors de la connexion ssh au système d'exploitation invité sur VirtualBox
Configuration de RaspberryPi3 (STRETCH) depuis l'installation du système d'exploitation vers Hello World
Python - Remarques lors de la conversion du type str en type int
Choses à noter lors de l'initialisation d'une liste en Python
Accélération lors de la connexion de cx_Oracle à la base de données autonome
Mercurial a cessé de fonctionner après la migration de Python 2 vers Python 3 (Remarque)
Coloration des points en fonction de la distance de la courbe de régression