[PYTHON] Essayez la fonction SLAM de Pepper NAOqi OS 2.5.5 ~ Partie 2

__ Rechercher une plage mobile et enregistrer les données __

Tout d'abord, recherchez la plage dans laquelle Pepper peut se déplacer.

explore(float radius) Paramètres: rayon - Spécifiez la plage de recherche maximale en mètres Valeur de retour: 0 - Normal, en cas d'erreur, la valeur selon la table des codes d'erreur est renvoyée. Table des codes d'erreur

Lorsque cette méthode est exécutée, Pepper commence à rechercher la plage dans laquelle il peut se déplacer dans la plage de la valeur maximale spécifiée par le paramètre. Pepper se promène tout en explorant. Lorsque la recherche est terminée, les données obtenues à partir de la recherche sont enregistrées sur le disque.

image

saveExploration()

Valeur de retour: renvoie le chemin du fichier de données cartographiques (.explo) créé par la recherche.

Les données enregistrées par cette méthode seront utilisées plus tard lors de la création d'une carte. La valeur de retour renvoie le chemin du fichier de données cartographiques, mais cet exemple ne manipule pas le fichier enregistré.

__ Déplacer vers l'emplacement spécifié __

Après avoir reconnu la plage que Pepper peut déplacer, vous pouvez la déplacer vers l'emplacement spécifié dans cette plage. Pour spécifier, spécifiez la distance dans les directions X, Y et Thêta avec des paramètres. Quant à Theta, c'est dans les paramètres, mais cela ne fonctionne pas pour le moment. Donc, si vous souhaitez spécifier l'orientation de Pepper, utilisez ALMotion.MoveTo.

startLocalization()

Valeur de retour: Aucun

stopLocalization() Valeur de retour: Aucun

navigateToInMap(float target)

Paramètres: cible - Spécifiez la direction dans laquelle vous souhaitez vous déplacer au format [x, y, thêta]. Exemple) navigateToInMap ([0., 0., 0.]) Valeur de retour: 0 - Normal, en cas d'erreur, la valeur selon la table des codes d'erreur est renvoyée. (Tableau des codes d'erreur)

Si vous souhaitez déplacer le Pepper, utilisez naviguerToInMap (), mais cette méthode est utilisée en l'incluant dans les champs startLocalization et stopLocalization ci-dessus. En d'autres termes, utilisez-les collectivement comme suit.

Exemple d'utilisation) startLocalization() navigateToInMap([0., 0., 0.]) stopLocalization()

__ Obtenir les données cartographiques enregistrées de la plage mobile et créer la carte __

Enfin, [Rechercher et enregistrer des données dans la plage mobile](http://qiita.com/Nariki1998/private/2403066865e59e982239#%E7%A7%BB%E5%8B%95%E5%8F%AF%E8%83% BD% E7% AF% 84% E5% 9B% B2% E3% 81% AE% E6% 8E% A2% E7% B4% A2% E3% 81% A8% E3% 83% 87% E3% 83% BC% E3% 82% BF% E4% BF% 9D% E5% AD% 98) Acquiert les données de recherche créées et crée une carte. L'API de la fonction SLAM ajoutée dans NAOqi 2.5.5 est utilisée pour acquérir les données de recherche, mais l'API existante est utilisée pour créer la carte et l'afficher sur la tablette.

getMetricalMap()

Valeur de retour: renvoie les données enregistrées dans la recherche en cours sous forme de données cartographiques. Les données au format spécifié [mpp, largeur, hauteur, [originOffsetX, originOffsetY], [pxVal,…]] sont renvoyées sous forme de tableau.

mpp: résolution de la carte, le nombre de mètres par pixel width, height: La taille de l'image est exprimée en pixels. originOffsetY, originOffsetY: Décalage du pixel (0, 0) sur la carte pxVal: Un tampon de valeurs de pixels entre 0 et 100 (et décrit dans la documentation de l'API, mais la signification spécifique des données est inconnue ...)

__Code global __

qiita.rb



    import numpy
    import Image

    self.framemanager = ALProxy(“ALFrameManager”)
    self.navigation_service = ALProxy(“ALNavigation”)

    #Explorez une portée de 10 mètres
    radius = 10.0
    error_code = self.navigation_service.explore(radius)
    if error_code != 0:
        print "Exploration failed."
        return
    #Enregistrer les données cartographiques recherchées sur le disque
    path = self.navigation_service.saveExploration()
    self.logger.info( "Exploration saved at path: \"" + path + "\"" )
    #Se préparer à passer de sa propre position sur les données cartographiques
    self.navigation_service.startLocalization()
    #Revenir à la première position
    self.navigation_service.navigateToInMap([0., 0., 0.])
    #Déplacement terminé
    self.navigation_service.stopLocalization()
    #Obtenez les données cartographiques recherchées pour afficher la carte sur la tablette
    result_map = self.navigation_service.getMetricalMap()

    #Après cela, créez un fichier de carte à l'aide de l'API existante
    path = os.path.join(self.framemanager.getBehaviorPath(self.behaviorId),”../html/img/”)
    writepath = path + “map.jpg”
    map_width = result_map[1]
    map_height = result_map[2]
    img = numpy.array(result_map[4]).reshape(map_width, map_height)
    img = (100 - img) * 2.55 # from 0..100 to 255..0
    img = numpy.array(img, numpy.uint8)
    Image.frombuffer('L', (map_width, map_height), img, 'raw', 'L', 0, 1).save(writepath,"JPEG")

Après cela, la carte créée dans la zone Afficher l'image sera affichée.

__ Résumé __

Lorsque j'ai essayé d'utiliser la fonction SLAM, la recherche de ma propre position, l'identification de la plage mobile et la création d'une carte ont fonctionné comme prévu, mais en utilisant naviguerToInMap, le déplacement vers la position spécifiée ne fonctionnait pas comme prévu. Il y a eu plusieurs fois. Avec la sortie officielle de NAO qi OS 2.5.5 le 4 avril, j'espère que l'instabilité de fonctionnement, qui était particulièrement perceptible dans la version bêta, sera améliorée.

Merci

Le personnel de l'Atelier Akihabara a été très utile pour vérifier SLAM pendant ces 7 jours. C'est devenu une vérification dynamique que Pepper a commencé à se déplacer par lui-même, ce qui n'a pas été développé jusqu'à présent, mais grâce au soutien solide du personnel de l'atelier, tel que la sécurisation de l'espace de vérification et l'organisation de Pepper compatible 2.5.5, une vérification en douceur sera effectuée. Est fait. Merci pour cet article. Merci beaucoup!

Recommended Posts

Essayez la fonction SLAM de Pepper NAOqi OS 2.5.5 ~ Partie 2
J'ai essayé la fonction SLAM de Pepper NAOqi OS 2.5.5
Essayez d'installer uniquement la partie principale d'Ubuntu
Essayez d'utiliser le framework Web Python Tornado Partie 1
Essayez d'utiliser le framework Web Python Tornado Partie 2
Essayez Katsuhiro Morishita / Aso_Sea_Clouds_Pridiction Memo-Excluant la partie d'apprentissage-
Visualisons la pièce avec tarte aux râpes, partie 1