Verwendung von Lidar in AirSim#

AirSim unterstützt Lidar für Multirotoren und Autos.

Die Aktivierung von Lidar und die anderen Lidar-Einstellungen können über die AirSimSettings-JSON konfiguriert werden. Informationen zur Konfiguration allgemeiner/gemeinsamer Sensoreneinstellungen finden Sie unter allgemeine Sensoren.

Lidar auf einem Fahrzeug aktivieren#

  • Standardmäßig sind Lidars nicht aktiviert. Um Lidar zu aktivieren, setzen Sie die Attribute `SensorType` und `Enabled` in der Einstellungen-JSON.
    "Lidar1": {
         "SensorType": 6,
         "Enabled" : true,
    }
  • Mehrere Lidars können auf einem Fahrzeug aktiviert werden.

Lidar-Konfiguration#

Die folgenden Parameter können derzeit über die Einstellungen-JSON konfiguriert werden.

Parameter Beschreibung
NumberOfChannels Anzahl der Kanäle/Laser des Lidars
Range Reichweite in Metern
PointsPerSecond Anzahl der pro Sekunde erfassten Punkte
RotationsPerSecond Rotationen pro Sekunde
HorizontalFOVStart Horizontaler Sichtfeldbeginn für das Lidar, in Grad
HorizontalFOVEnd Horizontaler Sichtfeldende für das Lidar, in Grad
VerticalFOVUpper Obere vertikale Sichtfeldbegrenzung für das Lidar, in Grad
VerticalFOVLower Untere vertikale Sichtfeldbegrenzung für das Lidar, in Grad
X Y Z Position des Lidars relativ zum Fahrzeug (in NED, in Metern)
Roll Pitch Yaw Orientierung des Lidars relativ zum Fahrzeug (in Grad, Yaw-Pitch-Roll-Reihenfolge zum Vektor +X)
DataFrame Frame für die Punkte in der Ausgabe ("VehicleInertialFrame" oder "SensorLocalFrame")
ExternalController Ob Daten an einen externen Controller wie ArduPilot oder PX4 gesendet werden sollen, falls dieser verwendet wird (Standardwert ist `true`) (PX4 sendet derzeit keine Lidar-Daten)

z.B.

{
    "SeeDocsAt": "https://msdocs.de/AirSim/settings/",
    "SettingsVersion": 1.2,

    "SimMode": "Multirotor",

     "Vehicles": {
        "Drone1": {
            "VehicleType": "simpleflight",
            "AutoCreate": true,
            "Sensors": {
                "LidarSensor1": {
                    "SensorType": 6,
                    "Enabled" : true,
                    "NumberOfChannels": 16,
                    "RotationsPerSecond": 10,
                    "PointsPerSecond": 100000,
                    "X": 0, "Y": 0, "Z": -1,
                    "Roll": 0, "Pitch": 0, "Yaw" : 0,
                    "VerticalFOVUpper": -15,
                    "VerticalFOVLower": -25,
                    "HorizontalFOVStart": -20,
                    "HorizontalFOVEnd": 20,
                    "DrawDebugPoints": true,
                    "DataFrame": "SensorLocalFrame"
                },
                "LidarSensor2": {
                   "SensorType": 6,
                    "Enabled" : true,
                    "NumberOfChannels": 4,
                    "RotationsPerSecond": 10,
                    "PointsPerSecond": 10000,
                    "X": 0, "Y": 0, "Z": -1,
                    "Roll": 0, "Pitch": 0, "Yaw" : 0,
                    "VerticalFOVUpper": -15,
                    "VerticalFOVLower": -25,
                    "DrawDebugPoints": true,
                    "DataFrame": "SensorLocalFrame"
                }
            }
        }
    }
}

Serverseitige Visualisierung zum Debuggen#

Standardmäßig werden die Lidar-Punkte nicht im Viewport gezeichnet. Um das Zeichnen von getroffenen Laserpunkten im Viewport zu aktivieren, aktivieren Sie `DrawDebugPoints` über die Einstellungen-JSON.

    "Lidar1": {
         ...
         "DrawDebugPoints": true
    },

Hinweis: Das Aktivieren von `DrawDebugPoints` kann zu übermäßigem Speicherverbrauch und Abstürzen in den Versionen `v1.3.1` und `v1.3.0` führen. Dies wurde im Hauptzweig behoben und sollte in späteren Versionen funktionieren.

Client-API#

Verwenden Sie die `getLidarData()` API, um die Lidar-Daten abzurufen.

  • Die API gibt eine Punktwolke als flaches Array von Gleitkommazahlen zusammen mit dem Zeitstempel der Aufnahme und der Lidar-Pose zurück.
  • Punktwolke
    • Die Gleitkommazahlen stellen die [x,y,z]-Koordinaten für jeden getroffenen Punkt innerhalb der Reichweite im letzten Scan dar.
    • Der Frame für die Punkte in der Ausgabe ist über das Attribut "DataFrame" konfigurierbar -
      • "" oder `VehicleInertialFrame` -- Standard; zurückgegebene Punkte sind im Trägheitsrahmen des Fahrzeugs (in NED, in Metern)
      • `SensorLocalFrame` -- zurückgegebene Punkte sind im lokalen Sensorrahmen (in NED, in Metern)
  • Lidar-Pose
    • Lidar-Pose im Trägheitsrahmen des Fahrzeugs (in NED, in Metern)
    • Kann verwendet werden, um Punkte in andere Frames zu transformieren.
  • Segmentierung: Die Segmentierung jedes vom Lidar-Punkt erfassten Objekts

Python-Beispiele#

Demnächst verfügbar#

  • Visualisierung von Lidar-Daten auf der Client-Seite.