LockStep#
Die neueste Version von PX4 unterstützt eine neue Lockstep-Funktion bei der Kommunikation mit dem Simulator über TCP. Lockstep ist eine wichtige Funktion, da sie PX4 und den Simulator synchronisiert, sodass sie im Wesentlichen die gleiche Uhrzeit verwenden. Dadurch verhält sich PX4 auch bei ungewöhnlich langen Verzögerungen in der Simulatorleistung normal.
Es wird empfohlen, wenn Sie eine Lockstep-fähige Version von PX4 im SITL-Modus ausführen, dass Sie AirSim anweisen, eine SteppableClock zu verwenden und UseTcp auf true und LockStep auf true zu setzen.
{
"SettingsVersion": 1.2,
"SimMode": "Multirotor",
"ClockType": "SteppableClock",
"Vehicles": {
"PX4": {
"VehicleType": "PX4Multirotor",
"UseTcp": true,
"LockStep": true,
...
Dies bewirkt, dass AirSim keine "Echtzeit"-Uhr verwendet, sondern die Uhr in Schritten vorrückt, die mit jeder Sensoraktualisierung an PX4 gesendet werden. Auf diese Weise denkt PX4, dass die Zeit reibungslos vergeht, unabhängig davon, wie lange AirSim tatsächlich benötigt, um diese Aktualisierungsschleife zu verarbeiten.
Dies hat folgende Vorteile:
- AirSim kann auf langsamen Maschinen verwendet werden, die Aktualisierungen nicht schnell verarbeiten können.
- Sie können AirSim debuggen und einen Haltepunkt setzen. Wenn Sie fortfahren, verhält sich PX4 normal.
- Sie können sehr langsame Sensoren wie den Lidar mit einer großen Anzahl simulierter Punkte aktivieren, und PX4 verhält sich immer noch normal.
Es wird einige Nebeneffekte von lockstep geben, nämlich, dass langsamere Aktualisierungsschleifen, die durch den Betrieb von AirSim auf einer unterdimensionierten Maschine oder durch teure Sensoren (wie Lidar) verursacht werden, eine sichtbare Ruckelei im simulierten Flug hervorrufen, wenn Sie die Aktualisierungen in Echtzeit auf dem Bildschirm betrachten.
LockStep deaktivieren#
Wenn Sie PX4 unter Cygwin ausführen, gibt es ein offenes Problem mit Lockstep. PX4 ist standardmäßig für die Verwendung von Lockstep konfiguriert. Um diese Funktion zu deaktivieren, deaktivieren Sie sie zuerst in PX4
- Navigieren Sie zu
boards/px4/sitl/in Ihrem lokalen PX4-Repository - Bearbeiten Sie
default.cmakeund suchen Sie die folgende Zeileset(ENABLE_LOCKSTEP_SCHEDULER yes) - Ändern Sie diese Zeile zu
set(ENABLE_LOCKSTEP_SCHEDULER no) - Deaktivieren Sie es in AirSim, indem Sie
LockStepauffalsesetzen und entweder eine"ClockType": "SteppableClock"-Einstellung entfernen oderClockTypeauf den Standardwert zurücksetzen{ ... "ClockType": "", "Vehicles": { "PX4": { "VehicleType": "PX4Multirotor", "LockStep": false, ... - Jetzt können Sie PX4 SITL wie gewohnt ausführen (
make px4_sitl_default none_iris) und es wird die Systemzeit des Hosts verwenden, ohne auf AirSim zu warten.