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