Skip to content

Commit 26d0162

Browse files
committed
Supported multi-history guesses, and some changes for eng_display
1 parent f5c84b2 commit 26d0162

File tree

2 files changed

+39
-98
lines changed

2 files changed

+39
-98
lines changed

helpers/direct_triangulation.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,18 @@ def display_triangulation(self, resolved_position):
8080
# print("dt displayTriangulation")
8181
if self.multi_pipe is None:
8282
return
83+
d1 = ((Vector2(resolved_position[0], resolved_position[1]) - self.res1).magnitude()) / 1000
84+
d2 = ((Vector2(resolved_position[0], resolved_position[1]) - self.res2).magnitude()) / 1000
8385
self.multi_pipe.send({
8486
"cmd": "connect_points",
8587
"args":{
8688
"pos1":resolved_position,
8789
"pos2":(self.res1.x, self.res1.y),
8890
"dashed":True,
89-
"color":"#6b92a7"
91+
"color":"#6b92a7",
92+
"text": str(round(d1)) + "m",
93+
"text_size": 10,
94+
"text_color": "#6b92a7"
9095
}
9196
})
9297
self.multi_pipe.send({
@@ -95,7 +100,10 @@ def display_triangulation(self, resolved_position):
95100
"pos1":resolved_position,
96101
"pos2":(self.res2.x, self.res2.y),
97102
"dashed":True,
98-
"color":"#6b92a7"
103+
"color":"#6b92a7",
104+
"text": str(round(d1)) + "m",
105+
"text_size": 10,
106+
"text_color": "#6b92a7"
99107
}
100108
})
101109
for guess in self.guess_list:

helpers/node.py

Lines changed: 29 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class Node:
1111
max_dist = 1000000 # mm
1212
max_history = 10
1313
max_move_per_cycle = 5000
14+
use_s_last = True
1415

1516
def __init__(self, node_id=None, name=None, is_base=False, x=None, y=None, multi_pipe=None):
1617
if node_id is None:
@@ -62,22 +63,11 @@ def start_new_cycle(self):
6263
self.position_history.pop(0)
6364

6465
self.added_position = False
65-
# if self.measurements:
66-
# self.measurement_history.append(self.measurements)
67-
# if len(self.measurement_history) > config.MAX_HISTORY:
68-
# self.measurement_history.pop(0)
69-
# self.measurements = []
7066

7167
def add_measurement(self, node_b, dist, std=None):
7268
if dist > Node.min_dist and dist < Node.max_dist:
73-
# print(key)
74-
# print(self.measurement_history)
75-
# print(self.measurement_history[key])
7669
self.measurements.append(Measurement(self, node_b, dist, std=std))
77-
# self.add_to_communicate_list(node_b)
7870
else:
79-
# self.measurements.append(Measurement(self, node_b, None))
80-
# self.add_to_communicate_list(node_b)
8171
print(f"Discarded meas with {dist} distance to node {node_b.id} due to bounding error.")
8272

8373
def is_resolved(self):
@@ -88,6 +78,11 @@ def get_last_position(self):
8878
if len(self.position_history) == 0:
8979
return None
9080
return self.position_history[len(self.position_history)-1]
81+
82+
def get_second_last_position(self):
83+
if len(self.position_history) < 2:
84+
return None
85+
return self.position_history[len(self.position_history)-2]
9186

9287
def get_avg_position(self):
9388
x_sum = 0
@@ -119,26 +114,8 @@ def display_triangulations(self):
119114
dt.display_triangulation((self.x, self.y))
120115

121116
def set_position_vec(self, pos):
122-
# last = self.get_last_position()
123-
# if last is None:
124-
# last_pos = pos
125-
# else:
126-
# last_pos = Vector2(last[0], last[1])
127-
# offset = last_pos - pos
128-
# d = offset.magnitude()
129-
130-
# print(d)
131-
132-
# if d <= Node.max_move_per_cycle:
133117
self.x = pos.x
134118
self.y = pos.y
135-
# else:
136-
# vel = self.get_avg_velocity()
137-
# pos = Vector2(last[0], last[1])
138-
# new_pos = pos + vel
139-
# self.x = new_pos.x
140-
# self.y = new_pos.y
141-
# self.extrapolate = True
142119

143120
self.position_history.append((pos.x, pos.y))
144121
self.added_position = True
@@ -149,10 +126,15 @@ def set_position_vec(self, pos):
149126

150127
def consider_last_location(self):
151128
last = self.get_last_position()
129+
slast = self.get_second_last_position()
152130
if last is not None:
153131
dt = DirectTriangulation(None, None, None, None, empty=True)
154132
dt.directly_add_guess(Vector2(last[0], last[1]))
155133
self.add_triangulation(dt)
134+
if Node.use_s_last and slast is not None:
135+
dt = DirectTriangulation(None, None, None, None, empty=True)
136+
dt.directly_add_guess(Vector2(slast[0], slast[1]))
137+
self.add_triangulation(dt)
156138

