Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6bae5a4be7 | |||
| ec2e442fcf | |||
| 6a333de4c3 | |||
| 56160fa519 | |||
| 7001f9063f |
+14
@@ -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
@@ -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
@@ -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.
Reference in New Issue
Block a user