API-Client-Code aktualisieren#

Es gab mehrere API-Änderungen in AirSim v1.2, die hoffentlich Inkonsistenzen beseitigen, zukünftige Erweiterbarkeit hinzufügen und eine sauberere Schnittstelle bieten. Viele dieser Änderungen sind jedoch *nicht abwärtskompatible Änderungen*, was bedeutet, dass Sie Ihren Client-Code, der mit AirSim kommuniziert, ändern müssen.

Schnellerer Weg#

Während die meisten Änderungen, die Sie in Ihrem Client-Code vornehmen müssen, ziemlich einfach sind, ist ein schnellerer Weg, sich einfach den Beispielcode anzusehen, wie z.B. Hello Drone oder Hello Car, um die Änderungen zu erfassen.

AirSim importieren#

Anstatt,

from AirSimClient import *
verwenden Sie dies

import airsim

Das Obige setzt voraus, dass Sie das AirSim-Modul mit folgendem Befehl installiert haben:

pip install --user airsim

Wenn Sie Ihren Code vom Ordner PythonClient im Repository ausführen, können Sie auch Folgendes tun:

import setup_path 
import airsim

Hier sollte sich `setup_path.py` in Ihrem Ordner befinden und es wird den Pfad des `airsim`-Pakets im `PythonClient`-Repository-Ordner festlegen. Alle Beispiele im PythonClient-Ordner verwenden diese Methode.

AirSim Klassen verwenden#

Da wir jetzt alles im Paket haben, müssen Sie explizite Namespaces für AirSim-Klassen verwenden, wie unten gezeigt.

Anstatt,

client1 = CarClient()

verwenden Sie dies

client1 = airsim.CarClient()

AirSim Typen#

Wir haben alle Typen in den `airsim`-Namespace verschoben.

Anstatt,

image_type = AirSimImageType.DepthVis

d = DrivetrainType.MaxDegreeOfFreedom

verwenden Sie dies

image_type = airsim.ImageType.DepthVis

d = airsim.DrivetrainType.MaxDegreeOfFreedom

Bilder erhalten#

Nichts Neues unten, es ist nur eine Kombination aus dem Obigen. Beachten Sie, dass alle APIs, die zuvor `camera_id` akzeptierten, jetzt stattdessen `camera_name` akzeptieren. Sie können sich hier verfügbare Kameras ansehen.

Anstatt,

responses = client.simGetImages([ImageRequest(0, AirSimImageType.DepthVis)])

verwenden Sie dies

responses = client.simGetImages([airsim.ImageRequest("0", airsim.ImageType.DepthVis)])

Hilfsmethoden#

In der früheren Version stellten wir mehrere Hilfsmethoden als Teil von `AirSimClientBase` bereit. Diese Methoden wurden nun zugunsten einer pythonischeren Schnittstelle in den `airsim`-Namespace verschoben.

Anstatt,

AirSimClientBase.write_png(my_path, img_rgba) 

AirSimClientBase.wait_key('Press any key')

verwenden Sie dies

airsim.write_png(my_path, img_rgba)

airsim.wait_key('Press any key')

Kameranamen#

AirSim verwendet jetzt Namen, um Kameras zu referenzieren, anstatt Indexnummern. Um jedoch die Abwärtskompatibilität zu wahren, sind diese Namen mit den alten Indexnummern als Zeichenkette aliased.

Anstatt,

client.simGetCameraInfo(0)

verwenden Sie dies

client.simGetCameraInfo("0")

# or

client.simGetCameraInfo("front-center")

Asynchrone Methoden#

Bei Multirotoren hatte AirSim verschiedene Methoden wie `takeoff` oder `moveByVelocityZ`, deren Abschluss lange dauern konnte. Alle diese Methoden wurden nun um den Suffix *Async* erweitert, wie unten gezeigt.

Anstatt,

client.takeoff()

client.moveToPosition(-10, 10, -10, 5)

verwenden Sie dies

client.takeoffAsync().join()

client.moveToPositionAsync(-10, 10, -10, 5).join()

Hier ist `.join()` ein Aufruf der Python `Future`-Klasse, um auf den Abschluss des asynchronen Aufrufs zu warten. Sie können auch wählen, während des Aufrufs einige andere Berechnungen durchzuführen.

Nur Simulationsmethoden#

Nun haben wir eine klare Unterscheidung zwischen Methoden, die nur in der Simulation verfügbar sind, und solchen, die auf einem tatsächlichen Fahrzeug verfügbar sein können. Die simulationsspezifischen Methoden sind wie unten gezeigt mit `sim` präfixiert.

getCollisionInfo()      is renamed to       simGetCollisionInfo()
getCameraInfo()         is renamed to       simGetCameraInfo()
setCameraOrientation()  is renamed to       simSetCameraOrientation()

Zustandsinformationen#

Zuvor mischte `CarState` simulationsspezifische Informationen wie `kinematics_true`. Zukünftig wird `CarState` nur noch Informationen enthalten, die in der realen Welt bezogen werden können.

k = car_state.kinematics_true

verwenden Sie dies

k = car_state.kinematics_estimated

# or

k = client.simGetGroundTruthKinematics()