...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#!/usr/bin/env python import matplotlib.pyplot as plt import argparse import subprocess import sys def main(): parser = argparse.ArgumentParser(prog="polyfit", usage="%(prog)s [options] val val val [val...]") parser.add_argument('val', nargs='*', help='3 or more values') parser.add_argument('-r', type=int, default=10, help='trigger rate ratio (default=10)') parser.add_argument('-o', type=int, default=2, help='order of polynomial (default=2)') parser.add_argument('-v', action='store_true', help='be verbose') args = parser.parse_args() ratio = args.r order = args.o cmd = ["./eigen", "-o", f"{order}", "-r", f"{ratio}"] + args.val if len(args.val) < 3: parser.error("3 or more values required") if args.v: print(f"cmd: {cmd}") xx = subprocess.run(cmd, capture_output=True) result = xx.stdout.decode('UTF-8').strip() res = [ float(x) for x in result.split(",") ] if args.v: print(f"ratio: {ratio}") slow_times = range(0, ratio * len(args.val), ratio) fast_times = range(0, len(res), 1) if args.v: print(f"slow_times: (len {len(slow_times)}): {slow_times}") print(f"args.val: (len {len(args.val)}): {args.val}") print(f"fast_times: (len {len(fast_times)}): {fast_times}") print(f"res: (len {len(res)}): {res}") intval = [int(v) for v in args.val] plt.plot(slow_times, intval, 'ro', markersize=12.0) plt.plot(fast_times, res, 'g^') plt.title(f'Interpolated Encoder Values (order={order})') plt.grid(True) plt.show() if __name__ == '__main__': main() |
Example Plots
View file