Suchen Sie zunächst den Bereich, in dem sich Pepper bewegen kann.
explore(float radius) Parameter: Radius - Geben Sie den maximalen Suchbereich in Metern an Rückgabewert: 0 - Normal, bei einem Fehler wird der Wert gemäß der Fehlercodetabelle zurückgegeben. Fehlercodetabelle
Wenn diese Methode ausgeführt wird, beginnt Pepper mit der Suche nach dem Bereich, in dem er sich innerhalb des Bereichs des durch den Parameter angegebenen Maximalwerts bewegen kann. Pfeffer wandert beim Erkunden herum. Wenn die Suche abgeschlossen ist, werden die aus der Suche erhaltenen Daten auf der Festplatte gespeichert.
saveExploration()
Rückgabewert: Gibt den Pfad der von der Suche erstellten Kartendatendatei (.explo) zurück.
Die mit dieser Methode gespeicherten Daten werden später beim Erstellen einer Karte verwendet. Der Rückgabewert gibt den Pfad der Kartendatendatei zurück, aber dieses Beispiel bearbeitet die gespeicherte Datei nicht.
Nachdem Sie den Bereich erkannt haben, den Pepper verschieben kann, können Sie ihn an die angegebene Position innerhalb dieses Bereichs verschieben. Geben Sie zum Festlegen den Abstand in X-, Y- und Theta-Richtung mit Parametern an. Was Theta betrifft, ist es in den Parametern, aber es funktioniert derzeit nicht. Wenn Sie also die Ausrichtung von Pepper angeben möchten, verwenden Sie ALMotion.MoveTo.
startLocalization()
Rückgabewert: Keine
stopLocalization() Rückgabewert: Keine
navigateToInMap(float target)
Parameter: Ziel - Geben Sie die Richtung an, in die Sie sich im Format [x, y, theta] bewegen möchten. Beispiel) navigieren zu InMap ([0., 0., 0.]) Rückgabewert: 0 - Normal, bei einem Fehler wird der Wert gemäß der Fehlercodetabelle zurückgegeben. (Fehlercodetabelle)
Wenn Sie den Pepper verschieben möchten, verwenden Sie navigierenToInMap (). Diese Methode wird jedoch verwendet, indem Sie sie in die obige startLocalization und stopLocalization einschließen. Mit anderen Worten, verwenden Sie sie gemeinsam wie folgt.
Anwendungsbeispiel) startLocalization() navigateToInMap([0., 0., 0.]) stopLocalization()
Schließlich [Daten im beweglichen Bereich suchen und speichern](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% Erfassen Sie die in E3% 82% BF% E4% BF% 9D% E5% AD% 98) erstellten Suchdaten und erstellen Sie eine Karte. Die in NAOqi 2.5.5 hinzugefügte SLAM-Funktions-API wird zum Erfassen der Suchdaten verwendet, die vorhandene API wird jedoch zum Erstellen der Karte und zum Anzeigen auf dem Tablet verwendet.
getMetricalMap()
Rückgabewert: Gibt die in der aktuellen Suche gespeicherten Daten als Kartendaten zurück. Daten im angegebenen Format [mpp, width, height, [originOffsetX, originOffsetY], [pxVal,…]] werden als Array zurückgegeben.
mpp: Kartenauflösung, die Anzahl der Meter pro Pixel Breite, Höhe: Die Größe des Bildes wird in Pixeleinheiten ausgedrückt. originOffsetY, originOffsetY: Versatz des Pixels (0, 0) auf der Karte pxVal: Ein Puffer mit Pixelwerten zwischen 0 und 100 (und in der API-Dokumentation beschrieben, aber die spezifische Bedeutung der Daten ist unbekannt ...)
__ Gesamtcode __
qiita.rb
import numpy
import Image
self.framemanager = ALProxy(“ALFrameManager”)
self.navigation_service = ALProxy(“ALNavigation”)
#Erkunden Sie eine Reichweite von 10 Metern
radius = 10.0
error_code = self.navigation_service.explore(radius)
if error_code != 0:
print "Exploration failed."
return
#Speichern Sie die gesuchten Kartendaten auf der Festplatte
path = self.navigation_service.saveExploration()
self.logger.info( "Exploration saved at path: \"" + path + "\"" )
#Vorbereiten der Bewegung von Ihrer eigenen Position auf Kartendaten
self.navigation_service.startLocalization()
#Zurück zur ersten Position
self.navigation_service.navigateToInMap([0., 0., 0.])
#Umzug abgeschlossen
self.navigation_service.stopLocalization()
#Rufen Sie die gesuchten Kartendaten ab, um die Karte auf dem Tablet anzuzeigen
result_map = self.navigation_service.getMetricalMap()
#Erstellen Sie anschließend eine Kartendatei mit der vorhandenen API
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")
Danach wird die im Feld Bild anzeigen erstellte Karte angezeigt.
Als ich versuchte, die SLAM-Funktion zu verwenden, funktionierte das Suchen nach meiner eigenen Position, das Identifizieren des beweglichen Bereichs und das Erstellen einer Karte wie erwartet, aber mit navigieren zu InMap funktionierte das Verschieben an die angegebene Position nicht wie erwartet. Es gab mehrere Male. Mit der offiziellen Veröffentlichung von NAO qi OS 2.5.5 am 4. April hoffe ich, dass die in der Beta-Version besonders auffällige Instabilität des Betriebs verbessert wird.
Die Mitarbeiter des Ateliers Akihabara waren sehr hilfreich bei der Überprüfung des SLAM für diese 7 Tage. Es wurde zu einer dynamischen Überprüfung, dass sich Pepper von selbst zu bewegen begann, was bisher noch nicht entwickelt wurde. Dank der starken Unterstützung der Atelier-Mitarbeiter, wie der Sicherung des Überprüfungsraums und der Organisation von 2.5.5-kompatiblem Pepper, wird jedoch eine reibungslose Überprüfung durchgeführt. Ist fertig. Vielen Dank für diesen Artikel. Vielen Dank!
Recommended Posts