[PYTHON] Probieren Sie die Pepper NAOqi OS 2.5.5 SLAM-Funktion ~ Teil 2 aus

__ Suche nach beweglicher Reichweite und speichere Daten __

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.

image

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.

__ An den angegebenen Ort verschieben __

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

__Die gespeicherten Kartendaten des beweglichen Bereichs abrufen und die Karte erstellen __

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.

__ Zusammenfassung __

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.

Vielen Dank

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

Probieren Sie die Pepper NAOqi OS 2.5.5 SLAM-Funktion ~ Teil 2 aus
Ich habe die Pepper NAOqi OS 2.5.5 SLAM-Funktion ausprobiert
Versuchen Sie, nur den Kern von Ubuntu zu installieren
Versuchen Sie es mit dem Python-Webframework Tornado Part 1
Versuchen Sie es mit dem Python-Webframework Tornado Part 2
Versuchen Sie Katsuhiro Morishita / Aso_Sea_Clouds_Pridiction Memo-Excluding the learning part-
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1