Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
__pycache__/
gpslog.csv
log/*
.vscode/
config/local/
config/local/
18 changes: 12 additions & 6 deletions Driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#

import math
import pathlib
import sys
import time

Expand Down Expand Up @@ -37,15 +38,18 @@


class Driver:
def __init__(self, filename):
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)
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)

# setup time manager
self._time_manager = TimeManager()
Expand All @@ -66,7 +70,9 @@ def __init__(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)

# setup pwm read/write
self._pwm_read = PwmRead(
Expand Down Expand Up @@ -256,11 +262,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
Expand Down
79 changes: 67 additions & 12 deletions Logger.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
import argparse
import csv
from datetime import datetime
import pathlib
from datetime import datetime, timedelta, timezone

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):
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"
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",
Expand All @@ -32,17 +42,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)
8 changes: 6 additions & 2 deletions Waypoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
21 changes: 14 additions & 7 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
# Author: Tetsuro Ninomiya
#

import argparse
import sys
import time


def main():
Expand All @@ -21,16 +21,12 @@ 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

driver = Driver(args[1])
driver = Driver(args.input_file_path, args.write_waypoints_fig)

try:
# Confirming initial mode
Expand All @@ -47,5 +43,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()
33 changes: 0 additions & 33 deletions visualization.py

This file was deleted.