From 443705ced3c0e544a383237c76104ce2d97d94d2 Mon Sep 17 00:00:00 2001 From: Brunsmeier <2970937094@qq.com> Date: Wed, 24 Jun 2026 13:27:18 +0800 Subject: [PATCH] Feat: visualization code implemented --- imu_quality.png | Bin 0 -> 127384 bytes visualise.py | 327 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 327 insertions(+) create mode 100644 imu_quality.png create mode 100644 visualise.py diff --git a/imu_quality.png b/imu_quality.png new file mode 100644 index 0000000000000000000000000000000000000000..30003e6de2179456aa254fe3cee22ca124b78af8 GIT binary patch literal 127384 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 literal 0 HcmV?d00001 diff --git a/visualise.py b/visualise.py new file mode 100644 index 0000000..5dd34ae --- /dev/null +++ b/visualise.py @@ -0,0 +1,327 @@ +import argparse +import ast +import csv +import os +import re +import sys +import time + +os.environ.setdefault("MPLCONFIGDIR", "/tmp/matplotlib") + +import matplotlib.pyplot as plt +import numpy as np +import serial + +from pc_reader import PACKET_SIZE, SYNC, decode_packet + + +TEXT_LINE_RE = re.compile( + r"#?\s*(?P\d+)\s+" + r"(?P[-+]?\d+(?:\.\d+)?)Hz\s+" + r"DIN=(?P\[[^\]]+\])\s+" + r"DOUT=(?P\[[^\]]+\])\s+" + r"ACC=(?P\[[^\]]+\])\s+" + r"GYRO=(?P\[[^\]]+\])\s+" + r"ANGLE=(?P\[[^\]]+\])" +) + + +FIELD_NAMES = ( + "acc_x_g", + "acc_y_g", + "acc_z_g", + "gyro_x_dps", + "gyro_y_dps", + "gyro_z_dps", + "angle_x_deg", + "angle_y_deg", + "angle_z_deg", + "temp_c", + "freq_hz", +) + + +def read_serial_samples(port, baud, seconds=None, max_samples=None, max_gap_ms=1000): + samples = [] + buffer = bytearray() + last_t_ms = None + elapsed_s = 0.0 + bad_delta_count = 0 + start = time.monotonic() + + with serial.Serial(port, baud, timeout=1) as ser: + print("Reading {} at {} baud...".format(port, baud), file=sys.stderr) + + while True: + if seconds is not None and time.monotonic() - start >= seconds: + break + if max_samples is not None and len(samples) >= max_samples: + break + + chunk = ser.read(ser.in_waiting or 1) + if chunk: + buffer.extend(chunk) + + while len(buffer) >= PACKET_SIZE: + sync_index = buffer.find(SYNC) + if sync_index < 0: + del buffer[:-1] + break + if sync_index: + del buffer[:sync_index] + if len(buffer) < PACKET_SIZE: + break + + packet = bytes(buffer[:PACKET_SIZE]) + if (sum(packet[:-1]) & 0xFF) != packet[-1]: + del buffer[0] + continue + + del buffer[:PACKET_SIZE] + data = decode_packet(packet) + + if last_t_ms is None: + freq_hz = 0.0 + else: + delta = (data["t_ms"] - last_t_ms) & 0xFFFFFFFF + if 0 < delta <= max_gap_ms: + elapsed_s += delta / 1000.0 + freq_hz = 1000.0 / delta + else: + bad_delta_count += 1 + freq_hz = 0.0 + + last_t_ms = data["t_ms"] + samples.append(flatten_packet(data, elapsed_s, freq_hz)) + + if max_samples is not None and len(samples) >= max_samples: + break + + if bad_delta_count: + print( + "Ignored {} abnormal packet time delta(s).".format(bad_delta_count), + file=sys.stderr, + ) + + return samples + + +def flatten_packet(data, t_s, freq_hz): + return { + "t_s": t_s, + "acc_x_g": data["acc_g"][0], + "acc_y_g": data["acc_g"][1], + "acc_z_g": data["acc_g"][2], + "gyro_x_dps": data["gyro_dps"][0], + "gyro_y_dps": data["gyro_dps"][1], + "gyro_z_dps": data["gyro_dps"][2], + "angle_x_deg": data["angle_deg"][0], + "angle_y_deg": data["angle_deg"][1], + "angle_z_deg": data["angle_deg"][2], + "temp_c": data["temp_c"], + "freq_hz": freq_hz, + "din0": data["din"][0], + "din1": data["din"][1], + "din2": data["din"][2], + "din3": data["din"][3], + "dout0": data["dout"][0], + "dout1": data["dout"][1], + } + + +def read_text_log(path): + samples = [] + t_s = 0.0 + + with open(path, "r", encoding="utf-8") as f: + for line in f: + match = TEXT_LINE_RE.search(line) + if not match: + continue + + freq_hz = float(match.group("freq")) + din = ast.literal_eval(match.group("din")) + dout = ast.literal_eval(match.group("dout")) + acc = ast.literal_eval(match.group("acc")) + gyro = ast.literal_eval(match.group("gyro")) + angle = ast.literal_eval(match.group("angle")) + + if samples and freq_hz > 0: + t_s += 1.0 / freq_hz + + samples.append( + { + "t_s": t_s, + "acc_x_g": acc[0], + "acc_y_g": acc[1], + "acc_z_g": acc[2], + "gyro_x_dps": gyro[0], + "gyro_y_dps": gyro[1], + "gyro_z_dps": gyro[2], + "angle_x_deg": angle[0], + "angle_y_deg": angle[1], + "angle_z_deg": angle[2], + "temp_c": np.nan, + "freq_hz": freq_hz, + "din0": din[0], + "din1": din[1], + "din2": din[2], + "din3": din[3], + "dout0": dout[0], + "dout1": dout[1], + } + ) + + return samples + + +def write_csv(samples, path): + if not samples: + return + + columns = list(samples[0].keys()) + with open(path, "w", newline="", encoding="utf-8") as f: + writer = csv.DictWriter(f, fieldnames=columns) + writer.writeheader() + writer.writerows(samples) + + +def print_stats(samples): + if not samples: + print("No samples parsed.") + return + + print("Samples: {}".format(len(samples))) + print("Duration: {:.3f}s".format(samples[-1]["t_s"] - samples[0]["t_s"])) + + for group_name, fields in ( + ("ACC g", ("acc_x_g", "acc_y_g", "acc_z_g")), + ("GYRO dps", ("gyro_x_dps", "gyro_y_dps", "gyro_z_dps")), + ("ANGLE deg", ("angle_x_deg", "angle_y_deg", "angle_z_deg")), + ): + print("\n{}".format(group_name)) + for field in fields: + values = np.array([sample[field] for sample in samples], dtype=float) + diffs = np.diff(values) + diff_std = float(np.std(diffs)) if len(diffs) else 0.0 + print( + " {:12s} mean={: .6f} std={:.6f} ptp={:.6f} diff_std={:.6f}".format( + field, + float(np.mean(values)), + float(np.std(values)), + float(np.ptp(values)), + diff_std, + ) + ) + + freq = np.array([sample["freq_hz"] for sample in samples[1:]], dtype=float) + if len(freq): + print( + "\nFrequency Hz mean={:.3f} std={:.3f} min={:.3f} max={:.3f}".format( + float(np.mean(freq)), + float(np.std(freq)), + float(np.min(freq)), + float(np.max(freq)), + ) + ) + + +def plot_samples(samples, output=None, show=True): + if not samples: + raise ValueError("No samples to plot.") + + t = np.array([sample["t_s"] for sample in samples], dtype=float) + fig, axes = plt.subplots(4, 1, sharex=True, figsize=(13, 9)) + + plot_group( + axes[0], + t, + samples, + ("acc_x_g", "acc_y_g", "acc_z_g"), + "Acceleration (g)", + ) + plot_group( + axes[1], + t, + samples, + ("gyro_x_dps", "gyro_y_dps", "gyro_z_dps"), + "Gyro (deg/s)", + ) + plot_group( + axes[2], + t, + samples, + ("angle_x_deg", "angle_y_deg", "angle_z_deg"), + "Angle (deg)", + ) + + freq = np.array([sample["freq_hz"] for sample in samples], dtype=float) + axes[3].plot(t, freq, label="freq_hz", color="tab:purple", linewidth=1.0) + axes[3].set_ylabel("Hz") + axes[3].set_xlabel("Time (s)") + axes[3].grid(True, alpha=0.3) + axes[3].legend(loc="upper right") + + fig.suptitle("IMU Data Quality Overview") + fig.tight_layout() + + if output: + fig.savefig(output, dpi=160) + print("Saved plot to {}".format(output)) + + if show: + plt.show() + + +def plot_group(axis, t, samples, fields, ylabel): + for field in fields: + values = np.array([sample[field] for sample in samples], dtype=float) + axis.plot(t, values, label=field, linewidth=1.0) + axis.set_ylabel(ylabel) + axis.grid(True, alpha=0.3) + axis.legend(loc="upper right", ncol=3) + + +def main(): + parser = argparse.ArgumentParser( + description="Read ESP IMU data and visualise signal quality/noise." + ) + source = parser.add_mutually_exclusive_group(required=True) + source.add_argument("--file", help="pc_reader text log, for example rcd.txt") + source.add_argument("--port", help="ESP32 serial port, for example /dev/ttyUSB0") + parser.add_argument("--baud", type=int, default=115200) + parser.add_argument("--seconds", type=float, default=10.0) + parser.add_argument("--samples", type=int) + parser.add_argument( + "--max-gap-ms", + type=int, + default=1000, + help="Ignore packet timestamp jumps larger than this.", + ) + parser.add_argument("--output", default="imu_quality.png") + parser.add_argument("--csv", help="Optional CSV export path.") + parser.add_argument("--no-show", action="store_true", help="Save only; do not open a window.") + args = parser.parse_args() + + if args.file: + samples = read_text_log(args.file) + else: + samples = read_serial_samples( + args.port, + args.baud, + args.seconds, + args.samples, + args.max_gap_ms, + ) + + print_stats(samples) + + if args.csv: + write_csv(samples, args.csv) + print("Saved CSV to {}".format(args.csv)) + + plot_samples(samples, output=args.output, show=not args.no_show) + + +if __name__ == "__main__": + main()