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;