From 6f0d20c7afc957cae385f3126cee1504ff3606e5 Mon Sep 17 00:00:00 2001 From: MiyashitaT Date: Sat, 17 Jul 2021 23:39:47 +0900 Subject: [PATCH 1/6] =?UTF-8?q?logger=E3=81=ABwaypoint=E5=8F=AF=E8=A6=96?= =?UTF-8?q?=E5=8C=96=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +-- Driver.py | 18 ++++++++---- Logger.py | 76 +++++++++++++++++++++++++++++++++++++++++------- Waypoint.py | 8 +++-- main.py | 21 ++++++++----- visualization.py | 33 --------------------- 6 files changed, 99 insertions(+), 61 deletions(-) delete mode 100644 visualization.py diff --git a/.gitignore b/.gitignore index 185795b..207f379 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ __pycache__/ -gpslog.csv -.vscode/ \ No newline at end of file +.vscode/ +log/* \ No newline at end of file diff --git a/Driver.py b/Driver.py index 3e394d8..f3ad3e5 100644 --- a/Driver.py +++ b/Driver.py @@ -9,6 +9,7 @@ # import math +import pathlib import sys import time @@ -54,7 +55,7 @@ def __init__(self): ) self._pid = PositionalPID() self._logger = Logger() - self._logger.open() + self._logger.open_gps_log() # Whether experienced OR mode or not self._or_experienced = False @@ -98,10 +99,13 @@ def check_mode_change(self): time.sleep(0.1) print("Procedure confirmed.") - def load_params(self, filename): + def load_params(self, filename, write_waypoint=False): print("loading", filename) - with open(filename, "r") as f: + + path = pathlib.Path(filename) + with open(path, "r") as f: params = yaml.safe_load(f) + self._logger.save_params(params, path) time_limit = params["time_limit"] sleep_time = params["sleep_time"] @@ -118,7 +122,9 @@ def load_params(self, filename): lat = wp["lat"] lon = wp["lon"] print(name, lat, lon) - self._status.waypoint.add_point(lat, lon) + self._status.waypoint.add_point(lat, lon, name) + if write_waypoint: + self._logger.save_waypoints_fig(self._statuswaypoint, path) return def do_operation(self): @@ -266,11 +272,11 @@ def _print_log(self): voltage, power, ] - self._logger.write(log_list) + self._logger.write_gps_log(log_list) return def end(self): - self._logger.close() + self._logger.close_gps_log() self._pwm_read.end() self._pwm_out.end() return diff --git a/Logger.py b/Logger.py index 5b1b99c..20840bc 100644 --- a/Logger.py +++ b/Logger.py @@ -1,15 +1,24 @@ +import argparse import csv +import pathlib from datetime import datetime +import matplotlib.pyplot as plt +import yaml + +from Waypoint import Waypoint -class Logger: - present = datetime.now() - now = present.strftime("%Y-%m-%d-%H-%M-%S") - filename = now + "_gpslog.csv" - def open(self): +class Logger: + def __init__(self): + present = datetime.now() + now = present.strftime("%Y-%m-%d-%H-%M-%S") + self.filename = "gpslog.csv" + self.log_dir = pathlib.Path("log") / now + self.log_dir.mkdir(exist_ok=True) - self.f = open(Logger.filename, "a") + def open_gps_log(self): + self.f = open(self.log_dir / self.filename, "a") self.writer = csv.writer(self.f, lineterminator="\n") log_list = [ "TIME_STAMP", @@ -32,17 +41,62 @@ def open(self): ] self.writer.writerow(log_list) - def write(self, log_list): + def write_gps_log(self, log_list): self.writer.writerow(log_list) - def close(self): + def close_gps_log(self): self.f.write("END\n") self.f.close() + def save_waypoints_fig(self, waypoint, path): + fig, ax = plt.subplots() + for name, lat, lon in zip(waypoint.name, waypoint.latitude, waypoint.longitude): + ax.scatter(lat, lon, label=name) + ax.axis("equal") + ax.legend() + fig.savefig(self.log_dir / path.with_suffix(".png")) + + def save_params(self, params, path): + with open(self.log_dir / path, "w") as f: + yaml.dump(params, f) + + +def _load_waypoints(filename): + path = pathlib.Path(filename) + with open(path, "r") as f: + params = yaml.safe_load(f) + waypoint = Waypoint() + for wp in params["waypoints"]: + name = wp["name"] + lat = wp["lat"] + lon = wp["lon"] + waypoint.add_point(lat, lon, name) + return waypoint, path + + +def _parse_args(): + """ + input_file_path: input fileのpath + """ + parser = argparse.ArgumentParser() + parser.add_argument("input_file_path") + parser.add_argument("-ww", "--write_waypoints_fig", action="store_true") + parser.add_argument("-wl", "--write_log", action="store_true") + args = parser.parse_args() + return args + # test code if __name__ == "__main__": + args = _parse_args() logger = Logger() - logger.open() - logger.write([1, 1, 1]) - logger.close() + if args.write_log: + logger.open_gps_log() + logger.write_gps_log([1, 1, 1]) + logger.close_gps_log() + if args.write_waypoints_fig: + waypoint, path = _load_waypoints(args.input_file_path) + logger.save_waypoints_fig(waypoint, path) + with open(args.input_file_path, "r") as f: + params = yaml.safe_load(f) + logger.save_params(params, args.input_file_path) diff --git a/Waypoint.py b/Waypoint.py index c9dc41a..0eea155 100644 --- a/Waypoint.py +++ b/Waypoint.py @@ -10,19 +10,23 @@ class Waypoint: - def __init__(self, latitude=None, longitude=None): + def __init__(self, latitude=None, longitude=None, name=None): if longitude is None: longitude = [] if latitude is None: latitude = [] + if name is None: + name = [] self.latitude = latitude self.longitude = longitude + self.name = name self._index = 0 self._num = 0 - def add_point(self, latitude, longitude): + def add_point(self, latitude, longitude, name): self.latitude.append(latitude) self.longitude.append(longitude) + self.name.append(name) self._num += 1 return diff --git a/main.py b/main.py index e8c4081..b31a24e 100644 --- a/main.py +++ b/main.py @@ -8,8 +8,8 @@ # Author: Tetsuro Ninomiya # +import argparse import sys -import time def main(): @@ -21,11 +21,7 @@ def main(): return # Command line arguments - args = sys.argv - if len(args) < 2: - print("[ERROR] NO ARGUMENTS") - print("Usage: python3 main.py [parameter_file]") - return + args = _parse_args() # Initialize from Driver import Driver @@ -34,7 +30,7 @@ def main(): try: # Load parameters - driver.load_params(args[1]) + driver.load_params(args.input_file_path, args.write_waypoints_fig) # Confirming initial mode driver.check_mode_change() @@ -50,5 +46,16 @@ def main(): print("finish") +def _parse_args(): + """ + input_file_path: input fileのpath + """ + parser = argparse.ArgumentParser() + parser.add_argument("input_file_path") + parser.add_argument("-ww", "--write_waypoints_fig", action="store_true") + args = parser.parse_args() + return args + + if __name__ == "__main__": main() diff --git a/visualization.py b/visualization.py deleted file mode 100644 index 0f464f7..0000000 --- a/visualization.py +++ /dev/null @@ -1,33 +0,0 @@ -import argparse - -import matplotlib.pyplot as plt -import yaml - - -def parse_args(): - """ - input_file_path: input fileのpath - """ - parser = argparse.ArgumentParser() - parser.add_argument("input_file_path") - args = parser.parse_args() - return args - - -def visualize_waypoints(filename): - with open(filename, "r") as f: - params = yaml.safe_load(f) - - for wp in params["waypoints"]: - name = wp["name"] - lat = wp["lat"] - lon = wp["lon"] - plt.scatter(lat, lon, label=name) - plt.axis("equal") - plt.legend() - plt.show() - - -if __name__ == "__main__": - args = parse_args() - visualize_waypoints(args.input_file_path) From 288fff9063f78909fc68a7e9c009b57db20b96e2 Mon Sep 17 00:00:00 2001 From: MiyashitaT Date: Sat, 17 Jul 2021 23:41:20 +0900 Subject: [PATCH 2/6] =?UTF-8?q?vscode=E3=81=AE=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 207f379..a7451d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ __pycache__/ -.vscode/ log/* \ No newline at end of file From 37ff7851933fa697f9e2c730043f3b57a916f5a0 Mon Sep 17 00:00:00 2001 From: MiyashitaT Date: Sat, 17 Jul 2021 23:57:56 +0900 Subject: [PATCH 3/6] =?UTF-8?q?logger=E3=81=AE=E9=96=A2=E6=95=B0=E5=90=8D?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Driver.py b/Driver.py index 573e065..78365a4 100644 --- a/Driver.py +++ b/Driver.py @@ -41,7 +41,7 @@ class Driver: def __init__(self, filename, write_waypoint=False): self.log_time = time.time() self._logger = Logger() - self._logger.open() + self._logger.open_gps_log() # load config print("loading", filename) From 7348302c644b1212191cf47ffbc34b460637080e Mon Sep 17 00:00:00 2001 From: MiyashitaT Date: Sat, 17 Jul 2021 23:59:53 +0900 Subject: [PATCH 4/6] =?UTF-8?q?args=E3=82=92Driver=E3=81=AB=E6=B8=A1?= =?UTF-8?q?=E3=81=99=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 11834ae..17ef225 100644 --- a/main.py +++ b/main.py @@ -26,7 +26,7 @@ def main(): # Initialize from Driver import Driver - driver = Driver(args[1]) + driver = Driver(args.input_file_path, args.write_waypoints_fig) try: # Confirming initial mode From 6a5acad4f05262af3f7e02543fc25a3b66cc567e Mon Sep 17 00:00:00 2001 From: MiyashitaT Date: Sat, 7 Aug 2021 10:50:49 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=E6=97=A5=E6=9C=AC=E3=81=AE=E6=A8=99?= =?UTF-8?q?=E6=BA=96=E6=99=82=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Logger.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Logger.py b/Logger.py index 20840bc..59ac4c9 100644 --- a/Logger.py +++ b/Logger.py @@ -1,7 +1,7 @@ import argparse import csv import pathlib -from datetime import datetime +from datetime import datetime, timedelta, timezone import matplotlib.pyplot as plt import yaml @@ -11,9 +11,10 @@ class Logger: def __init__(self): - present = datetime.now() + jst = timezone(timedelta(hours=+9), 'JST') + present = datetime.now(jst) now = present.strftime("%Y-%m-%d-%H-%M-%S") - self.filename = "gpslog.csv" + self.filename = f"gpslog_{now}.csv" self.log_dir = pathlib.Path("log") / now self.log_dir.mkdir(exist_ok=True) From eb5524a932c50b99257664b4e60f70c067566ee5 Mon Sep 17 00:00:00 2001 From: autoformat Date: Sat, 7 Aug 2021 01:51:23 +0000 Subject: [PATCH 6/6] fixup: Format Python code with black and isort --- Logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Logger.py b/Logger.py index 59ac4c9..85e89f6 100644 --- a/Logger.py +++ b/Logger.py @@ -11,7 +11,7 @@ class Logger: def __init__(self): - jst = timezone(timedelta(hours=+9), 'JST') + jst = timezone(timedelta(hours=+9), "JST") present = datetime.now(jst) now = present.strftime("%Y-%m-%d-%H-%M-%S") self.filename = f"gpslog_{now}.csv"