157139
def get_position(self):
158140
return self.x, self.y
@@ -166,58 +148,10 @@ def get_real_position(self):
166148
def get_real_position_vec(self):
167149
return Vector2(self.real_x, self.real_y)
168150

169-
# def error_to_str(self):
170-
# if self.x is not None and self.y is not None:
171-
# offset = self.get_position_vec() - self.get_real_position_vec()
172-
# d = offset.magnitude()
173-
# return "{:.3f}ft".format(d)
174-
# else:
175-
# return "Unresolved"
176-
177-
# def print_report(self):
178-
# if self.x is not None and self.y is not None:
179-
# print(str(self), " : ", self.error_to_str() + ' error')
180-
181151
def get_measurement(self, node_id, history_avg=True):
182-
# if history_avg:
183-
# dist = 0
184-
# counter = 0
185-
# node2 = None
186-
# for meas in self.measurement_history[node_id]:
187-
# if meas.dist == None or meas.dist == 0:
188-
# continue
189-
# node2 = meas.node2
190-
# dist = dist + meas.dist
191-
# counter = counter + 1
192-
# if counter > 0:
193-
# dist = dist / counter
194-
# else:
195-
# return None
196-
# return Measurement(self, node2, dist)
197-
# else:
198152
return next(filter(lambda m: m.node2.id == node_id, self.measurements))
199153

200154
def get_measurements(self, history_avg=True):
201-
# if history_avg:
202-
# m = []
203-
# for node in self.communicate_list:
204-
# key = node.id
205-
# dist = 0
206-
# counter = 0
207-
# for meas in self.measurement_history[key]:
208-
# if meas.dist == None or meas.dist == 0:
209-
# continue
210-
# dist = dist + meas.dist
211-
# counter = counter + 1
212-
# if counter > 0:
213-
# dist = dist / counter
214-
# else:
215-
# print("NONE MEAS")
216-
# m.append(Measurement(self, node, dist))
217-
# # for measurement in self.measurements:
218-
# # m.append(measurement.avg_with_history(self.measurement_history))
219-
# return m
220-
# else:
221155
return self.measurements
222156

223157
def clear_measurements(self):
@@ -226,10 +160,6 @@ def clear_measurements(self):
226160
def show(self):
227161
if self.x is None or self.y is None or self.multi_pipe is None:
228162
return
229-
# fill = "white"
230-
# if Distance(self.get_real_position_vec(), self.get_position_vec()) < 20:
231-
# fill = "green"
232-
# size = 10
233163
cmd_obj = {
234164
"cmd": "draw_circle",
235165
"args": {
@@ -239,30 +169,33 @@ def show(self):
239169
"outline": "",
240170
"x": self.x,
241171
"y": self.y,
242-
"convert_to_m": True
172+
"convert_to_m": True,
173+
"text":self.id
243174
}
244175
}
245176
if self.is_base:
246177
cmd_obj['args']['fill'] = "yellow"
178+
else:
179+
for hist in self.position_history:
180+
h = {
181+
"cmd": "draw_circle",
182+
"args": {
183+
"fill": "grey",
184+
"r": 100,
185+
"tags": ['node'],
186+
"outline": "",
187+
"x": hist[0],
188+
"y": hist[1],
189+
"convert_to_m": True
190+
}
191+
}
192+
self.multi_pipe.send(h)
247193

248194
if self.extrapolate:
249195
cmd_obj['args']['fill'] = "purple"
250196

251197
self.multi_pipe.send(cmd_obj)
252-
# obj = canvas.create_circle(
253-
# self.x, self.y, size, fill=fill, outline="", tags=['node'])
254-
# if self.real_obj is not None:
255-
# coords = canvas.coords(self.real_obj)
256-
# x = (coords[0] + coords[2])/2
257-
# y = (coords[1] + coords[3])/2
258-
# canvas.create_line(self.x, self.y, x, y,
259-
# fill="#3c4048", dash=(3, 5))
260-
# canvas.tag_raise(obj)
261-
# canvas.tag_raise(self.real_obj)
262-
# self.guess_obj = obj
263-
# self.__class__.node_arr[obj] = "#" + str(self.resolution_order) + " | " + str(self) + ' | ' + self.errorToStr()
264-
# canvas.tag_bind(obj, '<Enter>', self.__class__.nodeEnter)
265-
# canvas.tag_bind(obj, '<Leave>', self.__class__.nodeLeave)
198+
266199

267200
def to_string(self):
268201
if self.x is not None and self.y is not None:

0 commit comments

Comments
 (0)