diff --git a/.gitignore b/.gitignore index abef767..22e468d 100644 --- a/.gitignore +++ b/.gitignore @@ -108,3 +108,6 @@ tests/ # last position of robot thru terminalControl .robotpos.file + +# temp data for databaseCreator so it can be run from the last point +database.temp diff --git a/RobotLib.py b/RobotLib.py index e9de35e..3fb9a3d 100644 --- a/RobotLib.py +++ b/RobotLib.py @@ -154,11 +154,14 @@ class Robot: def deserialize(self, string): entries = string.split("\n") for entry in entries: - coordinates = entry.split(":")[0] - servos = entry.split(":")[1] - new = self.Entry(float(coordinates[0]), float(coordinates[1]), -1, float(servos[0]), float(servos[1]), - float(servos[2])) - self.database.append(new) + if entry: + coordinates = entry.split(":")[0].split(',') + servos = entry.split(":")[1].split(',') + new = self.Entry(float(coordinates[0]), float(coordinates[1]), -1, + Robot.Servo(float(servos[0]), Robot.Servo.Geometry(0, 0, 0)), + Robot.Servo(float(servos[1]), Robot.Servo.Geometry(0, 0, 0)), + Robot.Servo(float(servos[2]), Robot.Servo.Geometry(0, 0, 0))) + self.database.append(new) def __init__(self, s1, s2, s3, coordinatessystem): self.servo1 = s1 diff --git a/databaseCreatorv2.py b/databaseCreatorv2.py index c38b312..ba62e88 100644 --- a/databaseCreatorv2.py +++ b/databaseCreatorv2.py @@ -1,4 +1,5 @@ import numpy as npy +import sys from RobotLib import * @@ -7,20 +8,28 @@ class Looper: def __init__(self, Robot): self.stepsize = 1 self.robot = Robot + self.servo1_start = self.robot.servo1.min + self.servo2_start = self.robot.servo2.min + self.servo3_start = self.robot.servo3.min def run(self): - for ang_servo1 in npy.arange(self.robot.servo1.min, self.robot.servo1.max, self.stepsize): - self.robot.servo1.set_angle(ang_servo1) - for ang_servo2 in npy.arange(self.robot.servo2.min, self.robot.servo2.max, self.stepsize): - self.robot.servo2.set_angle(ang_servo2) - for ang_servo3 in npy.arange(self.robot.servo3.min, self.robot.servo3.max, self.stepsize): - self.robot.servo3.set_angle(ang_servo3) - self.robot.calculate() - self.robot.data.add_entry(self.robot.Database.Entry(self.robot.x, self.robot.y, - self.robot.efficency, - self.robot.servo1, self.robot.servo2, - self.robot.servo3)) - print("A database with {} entries has been created.".format(len(self.robot.data.database))) + try: + for ang_servo1 in npy.arange(self.servo1_start, self.robot.servo1.max, self.stepsize): + self.robot.servo1.set_angle(ang_servo1) + for ang_servo2 in npy.arange(self.servo2_start, self.robot.servo2.max, self.stepsize): + self.robot.servo2.set_angle(ang_servo2) + for ang_servo3 in npy.arange(self.servo3_start, self.robot.servo3.max, self.stepsize): + self.robot.servo3.set_angle(ang_servo3) + self.robot.calculate() + self.robot.data.add_entry(self.robot.Database.Entry(self.robot.x, self.robot.y, + self.robot.efficency, + self.robot.servo1, self.robot.servo2, + self.robot.servo3)) + print("A database with {} entries has been created.".format(len(self.robot.data.database))) + except KeyboardInterrupt: + self.serialize("database.temp") + print("Serialized") + sys.exit() def export(self): file = open("database.data", 'w') @@ -29,6 +38,23 @@ class Looper: file.close() print("Exported") + def serialize(self, filepath): + with open(filepath, 'w') as file: + line = "{},{},{}\n".format(self.robot.servo1.deg, self.robot.servo2.deg, self.robot.servo3.deg) + file.write(line) + file.write(self.robot.data.serialize()) + file.flush() + + def deserialize(self, filepath): + with open(filepath, 'r') as file: + line = file.readline() + line = line.split(',') + self.servo1_start = float(line[0]) + self.servo2_start = float(line[1]) + self.servo3_start = float(line[2]) + lines = file.read() + self.robot.data.deserialize(lines) + test = Robot(Robot.Servo(1, Robot.Servo.Geometry(0.55, 2.3, 1.4)), Robot.Servo(2, Robot.Servo.Geometry(2.5, 0.55, 1.55)), @@ -38,6 +64,7 @@ test.init_depending(Robot.Arm(test.servo1, 10.26, 0.84), Robot.Arm(test.servo2, None, [test.servo1], [test.servo1, test.servo2]) looper = Looper(test) +# looper.deserialize('database.temp') looper.run() looper.export() print("finished")