Compare commits
No commits in common. "c7be46b7e348258754d8f56b79c191c70bd7e20e" and "e8c57334f333c9faf654776eea6f3b3444bb81b8" have entirely different histories.
c7be46b7e3
...
e8c57334f3
@ -44,7 +44,7 @@
|
|||||||
0.0
|
0.0
|
||||||
],
|
],
|
||||||
"time_robot_movement": [
|
"time_robot_movement": [
|
||||||
0.14,
|
0.314,
|
||||||
0.331
|
0.331
|
||||||
],
|
],
|
||||||
"object_thickness": [
|
"object_thickness": [
|
||||||
|
|||||||
@ -12,10 +12,10 @@
|
|||||||
0.25
|
0.25
|
||||||
],
|
],
|
||||||
"a_max_2": [
|
"a_max_2": [
|
||||||
50.0
|
10.0
|
||||||
],
|
],
|
||||||
"v_max_2": [
|
"v_max_2": [
|
||||||
1.0
|
0.25
|
||||||
],
|
],
|
||||||
"mass_1": [
|
"mass_1": [
|
||||||
270.0
|
270.0
|
||||||
|
|||||||
@ -37,40 +37,18 @@ class OptAlgorithm(AutoConfigClass):
|
|||||||
return max(self.Ts["topen_2_mark"], self.Ts["topen_1_mark"]) - self.time_command
|
return max(self.Ts["topen_2_mark"], self.Ts["topen_1_mark"]) - self.time_command
|
||||||
|
|
||||||
def V1Close(self, t: float):
|
def V1Close(self, t: float):
|
||||||
if "v1close" in self.__dict__.keys():
|
if t < self.Ts["tclose_1_acc"]:
|
||||||
return self.v1close(t)
|
return self.a_max_1 * t
|
||||||
self.v1close = PhaseCalc(cummulative=False)
|
else:
|
||||||
xwait = lambda t: 0
|
return self.a_max_1 * self.Ts["tclose_1_acc"]
|
||||||
xacc = lambda t: self.a_max_1 * t
|
|
||||||
v1 = (self.Ts["tclose_1_acc"]) * self.a_max_1
|
|
||||||
xspeed = lambda t: v1
|
|
||||||
xdec = lambda t: v1 - self.a_max_1 * t
|
|
||||||
xend = lambda t: 0
|
|
||||||
self.v1close.add_phase(self.Ts["tclose_1_wait"], xwait)
|
|
||||||
self.v1close.add_phase(self.Ts["tclose_1_acc"], xacc)
|
|
||||||
self.v1close.add_phase(self.Ts["tclose_1_speed"], xspeed)
|
|
||||||
self.v1close.add_phase(self.Ts["tclose_1_dec"], xdec)
|
|
||||||
self.v1close.add_phase(self.INF, xend)
|
|
||||||
return self.v1close(t)
|
|
||||||
|
|
||||||
def X1Close(self, T: float):
|
def X1Close(self, t: float):
|
||||||
if "x1close" in self.__dict__.keys():
|
t1 = min(t, self.Ts["tclose_1_acc"])
|
||||||
return self.x1close(T)
|
x0 = self.a_max_1 * t1 * t1 / 2
|
||||||
self.x1close = PhaseCalc(cummulative=True)
|
|
||||||
xwait = lambda t: 0
|
t2 = max(t - self.Ts["tclose_1_acc"], 0)
|
||||||
xacc = lambda t: self.a_max_1 * t * t /2
|
x1 = self.a_max_1 * self.Ts["tclose_1_acc"] * t2
|
||||||
v1 = (self.Ts["tclose_1_acc"]) * self.a_max_1
|
return x0 + x1 + self.x1_start
|
||||||
xspeed = lambda t: v1 * t
|
|
||||||
xdec = lambda t: v1 * t - self.a_max_1 * t * t /2
|
|
||||||
xstart = lambda t: self.x1_start
|
|
||||||
xend = lambda t: 0
|
|
||||||
self.x1close.add_phase(0, xstart)
|
|
||||||
self.x1close.add_phase(self.Ts["tclose_1_wait"], xwait)
|
|
||||||
self.x1close.add_phase(self.Ts["tclose_1_acc"], xacc)
|
|
||||||
self.x1close.add_phase(self.Ts["tclose_1_speed"], xspeed)
|
|
||||||
self.x1close.add_phase(self.Ts["tclose_1_dec"], xdec)
|
|
||||||
self.x1close.add_phase(self.INF, xend)
|
|
||||||
return self.x1close(T)
|
|
||||||
|
|
||||||
def V2Close(self, t: float):
|
def V2Close(self, t: float):
|
||||||
if t < self.Ts["tclose_2_acc"]:
|
if t < self.Ts["tclose_2_acc"]:
|
||||||
|
|||||||
@ -21,12 +21,8 @@ class OptTimeCalculator(AutoConfigClass):
|
|||||||
v0q = min(sqrt(2 * self.a_max_1 * h1), self.v_max_1)
|
v0q = min(sqrt(2 * self.a_max_1 * h1), self.v_max_1)
|
||||||
v0 = min(v0q, sqrt(1 / (self.k_hardness_1 * self.mass_1)) * self.Ftogrow)
|
v0 = min(v0q, sqrt(1 / (self.k_hardness_1 * self.mass_1)) * self.Ftogrow)
|
||||||
t1 = v0 / self.a_max_1
|
t1 = v0 / self.a_max_1
|
||||||
hleft = (h1 - (self.a_max_1 * t1 * t1 / 2))
|
t2t = max(0, (h1 - (self.a_max_1 * t1 * t1 / 2)) / v0)
|
||||||
t3 = min((v0q - v0)/ self.a_max_1, sqrt(self.a_max_1 * hleft))
|
T1 = t1 + t2t
|
||||||
v1 = (t1 + t3) * self.a_max_1
|
|
||||||
hleft2 = h1 - (self.a_max_1 * (t1+t3) * (t1+t3) / 2) - v1 * t3 + t3**2 * self.a_max_1 / 2
|
|
||||||
t2t = max(0, hleft2 / v1)
|
|
||||||
T1 = t1 + t2t + t3
|
|
||||||
|
|
||||||
t21 = sqrt(h2 / (self.a_max_2))
|
t21 = sqrt(h2 / (self.a_max_2))
|
||||||
t21 = min(self.v_max_2 / self.a_max_2, t21)
|
t21 = min(self.v_max_2 / self.a_max_2, t21)
|
||||||
@ -35,13 +31,11 @@ class OptTimeCalculator(AutoConfigClass):
|
|||||||
|
|
||||||
Tclose = max(T1, T2)
|
Tclose = max(T1, T2)
|
||||||
|
|
||||||
tclose_1_wait, tclose_1_acc, tclose_1_speed, tclose_1_dec = self.calcFirstClose(Tclose, h1)
|
tclose_1_acc, tclose_1_speed = self.calcFirstClose(Tclose, h1)
|
||||||
tclose_2_acc, tclose_2_speed = self.calcSecondClose(Tclose, h2)
|
tclose_2_acc, tclose_2_speed = self.calcSecondClose(Tclose, h2)
|
||||||
|
|
||||||
self.allTimes["tclose_1_acc"] = tclose_1_acc
|
self.allTimes["tclose_1_acc"] = tclose_1_acc
|
||||||
self.allTimes["tclose_1_speed"] = tclose_1_speed
|
self.allTimes["tclose_1_speed"] = tclose_1_speed
|
||||||
self.allTimes["tclose_1_wait"] = tclose_1_wait
|
|
||||||
self.allTimes["tclose_1_dec"] = tclose_1_dec
|
|
||||||
|
|
||||||
self.allTimes["tclose_2_acc"] = tclose_2_acc
|
self.allTimes["tclose_2_acc"] = tclose_2_acc
|
||||||
self.allTimes["tclose_2_speed"] = tclose_2_speed
|
self.allTimes["tclose_2_speed"] = tclose_2_speed
|
||||||
@ -182,7 +176,7 @@ class OptTimeCalculator(AutoConfigClass):
|
|||||||
t5max = (Tfull - v0 / a) / 2 - t1
|
t5max = (Tfull - v0 / a) / 2 - t1
|
||||||
v1 = v0 + a * t1
|
v1 = v0 + a * t1
|
||||||
S1 = v0 * t1 + a * t1 * t1 / 2 + v1 * t31 - a * t31 * t31 / 2 + v0 * t31
|
S1 = v0 * t1 + a * t1 * t1 / 2 + v1 * t31 - a * t31 * t31 / 2 + v0 * t31
|
||||||
S2max = abs(Sfull) + S1
|
S2max = -Sfull + S1
|
||||||
t5 = min(t5max, (vmax) / a, sqrt(S2max / a))
|
t5 = min(t5max, (vmax) / a, sqrt(S2max / a))
|
||||||
t3 = abs(v0) / a + t1 + t5
|
t3 = abs(v0) / a + t1 + t5
|
||||||
t32 = t5
|
t32 = t5
|
||||||
@ -195,9 +189,6 @@ class OptTimeCalculator(AutoConfigClass):
|
|||||||
|
|
||||||
t2max = (timeleft - Sleft / v3) / (1 + v1 / v3)
|
t2max = (timeleft - Sleft / v3) / (1 + v1 / v3)
|
||||||
Smovement = -v0 * t1 - a / 2 * t1 ** 2 - v1 * t31 + a / 2 * t31 ** 2
|
Smovement = -v0 * t1 - a / 2 * t1 ** 2 - v1 * t31 + a / 2 * t31 ** 2
|
||||||
if v1 == 0:
|
|
||||||
t2 = 0
|
|
||||||
else:
|
|
||||||
t2 = max(0, min(t2max, (abs(maxL) - abs(Smovement)) / v1))
|
t2 = max(0, min(t2max, (abs(maxL) - abs(Smovement)) / v1))
|
||||||
t4 = max(0, Sleft / v3 + v1 / v3 * t2)
|
t4 = max(0, Sleft / v3 + v1 / v3 * t2)
|
||||||
|
|
||||||
@ -215,23 +206,14 @@ class OptTimeCalculator(AutoConfigClass):
|
|||||||
T = Tfull
|
T = Tfull
|
||||||
self.allTimes["tmovement"] = T
|
self.allTimes["tmovement"] = T
|
||||||
|
|
||||||
def calcFirstClose(self, T: float, s: float) -> tuple[float, float, float, float]:
|
def calcFirstClose(self, T: float, s: float) -> tuple[float, float]:
|
||||||
v0q = min(sqrt(2 * self.a_max_1 * s), self.v_max_1)
|
v0q = min(sqrt(2 * self.a_max_1 * s), self.v_max_1)
|
||||||
v0 = min(v0q, sqrt(1 / (self.k_hardness_1 * self.mass_1)) * self.Ftogrow)
|
v0 = min(v0q, sqrt(1 / (self.k_hardness_1 * self.mass_1)) * self.Ftogrow)
|
||||||
t2 = T - sqrt(max(0, T ** 2 - 2 * s / self.a_max_1))
|
t1 = T - sqrt(max(0, T ** 2 - 2 * s / self.a_max_1))
|
||||||
if t2 * self.a_max_1 < v0:
|
if t1 > v0/ self.a_max_1 + self.check_eps:
|
||||||
#we should wait to end with max speed
|
raise Exception("""Мы вышли за границы разгона - смыкание FE, вообще не знаю как так получилось""")
|
||||||
t2 = v0 / self.a_max_1
|
t2 = max(0, (s - self.a_max_1 * t1 ** 2 / 2) / (self.a_max_1 * t1))
|
||||||
t3 = max(0, (s - self.a_max_1 * t2 ** 2 / 2) / (self.a_max_1 * t2))
|
return t1, t2
|
||||||
t1 = T - t2 - t3
|
|
||||||
t4 = 0
|
|
||||||
else:
|
|
||||||
t1 = 0
|
|
||||||
t2 = min(v0q / self.a_max_1, (T + v0/self.a_max_1)/2 - sqrt(max(0, (T + v0/self.a_max_1)**2 - 4 * (v0**2 / (2 * self.a_max_1**2) + s / self.a_max_1))) / 2)
|
|
||||||
v1 = t2 * self.a_max_1
|
|
||||||
t4 = max(0, v1-v0) / self.a_max_1
|
|
||||||
t3 = max(0, T - t2 - t4)
|
|
||||||
return t1, t2, t3, t4
|
|
||||||
|
|
||||||
def calcFirstOpen(self, T: float, s: float) -> tuple[float, float]:
|
def calcFirstOpen(self, T: float, s: float) -> tuple[float, float]:
|
||||||
t1 = T / 2 - sqrt(max(0, T ** 2 - 4 * s / self.a_max_1)) / 2
|
t1 = T / 2 - sqrt(max(0, T ** 2 - 4 * s / self.a_max_1)) / 2
|
||||||
|
|||||||
@ -82,10 +82,10 @@ class PassportFormer(BasePointPassportFormer):
|
|||||||
for key, value in self._params[0].items()
|
for key, value in self._params[0].items()
|
||||||
}
|
}
|
||||||
|
|
||||||
displacement_me = -0.01
|
displacement_me = -0.005
|
||||||
displacement_fe = -0.01
|
displacement_fe = -0.005
|
||||||
|
|
||||||
operator_settings["distance_h_end1"] -= displacement_fe
|
operator_settings["distance_h_end1"] += displacement_fe
|
||||||
operator_settings["distance_h_end2"] += displacement_me
|
operator_settings["distance_h_end2"] += displacement_me
|
||||||
|
|
||||||
params_list = [operator_settings, system_settings]
|
params_list = [operator_settings, system_settings]
|
||||||
|
|||||||
@ -268,12 +268,8 @@ class PlotWidget(BasePlotWidget):
|
|||||||
self._add_stage_regions(plot_item, point_events, dataframe_headers, reg_items, 75)
|
self._add_stage_regions(plot_item, point_events, dataframe_headers, reg_items, 75)
|
||||||
|
|
||||||
if settings["workpiece"]:
|
if settings["workpiece"]:
|
||||||
#x1 = point_timeframe[0]
|
x1 = point_timeframe[0]
|
||||||
#dx = point_timeframe[1] - x1
|
dx = point_timeframe[1] - x1
|
||||||
|
|
||||||
x1 = point_events["Closing"][0]
|
|
||||||
dx = point_events["Relief"][1] - x1
|
|
||||||
|
|
||||||
y1 = useful_p_data["position"]*1000
|
y1 = useful_p_data["position"]*1000
|
||||||
dy = useful_p_data["thickness"]*1000
|
dy = useful_p_data["thickness"]*1000
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user