Implemented oversampling (untested!)

This commit is contained in:
2023-01-31 10:54:09 +01:00
parent e9937b1269
commit 35a0779b2d
2 changed files with 21 additions and 16 deletions
+5 -4
View File
@@ -410,12 +410,13 @@ class MagnetometerCalibrationSimple(Thread):
class MagnetometerCalibrationComplete(Thread):
def __init__(self, view_queue, calibration_points, calibration_interval, calibration_mag_field,
mgm_to_helmholtz_cos_trans, right_column):
calibration_oversampling, mgm_to_helmholtz_cos_trans, right_column):
Thread.__init__(self)
self.view_queue = view_queue
self.calibration_points = calibration_points
self.calibration_interval = calibration_interval
self.calibration_mag_field = calibration_mag_field
self.var_oversampling = calibration_oversampling
self.matrix_trans_mgm_to_hh = [[x.get() for x in row] for row in mgm_to_helmholtz_cos_trans]
self.right_column = right_column
@@ -451,9 +452,9 @@ class MagnetometerCalibrationComplete(Thread):
# This contains the raw experiment data for exporting
# Each row is a dict containing the applied vector and measured vector
raw_data = []
var_oversampling = 5
self.var_oversampling = 5
for i in range(var_oversampling):
for i in range(self.var_oversampling):
# Find sensor offsets. They must be found prior to applying the chosen calibration algorithm
# This will be accurate if the cage was recently calibrated
self.cage_dev.set_field_compensated([0, 0, 0])
@@ -480,7 +481,7 @@ class MagnetometerCalibrationComplete(Thread):
applied_vec = test_vec * self.calibration_mag_field
self.cage_dev.set_field_compensated(applied_vec) # Set compensated field not raw field
for i in range(var_oversampling):
for i in range(self.var_oversampling):
# Sleep for a certain duration to allow psu to stabilize output and magnetometer to supply readings
time.sleep(self.calibration_interval)
+16 -12
View File
@@ -1121,14 +1121,7 @@ class CalibrateMagnetometerSimple(Frame):
calibration_point_nr__unit = Label(controls_frame, text="- (> 8 points)")
calibration_point_nr__unit.grid(row=1, column=2, pady=5, sticky="nw")
# Measurement interval
calibration_point_nr_label = Label(controls_frame, text="Measurement interval [s]")
calibration_point_nr_label.grid(row=2, column=0, pady=5, sticky="nw")
calibration_point_nr_entry = Entry(controls_frame, textvariable=self.calibration_interval_var)
calibration_point_nr_entry.grid(row=2, column=1, pady=5, sticky="nw")
calibration_point_nr_unit = Label(controls_frame, text="s (> 2 s)")
calibration_point_nr_unit.grid(row=2, column=2, pady=5, sticky="nw")
# Measurement interval
calibration_point_nr_label = Label(controls_frame, text="Measurement interval [s]")
calibration_point_nr_label = Label(controls_frame, text="Measurement interval")
calibration_point_nr_label.grid(row=2, column=0, pady=5, sticky="nw")
calibration_point_nr_entry = Entry(controls_frame, textvariable=self.calibration_interval_var)
calibration_point_nr_entry.grid(row=2, column=1, pady=5, sticky="nw")
@@ -1547,6 +1540,7 @@ class CalibrateMagnetometerComplete(Frame):
self.mag_field_magnitude_var = DoubleVar(value=100)
self.calibration_points_var = IntVar(value=8)
self.calibration_interval_var = DoubleVar(value=5)
self.calibration_oversampling_var = DoubleVar(value=1)
# Calibration results
self.a_mat_result_vars = [[DoubleVar(), DoubleVar(), DoubleVar()],
[DoubleVar(), DoubleVar(), DoubleVar()],
@@ -1632,35 +1626,43 @@ class CalibrateMagnetometerComplete(Frame):
calibration_point_nr__unit = Label(controls_frame, text="- (> 8 points)")
calibration_point_nr__unit.grid(row=1, column=2, pady=5, sticky="nw")
# Measurement interval
calibration_point_nr_label = Label(controls_frame, text="Measurement interval [s]")
calibration_point_nr_label = Label(controls_frame, text="Measurement interval")
calibration_point_nr_label.grid(row=2, column=0, pady=5, sticky="nw")
calibration_point_nr_entry = Entry(controls_frame, textvariable=self.calibration_interval_var)
calibration_point_nr_entry.grid(row=2, column=1, pady=5, sticky="nw")
calibration_point_nr_unit = Label(controls_frame, text="s (> 2 s)")
calibration_point_nr_unit.grid(row=2, column=2, pady=5, sticky="nw")
# Oversampling
calibration_point_nr_label = Label(controls_frame, text="Oversampling (samples/setpoint)")
calibration_point_nr_label.grid(row=3, column=0, pady=5, sticky="nw")
calibration_point_nr_entry = Entry(controls_frame, textvariable=self.calibration_oversampling_var)
calibration_point_nr_entry.grid(row=3, column=1, pady=5, sticky="nw")
calibration_point_nr_unit = Label(controls_frame, text="- (>= 1)")
calibration_point_nr_unit.grid(row=3, column=2, pady=5, sticky="nw")
# Calibration start buttons
start_button_frame = Frame(controls_frame)
start_button_frame.grid(row=3, column=0, columnspan=1, sticky="nw")
start_button_frame.grid(row=4, column=0, columnspan=1, sticky="nw")
self.start_calibration_button = Button(start_button_frame, text="Start Calibration",
command=self.start_calibration_procedure,
pady=5, padx=5, font=SMALL_BUTTON_FONT)
self.start_calibration_button.grid(row=0, column=0, padx=10, pady=(30, 10), sticky="we")
# Reinitialize button
reinitialize_button_frame = Frame(controls_frame)
reinitialize_button_frame.grid(row=3, column=1, columnspan=1)
reinitialize_button_frame.grid(row=4, column=1, columnspan=1)
self.reinitialize_button = Button(reinitialize_button_frame, text="Reinitialize",
command=self.reinitialize,
pady=5, padx=5, font=SMALL_BUTTON_FONT)
self.reinitialize_button.grid(row=0, column=0, padx=10, pady=(30, 10), sticky="we")
# Calibration progress bar
progress_bar_frame = Frame(controls_frame)
progress_bar_frame.grid(row=4, column=0, columnspan=2)
progress_bar_frame.grid(row=5, column=0, columnspan=2)
calibration_procedure_progress_label = Label(progress_bar_frame, text="Progress:")
calibration_procedure_progress_label.grid(row=0, column=0, padx=10, pady=10, sticky="nw")
calibration_procedure_progress = ttk.Progressbar(progress_bar_frame,
length=240,
variable=self.calibration_procedure_progress_var)
calibration_procedure_progress.grid(row=0, column=1, padx=10, pady=10, sticky="nw")
row_counter += 1
# CENTER COLUMN
@@ -1936,12 +1938,14 @@ class CalibrateMagnetometerComplete(Frame):
calibration_points = self.calibration_points_var.get()
calibration_interval = self.calibration_interval_var.get()
calibration_mag_field = self.mag_field_magnitude_var.get() * 1e-6 # converted to micro Tesla
calibration_oversampling = self.calibration_oversampling_var.get()
if calibration_mag_field <= 0 or calibration_mag_field > g.MAG_MAG_FIELD:
raise MagFieldOutOfBounds
self.calibration_thread = MagnetometerCalibrationComplete(self.view_mpi_queue,
calibration_points,
calibration_interval,
calibration_mag_field,
calibration_oversampling,
self.mgm_to_helmholtz_cos_trans,
self.right_column)
self.calibration_thread.start()