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.
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é.
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()
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.
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.
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