锁步#

最新版本的 PX4 在通过 TCP 与模拟器通信时支持新的锁步功能。锁步是一项重要功能,因为它同步了 PX4 和模拟器,使它们本质上使用相同的时钟时间。这使得 PX4 即使在模拟器性能异常长的延迟期间也能正常运行。

建议当您在 SITL 模式下运行启用锁步的 PX4 版本时,告诉 AirSim 使用 SteppableClock,并将 UseTcp 设置为 trueLockStep 设置为 true

    {
        "SettingsVersion": 1.2,
        "SimMode": "Multirotor",
        "ClockType": "SteppableClock",
        "Vehicles": {
            "PX4": {
                "VehicleType": "PX4Multirotor",
                "UseTcp": true,
                "LockStep": true,
                ...

这会导致 AirSim 不使用“实时”时钟,而是随着每次发送给 PX4 的传感器更新逐步推进时钟。这样,无论 AirSim 实际处理该更新循环需要多长时间,PX4 都认为时间正在平稳地推进。

这具有以下优点:

  • AirSim 可以在无法快速处理更新的慢速机器上使用。
  • 您可以调试 AirSim 并命中断点,当您恢复时,PX4 将正常运行。
  • 您可以启用非常慢的传感器,例如具有大量模拟点的激光雷达,并且 PX4 仍将正常运行。

lockstep 会有一些副作用,即在性能不足的机器上运行 AirSim 或使用昂贵的传感器(如激光雷达)导致的较慢的更新循环会使得模拟飞行在屏幕上实时查看更新时出现一些明显的卡顿。

禁用锁步#

如果您在 cygwin 中运行 PX4,则存在一个与锁步相关的开放问题。PX4 默认配置为使用锁步。要禁用此功能,请首先在 PX4 中禁用它

  1. 导航到本地 PX4 存储库中的 boards/px4/sitl/
  2. 编辑 default.cmake 并找到以下行
    set(ENABLE_LOCKSTEP_SCHEDULER yes)
  3. 将此行更改为
    set(ENABLE_LOCKSTEP_SCHEDULER no)
  4. 通过将 LockStep 设置为 false 并在 AirSim 中禁用它,并删除任何 "ClockType": "SteppableClock" 设置或将 ClockType 重置为默认值
        {
            ...
            "ClockType": "",
            "Vehicles": {
                "PX4": {
                    "VehicleType": "PX4Multirotor",
                    "LockStep": false,
                    ...
  5. 现在您可以像往常一样运行 PX4 SITL(make px4_sitl_default none_iris),它将使用主机系统时间而无需等待 AirSim。