PX4/MavLink 日志记录#

感谢 Chris Lovett 开发了本页提及的各种 PX4/MavLink 日志记录工具!

如果您在 settings.json 文件的 PX4 部分添加以下内容,AirSim 可以捕获 MavLink 日志文件

{
    "SettingsVersion": 1.2,
    "SimMode": "Multirotor",
    "Vehicles": {
        "PX4": {
            ...,
            "Logs": "c:/temp/mavlink"
        }
    }
}

AirSim 将为此文件夹中的每个“布防/解除布防”飞行会话创建一个带时间戳的日志文件。

然后您将在 d:\temp\logs 中看到按日期组织的日志文件,特别是 *input.mavlink 和 *output.mavlink 文件。

对于支持 MavLink 的无人机,您还可以使用我们的 日志查看器 来可视化数据流。如果您启用这种实时日志记录形式,则不应使用上面的“日志”设置,这两种日志记录形式是互斥的。

SITL 模式下的 PX4 日志#

在 SITL 模式下,当无人机布防时会生成日志文件。SITL 终端将包含日志文件的路径,它应该看起来像这样

INFO  [logger] Opened log file: rootfs/fs/microsd/log/2017-03-27/20_02_49.ulg

HITL 模式下的 PX4 日志#

如果您在 HIL 模式下使用 Pixhawk 硬件,请使用 QGroundControl 设置参数 SYS_LOGGER=1。PX4 会将日志文件写入设备,您以后可以使用 QGroundControl 下载。

调试一次糟糕的飞行#

您可以使用这些 *.mavlink 日志文件通过 LogViewer 调试一次糟糕的飞行。例如,如果您在电源不足的计算机上运行 AirSim/PX4 飞行,它可能会出现故障。以下显示了在这种情况下可能发生的情况。

screenshot

在这次飞行中,我们运行了一个简单的 commander takeoff 测试,如 PythonClient/multirotor/stability_test.py 执行的那样,飞行开始时一切正常,但最后变得疯狂,无人机坠毁。那么这是为什么呢?日志文件能显示什么?

这里我们绘制了以下 5 个指标:- hil_gps.alt - 从 AirSim 发送到 PX4 的模拟高度 - telemetry.update_rate - AirSim 执行关键无人机更新循环的速率(每秒更新次数)- telemetry.update_time - AirSim 内部执行关键无人机更新循环的平均时间。- telemetry.actuation_delay - 这是一个非常有趣的指标,测量 PX4 发送回更新的执行器控制消息(电机功率)所需的时间 - actuator_controls.0 - 来自 PX4 的第一个旋翼的执行器控制信号。

我们从这些指标中看到,一切开始得很顺利,高度平稳,更新速率高,在 275 到 300 fps 范围内,AirSim 内部的更新时间很短,约为 113 微秒,并且从 PX4 往返的执行延迟也很短。执行器控制也迅速稳定到一条漂亮的直线。

但随后 update_time 开始攀升,同时 actuation_delay 也攀升,我们看到 actuator_controls 有一个小的下降。这种下降不应该发生,PX4 因为更新速率的损失而恐慌,但它恢复了。

但随后我们看到执行器控制变得疯狂,执行延迟出现巨大峰值,大约在这个时候我们看到 AirSim 发出 lockstep disabled 消息。超过 100 毫秒的延迟会触发 AirSim 跳出 lockstep 模式,PX4 变得疯狂,无人机坠毁。

底线是,如果一个简单的 takeoff 无法保持稳定平稳的飞行,并且您看到这些类型的尖峰和不均匀的更新速率,则意味着您在没有足够马力的计算机上运行 AirSim。

一个简单的起飞、悬停和着陆应该看起来像这样

nice

在这里您看到 update_rate 保持在每秒 333 次更新的目标。您还看到 update_time 保持在漂亮的 39 微秒,actuator_delay 在 1.1 到 1.7 毫秒之间,以及由此产生的 actuator_controls 是一条漂亮的直线。