5 Commits

Author SHA1 Message Date
lars 6bae5a4be7 Added own measurements for own robot 2020-11-29 10:11:37 +01:00
lars ec2e442fcf Modified gitignore, so added documentation files won't be uploaded 2020-11-29 10:06:45 +01:00
lade043 6a333de4c3 Update .gitignore, adding .ipynb files 2020-02-21 10:59:18 +01:00
lars 56160fa519 added break for databaseCreator 2019-05-25 13:28:43 +02:00
lars 7001f9063f bug fix 2019-05-19 11:25:24 +02:00
5 changed files with 67 additions and 20 deletions
+14
View File
@@ -108,3 +108,17 @@ tests/
# last position of robot thru terminalControl # last position of robot thru terminalControl
.robotpos.file .robotpos.file
# temp data for databaseCreator so it can be run from the last point
database.temp
# Jupyter notebooks for testing
*.ipynb
# Files created for own documentation purposes, not ready for public
Roboter.aux
Roboter.log
Roboter.pdf
Roboter.synctex.gz
Roboter.tex
Roboter.toc
+14 -8
View File
@@ -31,7 +31,7 @@ class Robot:
rad = deg * math.pi / 180 rad = deg * math.pi / 180
return rad return rad
def _calc_previous(self): def calc_previous(self):
if self.previous_servos: if self.previous_servos:
self.total_angle_deg = 0 self.total_angle_deg = 0
for servo in self.previous_servos: for servo in self.previous_servos:
@@ -44,11 +44,12 @@ class Robot:
self.total_angle_deg = self.deg self.total_angle_deg = self.deg
if self.delta < 0: if self.delta < 0:
self.delta *= -1 self.delta *= -1
self.total_angle_rad = self._get_rad(self.total_angle_deg)
def set_angle(self, angle): def set_angle(self, angle):
self.deg = angle self.deg = angle
self.rad = self._get_rad(self.deg) self.rad = self._get_rad(self.deg)
self._calc_previous() self.calc_previous()
def _get_angle(self, ms): def _get_angle(self, ms):
val_min = self.geometry.min val_min = self.geometry.min
@@ -67,7 +68,7 @@ class Robot:
self.ms = ms self.ms = ms
self.deg = self._get_angle(self.ms) self.deg = self._get_angle(self.ms)
self.rad = self._get_rad(self.deg) self.rad = self._get_rad(self.deg)
self._calc_previous() self.calc_previous()
def get_ms(self, calc=False): def get_ms(self, calc=False):
if calc: if calc:
@@ -153,11 +154,14 @@ class Robot:
def deserialize(self, string): def deserialize(self, string):
entries = string.split("\n") entries = string.split("\n")
for entry in entries: for entry in entries:
coordinates = entry.split(":")[0] if entry:
servos = entry.split(":")[1] coordinates = entry.split(":")[0].split(',')
new = self.Entry(float(coordinates[0]), float(coordinates[1]), -1, float(servos[0]), float(servos[1]), servos = entry.split(":")[1].split(',')
float(servos[2])) new = self.Entry(float(coordinates[0]), float(coordinates[1]), -1,
self.database.append(new) 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): def __init__(self, s1, s2, s3, coordinatessystem):
self.servo1 = s1 self.servo1 = s1
@@ -200,6 +204,8 @@ class Robot:
return effi return effi
def calculate(self): def calculate(self):
for servo in [self.servo1, self.servo2, self.servo3]:
servo.calc_previous()
self.x, self.y = self._get_position() self.x, self.y = self._get_position()
self.efficency = self._get_efficency() self.efficency = self._get_efficency()
self.x = self._round(self.x) self.x = self._round(self.x)
+39 -12
View File
@@ -1,4 +1,5 @@
import numpy as npy import numpy as npy
import sys
from RobotLib import * from RobotLib import *
@@ -7,20 +8,28 @@ class Looper:
def __init__(self, Robot): def __init__(self, Robot):
self.stepsize = 1 self.stepsize = 1
self.robot = Robot 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): def run(self):
for ang_servo1 in npy.arange(self.robot.servo1.min, self.robot.servo1.max, self.stepsize): try:
self.robot.servo1.set_angle(ang_servo1) for ang_servo1 in npy.arange(self.servo1_start, self.robot.servo1.max, self.stepsize):
for ang_servo2 in npy.arange(self.robot.servo2.min, self.robot.servo2.max, self.stepsize): self.robot.servo1.set_angle(ang_servo1)
self.robot.servo2.set_angle(ang_servo2) for ang_servo2 in npy.arange(self.servo2_start, self.robot.servo2.max, self.stepsize):
for ang_servo3 in npy.arange(self.robot.servo3.min, self.robot.servo3.max, self.stepsize): self.robot.servo2.set_angle(ang_servo2)
self.robot.servo3.set_angle(ang_servo3) for ang_servo3 in npy.arange(self.servo3_start, self.robot.servo3.max, self.stepsize):
self.robot.calculate() self.robot.servo3.set_angle(ang_servo3)
self.robot.data.add_entry(self.robot.Database.Entry(self.robot.x, self.robot.y, self.robot.calculate()
self.robot.efficency, self.robot.data.add_entry(self.robot.Database.Entry(self.robot.x, self.robot.y,
self.robot.servo1, self.robot.servo2, self.robot.efficency,
self.robot.servo3)) self.robot.servo1, self.robot.servo2,
print("A database with {} entries has been created.".format(len(self.robot.data.database))) 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): def export(self):
file = open("database.data", 'w') file = open("database.data", 'w')
@@ -29,6 +38,23 @@ class Looper:
file.close() file.close()
print("Exported") 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)), 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)), 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]) None, [test.servo1], [test.servo1, test.servo2])
looper = Looper(test) looper = Looper(test)
# looper.deserialize('database.temp')
looper.run() looper.run()
looper.export() looper.export()
print("finished") print("finished")
Binary file not shown.
Binary file not shown.