Series
Plotjuggler G1 Debug
The "Plotjuggler G1 Debug" series has 5 parts — read them in order from part 1.
Humanoid
PlotJuggler + G1: ROS2 Setup & Live Topic Streaming
Install ros-humble-plotjuggler-ros, configure CycloneDDS for Unitree G1, and stream /lowstate and /sportmodestate live in under 15 minutes.

Visualizing 23 G1 Joints: MCAP Bags & Panel Layouts
Load G1 MCAP bag recordings with the DataLoadMCAP plugin, drag all 23 joint channels into a synchronized multi-panel grid, save your layout as XML, and create phase portraits with XY Scatter.

IMU Debug: Quaternion to Euler + FFT Vibration Analysis
Use ToolboxQuaternion to convert G1 IMU quaternions to roll/pitch/yaw, apply ToolboxFFT on gyroscope channels to detect mechanical resonance, and use Moving Average to smooth foot_force data for gait analysis.

PlotJuggler Lua Custom Functions: Computing Power and Tracking Error for G1
Use PlotJuggler Custom Function Editor to write Lua scripts that compute per-joint power (τ × dq) and velocity tracking error — detecting overloaded joints on Unitree G1 that /lowstate does not expose directly.

ZMQ + VideoViewer: Sim-to-Real Debug for G1 with PlotJuggler
Build a ZMQ bridge from MuJoCo/Python to PlotJuggler to stream G1 simulation state in real time, synchronize VideoViewer with real hardware data, and compare per-joint and per-gait-phase sim-to-real gaps — the most advanced workflow in the series.