Aufzeichnen von Daten ändern#

AirSim verfügt über eine Aufzeichnungsfunktion, um einfach Daten und Bilder zu sammeln. Die Aufzeichnungs-APIs erlauben auch das Starten und Stoppen der Aufzeichnung per API.

Die standardmäßig aufgezeichneten Daten reichen jedoch möglicherweise nicht für Ihre Anwendungsfälle aus und es kann wünschenswert sein, zusätzliche Daten wie IMU, GPS-Sensoren, Rotorgeschwindigkeit für Copter usw. aufzuzeichnen. Sie können die vorhandenen Python- und C++-APIs verwenden, um die Informationen abzurufen und sie nach Bedarf zu speichern, insbesondere für Lidar. Eine weitere Option für das Hinzufügen kleiner Felder wie GPS oder interner Daten wie der Unreal-Position oder etwas anderem ist durch Modifizieren der Aufzeichnungsmethoden in AirSim möglich. Diese Seite beschreibt die spezifischen Methoden, die Sie möglicherweise ändern müssen.

Die aufgezeichneten Daten werden in einer airsim_rec.txt-Datei im Tabulator-getrennten Format geschrieben, mit Bildern in einem images/-Ordner. Der gesamte Ordner befindet sich standardmäßig im Documents-Ordner (oder ist in den Einstellungen angegeben) mit dem Zeitstempel des Aufzeichnungsstarts im Format %Y-%M-%D-%H-%M-%S.

Das Auto-Fahrzeug zeichnet folgende Felder auf -

VehicleName TimeStamp   POS_X   POS_Y   POS_Z   Q_W Q_X Q_Y Q_Z Throttle    Steering    Brake   Gear    Handbrake   RPM Speed   ImageFile

Für Multirotor -

VehicleName TimeStamp   POS_X   POS_Y   POS_Z   Q_W Q_X Q_Y Q_Z ImageFile

Code-Änderungen#

Beachten Sie, dass dies das Erstellen und Verwenden von AirSim aus dem Quellcode erfordert. Sie können eine Binärdatei nach Bedarf nach der Änderung kompilieren.

Die primäre Methode, die die zu speichernden Daten füllt, ist PawnSimApi::getRecordFileLine. Dies ist die Basis-Methode für alle Fahrzeuge, und Car überschreibt sie, um zusätzliche Daten zu protokollieren, wie in CarPawnSimApi::getRecordFileLine zu sehen ist.

Um zusätzliche Daten für Multirotor aufzuzeichnen, können Sie eine ähnliche Methode in den Dateien MultirotorPawnSimApi.cpp/h hinzufügen, die die Implementierung der Basisklasse überschreibt und andere Daten anhängt. Die aktuell protokollierten Daten können auch nach Bedarf geändert und entfernt werden.

Z.B. Aufzeichnung von GPS-, IMU- und Barometerdaten auch für Multirotor -

// MultirotorPawnSimApi.cpp
std::string MultirotorPawnSimApi::getRecordFileLine(bool is_header_line) const
{
    std::string common_line = PawnSimApi::getRecordFileLine(is_header_line);
    if (is_header_line) {
        return common_line +
               "Latitude\tLongitude\tAltitude\tPressure\tAccX\tAccY\tAccZ\t";
    }

    const auto& state = vehicle_api_->getMultirotorState();
    const auto& bar_data = vehicle_api_->getBarometerData("");
    const auto& imu_data = vehicle_api_->getImuData("");

    std::ostringstream ss;
    ss << common_line;
    ss << state.gps_location.latitude << "\t" << state.gps_location.longitude << "\t"
       << state.gps_location.altitude << "\t";

    ss << bar_data.pressure << "\t";

    ss << imu_data.linear_acceleration.x() << "\t" << imu_data.linear_acceleration.y() << "\t"
       << imu_data.linear_acceleration.z() << "\t";

    return ss.str();
}
// MultirotorPawnSimApi.h
virtual std::string getRecordFileLine(bool is_header_line) const override;