使用PlotJuggler进行日志分析
PlotJuggler 可用于深入的开发目的,对ULog日志进行分析。它极其有用,因为每个uORB主题都能展示出来并绘制图表,而且还具备自定义函数来修改数据(例如将四元数转换为横滚/俯仰/偏航值)。
安装
你可以在此处找到Plot Juggler的最新版本。
Windows版本说明
Windows系统下最新版的PlotJuggler可能无法正常运行。在这种情况下,可回退到此处的v2.8.4版本(已知该版本在Windows系统上可用)。
Linux系统AppImage说明
如果下载的AppImage文件无法打开,你可能需要更改其访问权限。在终端中使用以下命令来操作:
chmod 777 <PlotJuggler-AppImage文件路径>
一般用法
最常见的两项操作是在记录的uORB主题中“搜索”,以及将特定主题中的字段“拖放”到图形视图中。下面的示意图展示了这两个操作。
水平/垂直分割:多面板
PlotJuggler最强大的功能之一是可以水平或垂直分割屏幕,同时显示不同的图表(顶部有一个同步的时间轴,当你移动底部的时间游标时,它也会相应移动)。
下面的动画展示了这一功能:
在这个例子中,首先将屏幕分割为三个部分,绘制vehicle_local_position
主题的ax
、ay
和az
(加速度估计值)分量的图表。然后,在右侧面板下方添加vz
(速度估计值)分量的图表,最后在中间下方的面板中绘制battery_status
主题的current_a
(电池电流)图表。
一开始可能不太明显,但你可以观察到,每当飞行器开始移动(电池电流值升高),加速度和速度值也会开始变化。这是因为所有数据都以时间序列的形式显示,每个值都对应一个特定的时间戳。
这对于全面了解发生了什么以及原因非常有用。通常仅通过查看一个图表很难排查问题,但通过同时显示多个图表,就更容易弄清楚系统中发生的情况。
二维数据显示
另一个强大的功能是能够以散点图的方式在XY平面上显示二维数据(X、Y轴各显示一个数据)。操作方法是在选择两个数据点时按住Ctrl
键(例如vehicle_local_position
主题的x
和y
分量),然后按住鼠标右键进行拖放。
在这个例子中,将飞行器在本地坐标系中的估计位置绘制到XY平面上,展示了估计位置的二维视图,右侧绘制了vx
和vy
分量(速度估计值)的图表,下方分割视图中绘制了vz
(垂直速度估计值)的图表。
这直观地展示了飞行器位置和速度之间的关系。例如,注意当飞行器沿X轴方向移动时,vx
值会升高,当飞行器转向Y轴方向时,vy
值也会开始变化。
使用“播放”按钮
这里的播放按钮用于实时播放记录的数据(速度因子可在右下角调整)。这详细展示了上述位置/速度关系。
:::信息 你可以通过下载上述使用的ULog和布局文件,亲自尝试对船只测试日志进行分析!
:::
布局模板
PX4开发者分享了一些PlotJuggler布局文件。每个文件都可用于特定目的(多旋翼飞行器调参、VTOL调参、船只调试等):
高级用法
使用LUA脚本创建自定义时间序列
Plot Juggler支持使用LUA脚本来处理和显示数据。这是一个强大的功能,可以实现诸如积分曲线、平均两条曲线、消除偏移等操作。
从四元数计算横滚/俯仰/偏航
为了解飞行器的姿态,PX4在vehicle_attitude
主题中以浮点数值数组(q[4])的形式记录估计姿态的四元数。由于这些值没有给出上下文信息(例如“横滚角”),所以需要进行涉及三角函数的转换。
- 在左侧的时间序列列表面板中搜索
vehicle_attitude
主题。 - 先点击
q.00
,然后按住Shift键并点击q.03
,选中4个四元数成员(q.00, q.01, q.02, q.03
)。它们应该都被选中。 - 点击左下角“自定义序列”部分的“+”符号,创建新序列。
- 再次选中4个四元数成员,并将它们拖到左上角的“输入时间序列 + 附加源时间序列”选项卡中。
- 双击函数库中的
quat_to_roll
。现在你应该在上方看到绘图。 - 在右上角的文本框中为绘图指定名称(例如
roll
)。 - 点击“创建新时间序列”。现在你应该在“自定义序列”中看到该绘图。
这里展示了自定义序列“横滚角(Roll)”与其他时间序列一起显示的情况,包括右侧以四元数形式呈现的原始数据(人无法直接读懂,使用PlotJuggler 3.5.0):
quat_to_roll
函数如下:
w = value
x = v1
y = v2
z = v3
dcm21 = 2 * (w * x + y * z)
dcm22 = w*w - x*x - y*y + z*z
roll = math.atan(dcm21, dcm22)
return roll