From 80269b791f461a6cb9244c53c5ee677242208adc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 10:13:57 +0000 Subject: [PATCH 01/50] Bump gitpython from 3.1.40 to 3.1.41 Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.40 to 3.1.41. - [Release notes](https://github.com/gitpython-developers/GitPython/releases) - [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES) - [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.40...3.1.41) --- updated-dependencies: - dependency-name: gitpython dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 52e0c94..0066ac1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -GitPython==3.1.40 +GitPython==3.1.41 matplotlib==3.8.2 numpy==1.26.2 scipy==1.11.4 From ab5600804f6a9505785f10b5392d744a58c07484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 29 Apr 2024 17:50:45 +0200 Subject: [PATCH 02/50] better CSV file filtering --- src/graph_creators/graph_belts.py | 4 +- src/graph_creators/graph_shaper.py | 4 +- src/graph_creators/graph_vibrations.py | 2 + src/helpers/common_func.py | 54 +++++++++++++++++++------- 4 files changed, 47 insertions(+), 17 deletions(-) diff --git a/src/graph_creators/graph_belts.py b/src/graph_creators/graph_belts.py index edbb316..ed4fd38 100644 --- a/src/graph_creators/graph_belts.py +++ b/src/graph_creators/graph_belts.py @@ -457,8 +457,8 @@ def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_versi global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) - # Parse data - datas = [parse_log(fn) for fn in lognames] + # Parse data from the log files while ignoring CSV in the wrong format + datas = [data for data in (parse_log(fn) for fn in lognames) if data is not None] if len(datas) > 2: raise ValueError('Incorrect number of .csv files used (this function needs exactly two files to compare them)!') diff --git a/src/graph_creators/graph_shaper.py b/src/graph_creators/graph_shaper.py index aec74db..9b851c1 100644 --- a/src/graph_creators/graph_shaper.py +++ b/src/graph_creators/graph_shaper.py @@ -299,8 +299,8 @@ def shaper_calibration(lognames, klipperdir='~/klipper', max_smoothing=None, scv global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) - # Parse data - datas = [parse_log(fn) for fn in lognames] + # Parse data from the log files while ignoring CSV in the wrong format + datas = [data for data in (parse_log(fn) for fn in lognames) if data is not None] if len(datas) > 1: print_with_c_locale('Warning: incorrect number of .csv files detected. Only the first one will be used!') diff --git a/src/graph_creators/graph_vibrations.py b/src/graph_creators/graph_vibrations.py index ff551ee..8462839 100644 --- a/src/graph_creators/graph_vibrations.py +++ b/src/graph_creators/graph_vibrations.py @@ -651,6 +651,8 @@ def vibrations_profile( for logname in lognames: data = parse_log(logname) + if data is None: + continue # File is not in the expected format, skip it angle, speed = extract_angle_and_speed(logname) freq_response = calc_freq_response(data) first_freqs = freq_response.freq_bins diff --git a/src/helpers/common_func.py b/src/helpers/common_func.py index 14b9a24..49831a5 100644 --- a/src/helpers/common_func.py +++ b/src/helpers/common_func.py @@ -15,19 +15,47 @@ from scipy.signal import spectrogram def parse_log(logname): - with open(logname) as f: - for header in f: - if not header.startswith('#'): - break - if not header.startswith('freq,psd_x,psd_y,psd_z,psd_xyz'): - # Raw accelerometer data - return np.loadtxt(logname, comments='#', delimiter=',') - # Power spectral density data or shaper calibration data - raise ValueError( - 'File %s does not contain raw accelerometer data and therefore ' - 'is not supported by Shake&Tune. Please use the official Klipper ' - 'script to process it instead.' % (logname,) - ) + try: + with open(logname) as f: + header = None + for line in f: + cleaned_line = line.strip() + + # Check for a PSD file generated by Klipper and raise a warning + if cleaned_line.startswith('#freq,psd_x,psd_y,psd_z,psd_xyz'): + print( + 'Warning: %s does not contain raw accelerometer data. ' + 'Please use the official Klipper script to process it instead. ' + 'It will be ignored by Shake&Tune!' % (logname,) + ) + return None + + # Check for the expected header for Shake&Tune (raw accelerometer data from Klipper) + elif cleaned_line.startswith('#time,accel_x,accel_y,accel_z'): + header = cleaned_line + break + + if not header: + print( + 'Warning: file %s has an incorrect header and will be ignored by Shake&Tune!\n' + "Expected '#time,accel_x,accel_y,accel_z', but got '%s'." % (logname, header.strip()) + ) + return None + + # If we have the correct raw data header, proceed to load the data + data = np.loadtxt(logname, comments='#', delimiter=',', skiprows=1) + if data.ndim == 1 or data.shape[1] != 4: + print( + 'Warning: %s does not have the correct data format; expected 4 columns. ' + 'It will be ignored by Shake&Tune!' % (logname,) + ) + return None + + return data + + except Exception as err: + print(f'Error while reading {logname}: {err}. It will be ignored by Shake&Tune!') + return None def setup_klipper_import(kdir): From 17b7e1a2d2337d1eef0f06ee7c8eaa4a2ca6b820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Fri, 3 May 2024 20:08:17 +0200 Subject: [PATCH 03/50] cross-belt comparison plot --- src/graph_creators/graph_belts.py | 384 ++++++++++++++---------------- src/helpers/common_func.py | 22 -- 2 files changed, 185 insertions(+), 221 deletions(-) diff --git a/src/graph_creators/graph_belts.py b/src/graph_creators/graph_belts.py index ed4fd38..a3104c5 100644 --- a/src/graph_creators/graph_belts.py +++ b/src/graph_creators/graph_belts.py @@ -16,26 +16,17 @@ import matplotlib.font_manager import matplotlib.pyplot as plt import matplotlib.ticker import numpy as np -from scipy.interpolate import griddata matplotlib.use('Agg') -from ..helpers.common_func import ( - compute_curve_similarity_factor, - compute_spectrogram, - detect_peaks, - parse_log, - setup_klipper_import, -) +from ..helpers.common_func import detect_peaks, parse_log, setup_klipper_import from ..helpers.locale_utils import print_with_c_locale, set_locale ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' # For paired peaks names -PEAKS_DETECTION_THRESHOLD = 0.20 -CURVE_SIMILARITY_SIGMOID_K = 0.6 -DC_GRAIN_OF_SALT_FACTOR = 0.75 -DC_THRESHOLD_METRIC = 1.5e9 -DC_MAX_UNPAIRED_PEAKS_ALLOWED = 4 +PEAKS_DETECTION_THRESHOLD = 0.20 # Threshold to detect peaks in the PSD signal +DC_MAX_PEAKS = 2 # Maximum ideal number of peaks +DC_MAX_UNPAIRED_PEAKS_ALLOWED = 0 # No unpaired peaks are tolerated # Define the SignalData namedtuple SignalData = namedtuple('CalibrationData', ['freqs', 'psd', 'peaks', 'paired_peaks', 'unpaired_peaks']) @@ -103,78 +94,40 @@ def pair_peaks(peaks1, freqs1, psd1, peaks2, freqs2, psd2): ###################################################################### -# Interpolate source_data (2D) to match target_x and target_y in order to -# get similar time and frequency dimensions for the differential spectrogram -def interpolate_2d(target_x, target_y, source_x, source_y, source_data): - # Create a grid of points in the source and target space - source_points = np.array([(x, y) for y in source_y for x in source_x]) - target_points = np.array([(x, y) for y in target_y for x in target_x]) +def compute_mhi(similarity_coefficient, total_num_peaks, num_unpaired_peaks): + # Start with the similarity coefficient directly scaled to a percentage + base_percentage = similarity_coefficient - # Flatten the source data to match the flattened source points - source_values = source_data.flatten() + # Bonus for ideal number of total peaks (1 or 2) + if total_num_peaks <= DC_MAX_PEAKS: + peak_bonus = 1.1 # Boost by 10% if the number of peaks is ideal + else: + peak_bonus = DC_MAX_PEAKS / total_num_peaks # Reduce MHI if more than ideal number of peaks - # Interpolate and reshape the interpolated data to match the target grid shape and replace NaN with zeros - interpolated_data = griddata(source_points, source_values, target_points, method='nearest') - interpolated_data = interpolated_data.reshape((len(target_y), len(target_x))) - interpolated_data = np.nan_to_num(interpolated_data) + adjusted_percentage = base_percentage * peak_bonus - return interpolated_data - - -# Main logic function to combine two similar spectrogram - ie. from both belts paths - by substracting signals in order to create -# a new composite spectrogram. This result of a divergent but mostly centered new spectrogram (center will be white) with some colored zones -# highlighting differences in the belts paths. The summative spectrogram is used for the MHI calculation. -def compute_combined_spectrogram(data1, data2): - pdata1, bins1, t1 = compute_spectrogram(data1) - pdata2, bins2, t2 = compute_spectrogram(data2) - - # Interpolate the spectrograms - pdata2_interpolated = interpolate_2d(bins1, t1, bins2, t2, pdata2) - - # Combine them in two form: a summed diff for the MHI computation and a diverging diff for the spectrogram colors - combined_sum = np.abs(pdata1 - pdata2_interpolated) - combined_divergent = pdata1 - pdata2_interpolated - - return combined_sum, combined_divergent, bins1, t1 - - -# Compute a composite and highly subjective value indicating the "mechanical health of the printer (0 to 100%)" that represent the -# likelihood of mechanical issues on the printer. It is based on the differential spectrogram sum of gradient, salted with a bit -# of the estimated similarity cross-correlation from compute_curve_similarity_factor() and with a bit of the number of unpaired peaks. -# This result in a percentage value quantifying the machine behavior around the main resonances that give an hint if only touching belt tension -# will give good graphs or if there is a chance of mechanical issues in the background (above 50% should be considered as probably problematic) -def compute_mhi(combined_data, similarity_coefficient, num_unpaired_peaks): - # filtered_data = combined_data[combined_data > 100] - filtered_data = np.abs(combined_data) - - # First compute a "total variability metric" based on the sum of the gradient that sum the magnitude of will emphasize regions of the - # spectrogram where there are rapid changes in magnitude (like the edges of resonance peaks). - total_variability_metric = np.sum(np.abs(np.gradient(filtered_data))) - # Scale the metric to a percentage using the threshold (found empirically on a large number of user data shared to me) - base_percentage = (np.log1p(total_variability_metric) / np.log1p(DC_THRESHOLD_METRIC)) * 100 - - # Adjust the percentage based on the similarity_coefficient to add a grain of salt - adjusted_percentage = base_percentage * (1 - DC_GRAIN_OF_SALT_FACTOR * (similarity_coefficient / 100)) - - # Adjust the percentage again based on the number of unpaired peaks to add a second grain of salt - peak_confidence = num_unpaired_peaks / DC_MAX_UNPAIRED_PEAKS_ALLOWED - final_percentage = (1 - peak_confidence) * adjusted_percentage + peak_confidence * 100 + # Heavy penalty for unpaired peaks + if num_unpaired_peaks > DC_MAX_UNPAIRED_PEAKS_ALLOWED: + unpaired_peak_penalty = num_unpaired_peaks * 5 # Applying a strong penalty factor for each unpaired peak + final_percentage = adjusted_percentage - unpaired_peak_penalty + else: + final_percentage = adjusted_percentage # Ensure the result lies between 0 and 100 by clipping the computed value final_percentage = np.clip(final_percentage, 0, 100) - return final_percentage, mhi_lut(final_percentage) + return mhi_lut(final_percentage) # LUT to transform the MHI into a textual value easy to understand for the users of the script def mhi_lut(mhi): ranges = [ - (0, 30, 'Excellent mechanical health'), - (30, 45, 'Good mechanical health'), + (70, 100, 'Excellent mechanical health'), + (55, 70, 'Good mechanical health'), (45, 55, 'Acceptable mechanical health'), - (55, 70, 'Potential signs of a mechanical issue'), - (70, 85, 'Likely a mechanical issue'), - (85, 100, 'Mechanical issue detected'), + (30, 45, 'Potential signs of a mechanical issue'), + (15, 30, 'Likely a mechanical issue'), + (0, 15, 'Mechanical issue detected'), ] for lower, upper, message in ranges: if lower < mhi <= upper: @@ -188,22 +141,7 @@ def mhi_lut(mhi): ###################################################################### -def plot_compare_frequency(ax, lognames, signal1, signal2, similarity_factor, max_freq): - # Get the belt name for the legend to avoid putting the full file name - signal1_belt = (lognames[0].split('/')[-1]).split('_')[-1][0] - signal2_belt = (lognames[1].split('/')[-1]).split('_')[-1][0] - - if signal1_belt == 'A' and signal2_belt == 'B': - signal1_belt += ' (axis 1,-1)' - signal2_belt += ' (axis 1, 1)' - elif signal1_belt == 'B' and signal2_belt == 'A': - signal1_belt += ' (axis 1, 1)' - signal2_belt += ' (axis 1,-1)' - else: - print_with_c_locale( - "Warning: belts doesn't seem to have the correct name A and B (extracted from the filename.csv)" - ) - +def plot_compare_frequency(ax, signal1, signal2, signal1_belt, signal2_belt, max_freq): # Plot the two belts PSD signals ax.plot(signal1.freqs, signal1.psd, label='Belt ' + signal1_belt, color=KLIPPAIN_COLORS['purple']) ax.plot(signal2.freqs, signal2.psd, label='Belt ' + signal2_belt, color=KLIPPAIN_COLORS['orange']) @@ -287,7 +225,6 @@ def plot_compare_frequency(ax, lognames, signal1, signal2, similarity_factor, ma # Add estimated similarity to the graph ax2 = ax.twinx() # To split the legends in two box ax2.yaxis.set_visible(False) - ax2.plot([], [], ' ', label=f'Estimated similarity: {similarity_factor:.1f}%') ax2.plot([], [], ' ', label=f'Number of unpaired peaks: {unpaired_peak_count}') # Setting axis parameters, grid and graph title @@ -295,7 +232,7 @@ def plot_compare_frequency(ax, lognames, signal1, signal2, similarity_factor, ma ax.set_xlim([0, max_freq]) ax.set_ylabel('Power spectral density') psd_highest_max = max(signal1.psd.max(), signal2.psd.max()) - ax.set_ylim([0, psd_highest_max + psd_highest_max * 0.05]) + ax.set_ylim([0, psd_highest_max * 1.1]) ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) ax.yaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) @@ -305,7 +242,7 @@ def plot_compare_frequency(ax, lognames, signal1, signal2, similarity_factor, ma fontP = matplotlib.font_manager.FontProperties() fontP.set_size('small') ax.set_title( - 'Belts Frequency Profiles (estimated similarity: {:.1f}%)'.format(similarity_factor), + 'Belts frequency profiles', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold', @@ -321,7 +258,7 @@ def plot_compare_frequency(ax, lognames, signal1, signal2, similarity_factor, ma offset_table = ax.table( cellText=offsets_table_data, colLabels=columns, - bbox=[0.66, 0.75, 0.33, 0.15], + bbox=[0.66, 0.79, 0.33, 0.15], loc='upper right', cellLoc='center', ) @@ -340,91 +277,126 @@ def plot_compare_frequency(ax, lognames, signal1, signal2, similarity_factor, ma return -def plot_difference_spectrogram(ax, signal1, signal2, t, bins, combined_divergent, textual_mhi, max_freq): - ax.set_title('Differential Spectrogram', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') - ax.plot([], [], ' ', label=f'{textual_mhi} (experimental)') +# Compute quantile-quantile plot to compare the two belts +def plot_versus_belts(ax, common_freqs, signal1, signal2, interp_psd1, interp_psd2, signal1_belt, signal2_belt): + ax.set_title('Cross-belts comparison plot', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') - # Draw the differential spectrogram with a specific custom norm to get orange or purple values where there is signal or white near zeros - # imgshow is better suited here than pcolormesh since its result is already rasterized and we doesn't need to keep vector graphics - # when saving to a final .png file. Using it also allow to save ~150-200MB of RAM during the "fig.savefig" operation. - colors = [ - KLIPPAIN_COLORS['dark_orange'], - KLIPPAIN_COLORS['orange'], - 'white', - KLIPPAIN_COLORS['purple'], - KLIPPAIN_COLORS['dark_purple'], - ] - cm = matplotlib.colors.LinearSegmentedColormap.from_list( - 'klippain_divergent', list(zip([0, 0.25, 0.5, 0.75, 1], colors)) - ) - norm = matplotlib.colors.TwoSlopeNorm(vmin=np.min(combined_divergent), vcenter=0, vmax=np.max(combined_divergent)) - ax.imshow( - combined_divergent.T, - cmap=cm, - norm=norm, - aspect='auto', - extent=[t[0], t[-1], bins[0], bins[-1]], - interpolation='bilinear', - origin='lower', + max_psd = max(np.max(interp_psd1), np.max(interp_psd2)) + ideal_line = np.linspace(0, max_psd * 1.1, 500) + green_boundary = ideal_line + (0.35 * max_psd * np.exp(-ideal_line / (0.6 * max_psd))) + ax.fill_betweenx(ideal_line, ideal_line, green_boundary, color='green', alpha=0.15) + ax.fill_between(ideal_line, ideal_line, green_boundary, color='green', alpha=0.15, label='Good zone') + ax.plot( + ideal_line, + ideal_line, + '--', + label='Ideal line', + color='red', + linewidth=2, ) - ax.set_xlabel('Frequency (hz)') - ax.set_xlim([0.0, max_freq]) - ax.set_ylabel('Time (s)') - ax.set_ylim([0, bins[-1]]) + ax.plot(interp_psd1, interp_psd2, color='dimgrey', marker='o', markersize=1.5) + # ax.fill_betweenx(interp_psd2, interp_psd1, color='grey', alpha=0.2) + + paired_peak_count = 0 + unpaired_peak_count = 0 + + for _, (peak1, peak2) in enumerate(signal1.paired_peaks): + label = ALPHABET[paired_peak_count] + freq1 = signal1.freqs[peak1[0]] + freq2 = signal2.freqs[peak2[0]] + nearest_idx1 = np.argmin(np.abs(common_freqs - freq1)) + nearest_idx2 = np.argmin(np.abs(common_freqs - freq2)) + + if nearest_idx1 == nearest_idx2: + psd1_peak_value = interp_psd1[nearest_idx1] + psd2_peak_value = interp_psd2[nearest_idx1] + ax.plot(psd1_peak_value, psd2_peak_value, marker='o', color='black', markersize=7) + ax.annotate( + f'{label}1/{label}2', + (psd1_peak_value, psd2_peak_value), + textcoords='offset points', + xytext=(-7, 7), + fontsize=13, + color='black', + ) + else: + psd1_peak_value = interp_psd1[nearest_idx1] + psd1_on_peak = interp_psd1[nearest_idx2] + psd2_peak_value = interp_psd2[nearest_idx2] + psd2_on_peak = interp_psd2[nearest_idx1] + ax.plot(psd1_on_peak, psd2_peak_value, marker='o', color=KLIPPAIN_COLORS['orange'], markersize=7) + ax.plot(psd1_peak_value, psd2_on_peak, marker='o', color=KLIPPAIN_COLORS['purple'], markersize=7) + ax.annotate( + f'{label}1', + (psd1_peak_value, psd2_on_peak), + textcoords='offset points', + xytext=(0, 7), + fontsize=13, + color='black', + ) + ax.annotate( + f'{label}2', + (psd1_on_peak, psd2_peak_value), + textcoords='offset points', + xytext=(0, 7), + fontsize=13, + color='black', + ) + paired_peak_count += 1 + + for _, peak_index in enumerate(signal1.unpaired_peaks): + freq1 = signal1.freqs[peak_index] + freq2 = signal2.freqs[peak_index] + nearest_idx1 = np.argmin(np.abs(common_freqs - freq1)) + nearest_idx2 = np.argmin(np.abs(common_freqs - freq2)) + psd1_peak_value = interp_psd1[nearest_idx1] + psd2_peak_value = interp_psd2[nearest_idx1] + ax.plot(psd1_peak_value, psd2_peak_value, marker='o', color=KLIPPAIN_COLORS['purple'], markersize=7) + ax.annotate( + str(unpaired_peak_count + 1), + (psd1_peak_value, psd2_peak_value), + textcoords='offset points', + fontsize=13, + weight='bold', + color=KLIPPAIN_COLORS['red_pink'], + xytext=(0, 7), + ) + unpaired_peak_count += 1 + + for _, peak_index in enumerate(signal2.unpaired_peaks): + freq1 = signal1.freqs[peak_index] + freq2 = signal2.freqs[peak_index] + nearest_idx1 = np.argmin(np.abs(common_freqs - freq1)) + nearest_idx2 = np.argmin(np.abs(common_freqs - freq2)) + psd1_peak_value = interp_psd1[nearest_idx1] + psd2_peak_value = interp_psd2[nearest_idx1] + ax.plot(psd1_peak_value, psd2_peak_value, marker='o', color=KLIPPAIN_COLORS['orange'], markersize=7) + ax.annotate( + str(unpaired_peak_count + 1), + (psd1_peak_value, psd2_peak_value), + textcoords='offset points', + fontsize=13, + weight='bold', + color=KLIPPAIN_COLORS['red_pink'], + xytext=(0, 7), + ) + unpaired_peak_count += 1 + + ax.set_xlabel(f'Belt {signal1_belt}') + ax.set_ylabel(f'Belt {signal2_belt}') + ax.set_xlim([0, max_psd * 1.1]) + ax.set_ylim([0, max_psd * 1.1]) + + ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) + ax.yaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) + ax.ticklabel_format(axis='y', style='scientific', scilimits=(0, 0)) + ax.grid(which='major', color='grey') + ax.grid(which='minor', color='lightgrey') fontP = matplotlib.font_manager.FontProperties() fontP.set_size('medium') - ax.legend(loc='best', prop=fontP) - - # Plot vertical lines for unpaired peaks - unpaired_peak_count = 0 - for _, peak in enumerate(signal1.unpaired_peaks): - ax.axvline(signal1.freqs[peak], color=KLIPPAIN_COLORS['red_pink'], linestyle='dotted', linewidth=1.5) - ax.annotate( - f'Peak {unpaired_peak_count + 1}', - (signal1.freqs[peak], t[-1] * 0.05), - textcoords='data', - color=KLIPPAIN_COLORS['red_pink'], - rotation=90, - fontsize=10, - verticalalignment='bottom', - horizontalalignment='right', - ) - unpaired_peak_count += 1 - - for _, peak in enumerate(signal2.unpaired_peaks): - ax.axvline(signal2.freqs[peak], color=KLIPPAIN_COLORS['red_pink'], linestyle='dotted', linewidth=1.5) - ax.annotate( - f'Peak {unpaired_peak_count + 1}', - (signal2.freqs[peak], t[-1] * 0.05), - textcoords='data', - color=KLIPPAIN_COLORS['red_pink'], - rotation=90, - fontsize=10, - verticalalignment='bottom', - horizontalalignment='right', - ) - unpaired_peak_count += 1 - - # Plot vertical lines and zones for paired peaks - for idx, (peak1, peak2) in enumerate(signal1.paired_peaks): - label = ALPHABET[idx] - x_min = min(peak1[1], peak2[1]) - x_max = max(peak1[1], peak2[1]) - ax.axvline(x_min, color=KLIPPAIN_COLORS['dark_purple'], linestyle='dotted', linewidth=1.5) - ax.axvline(x_max, color=KLIPPAIN_COLORS['dark_purple'], linestyle='dotted', linewidth=1.5) - ax.fill_between([x_min, x_max], 0, np.max(combined_divergent), color=KLIPPAIN_COLORS['dark_purple'], alpha=0.3) - ax.annotate( - f'Peaks {label}', - (x_min, t[-1] * 0.05), - textcoords='data', - color=KLIPPAIN_COLORS['dark_purple'], - rotation=90, - fontsize=10, - verticalalignment='bottom', - horizontalalignment='right', - ) + ax.legend(loc='upper left', prop=fontP) return @@ -462,10 +434,16 @@ def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_versi if len(datas) > 2: raise ValueError('Incorrect number of .csv files used (this function needs exactly two files to compare them)!') + # Get the belts name for the legend to avoid putting the full file name + belt_info = {'A': ' (axis 1,-1)', 'B': ' (axis 1, 1)'} + signal1_belt = (lognames[0].split('/')[-1]).split('_')[-1][0] + signal2_belt = (lognames[1].split('/')[-1]).split('_')[-1][0] + signal1_belt += belt_info.get(signal1_belt, '') + signal2_belt += belt_info.get(signal2_belt, '') + # Compute calibration data for the two datasets with automatic peaks detection signal1 = compute_signal_data(datas[0], max_freq) signal2 = compute_signal_data(datas[1], max_freq) - combined_sum, combined_divergent, bins, t = compute_combined_spectrogram(datas[0], datas[1]) del datas # Pair the peaks across the two datasets @@ -475,38 +453,41 @@ def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_versi signal1 = signal1._replace(paired_peaks=paired_peaks, unpaired_peaks=unpaired_peaks1) signal2 = signal2._replace(paired_peaks=paired_peaks, unpaired_peaks=unpaired_peaks2) - # Compute the similarity (using cross-correlation of the PSD signals) - similarity_factor = compute_curve_similarity_factor( - signal1.freqs, signal1.psd, signal2.freqs, signal2.psd, CURVE_SIMILARITY_SIGMOID_K - ) - print_with_c_locale(f'Belts estimated similarity: {similarity_factor:.1f}%') - # Compute the MHI value from the differential spectrogram sum of gradient, salted with the similarity factor and the number of - # unpaired peaks from the belts frequency profile. Be careful, this value is highly opinionated and is pretty experimental! - mhi, textual_mhi = compute_mhi( - combined_sum, similarity_factor, len(signal1.unpaired_peaks) + len(signal2.unpaired_peaks) - ) - print_with_c_locale(f'[experimental] Mechanical Health Indicator: {textual_mhi.lower()} ({mhi:.1f}%)') + # Re-interpolate the PSD signals to a common frequency range to be able to plot them one against the other point by point + common_freqs = np.linspace(0, max_freq, 500) + interp_psd1 = np.interp(common_freqs, signal1.freqs, signal1.psd) + interp_psd2 = np.interp(common_freqs, signal2.freqs, signal2.psd) - # Create graph layout - fig, (ax1, ax2) = plt.subplots( - 2, + # Calculating R^2 to y=x line to compute the similarity between the two belts + ss_res = np.sum((interp_psd2 - interp_psd1) ** 2) + ss_tot = np.sum((interp_psd2 - np.mean(interp_psd2)) ** 2) + similarity_factor = (1 - (ss_res / ss_tot)) * 100 + print_with_c_locale(f'Belts estimated similarity: {similarity_factor:.1f}%') + + num_unpaired_peaks = len(unpaired_peaks1) + len(unpaired_peaks2) + num_peaks = len(paired_peaks) + num_unpaired_peaks + mhi = compute_mhi(similarity_factor, num_peaks, num_unpaired_peaks) + print_with_c_locale(f'[experimental] Mechanical health: {mhi}') + + fig, ((ax1, ax3)) = plt.subplots( 1, + 2, gridspec_kw={ - 'height_ratios': [4, 3], - 'bottom': 0.050, - 'top': 0.890, - 'left': 0.085, - 'right': 0.966, - 'hspace': 0.169, - 'wspace': 0.200, + 'width_ratios': [5, 3], + 'bottom': 0.080, + 'top': 0.840, + 'left': 0.050, + 'right': 0.985, + 'hspace': 0.166, + 'wspace': 0.138, }, ) - fig.set_size_inches(8.3, 11.6) + fig.set_size_inches(15, 7) # Add title title_line1 = 'RELATIVE BELTS CALIBRATION TOOL' fig.text( - 0.12, 0.965, title_line1, ha='left', va='bottom', fontsize=20, color=KLIPPAIN_COLORS['purple'], weight='bold' + 0.060, 0.947, title_line1, ha='left', va='bottom', fontsize=20, color=KLIPPAIN_COLORS['purple'], weight='bold' ) try: filename = lognames[0].split('/')[-1] @@ -517,14 +498,19 @@ def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_versi 'Warning: CSV filenames look to be different than expected (%s , %s)' % (lognames[0], lognames[1]) ) title_line2 = lognames[0].split('/')[-1] + ' / ' + lognames[1].split('/')[-1] - fig.text(0.12, 0.957, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.060, 0.939, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) + + title_line3 = f'| Estimated similarity: {similarity_factor:.1f}%' + title_line4 = f'| {mhi} (experimental)' + fig.text(0.55, 0.980, title_line3, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.55, 0.945, title_line4, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) # Plot the graphs - plot_compare_frequency(ax1, lognames, signal1, signal2, similarity_factor, max_freq) - plot_difference_spectrogram(ax2, signal1, signal2, t, bins, combined_divergent, textual_mhi, max_freq) + plot_compare_frequency(ax1, signal1, signal2, signal1_belt, signal2_belt, max_freq) + plot_versus_belts(ax3, common_freqs, signal1, signal2, interp_psd1, interp_psd2, signal1_belt, signal2_belt) # Adding a small Klippain logo to the top left corner of the figure - ax_logo = fig.add_axes([0.001, 0.8995, 0.1, 0.1], anchor='NW') + ax_logo = fig.add_axes([0.001, 0.894, 0.105, 0.105], anchor='NW') ax_logo.imshow(plt.imread(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'klippain.png'))) ax_logo.axis('off') diff --git a/src/helpers/common_func.py b/src/helpers/common_func.py index 49831a5..51f115b 100644 --- a/src/helpers/common_func.py +++ b/src/helpers/common_func.py @@ -232,25 +232,3 @@ def identify_low_energy_zones(power_total, detection_threshold=0.1): sorted_valleys = sorted(valley_means_percentage, key=lambda x: x[2]) return sorted_valleys - - -# Calculate or estimate a "similarity" factor between two PSD curves and scale it to a percentage. This is -# used here to quantify how close the two belts path behavior and responses are close together. -def compute_curve_similarity_factor(x1, y1, x2, y2, sim_sigmoid_k=0.6): - # Interpolate PSDs to match the same frequency bins and do a cross-correlation - y2_interp = np.interp(x1, x2, y2) - cross_corr = np.correlate(y1, y2_interp, mode='full') - - # Find the peak of the cross-correlation and compute a similarity normalized by the energy of the signals - peak_value = np.max(cross_corr) - similarity = peak_value / (np.sqrt(np.sum(y1**2) * np.sum(y2_interp**2))) - - # Apply sigmoid scaling to get better numbers and get a final percentage value - scaled_similarity = sigmoid_scale(-np.log(1 - similarity), sim_sigmoid_k) - - return scaled_similarity - - -# Simple helper to compute a sigmoid scalling (from 0 to 100%) -def sigmoid_scale(x, k=1): - return 1 / (1 + np.exp(-k * x)) * 100 From 78dcce412fc608d18471459481e8393a847175e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Fri, 3 May 2024 20:22:43 +0200 Subject: [PATCH 04/50] added kinematics info to belt comparison graph --- K-ShakeTune/K-SnT_belts.cfg | 4 +++- src/graph_creators/graph_belts.py | 13 +++++++++++-- src/is_workflow.py | 8 +++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/K-ShakeTune/K-SnT_belts.cfg b/K-ShakeTune/K-SnT_belts.cfg index cd4987c..12f5d67 100644 --- a/K-ShakeTune/K-SnT_belts.cfg +++ b/K-ShakeTune/K-SnT_belts.cfg @@ -12,6 +12,8 @@ gcode: {% set keep_results = params.KEEP_N_RESULTS|default(3)|int %} {% set keep_csv = params.KEEP_CSV|default(0)|int %} + {% set kinematics = printer.configfile.settings.printer.kinematics %} + TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=b FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} M400 @@ -20,4 +22,4 @@ gcode: RESPOND MSG="Belts comparative frequency profile generation..." RESPOND MSG="This may take some time (3-5min)" - RUN_SHELL_COMMAND CMD=shaketune PARAMS="--type belts {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" + RUN_SHELL_COMMAND CMD=shaketune PARAMS="--type belts --kinematics {kinematics} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" diff --git a/src/graph_creators/graph_belts.py b/src/graph_creators/graph_belts.py index a3104c5..d966302 100644 --- a/src/graph_creators/graph_belts.py +++ b/src/graph_creators/graph_belts.py @@ -424,7 +424,7 @@ def compute_signal_data(data, max_freq): ###################################################################### -def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_version=None): +def belts_calibration(lognames, kinematics, klipperdir='~/klipper', max_freq=200.0, st_version=None): set_locale() global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) @@ -493,6 +493,8 @@ def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_versi filename = lognames[0].split('/')[-1] dt = datetime.strptime(f"{filename.split('_')[1]} {filename.split('_')[2]}", '%Y%m%d %H%M%S') title_line2 = dt.strftime('%x %X') + if kinematics is not None: + title_line2 += ' -- ' + kinematics.upper() + ' kinematics' except Exception: print_with_c_locale( 'Warning: CSV filenames look to be different than expected (%s , %s)' % (lognames[0], lognames[1]) @@ -530,13 +532,20 @@ def main(): opts.add_option( '-k', '--klipper_dir', type='string', dest='klipperdir', default='~/klipper', help='main klipper directory' ) + opts.add_option( + '-m', + '--kinematics', + type='string', + dest='kinematics', + help='machine kinematics configuration', + ) options, args = opts.parse_args() if len(args) < 1: opts.error('Incorrect number of arguments') if options.output is None: opts.error('You must specify an output file.png to use the script (option -o)') - fig = belts_calibration(args, options.klipperdir, options.max_freq) + fig = belts_calibration(args, options.kinematics, options.klipperdir, options.max_freq) fig.savefig(options.output, dpi=150) diff --git a/src/is_workflow.py b/src/is_workflow.py index 5ae1370..c188413 100755 --- a/src/is_workflow.py +++ b/src/is_workflow.py @@ -207,8 +207,13 @@ class BeltsGraphCreator(GraphCreator): def __init__(self, keep_csv: bool = False, dpi: int = 150): super().__init__(keep_csv, dpi) + self._kinematics = None + self._setup_folder('belts') + def configure(self, kinematics: str) -> None: + self._kinematics = kinematics + def create_graph(self) -> None: lognames = self._move_and_prepare_files( glob_pattern='raw_data_axis*.csv', @@ -217,6 +222,7 @@ class BeltsGraphCreator(GraphCreator): ) fig = belts_calibration( lognames=[str(path) for path in lognames], + kinematics=self._kinematics, klipperdir=str(Config.KLIPPER_FOLDER), st_version=self._version, ) @@ -381,7 +387,7 @@ def main(): print_with_c_locale(f'Shake&Tune version: {Config.get_git_version()}') graph_creators = { - 'belts': (BeltsGraphCreator, None), + 'belts': (BeltsGraphCreator, lambda gc: gc.configure(options.kinematics)), 'shaper': (ShaperGraphCreator, lambda gc: gc.configure(options.scv, options.max_smoothing)), 'vibrations': ( VibrationsGraphCreator, From 8e517f2ca3d8a8af8fbce41288c213c94217d10d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sun, 5 May 2024 15:50:59 +0200 Subject: [PATCH 05/50] updated requirement to fix S&T on older Python version --- requirements.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 52e0c94..db89e34 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,7 @@ GitPython==3.1.40 -matplotlib==3.8.2 -numpy==1.26.2 -scipy==1.11.4 +matplotlib==3.8.2 ; python_version >= '3.9' +matplotlib==3.3.4 ; python_version < '3.9' +numpy==1.26.2 ; python_version >= '3.9' +numpy==1.19.5 ; python_version < '3.9' +scipy==1.11.4 ; python_version >= '3.9' +scipy==1.7.3 ; python_version < '3.9' From 8fff10ada2955cd7a7d7dec0fc07d1298d6c96a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 6 May 2024 11:55:38 +0200 Subject: [PATCH 06/50] some documentation and tuning workflow --- docs/README.md | 44 +++++++++++++++++++++++++++++++++++-- docs/macros/belts_tuning.md | 8 +++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/docs/README.md b/docs/README.md index d0f8f87..d76488c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,11 +2,51 @@ ![](./banner_long.png) + +When perfecting 3D prints and tuning your printer, there is all that resonance testing stuff that Shake&Tune will try to help you with. But keep in mind that it's part of a complete process, and Shake&Tune alone won't magically make your printer print at lightning speed. Also, when using the tools, **it's important to get back to the original need: good prints**. + +While there are some ideal goals described in this documentation, you need to understand that it's not always possible to achieve the ideal resonance graphs due to a variety of factors unique to each printer, such as precision of the assembly, quality and brand of components, components wear, etc. Even a different accelerometer can give different results. But that's not a problem; the primary goal is to produce clean and satisfactory prints. If your test prints look good and meet your standards, even if the response curves aren't perfect, you're on the right track. **Trust your printer and your print results more than chasing ideal graphs!** If it's satisfactory, there's no need for further adjustments. + + ## Resonance testing -First, check out the **[input shaping and tuning generalities](./is_tuning_generalities.md)** documentation to understand how it all works and what to look for when taking these measurements. +First, check out the **[input shaping and tuning generalities](./is_tuning_generalities.md)** documentation to understand how it all works and what to look for when taking these measurements. A standard tuning workflow might look something like this: -Then look at the documentation for each type of graph by clicking on them below tu run the tests and better understand your results to tune your machine! +```mermaid +flowchart LR + start([Start]) --> tensionBelts[Tension your\nbelts as best\n as possible] + checkmotion --> tensionBelts + tensionBelts --> SnT_Belts[Run Shake&Tune\nbelts comparison tool] + SnT_Belts --> goodbelts{Check the documentation\nDoes belts comparison profiles\nlook decent?} + goodbelts --> |YES| SnT_IS[Run Shake&Tune\naxis input shaper tool] + goodbelts --> |NO| checkmotion[Fix your mechanical assembly\nand your motion system] + SnT_IS --> goodIS{Check the documentation\nDoes axis profiles and\n input shapers look decent?} + goodIS --> |YES| SnT_Vibrations[Run Shake&Tune\nvibration profile tool] + goodIS--> |NO| checkmotion + SnT_Vibrations --> goodvibs{Check the documentation\nAre the graphs OK?\nSet the speeds in\nyour slicer profile} + goodvibs --> |YES| pressureAdvance[Tune your\npressure advance] + goodvibs --> |NO| checkTMC[Dig into TMC drivers\ntuning if you want to] + goodvibs --> |NO| checkmotion + checkTMC --> SnT_Vibrations + pressureAdvance --> extrusionMultiplier[Tune your\nextrusion multiplier] + extrusionMultiplier --> testPrint[Do a test print] + testPrint --> printGood{Is the print good?} + printGood --> |YES| unicorn{want to chase unicorns} + printGood --> |NO -> Underextrusion / Overextrusion| extrusionMultiplier + printGood --> |NO -> Corner humps and no ghosting| pressureAdvance + printGood --> |NO -> Visible VFAs| SnT_Vibrations + printGood --> |NO -> Ghosting, ringing, resonance| SnT_IS + unicorn --> |NO| done + unicorn --> |YES| SnT_Belts + + classDef default fill:#70088C,stroke:#150140,stroke-width:4px,color:#ffffff; + classDef questions fill:#FF8D32,stroke:#F24130,stroke-width:4px,color:#ffffff; + classDef startstop fill:#F2055C,stroke:#150140,stroke-width:3px; + class start,done startstop; + class goodbelts,goodIS,goodvibs,printGood,unicorn questions; +``` + +You can access the documentation for each type of graph by clicking on them below. | [Belt response comparison](./macros/belts_tuning.md) | [Axis input shaper graphs](./macros/axis_tuning.md) | [Vibrations profile](./macros/vibrations_profile.md) | |:----------------:|:------------:|:---------------------:| diff --git a/docs/macros/belts_tuning.md b/docs/macros/belts_tuning.md index 225ed00..0ce42c0 100644 --- a/docs/macros/belts_tuning.md +++ b/docs/macros/belts_tuning.md @@ -1,11 +1,11 @@ # Belt relative difference measurements -The `COMPARE_BELTS_RESPONSES` macro is dedicated for CoreXY machines where it can help you to diagnose belt path problems by measuring and plotting the differences between their behavior. It will also help you tension your belts at the same tension. +The `COMPARE_BELTS_RESPONSES` macro is dedicated for CoreXY machines where it can help you to diagnose belt path problems by measuring and plotting the differences between their behavior. It will also help you tension your belts at the same tension. Using it on Cartesian printers doesn't really make sense, as it's normal to have different responses in that case. ## Usage -**Before starting, ensure that the belts are properly tensioned**. For example, you can follow the [Voron belt tensioning documentation](https://docs.vorondesign.com/tuning/secondary_printer_tuning.html#belt-tension). This is crucial: you need a good starting point to then iterate from it! +**Before starting, ensure that the belts are properly pre-tensioned**. For example, you can follow the [Voron belt tensioning documentation](https://docs.vorondesign.com/tuning/secondary_printer_tuning.html#belt-tension). This is crucial: you need a good starting point to then iterate from it! Then, call the `COMPARE_BELTS_RESPONSES` macro and look for the graphs in the results folder. Here are the parameters available: @@ -33,6 +33,10 @@ Aside from the actual belt tension, the resonant frequency/amplitude of the curv **If these three parameters are met, there is no way that the curves could be different** or you can be sure that there is an underlying problem in at least one of the belt paths. Also, if the belt graphs have low amplitude curves (no distinct peaks) and a lot of noise, you will probably also have poor input shaper graphs. So before you continue, ensure that you have good belt graphs or fix your belt paths. Start by checking the belt tension, bearings, gantry screws, alignment of the belts on the idlers, and so on. + > **Note**: + > + > If you are using this tool to check or adjust the tension after installing new belts, you will need to measure again after a few hours of printing, as the tension can change slightly as the belts stretch and settle to their final tension. Usually 24 hours should be sufficient. + ## Advanced explanation on why 1 or 2 peaks From e1a7681a4ad839d1571cf135a9ead05462be5bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 6 May 2024 11:56:31 +0200 Subject: [PATCH 07/50] typo in doc --- docs/README.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index d76488c..9d3fca6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -7,12 +7,26 @@ When perfecting 3D prints and tuning your printer, there is all that resonance t While there are some ideal goals described in this documentation, you need to understand that it's not always possible to achieve the ideal resonance graphs due to a variety of factors unique to each printer, such as precision of the assembly, quality and brand of components, components wear, etc. Even a different accelerometer can give different results. But that's not a problem; the primary goal is to produce clean and satisfactory prints. If your test prints look good and meet your standards, even if the response curves aren't perfect, you're on the right track. **Trust your printer and your print results more than chasing ideal graphs!** If it's satisfactory, there's no need for further adjustments. +First, you might want to check out the **[input shaping and tuning generalities](./is_tuning_generalities.md)** documentation to understand how it all works and what to look for when taking these measurements. + ## Resonance testing -First, check out the **[input shaping and tuning generalities](./is_tuning_generalities.md)** documentation to understand how it all works and what to look for when taking these measurements. A standard tuning workflow might look something like this: +A standard tuning workflow might look something like this: ```mermaid +%%{ + init: { + 'theme': 'base', + 'themeVariables': { + 'lineColor': '#232323', + 'primaryTextColor': '#F2055C', + 'secondaryColor': '#D3D3D3', + 'tertiaryColor': '#FFFFFF' + } + } +}%% + flowchart LR start([Start]) --> tensionBelts[Tension your\nbelts as best\n as possible] checkmotion --> tensionBelts @@ -46,7 +60,7 @@ flowchart LR class goodbelts,goodIS,goodvibs,printGood,unicorn questions; ``` -You can access the documentation for each type of graph by clicking on them below. +You can access the documentation for each graph type by clicking on it in the table below. | [Belt response comparison](./macros/belts_tuning.md) | [Axis input shaper graphs](./macros/axis_tuning.md) | [Vibrations profile](./macros/vibrations_profile.md) | |:----------------:|:------------:|:---------------------:| From 303ed7060c7a94667ae46006482ae99759a379e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 6 May 2024 13:43:51 +0200 Subject: [PATCH 08/50] fixed darkmode for tuning workflow mermaid --- docs/README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 9d3fca6..714db9d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,7 +27,9 @@ A standard tuning workflow might look something like this: } }%% -flowchart LR +flowchart TB + subgraph Tuning Workflow + direction LR start([Start]) --> tensionBelts[Tension your\nbelts as best\n as possible] checkmotion --> tensionBelts tensionBelts --> SnT_Belts[Run Shake&Tune\nbelts comparison tool] @@ -52,12 +54,14 @@ flowchart LR printGood --> |NO -> Ghosting, ringing, resonance| SnT_IS unicorn --> |NO| done unicorn --> |YES| SnT_Belts + end - classDef default fill:#70088C,stroke:#150140,stroke-width:4px,color:#ffffff; + classDef standard fill:#70088C,stroke:#150140,stroke-width:4px,color:#ffffff; classDef questions fill:#FF8D32,stroke:#F24130,stroke-width:4px,color:#ffffff; - classDef startstop fill:#F2055C,stroke:#150140,stroke-width:3px; + classDef startstop fill:#F2055C,stroke:#150140,stroke-width:3px,color:#ffffff; class start,done startstop; class goodbelts,goodIS,goodvibs,printGood,unicorn questions; + class tensionBelts,checkmotion,SnT_Belts,SnT_IS,SnT_Vibrations,pressureAdvance,extrusionMultiplier,testPrint,checkTMC standard; ``` You can access the documentation for each graph type by clicking on it in the table below. From 20ff9814b3a65766a422fd66d617f78f6de57ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 6 May 2024 14:42:52 +0200 Subject: [PATCH 09/50] check the kinematics type for belt graph and move in the right direction --- K-ShakeTune/K-SnT_belts.cfg | 21 ++++++++++++++++----- src/graph_creators/graph_belts.py | 17 ++++++++++------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/K-ShakeTune/K-SnT_belts.cfg b/K-ShakeTune/K-SnT_belts.cfg index 12f5d67..94d1051 100644 --- a/K-ShakeTune/K-SnT_belts.cfg +++ b/K-ShakeTune/K-SnT_belts.cfg @@ -13,12 +13,23 @@ gcode: {% set keep_csv = params.KEEP_CSV|default(0)|int %} {% set kinematics = printer.configfile.settings.printer.kinematics %} + RESPOND MSG="{kinematics} kinematics detected" + + {% if kinematics != "corexy" %} + RESPOND MSG="Note that this test is not useful for this kinematics because the belt paths are not symmetrical!" + {% endif %} - TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=b FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} - M400 - - TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=a FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} - M400 + {% if kinematics == "corexy" %} + TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=b FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} + M400 + TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=a FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} + M400 + {% else %} + TEST_RESONANCES AXIS=1,0 OUTPUT=raw_data NAME=x FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} + M400 + TEST_RESONANCES AXIS=0,1 OUTPUT=raw_data NAME=y FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} + M400 + {% endif %} RESPOND MSG="Belts comparative frequency profile generation..." RESPOND MSG="This may take some time (3-5min)" diff --git a/src/graph_creators/graph_belts.py b/src/graph_creators/graph_belts.py index d966302..470b4b7 100644 --- a/src/graph_creators/graph_belts.py +++ b/src/graph_creators/graph_belts.py @@ -24,7 +24,7 @@ from ..helpers.locale_utils import print_with_c_locale, set_locale ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' # For paired peaks names -PEAKS_DETECTION_THRESHOLD = 0.20 # Threshold to detect peaks in the PSD signal +PEAKS_DETECTION_THRESHOLD = 0.075 # Threshold to detect peaks in the PSD signal (7.5% of max) DC_MAX_PEAKS = 2 # Maximum ideal number of peaks DC_MAX_UNPAIRED_PEAKS_ALLOWED = 0 # No unpaired peaks are tolerated @@ -148,7 +148,7 @@ def plot_compare_frequency(ax, signal1, signal2, signal1_belt, signal2_belt, max # Trace the "relax region" (also used as a threshold to filter and detect the peaks) psd_lowest_max = min(signal1.psd.max(), signal2.psd.max()) - peaks_warning_threshold = PEAKS_DETECTION_THRESHOLD * psd_lowest_max + peaks_warning_threshold = 0.20 * psd_lowest_max ax.axhline(y=peaks_warning_threshold, color='black', linestyle='--', linewidth=0.5) ax.fill_between(signal1.freqs, 0, peaks_warning_threshold, color='green', alpha=0.15, label='Relax Region') @@ -296,7 +296,7 @@ def plot_versus_belts(ax, common_freqs, signal1, signal2, interp_psd1, interp_ps ) ax.plot(interp_psd1, interp_psd2, color='dimgrey', marker='o', markersize=1.5) - # ax.fill_betweenx(interp_psd2, interp_psd1, color='grey', alpha=0.2) + ax.fill_betweenx(interp_psd2, interp_psd1, color=KLIPPAIN_COLORS['red_pink'], alpha=0.1) paired_peak_count = 0 unpaired_peak_count = 0 @@ -502,10 +502,13 @@ def belts_calibration(lognames, kinematics, klipperdir='~/klipper', max_freq=200 title_line2 = lognames[0].split('/')[-1] + ' / ' + lognames[1].split('/')[-1] fig.text(0.060, 0.939, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) - title_line3 = f'| Estimated similarity: {similarity_factor:.1f}%' - title_line4 = f'| {mhi} (experimental)' - fig.text(0.55, 0.980, title_line3, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) - fig.text(0.55, 0.945, title_line4, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) + # We add the estimated similarity and the MHI value to the title only if the kinematics is CoreXY + # as it make no sense to compute these values for other kinematics that doesn't have paired belts + if kinematics == 'corexy': + title_line3 = f'| Estimated similarity: {similarity_factor:.1f}%' + title_line4 = f'| {mhi} (experimental)' + fig.text(0.55, 0.980, title_line3, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.55, 0.945, title_line4, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) # Plot the graphs plot_compare_frequency(ax1, signal1, signal2, signal1_belt, signal2_belt, max_freq) From 8753291cf732e713bd80ab1811b1dd4493ea55fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Tue, 7 May 2024 00:04:27 +0200 Subject: [PATCH 10/50] documentation reviewed for cross-belts plots --- .../belt_graphs/belt_graph_explanation.png | Bin 252947 -> 0 bytes docs/images/belts_example.png | Bin 171644 -> 307569 bytes docs/macros/belts_tuning.md | 21 ++++++++++++++---- src/graph_creators/graph_belts.py | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) delete mode 100644 docs/images/belt_graphs/belt_graph_explanation.png diff --git a/docs/images/belt_graphs/belt_graph_explanation.png b/docs/images/belt_graphs/belt_graph_explanation.png deleted file mode 100644 index bb640c497bd89729682902458141ce37bf56eb9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 252947 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

4uKNSwYiSH6cJ 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 z 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

@W607y#EK@< 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 DI6pE3 diff --git a/docs/macros/belts_tuning.md b/docs/macros/belts_tuning.md index 225ed00..48ed347 100644 --- a/docs/macros/belts_tuning.md +++ b/docs/macros/belts_tuning.md @@ -5,7 +5,7 @@ The `COMPARE_BELTS_RESPONSES` macro is dedicated for CoreXY machines where it ca ## Usage -**Before starting, ensure that the belts are properly tensioned**. For example, you can follow the [Voron belt tensioning documentation](https://docs.vorondesign.com/tuning/secondary_printer_tuning.html#belt-tension). This is crucial: you need a good starting point to then iterate from it! +**Before starting, ensure that the belts are properly tensioned**. For example, you can follow the [Voron belt tensioning documentation](https://docs.vorondesign.com/tuning/secondary_printer_tuning.html#belt-tension). You need a good starting point before starting to iterate from it! Then, call the `COMPARE_BELTS_RESPONSES` macro and look for the graphs in the results folder. Here are the parameters available: @@ -20,9 +20,9 @@ Then, call the `COMPARE_BELTS_RESPONSES` macro and look for the graphs in the re ## Graphs description -![](../images/belt_graphs/belt_graph_explanation.png) +![](../images/belts_example.png) -## Analysis of the results +### Belts frequency profiles On these graphs, **you want both curves to look similar and overlap to form a single curve**: try to make them fit as closely as possible in frequency **and** in amplitude. Usually a belt graph is composed of one or two main peaks (more than 2 peaks can hint about mechanical problems). It's acceptable to have "noise" around the main peaks, but it should be present on both curves with a comparable amplitude. Keep in mind that when you tighten a belt, its peaks should move diagonally toward the upper right corner, changing significantly in amplitude and slightly in frequency. Additionally, the magnitude order of the main peaks *should typically* range from ~500k to ~2M on most machines. @@ -31,7 +31,20 @@ Aside from the actual belt tension, the resonant frequency/amplitude of the curv - the *belt "elasticity"*, which changes over time as the belt wears. Ensure that you use the **same belt brand and type** for both A and B belts and that they were **installed at the same time**: you want similar belts with a similar level of wear! - the *belt path length*, which is why they must have the **exact same number of teeth** so that one belt path is not longer than the other when tightened at the same tension. This specific point is very important: a single tooth difference is enough to prevent you from having a good superposition of the curves. Moreover, it is even one of the main causes of problems found in Discord resonance testing channels. -**If these three parameters are met, there is no way that the curves could be different** or you can be sure that there is an underlying problem in at least one of the belt paths. Also, if the belt graphs have low amplitude curves (no distinct peaks) and a lot of noise, you will probably also have poor input shaper graphs. So before you continue, ensure that you have good belt graphs or fix your belt paths. Start by checking the belt tension, bearings, gantry screws, alignment of the belts on the idlers, and so on. +**If these three parameters are met, there is no way that the curves could be different** or you can be sure that there is an underlying problem in at least one of the belt paths. Also, if the belt graphs have low amplitude curves and/or a lot of noise, you will probably also have poor input shaper graphs. So before you continue, ensure that you have good belt graphs by fixing your mechanical issues first. + +### Cross-belts comparison plot + +The Cross-Belts plot is an innovative cool way to compare the frequency profiles of the belts at every frequency point. In this plot, each point marks the amplitude response of each belt at different frequencies, connected point by point to trace the frequency spectrum. Ideally, these points should align on the diagonal center line, indicating that both belts have matching energy response values at each frequency. + +The good zone, wider at the bottom (low-amplitude regions where the deviation doesn't matter much) and narrower at the top right (high-energy region where the main peaks lie), represents acceptable deviations. So **you want all points to be close to the ideal center line and as many as possible within the green zone**, as this means that the bands are well tuned and behave similarly. + +Paired peaks of exactly the same frequency will be on the same point (labeled A1/A2, ...) and the distance from the center line will show the difference in energy. For paired peaks that also have a frequency delta between them, they are displayed as two points (labeled A1 and A2, ...) and the additional distance between them along the plotted line represents their frequency delta. + +### Estimated similarity and mechanical issues indicator + + 1. **The estimated similarity** measure provides a quantitative view of how closely the frequency profiles of the two belts match across their entire range. A similarity value close to 100% means that the belts are well matched, indicating equal tension and uniform mechanical behavior. + 2. **The mechanical health indicator** provides another assessment of the printer's operating condition based on the estimated similarity and influenced by the number of paired and unpaired peaks. A noisy signal generally lowers the value of this indicator, indicating potential problems. However, this measure can sometimes be misleading, so it's important not to rely on it alone and to consider it in conjunction with the other information displayed. ## Advanced explanation on why 1 or 2 peaks diff --git a/src/graph_creators/graph_belts.py b/src/graph_creators/graph_belts.py index 470b4b7..af3e9f0 100644 --- a/src/graph_creators/graph_belts.py +++ b/src/graph_creators/graph_belts.py @@ -24,7 +24,7 @@ from ..helpers.locale_utils import print_with_c_locale, set_locale ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' # For paired peaks names -PEAKS_DETECTION_THRESHOLD = 0.075 # Threshold to detect peaks in the PSD signal (7.5% of max) +PEAKS_DETECTION_THRESHOLD = 0.1 # Threshold to detect peaks in the PSD signal (10% of max) DC_MAX_PEAKS = 2 # Maximum ideal number of peaks DC_MAX_UNPAIRED_PEAKS_ALLOWED = 0 # No unpaired peaks are tolerated From efc0b8601925e472587bf2ad3a09d3c563784539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Wed, 8 May 2024 22:11:56 +0200 Subject: [PATCH 11/50] adjusted MHI calculation --- src/graph_creators/graph_belts.py | 54 +++++++++++++++++-------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/src/graph_creators/graph_belts.py b/src/graph_creators/graph_belts.py index af3e9f0..9ba1cfe 100644 --- a/src/graph_creators/graph_belts.py +++ b/src/graph_creators/graph_belts.py @@ -94,29 +94,40 @@ def pair_peaks(peaks1, freqs1, psd1, peaks2, freqs2, psd2): ###################################################################### -def compute_mhi(similarity_coefficient, total_num_peaks, num_unpaired_peaks): - # Start with the similarity coefficient directly scaled to a percentage - base_percentage = similarity_coefficient +def compute_mhi(similarity_factor, signal1, signal2): + num_unpaired_peaks = len(signal1.unpaired_peaks) + len(signal2.unpaired_peaks) + num_paired_peaks = len(signal1.paired_peaks) + # Combine unpaired peaks from both signals, tagging each peak with its respective signal + combined_unpaired_peaks = [(peak, signal1) for peak in signal1.unpaired_peaks] + [ + (peak, signal2) for peak in signal2.unpaired_peaks + ] + psd_highest_max = max(signal1.psd.max(), signal2.psd.max()) + + # Iterate over the combined list of unpaired peaks + for peak, signal in combined_unpaired_peaks: + print( + f'Unpaired peak in belt {"1" if signal is signal1 else "2"} at {signal.freqs[peak]:.1f} Hz ({signal.psd[peak]:.1f})' + ) + + # Start with the similarity factor directly scaled to a percentage + mhi = similarity_factor # Bonus for ideal number of total peaks (1 or 2) - if total_num_peaks <= DC_MAX_PEAKS: - peak_bonus = 1.1 # Boost by 10% if the number of peaks is ideal - else: - peak_bonus = DC_MAX_PEAKS / total_num_peaks # Reduce MHI if more than ideal number of peaks + if num_paired_peaks >= DC_MAX_PEAKS: + mhi *= DC_MAX_PEAKS / num_paired_peaks # Reduce MHI if more than ideal number of peaks - adjusted_percentage = base_percentage * peak_bonus - - # Heavy penalty for unpaired peaks + # Penalty from unpaired peaks weighted by their amplitude relative to the maximum PSD amplitude + unpaired_peak_penalty = 0 if num_unpaired_peaks > DC_MAX_UNPAIRED_PEAKS_ALLOWED: - unpaired_peak_penalty = num_unpaired_peaks * 5 # Applying a strong penalty factor for each unpaired peak - final_percentage = adjusted_percentage - unpaired_peak_penalty - else: - final_percentage = adjusted_percentage + for peak, signal in combined_unpaired_peaks: + unpaired_peak_penalty += (signal.psd[peak] / psd_highest_max) * 30 + print(f'penality for peak {peak}: {(signal.psd[peak] / psd_highest_max) * 30}') + mhi -= unpaired_peak_penalty # Ensure the result lies between 0 and 100 by clipping the computed value - final_percentage = np.clip(final_percentage, 0, 100) + mhi = np.clip(mhi, 0, 100) - return mhi_lut(final_percentage) + return mhi_lut(mhi) # LUT to transform the MHI into a textual value easy to understand for the users of the script @@ -146,12 +157,6 @@ def plot_compare_frequency(ax, signal1, signal2, signal1_belt, signal2_belt, max ax.plot(signal1.freqs, signal1.psd, label='Belt ' + signal1_belt, color=KLIPPAIN_COLORS['purple']) ax.plot(signal2.freqs, signal2.psd, label='Belt ' + signal2_belt, color=KLIPPAIN_COLORS['orange']) - # Trace the "relax region" (also used as a threshold to filter and detect the peaks) - psd_lowest_max = min(signal1.psd.max(), signal2.psd.max()) - peaks_warning_threshold = 0.20 * psd_lowest_max - ax.axhline(y=peaks_warning_threshold, color='black', linestyle='--', linewidth=0.5) - ax.fill_between(signal1.freqs, 0, peaks_warning_threshold, color='green', alpha=0.15, label='Relax Region') - # Trace and annotate the peaks on the graph paired_peak_count = 0 unpaired_peak_count = 0 @@ -464,9 +469,8 @@ def belts_calibration(lognames, kinematics, klipperdir='~/klipper', max_freq=200 similarity_factor = (1 - (ss_res / ss_tot)) * 100 print_with_c_locale(f'Belts estimated similarity: {similarity_factor:.1f}%') - num_unpaired_peaks = len(unpaired_peaks1) + len(unpaired_peaks2) - num_peaks = len(paired_peaks) + num_unpaired_peaks - mhi = compute_mhi(similarity_factor, num_peaks, num_unpaired_peaks) + # mhi = compute_mhi(similarity_factor, num_peaks, num_unpaired_peaks) + mhi = compute_mhi(similarity_factor, signal1, signal2) print_with_c_locale(f'[experimental] Mechanical health: {mhi}') fig, ((ax1, ax3)) = plt.subplots( From e3a2a488b1f03a3bd6b5bf5dc4bb2a50df8d192e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Wed, 8 May 2024 22:17:22 +0200 Subject: [PATCH 12/50] fixed the MHI LUT behavior when MHI=0 --- src/graph_creators/graph_belts.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/graph_creators/graph_belts.py b/src/graph_creators/graph_belts.py index 9ba1cfe..d64a2b9 100644 --- a/src/graph_creators/graph_belts.py +++ b/src/graph_creators/graph_belts.py @@ -140,11 +140,12 @@ def mhi_lut(mhi): (15, 30, 'Likely a mechanical issue'), (0, 15, 'Mechanical issue detected'), ] + mhi = np.clip(mhi, 1, 100) for lower, upper, message in ranges: if lower < mhi <= upper: return message - return 'Error computing MHI value' + return 'Unknown mechanical health' # Should never happen ###################################################################### From e4f80a6f2e8e3610e133442d84bf14527e583cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Wed, 8 May 2024 22:18:29 +0200 Subject: [PATCH 13/50] removed debug message --- src/graph_creators/graph_belts.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/graph_creators/graph_belts.py b/src/graph_creators/graph_belts.py index d64a2b9..bb1f2aa 100644 --- a/src/graph_creators/graph_belts.py +++ b/src/graph_creators/graph_belts.py @@ -103,12 +103,6 @@ def compute_mhi(similarity_factor, signal1, signal2): ] psd_highest_max = max(signal1.psd.max(), signal2.psd.max()) - # Iterate over the combined list of unpaired peaks - for peak, signal in combined_unpaired_peaks: - print( - f'Unpaired peak in belt {"1" if signal is signal1 else "2"} at {signal.freqs[peak]:.1f} Hz ({signal.psd[peak]:.1f})' - ) - # Start with the similarity factor directly scaled to a percentage mhi = similarity_factor @@ -121,7 +115,6 @@ def compute_mhi(similarity_factor, signal1, signal2): if num_unpaired_peaks > DC_MAX_UNPAIRED_PEAKS_ALLOWED: for peak, signal in combined_unpaired_peaks: unpaired_peak_penalty += (signal.psd[peak] / psd_highest_max) * 30 - print(f'penality for peak {peak}: {(signal.psd[peak] / psd_highest_max) * 30}') mhi -= unpaired_peak_penalty # Ensure the result lies between 0 and 100 by clipping the computed value From 3a0c0c4173683bf258a3a47cc188561784639b2c Mon Sep 17 00:00:00 2001 From: Oz Elentok Date: Thu, 9 May 2024 00:02:23 +0300 Subject: [PATCH 14/50] Run ShakeTune as an in-process Klipper module (#100) * feat: Run ShakeTune as an in-process Klipper module * feat: install shaketune dependencies to klipper venv * refactor: replace print_with_c_locale with klipper console output with stdout fallback --- K-ShakeTune/K-SnT_axes_map.cfg | 2 +- K-ShakeTune/K-SnT_axis.cfg | 4 +- K-ShakeTune/K-SnT_belts.cfg | 2 +- K-ShakeTune/K-SnT_vibrations.cfg | 2 +- K-ShakeTune/shaketune_cmd.cfg | 6 - README.md | 4 +- install.sh | 27 ++--- moonraker.conf | 2 +- src/is_workflow.py => shaketune/__init__.py | 111 +++++++++++++----- shaketune/__main__.py | 10 ++ .../graph_creators}/__init__.py | 0 .../graph_creators/analyze_axesmap.py | 4 +- .../graph_creators/graph_belts.py | 13 +- .../graph_creators/graph_shaper.py | 19 ++- .../graph_creators/graph_vibrations.py | 27 ++--- .../graph_creators/klippain.png | Bin .../helpers/__init__.py | 0 {src => shaketune}/helpers/common_func.py | 11 +- shaketune/helpers/console_output.py | 24 ++++ {src => shaketune}/helpers/filemanager.py | 0 {src => shaketune}/helpers/motorlogparser.py | 0 src/helpers/locale_utils.py | 34 ------ 22 files changed, 169 insertions(+), 133 deletions(-) delete mode 100644 K-ShakeTune/shaketune_cmd.cfg rename src/is_workflow.py => shaketune/__init__.py (82%) mode change 100755 => 100644 create mode 100644 shaketune/__main__.py rename {src/helpers => shaketune/graph_creators}/__init__.py (100%) rename {src => shaketune}/graph_creators/analyze_axesmap.py (98%) rename {src => shaketune}/graph_creators/graph_belts.py (98%) rename {src => shaketune}/graph_creators/graph_shaper.py (97%) rename {src => shaketune}/graph_creators/graph_vibrations.py (98%) rename {src => shaketune}/graph_creators/klippain.png (100%) rename src/graph_creators/__init.py__ => shaketune/helpers/__init__.py (100%) rename {src => shaketune}/helpers/common_func.py (97%) create mode 100644 shaketune/helpers/console_output.py rename {src => shaketune}/helpers/filemanager.py (100%) rename {src => shaketune}/helpers/motorlogparser.py (100%) delete mode 100644 src/helpers/locale_utils.py diff --git a/K-ShakeTune/K-SnT_axes_map.cfg b/K-ShakeTune/K-SnT_axes_map.cfg index 0be4b5d..d175e41 100644 --- a/K-ShakeTune/K-SnT_axes_map.cfg +++ b/K-ShakeTune/K-SnT_axes_map.cfg @@ -52,7 +52,7 @@ gcode: ACCELEROMETER_MEASURE CHIP={accel_chip} NAME=axemap RESPOND MSG="Analysis of the movements..." - RUN_SHELL_COMMAND CMD=shaketune PARAMS="--type axesmap --accel {accel|int} --chip_name {accel_chip}" + SHAKETUNE_POSTPROCESS PARAMS="--type axesmap --accel {accel|int} --chip_name {accel_chip}" # Restore the previous acceleration values SET_VELOCITY_LIMIT ACCEL={old_accel} MINIMUM_CRUISE_RATIO={old_cruise_ratio} SQUARE_CORNER_VELOCITY={old_sqv} diff --git a/K-ShakeTune/K-SnT_axis.cfg b/K-ShakeTune/K-SnT_axis.cfg index 9cdb0a2..dadf02f 100644 --- a/K-ShakeTune/K-SnT_axis.cfg +++ b/K-ShakeTune/K-SnT_axis.cfg @@ -41,7 +41,7 @@ gcode: RESPOND MSG="X axis frequency profile generation..." RESPOND MSG="This may take some time (1-3min)" - RUN_SHELL_COMMAND CMD=shaketune PARAMS="--type shaper --scv {scv} {% if max_sm is not none %}--max_smoothing {max_sm}{% endif %} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" + SHAKETUNE_POSTPROCESS PARAMS="--type shaper --scv {scv} {% if max_sm is not none %}--max_smoothing {max_sm}{% endif %} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" {% endif %} {% if Y %} @@ -50,5 +50,5 @@ gcode: RESPOND MSG="Y axis frequency profile generation..." RESPOND MSG="This may take some time (1-3min)" - RUN_SHELL_COMMAND CMD=shaketune PARAMS="--type shaper --scv {scv} {% if max_sm is not none %}--max_smoothing {max_sm}{% endif %} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" + SHAKETUNE_POSTPROCESS PARAMS="--type shaper --scv {scv} {% if max_sm is not none %}--max_smoothing {max_sm}{% endif %} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" {% endif %} diff --git a/K-ShakeTune/K-SnT_belts.cfg b/K-ShakeTune/K-SnT_belts.cfg index cd4987c..0c5a86a 100644 --- a/K-ShakeTune/K-SnT_belts.cfg +++ b/K-ShakeTune/K-SnT_belts.cfg @@ -20,4 +20,4 @@ gcode: RESPOND MSG="Belts comparative frequency profile generation..." RESPOND MSG="This may take some time (3-5min)" - RUN_SHELL_COMMAND CMD=shaketune PARAMS="--type belts {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" + SHAKETUNE_POSTPROCESS PARAMS="--type belts {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" diff --git a/K-ShakeTune/K-SnT_vibrations.cfg b/K-ShakeTune/K-SnT_vibrations.cfg index a0a9ddd..d6ebacd 100644 --- a/K-ShakeTune/K-SnT_vibrations.cfg +++ b/K-ShakeTune/K-SnT_vibrations.cfg @@ -209,6 +209,6 @@ gcode: RESPOND MSG="Machine vibrations profile generation..." RESPOND MSG="This may take some time (3-5min)" - RUN_SHELL_COMMAND CMD=shaketune PARAMS="--type vibrations --accel {accel|int} --kinematics {kinematics} {% if metadata %}--metadata {metadata}{% endif %} --chip_name {accel_chip} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" + SHAKETUNE_POSTPROCESS PARAMS="--type vibrations --accel {accel|int} --kinematics {kinematics} {% if metadata %}--metadata {metadata}{% endif %} --chip_name {accel_chip} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" RESTORE_GCODE_STATE NAME=CREATE_VIBRATIONS_PROFILE diff --git a/K-ShakeTune/shaketune_cmd.cfg b/K-ShakeTune/shaketune_cmd.cfg deleted file mode 100644 index 8891eda..0000000 --- a/K-ShakeTune/shaketune_cmd.cfg +++ /dev/null @@ -1,6 +0,0 @@ -[gcode_shell_command shaketune] -command: ~/printer_data/config/K-ShakeTune/shaketune.sh -timeout: 600.0 -verbose: True - -[respond] diff --git a/README.md b/README.md index 0fa696c..16eeb20 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,6 @@ Check out the **[detailed documentation of the Shake&Tune module here](./docs/RE |:----------------:|:------------:|:---------------------:| | [](./docs/macros/belts_tuning.md) | [](./docs/macros/axis_tuning.md) | [](./docs/macros/vibrations_profile.md) | - > **Note**: - > - > Be aware that Shake&Tune uses the [Gcode shell command plugin](https://github.com/dw-0/kiauh/blob/master/docs/gcode_shell_command.md) under the hood to call the Python scripts that generate the graphs. While my scripts should be safe, the Gcode shell command plugin also has great potential for abuse if not used carefully for other purposes, since it opens shell access from Klipper. ## Installation @@ -31,6 +28,7 @@ Follow these steps to install the Shake&Tune module in your printer: ``` 1. Then, append the following to your `printer.cfg` file and restart Klipper (if prefered, you can include only the needed macros: using `*.cfg` is a convenient way to include them all at once): ``` + [shaketune] [include K-ShakeTune/*.cfg] ``` diff --git a/install.sh b/install.sh index 7e57a13..bf280b8 100755 --- a/install.sh +++ b/install.sh @@ -3,9 +3,9 @@ USER_CONFIG_PATH="${HOME}/printer_data/config" MOONRAKER_CONFIG="${HOME}/printer_data/config/moonraker.conf" KLIPPER_PATH="${HOME}/klipper" +KLIPPER_VENV_PATH="${HOME}/klippy-env" K_SHAKETUNE_PATH="${HOME}/klippain_shaketune" -K_SHAKETUNE_VENV_PATH="${HOME}/klippain_shaketune-env" set -eu export LC_ALL=C @@ -39,7 +39,7 @@ function is_package_installed { } function install_package_requirements { - packages=("python3-venv" "libopenblas-dev" "libatlas-base-dev") + packages=("libopenblas-dev" "libatlas-base-dev") packages_to_install="" for package in "${packages[@]}"; do @@ -76,14 +76,12 @@ function check_download { } function setup_venv { - if [ ! -d "${K_SHAKETUNE_VENV_PATH}" ]; then - echo "[SETUP] Creating Python virtual environment..." - python3 -m venv "${K_SHAKETUNE_VENV_PATH}" - else - echo "[SETUP] Virtual environment already exists. Continuing..." + if [ ! -d "${KLIPPER_VENV_PATH}" ]; then + echo "[ERROR] Klipper's Python virtual environment not found!" + exit -1 fi - source "${K_SHAKETUNE_VENV_PATH}/bin/activate" + source "${KLIPPER_VENV_PATH}/bin/activate" echo "[SETUP] Installing/Updating K-Shake&Tune dependencies..." pip install --upgrade pip pip install -r "${K_SHAKETUNE_PATH}/requirements.txt" @@ -98,16 +96,17 @@ function link_extension { echo "[INSTALL] Klippain full installation found! Linking module to the script folder of Klippain" ln -frsn ${K_SHAKETUNE_PATH}/K-ShakeTune ${USER_CONFIG_PATH}/scripts/K-ShakeTune else + echo "[INSTALL] Klippain not found! Linking module to the config folder of Klipper" ln -frsn ${K_SHAKETUNE_PATH}/K-ShakeTune ${USER_CONFIG_PATH}/K-ShakeTune fi } -function link_gcodeshellcommandpy { - if [ ! -f "${KLIPPER_PATH}/klippy/extras/gcode_shell_command.py" ]; then - echo "[INSTALL] Downloading gcode_shell_command.py Klipper extension needed for this module" - wget -P ${KLIPPER_PATH}/klippy/extras https://raw.githubusercontent.com/Frix-x/klippain/main/scripts/gcode_shell_command.py +function link_module { + if [ ! -d "${KLIPPER_PATH}/klippy/extras/shaketune" ]; then + echo "[INSTALL] Linking Shake&Tune module to Klipper extras" + ln -frsn ${K_SHAKETUNE_PATH}/shaketune ${KLIPPER_PATH}/klippy/extras/shaketune else - printf "[INSTALL] gcode_shell_command.py Klipper extension is already installed. Continuing...\n\n" + printf "[INSTALL] Klippain Shake&Tune Klipper module is already installed. Continuing...\n\n" fi } @@ -140,7 +139,7 @@ preflight_checks check_download setup_venv link_extension +link_module add_updater -link_gcodeshellcommandpy restart_klipper restart_moonraker diff --git a/moonraker.conf b/moonraker.conf index 83c6acb..24a2552 100644 --- a/moonraker.conf +++ b/moonraker.conf @@ -4,7 +4,7 @@ type: git_repo origin: https://github.com/Frix-x/klippain-shaketune.git path: ~/klippain_shaketune -virtualenv: ~/klippain_shaketune-env +virtualenv: ~/klippy-env requirements: requirements.txt system_dependencies: system-dependencies.json primary_branch: main diff --git a/src/is_workflow.py b/shaketune/__init__.py old mode 100755 new mode 100644 similarity index 82% rename from src/is_workflow.py rename to shaketune/__init__.py index 5ae1370..f167f4b --- a/src/is_workflow.py +++ b/shaketune/__init__.py @@ -5,29 +5,30 @@ ############################################ # Written by Frix_x#0161 # -# This script is designed to be used with gcode_shell_commands directly from Klipper +# This script is designed to be run from inside Klipper Console # Use the provided Shake&Tune macros instead! import abc import argparse +import os import shutil import tarfile +import threading import traceback from datetime import datetime from pathlib import Path -from typing import Callable, Optional +from typing import Callable, List, Optional -from git import GitCommandError, Repo from matplotlib.figure import Figure -import src.helpers.filemanager as fm -from src.graph_creators.analyze_axesmap import axesmap_calibration -from src.graph_creators.graph_belts import belts_calibration -from src.graph_creators.graph_shaper import shaper_calibration -from src.graph_creators.graph_vibrations import vibrations_profile -from src.helpers.locale_utils import print_with_c_locale -from src.helpers.motorlogparser import MotorLogParser +from .graph_creators.analyze_axesmap import axesmap_calibration +from .graph_creators.graph_belts import belts_calibration +from .graph_creators.graph_shaper import shaper_calibration +from .graph_creators.graph_vibrations import vibrations_profile +from .helpers import filemanager as fm +from .helpers.motorlogparser import MotorLogParser +from .helpers.console_output import ConsoleOutput class Config: @@ -43,6 +44,8 @@ class Config: @staticmethod def get_git_version() -> str: try: + from git import GitCommandError, Repo + # Get the absolute path of the script, resolving any symlinks # Then get 1 times to parent dir to be at the git root folder script_path = Path(__file__).resolve() @@ -54,11 +57,11 @@ class Config: version = repo.head.commit.hexsha[:7] # If no tag is found, use the simplified commit SHA instead return version except Exception as e: - print_with_c_locale(f'Warning: unable to retrieve Shake&Tune version number: {e}') + ConsoleOutput.print(f'Warning: unable to retrieve Shake&Tune version number: {e}') return 'unknown' @staticmethod - def parse_arguments() -> argparse.Namespace: + def parse_arguments(params: Optional[List] = None) -> argparse.Namespace: parser = argparse.ArgumentParser(description='Shake&Tune graphs generation script') parser.add_argument( '-t', @@ -131,7 +134,7 @@ class Config: parser.add_argument('--dpi', type=int, default=150, dest='dpi', help='DPI of the output PNG files') parser.add_argument('-v', '--version', action='version', version=f'Shake&Tune {Config.get_git_version()}') - return parser.parse_args() + return parser.parse_args(params) class GraphCreator(abc.ABC): @@ -341,16 +344,21 @@ class VibrationsGraphCreator(GraphCreator): tar_file.unlink(missing_ok=True) -class AxesMapFinder: - def __init__(self, accel: float, chip_name: str): - self._accel = accel - self._chip_name = chip_name +class AxesMapFinder(GraphCreator): + def __init__(self, keep_csv: bool = False, dpi: int = 150): + super().__init__(keep_csv, dpi) self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') - self._type = 'axesmap' self._folder = Config.RESULTS_BASE_FOLDER + self._accel = None + self._chip_name = None + + def configure(self, accel: int, chip_name: str) -> None: + self._accel = accel + self._chip_name = chip_name + def find_axesmap(self) -> None: tmp_folder = Path('/tmp') globbed_files = list(tmp_folder.glob(f'{self._chip_name}-*.csv')) @@ -371,14 +379,21 @@ class AxesMapFinder: with result_filename.open('w') as f: f.write(results) + ConsoleOutput.print(f'Detected axes_map: {results}') -def main(): - options = Config.parse_arguments() + def create_graph(self) -> None: + self.find_axesmap() + + def clean_old_files(self, keep_results: int) -> None: + pass + + +def create_graph(options: argparse.Namespace) -> None: fm.ensure_folders_exist( folders=[Config.RESULTS_BASE_FOLDER / subfolder for subfolder in Config.RESULTS_SUBFOLDERS.values()] ) - print_with_c_locale(f'Shake&Tune version: {Config.get_git_version()}') + ConsoleOutput.print(f'Shake&Tune version: {Config.get_git_version()}') graph_creators = { 'belts': (BeltsGraphCreator, None), @@ -387,12 +402,12 @@ def main(): VibrationsGraphCreator, lambda gc: gc.configure(options.kinematics, options.accel_used, options.chip_name, options.metadata), ), - 'axesmap': (AxesMapFinder, None), + 'axesmap': (AxesMapFinder, lambda gc: gc.configure(options.accel_used, options.chip_name)), } creator_info = graph_creators.get(options.type) if not creator_info: - print_with_c_locale('Error: invalid graph type specified!') + ConsoleOutput.print('Error: invalid graph type specified!') return # Instantiate the graph creator @@ -407,20 +422,54 @@ def main(): try: graph_creator.create_graph() except FileNotFoundError as e: - print_with_c_locale(f'FileNotFound error: {e}') + ConsoleOutput.print(f'FileNotFound error: {e}') return except TimeoutError as e: - print_with_c_locale(f'Timeout error: {e}') + ConsoleOutput.print(f'Timeout error: {e}') return except Exception as e: - print_with_c_locale(f'Error while generating the graphs: {e}') - traceback.print_exc() + ConsoleOutput.print(f'Error while generating the graphs: {e}\n{traceback.print_exc()}') return - print_with_c_locale(f'{options.type} graphs created successfully!') + ConsoleOutput.print(f'{options.type} graphs created successfully!') graph_creator.clean_old_files(options.keep_results) - print_with_c_locale(f'Cleaned output folder to keep only the last {options.keep_results} results!') + ConsoleOutput.print(f'Cleaned output folder to keep only the last {options.keep_results} results!') -if __name__ == '__main__': - main() +class ShakeTune: + def __init__(self, config) -> None: + self._printer = config.get_printer() + self._gcode = self._printer.lookup_object('gcode') + self.timeout = config.getfloat('timeout', 2.0, above=0.0) + + ConsoleOutput.register_output_callback(self._gcode.respond_info) + + self._gcode.register_command( + 'SHAKETUNE_POSTPROCESS', + self.cmd_SHAKETUNE_POSTPROCESS, + desc='Post process data for ShakeTune graph creation', + ) + + def shaketune_thread(self, options): + try: + os.nice(20) + except Exception: + ConsoleOutput.print('Failed reducing ShakeTune thread priority, continuing.') + create_graph(options) + + def cmd_SHAKETUNE_POSTPROCESS(self, gcmd) -> None: + options = Config.parse_arguments(gcmd.get('PARAMS').split()) + t = threading.Thread(target=self.shaketune_thread, args=(options,)) + t.start() + + reactor = self._printer.get_reactor() + event_time = reactor.monotonic() + end_time = event_time + self.timeout + while event_time < end_time: + event_time = reactor.pause(event_time + 0.05) + if not t.is_alive(): + break + + +def load_config(config) -> ShakeTune: + return ShakeTune(config) diff --git a/shaketune/__main__.py b/shaketune/__main__.py new file mode 100644 index 0000000..6fa9e52 --- /dev/null +++ b/shaketune/__main__.py @@ -0,0 +1,10 @@ +from . import Config, create_graph + + +def main() -> None: + options = Config.parse_arguments() + create_graph(options) + + +if __name__ == '__main__': + main() diff --git a/src/helpers/__init__.py b/shaketune/graph_creators/__init__.py similarity index 100% rename from src/helpers/__init__.py rename to shaketune/graph_creators/__init__.py diff --git a/src/graph_creators/analyze_axesmap.py b/shaketune/graph_creators/analyze_axesmap.py similarity index 98% rename from src/graph_creators/analyze_axesmap.py rename to shaketune/graph_creators/analyze_axesmap.py index 9376cfc..1a818d9 100644 --- a/src/graph_creators/analyze_axesmap.py +++ b/shaketune/graph_creators/analyze_axesmap.py @@ -10,7 +10,7 @@ import optparse import numpy as np from scipy.signal import butter, filtfilt -from ..helpers.locale_utils import print_with_c_locale +from ..helpers.console_output import ConsoleOutput NUM_POINTS = 500 @@ -143,7 +143,7 @@ def main(): opts.error('Invalid acceleration value. It should be a numeric value.') results = axesmap_calibration(args, accel_value) - print_with_c_locale(results) + ConsoleOutput.print(results) if options.output is not None: with open(options.output, 'w') as f: diff --git a/src/graph_creators/graph_belts.py b/shaketune/graph_creators/graph_belts.py similarity index 98% rename from src/graph_creators/graph_belts.py rename to shaketune/graph_creators/graph_belts.py index ed4fd38..16858b1 100644 --- a/src/graph_creators/graph_belts.py +++ b/shaketune/graph_creators/graph_belts.py @@ -27,7 +27,7 @@ from ..helpers.common_func import ( parse_log, setup_klipper_import, ) -from ..helpers.locale_utils import print_with_c_locale, set_locale +from ..helpers.console_output import ConsoleOutput ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' # For paired peaks names @@ -200,7 +200,7 @@ def plot_compare_frequency(ax, lognames, signal1, signal2, similarity_factor, ma signal1_belt += ' (axis 1, 1)' signal2_belt += ' (axis 1,-1)' else: - print_with_c_locale( + ConsoleOutput.print( "Warning: belts doesn't seem to have the correct name A and B (extracted from the filename.csv)" ) @@ -453,7 +453,6 @@ def compute_signal_data(data, max_freq): def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_version=None): - set_locale() global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) @@ -479,13 +478,13 @@ def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_versi similarity_factor = compute_curve_similarity_factor( signal1.freqs, signal1.psd, signal2.freqs, signal2.psd, CURVE_SIMILARITY_SIGMOID_K ) - print_with_c_locale(f'Belts estimated similarity: {similarity_factor:.1f}%') + ConsoleOutput.print(f'Belts estimated similarity: {similarity_factor:.1f}%') # Compute the MHI value from the differential spectrogram sum of gradient, salted with the similarity factor and the number of # unpaired peaks from the belts frequency profile. Be careful, this value is highly opinionated and is pretty experimental! mhi, textual_mhi = compute_mhi( combined_sum, similarity_factor, len(signal1.unpaired_peaks) + len(signal2.unpaired_peaks) ) - print_with_c_locale(f'[experimental] Mechanical Health Indicator: {textual_mhi.lower()} ({mhi:.1f}%)') + ConsoleOutput.print(f'[experimental] Mechanical Health Indicator: {textual_mhi.lower()} ({mhi:.1f}%)') # Create graph layout fig, (ax1, ax2) = plt.subplots( @@ -513,9 +512,7 @@ def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_versi dt = datetime.strptime(f"{filename.split('_')[1]} {filename.split('_')[2]}", '%Y%m%d %H%M%S') title_line2 = dt.strftime('%x %X') except Exception: - print_with_c_locale( - 'Warning: CSV filenames look to be different than expected (%s , %s)' % (lognames[0], lognames[1]) - ) + ConsoleOutput.print(f'Warning: CSV filenames look to be different than expected: {lognames}') title_line2 = lognames[0].split('/')[-1] + ' / ' + lognames[1].split('/')[-1] fig.text(0.12, 0.957, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) diff --git a/src/graph_creators/graph_shaper.py b/shaketune/graph_creators/graph_shaper.py similarity index 97% rename from src/graph_creators/graph_shaper.py rename to shaketune/graph_creators/graph_shaper.py index 9b851c1..ca89901 100644 --- a/src/graph_creators/graph_shaper.py +++ b/shaketune/graph_creators/graph_shaper.py @@ -27,7 +27,7 @@ from ..helpers.common_func import ( parse_log, setup_klipper_import, ) -from ..helpers.locale_utils import print_with_c_locale, set_locale +from ..helpers.console_output import ConsoleOutput PEAKS_DETECTION_THRESHOLD = 0.05 PEAKS_EFFECT_THRESHOLD = 0.12 @@ -72,19 +72,19 @@ def calibrate_shaper(datas, max_smoothing, scv, max_freq): max_smoothing=max_smoothing, test_damping_ratios=None, max_freq=max_freq, - logger=print_with_c_locale, + logger=ConsoleOutput.print, ) except TypeError: - print_with_c_locale( + ConsoleOutput.print( '[WARNING] You seem to be using an older version of Klipper that is not compatible with all the latest Shake&Tune features!' ) - print_with_c_locale( + ConsoleOutput.print( 'Shake&Tune now runs in compatibility mode: be aware that the results may be slightly off, since the real damping ratio cannot be used to create the filter recommendations' ) compat = True - shaper, all_shapers = helper.find_best_shaper(calibration_data, max_smoothing, print_with_c_locale) + shaper, all_shapers = helper.find_best_shaper(calibration_data, max_smoothing, ConsoleOutput.print) - print_with_c_locale( + ConsoleOutput.print( '\n-> Recommended shaper is %s @ %.1f Hz (when using a square corner velocity of %.1f and a damping ratio of %.3f)' % (shaper.name.upper(), shaper.freq, scv, zeta) ) @@ -295,14 +295,13 @@ def plot_spectrogram(ax, t, bins, pdata, peaks, max_freq): def shaper_calibration(lognames, klipperdir='~/klipper', max_smoothing=None, scv=5.0, max_freq=200.0, st_version=None): - set_locale() global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) # Parse data from the log files while ignoring CSV in the wrong format datas = [data for data in (parse_log(fn) for fn in lognames) if data is not None] if len(datas) > 1: - print_with_c_locale('Warning: incorrect number of .csv files detected. Only the first one will be used!') + ConsoleOutput.print('Warning: incorrect number of .csv files detected. Only the first one will be used!') # Compute shapers, PSD outputs and spectrogram performance_shaper, shapers, calibration_data, fr, zeta, compat = calibrate_shaper( @@ -329,7 +328,7 @@ def shaper_calibration(lognames, klipperdir='~/klipper', max_smoothing=None, scv # Print the peaks info in the console peak_freqs_formated = ['{:.1f}'.format(f) for f in peaks_freqs] num_peaks_above_effect_threshold = np.sum(calibration_data.psd_sum[peaks] > peaks_threshold[1]) - print_with_c_locale( + ConsoleOutput.print( '\nPeaks detected on the graph: %d @ %s Hz (%d above effect threshold)' % (num_peaks, ', '.join(map(str, peak_freqs_formated)), num_peaks_above_effect_threshold) ) @@ -366,7 +365,7 @@ def shaper_calibration(lognames, klipperdir='~/klipper', max_smoothing=None, scv title_line3 = '| Square corner velocity: ' + str(scv) + 'mm/s' title_line4 = '| Max allowed smoothing: ' + str(max_smoothing) except Exception: - print_with_c_locale('Warning: CSV filename look to be different than expected (%s)' % (lognames[0])) + ConsoleOutput.print('Warning: CSV filename look to be different than expected (%s)' % (lognames[0])) title_line2 = lognames[0].split('/')[-1] title_line3 = '' title_line4 = '' diff --git a/src/graph_creators/graph_vibrations.py b/shaketune/graph_creators/graph_vibrations.py similarity index 98% rename from src/graph_creators/graph_vibrations.py rename to shaketune/graph_creators/graph_vibrations.py index 8462839..05bcf7e 100644 --- a/src/graph_creators/graph_vibrations.py +++ b/shaketune/graph_creators/graph_vibrations.py @@ -28,7 +28,7 @@ from ..helpers.common_func import ( parse_log, setup_klipper_import, ) -from ..helpers.locale_utils import print_with_c_locale, set_locale +from ..helpers.console_output import ConsoleOutput PEAKS_DETECTION_THRESHOLD = 0.05 PEAKS_RELATIVE_HEIGHT_THRESHOLD = 0.04 @@ -453,19 +453,19 @@ def plot_motor_profiles(ax, freqs, main_angles, motor_profiles, global_motor_pro # Then add the motor resonance peak to the graph and print some infos about it motor_fr, motor_zeta, motor_res_idx, lowfreq_max = compute_mechanical_parameters(global_motor_profile, freqs, 30) if lowfreq_max: - print_with_c_locale( + ConsoleOutput.print( '[WARNING] There are a lot of low frequency vibrations that can alter the readings. This is probably due to the test being performed at too high an acceleration!' ) - print_with_c_locale( + ConsoleOutput.print( 'Try lowering the ACCEL value and/or increasing the SIZE value before restarting the macro to ensure that only constant speeds are being recorded and that the dynamic behavior of the machine is not affecting the measurements' ) if motor_zeta is not None: - print_with_c_locale( + ConsoleOutput.print( 'Motors have a main resonant frequency at %.1fHz with an estimated damping ratio of %.3f' % (motor_fr, motor_zeta) ) else: - print_with_c_locale( + ConsoleOutput.print( 'Motors have a main resonant frequency at %.1fHz but it was impossible to estimate a damping ratio.' % (motor_fr) ) @@ -634,7 +634,6 @@ def extract_angle_and_speed(logname): def vibrations_profile( lognames, klipperdir='~/klipper', kinematics='cartesian', accel=None, max_freq=1000.0, st_version=None, motors=None ): - set_locale() global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) @@ -686,7 +685,7 @@ def vibrations_profile( # symmetry_factor = compute_symmetry_analysis(all_angles, all_angles_energy) symmetry_factor = compute_symmetry_analysis(all_angles, spectrogram_data, main_angles) - print_with_c_locale(f'Machine estimated vibration symmetry: {symmetry_factor:.1f}%') + ConsoleOutput.print(f'Machine estimated vibration symmetry: {symmetry_factor:.1f}%') # Analyze low variance ranges of vibration energy across all angles for each speed to identify clean speeds # and highlight them. Also find the peaks to identify speeds to avoid due to high resonances @@ -699,7 +698,7 @@ def vibrations_profile( 10, ) formated_peaks_speeds = ['{:.1f}'.format(pspeed) for pspeed in peaks_speeds] - print_with_c_locale( + ConsoleOutput.print( 'Vibrations peaks detected: %d @ %s mm/s (avoid setting a speed near these values in your slicer print profile)' % (num_peaks, ', '.join(map(str, formated_peaks_speeds))) ) @@ -713,16 +712,16 @@ def vibrations_profile( good_speeds = filter_and_split_ranges(all_speeds, good_speeds, peak_speed_indices, deletion_range) # Add some logging about the good speeds found - print_with_c_locale(f'Lowest vibrations speeds ({len(good_speeds)} ranges sorted from best to worse):') + ConsoleOutput.print(f'Lowest vibrations speeds ({len(good_speeds)} ranges sorted from best to worse):') for idx, (start, end, _) in enumerate(good_speeds): - print_with_c_locale(f'{idx+1}: {all_speeds[start]:.1f} to {all_speeds[end]:.1f} mm/s') + ConsoleOutput.print(f'{idx+1}: {all_speeds[start]:.1f} to {all_speeds[end]:.1f} mm/s') # Angle low energy valleys identification (good angles ranges) and print them to the console good_angles = identify_low_energy_zones(all_angles_energy, ANGLES_VALLEY_DETECTION_THRESHOLD) if good_angles is not None: - print_with_c_locale(f'Lowest vibrations angles ({len(good_angles)} ranges sorted from best to worse):') + ConsoleOutput.print(f'Lowest vibrations angles ({len(good_angles)} ranges sorted from best to worse):') for idx, (start, end, energy) in enumerate(good_angles): - print_with_c_locale( + ConsoleOutput.print( f'{idx+1}: {all_angles[start]:.1f}° to {all_angles[end]:.1f}° (mean vibrations energy: {energy:.2f}% of max)' ) @@ -763,7 +762,7 @@ def vibrations_profile( if accel is not None: title_line2 += ' at ' + str(accel) + ' mm/s² -- ' + kinematics.upper() + ' kinematics' except Exception: - print_with_c_locale('Warning: CSV filenames appear to be different than expected (%s)' % (lognames[0])) + ConsoleOutput.print('Warning: CSV filenames appear to be different than expected (%s)' % (lognames[0])) title_line2 = lognames[0].split('/')[-1] fig.text(0.060, 0.957, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) @@ -772,7 +771,7 @@ def vibrations_profile( differences = motors[0].compare_to(motors[1]) plot_motor_config_txt(fig, motors, differences) if differences is not None and kinematics == 'corexy': - print_with_c_locale(f'Warning: motors have different TMC configurations!\n{differences}') + ConsoleOutput.print(f'Warning: motors have different TMC configurations!\n{differences}') # Plot the graphs plot_angle_profile_polar(ax1, all_angles, all_angles_energy, good_angles, symmetry_factor) diff --git a/src/graph_creators/klippain.png b/shaketune/graph_creators/klippain.png similarity index 100% rename from src/graph_creators/klippain.png rename to shaketune/graph_creators/klippain.png diff --git a/src/graph_creators/__init.py__ b/shaketune/helpers/__init__.py similarity index 100% rename from src/graph_creators/__init.py__ rename to shaketune/helpers/__init__.py diff --git a/src/helpers/common_func.py b/shaketune/helpers/common_func.py similarity index 97% rename from src/helpers/common_func.py rename to shaketune/helpers/common_func.py index 49831a5..56edff5 100644 --- a/src/helpers/common_func.py +++ b/shaketune/helpers/common_func.py @@ -10,8 +10,8 @@ from importlib import import_module from pathlib import Path import numpy as np -from git import GitCommandError, Repo from scipy.signal import spectrogram +from .console_output import ConsoleOutput def parse_log(logname): @@ -23,7 +23,7 @@ def parse_log(logname): # Check for a PSD file generated by Klipper and raise a warning if cleaned_line.startswith('#freq,psd_x,psd_y,psd_z,psd_xyz'): - print( + ConsoleOutput.print( 'Warning: %s does not contain raw accelerometer data. ' 'Please use the official Klipper script to process it instead. ' 'It will be ignored by Shake&Tune!' % (logname,) @@ -36,7 +36,7 @@ def parse_log(logname): break if not header: - print( + ConsoleOutput.print( 'Warning: file %s has an incorrect header and will be ignored by Shake&Tune!\n' "Expected '#time,accel_x,accel_y,accel_z', but got '%s'." % (logname, header.strip()) ) @@ -45,7 +45,7 @@ def parse_log(logname): # If we have the correct raw data header, proceed to load the data data = np.loadtxt(logname, comments='#', delimiter=',', skiprows=1) if data.ndim == 1 or data.shape[1] != 4: - print( + ConsoleOutput.print( 'Warning: %s does not have the correct data format; expected 4 columns. ' 'It will be ignored by Shake&Tune!' % (logname,) ) @@ -54,7 +54,7 @@ def parse_log(logname): return data except Exception as err: - print(f'Error while reading {logname}: {err}. It will be ignored by Shake&Tune!') + ConsoleOutput.print(f'Error while reading {logname}: {err}. It will be ignored by Shake&Tune!') return None @@ -69,6 +69,7 @@ def get_git_version(): try: # Get the absolute path of the script, resolving any symlinks # Then get 2 times to parent dir to be at the git root folder + from git import GitCommandError, Repo script_path = Path(__file__).resolve() repo_path = script_path.parents[1] repo = Repo(repo_path) diff --git a/shaketune/helpers/console_output.py b/shaketune/helpers/console_output.py new file mode 100644 index 0000000..c8c72d7 --- /dev/null +++ b/shaketune/helpers/console_output.py @@ -0,0 +1,24 @@ +import io +from typing import Callable, Optional + + +class ConsoleOutput: + """ + Print output to stdout or to an alternative like the Klipper console through a callback + """ + + _output_func: Optional[Callable[[str], None]] = None + + @classmethod + def register_output_callback(cls, output_func: Optional[Callable[[str], None]]): + cls._output_func = output_func + + @classmethod + def print(cls, *args, **kwargs): + if not cls._output_func: + print(*args, **kwargs) + return + + with io.StringIO() as mem_output: + print(*args, file=mem_output, **kwargs) + cls._output_func(mem_output.getvalue()) diff --git a/src/helpers/filemanager.py b/shaketune/helpers/filemanager.py similarity index 100% rename from src/helpers/filemanager.py rename to shaketune/helpers/filemanager.py diff --git a/src/helpers/motorlogparser.py b/shaketune/helpers/motorlogparser.py similarity index 100% rename from src/helpers/motorlogparser.py rename to shaketune/helpers/motorlogparser.py diff --git a/src/helpers/locale_utils.py b/src/helpers/locale_utils.py deleted file mode 100644 index 611ecbd..0000000 --- a/src/helpers/locale_utils.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python3 - -# Special utility functions to manage locale settings and printing -# Written by Frix_x#0161 # - - -import locale - - -# Set the best locale for time and date formating (generation of the titles) -def set_locale(): - try: - current_locale = locale.getlocale(locale.LC_TIME) - if current_locale is None or current_locale[0] is None: - locale.setlocale(locale.LC_TIME, 'C') - except locale.Error: - locale.setlocale(locale.LC_TIME, 'C') - - -# Print function to avoid problem in Klipper console (that doesn't support special characters) due to locale settings -def print_with_c_locale(*args, **kwargs): - try: - original_locale = locale.getlocale() - locale.setlocale(locale.LC_ALL, 'C') - except locale.Error as e: - print( - 'Warning: Failed to set a basic locale. Special characters may not display correctly in Klipper console:', e - ) - finally: - print(*args, **kwargs) # Proceed with printing regardless of locale setting success - try: - locale.setlocale(locale.LC_ALL, original_locale) - except locale.Error as e: - print('Warning: Failed to restore the original locale setting:', e) From d9060fed3b43b626d43316640f366a164ec11be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Thu, 9 May 2024 12:26:43 +0200 Subject: [PATCH 15/50] cleaning old Shake&Tune venv and configs --- install.sh | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/install.sh b/install.sh index bf280b8..7d59e13 100755 --- a/install.sh +++ b/install.sh @@ -5,6 +5,7 @@ MOONRAKER_CONFIG="${HOME}/printer_data/config/moonraker.conf" KLIPPER_PATH="${HOME}/klipper" KLIPPER_VENV_PATH="${HOME}/klippy-env" +OLD_K_SHAKETUNE_VENV="${HOME}/klippain_shaketune-env" K_SHAKETUNE_PATH="${HOME}/klippain_shaketune" set -eu @@ -81,6 +82,11 @@ function setup_venv { exit -1 fi + if [ -d "${OLD_K_SHAKETUNE_VENV}" ]; then + echo "[INFO] Old K-Shake&Tune virtual environement found, cleaning it!" + rm -rf "${OLD_K_SHAKETUNE_VENV}" + fi + source "${KLIPPER_VENV_PATH}/bin/activate" echo "[SETUP] Installing/Updating K-Shake&Tune dependencies..." pip install --upgrade pip @@ -90,14 +96,18 @@ function setup_venv { } function link_extension { - echo "[INSTALL] Linking scripts to your config directory..." + # Reusing the old linking extension function to cleanup and remove the macros for older S&T versions if [ -d "${HOME}/klippain_config" ] && [ -f "${USER_CONFIG_PATH}/.VERSION" ]; then - echo "[INSTALL] Klippain full installation found! Linking module to the script folder of Klippain" - ln -frsn ${K_SHAKETUNE_PATH}/K-ShakeTune ${USER_CONFIG_PATH}/scripts/K-ShakeTune + if [ -d "${USER_CONFIG_PATH}/scripts/K-ShakeTune" ]; then + echo "[INFO] Old K-Shake&Tune macro folder found, cleaning it!" + rm -d "${USER_CONFIG_PATH}/scripts/K-ShakeTune" + fi else - echo "[INSTALL] Klippain not found! Linking module to the config folder of Klipper" - ln -frsn ${K_SHAKETUNE_PATH}/K-ShakeTune ${USER_CONFIG_PATH}/K-ShakeTune + if [ -d "${USER_CONFIG_PATH}/K-ShakeTune" ]; then + echo "[INFO] Old K-Shake&Tune macro folder found, cleaning it!" + rm -d "${USER_CONFIG_PATH}/K-ShakeTune" + fi fi } From 30a19105130c8c1f87cd0b580a5594e445af2d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Thu, 9 May 2024 16:08:47 +0200 Subject: [PATCH 16/50] Klipper plugin refactoring with embedded macros --- K-ShakeTune/K-SnT_axes_map.cfg | 60 --- K-ShakeTune/K-SnT_axis.cfg | 54 -- K-ShakeTune/K-SnT_belts.cfg | 23 - K-ShakeTune/K-SnT_static_freq.cfg | 24 - K-ShakeTune/shaketune.sh | 10 - README.md | 4 +- shaketune/__init__.py | 467 +----------------- shaketune/__main__.py | 10 - shaketune/graph_creators/__init__.py | 7 + shaketune/graph_creators/graph_creator.py | 276 +++++++++++ shaketune/helpers/common_func.py | 2 + .../macros}/K-SnT_vibrations.cfg | 0 shaketune/macros/__init__.py | 16 + shaketune/macros/accelerometer.py | 2 + shaketune/macros/axes_input_shaper.py | 35 ++ shaketune/macros/axes_map.py | 83 ++++ shaketune/macros/belts_comparison.py | 28 ++ shaketune/macros/static_freq.py | 22 + shaketune/shaketune.py | 86 ++++ shaketune/shaketune_config.py | 131 +++++ shaketune/shaketune_thread.py | 66 +++ 21 files changed, 762 insertions(+), 644 deletions(-) delete mode 100644 K-ShakeTune/K-SnT_axes_map.cfg delete mode 100644 K-ShakeTune/K-SnT_axis.cfg delete mode 100644 K-ShakeTune/K-SnT_belts.cfg delete mode 100644 K-ShakeTune/K-SnT_static_freq.cfg delete mode 100755 K-ShakeTune/shaketune.sh delete mode 100644 shaketune/__main__.py create mode 100644 shaketune/graph_creators/graph_creator.py rename {K-ShakeTune => shaketune/macros}/K-SnT_vibrations.cfg (100%) create mode 100644 shaketune/macros/__init__.py create mode 100644 shaketune/macros/accelerometer.py create mode 100644 shaketune/macros/axes_input_shaper.py create mode 100644 shaketune/macros/axes_map.py create mode 100644 shaketune/macros/belts_comparison.py create mode 100644 shaketune/macros/static_freq.py create mode 100644 shaketune/shaketune.py create mode 100644 shaketune/shaketune_config.py create mode 100644 shaketune/shaketune_thread.py diff --git a/K-ShakeTune/K-SnT_axes_map.cfg b/K-ShakeTune/K-SnT_axes_map.cfg deleted file mode 100644 index d175e41..0000000 --- a/K-ShakeTune/K-SnT_axes_map.cfg +++ /dev/null @@ -1,60 +0,0 @@ -############################################################ -###### AXE_MAP DETECTION AND ACCELEROMETER VALIDATION ###### -############################################################ -# Written by Frix_x#0161 # - -[gcode_macro AXES_MAP_CALIBRATION] -gcode: - {% set z_height = params.Z_HEIGHT|default(20)|int %} # z height to put the toolhead before starting the movements - {% set speed = params.SPEED|default(80)|float * 60 %} # feedrate for the movements - {% set accel = params.ACCEL|default(1500)|int %} # accel value used to move on the pattern - {% set feedrate_travel = params.TRAVEL_SPEED|default(120)|int * 60 %} # travel feedrate between moves - {% set accel_chip = params.ACCEL_CHIP|default("adxl345") %} # ADXL chip name in the config - - {% set mid_x = printer.toolhead.axis_maximum.x|float / 2 %} - {% set mid_y = printer.toolhead.axis_maximum.y|float / 2 %} - - {% set accel = [accel, printer.configfile.settings.printer.max_accel]|min %} - {% set old_accel = printer.toolhead.max_accel %} - {% set old_cruise_ratio = printer.toolhead.minimum_cruise_ratio %} - {% set old_sqv = printer.toolhead.square_corner_velocity %} - - - {% if not 'xyz' in printer.toolhead.homed_axes %} - { action_raise_error("Must Home printer first!") } - {% endif %} - - {action_respond_info("")} - {action_respond_info("Starting accelerometer axe_map calibration")} - {action_respond_info("This operation can not be interrupted by normal means. Hit the \"emergency stop\" button to stop it if needed")} - {action_respond_info("")} - - SAVE_GCODE_STATE NAME=STATE_AXESMAP_CALIBRATION - - G90 - - # Set the wanted acceleration values (not too high to avoid oscillation, not too low to be able to reach constant speed on each segments) - SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY={[(accel / 1000), 5.0]|max} - - # Going to the start position - G1 Z{z_height} F{feedrate_travel / 8} - G1 X{mid_x - 15} Y{mid_y - 15} F{feedrate_travel} - G4 P500 - - ACCELEROMETER_MEASURE CHIP={accel_chip} - G4 P1000 # This first waiting time is to record the background accelerometer noise before moving - G1 X{mid_x + 15} F{speed} - G4 P1000 - G1 Y{mid_y + 15} F{speed} - G4 P1000 - G1 Z{z_height + 15} F{speed} - G4 P1000 - ACCELEROMETER_MEASURE CHIP={accel_chip} NAME=axemap - - RESPOND MSG="Analysis of the movements..." - SHAKETUNE_POSTPROCESS PARAMS="--type axesmap --accel {accel|int} --chip_name {accel_chip}" - - # Restore the previous acceleration values - SET_VELOCITY_LIMIT ACCEL={old_accel} MINIMUM_CRUISE_RATIO={old_cruise_ratio} SQUARE_CORNER_VELOCITY={old_sqv} - - RESTORE_GCODE_STATE NAME=STATE_AXESMAP_CALIBRATION diff --git a/K-ShakeTune/K-SnT_axis.cfg b/K-ShakeTune/K-SnT_axis.cfg deleted file mode 100644 index dadf02f..0000000 --- a/K-ShakeTune/K-SnT_axis.cfg +++ /dev/null @@ -1,54 +0,0 @@ -################################################ -###### STANDARD INPUT_SHAPER CALIBRATIONS ###### -################################################ -# Written by Frix_x#0161 # - -[gcode_macro AXES_SHAPER_CALIBRATION] -description: Perform standard axis input shaper tests on one or both XY axes to select the best input shaper filter -gcode: - {% set min_freq = params.FREQ_START|default(5)|float %} - {% set max_freq = params.FREQ_END|default(133.3)|float %} - {% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %} - {% set axis = params.AXIS|default("all")|string|lower %} - {% set scv = params.SCV|default(None) %} - {% set max_sm = params.MAX_SMOOTHING|default(None) %} - {% set keep_results = params.KEEP_N_RESULTS|default(3)|int %} - {% set keep_csv = params.KEEP_CSV|default(0)|int %} - - {% set X, Y = False, False %} - - {% if axis == "all" %} - {% set X, Y = True, True %} - {% elif axis == "x" %} - {% set X = True %} - {% elif axis == "y" %} - {% set Y = True %} - {% else %} - { action_raise_error("AXIS selection invalid. Should be either all, x or y!") } - {% endif %} - - {% if scv is none or scv == "" %} - {% set scv = printer.toolhead.square_corner_velocity %} - {% endif %} - - {% if max_sm == "" %} - {% set max_sm = none %} - {% endif %} - - {% if X %} - TEST_RESONANCES AXIS=X OUTPUT=raw_data NAME=x FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} - M400 - - RESPOND MSG="X axis frequency profile generation..." - RESPOND MSG="This may take some time (1-3min)" - SHAKETUNE_POSTPROCESS PARAMS="--type shaper --scv {scv} {% if max_sm is not none %}--max_smoothing {max_sm}{% endif %} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" - {% endif %} - - {% if Y %} - TEST_RESONANCES AXIS=Y OUTPUT=raw_data NAME=y FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} - M400 - - RESPOND MSG="Y axis frequency profile generation..." - RESPOND MSG="This may take some time (1-3min)" - SHAKETUNE_POSTPROCESS PARAMS="--type shaper --scv {scv} {% if max_sm is not none %}--max_smoothing {max_sm}{% endif %} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" - {% endif %} diff --git a/K-ShakeTune/K-SnT_belts.cfg b/K-ShakeTune/K-SnT_belts.cfg deleted file mode 100644 index 0c5a86a..0000000 --- a/K-ShakeTune/K-SnT_belts.cfg +++ /dev/null @@ -1,23 +0,0 @@ -################################################ -###### STANDARD INPUT_SHAPER CALIBRATIONS ###### -################################################ -# Written by Frix_x#0161 # - -[gcode_macro COMPARE_BELTS_RESPONSES] -description: Perform a custom half-axis test to analyze and compare the frequency profiles of individual belts on CoreXY printers -gcode: - {% set min_freq = params.FREQ_START|default(5)|float %} - {% set max_freq = params.FREQ_END|default(133.33)|float %} - {% set hz_per_sec = params.HZ_PER_SEC|default(1)|float %} - {% set keep_results = params.KEEP_N_RESULTS|default(3)|int %} - {% set keep_csv = params.KEEP_CSV|default(0)|int %} - - TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=b FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} - M400 - - TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=a FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec} - M400 - - RESPOND MSG="Belts comparative frequency profile generation..." - RESPOND MSG="This may take some time (3-5min)" - SHAKETUNE_POSTPROCESS PARAMS="--type belts {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" diff --git a/K-ShakeTune/K-SnT_static_freq.cfg b/K-ShakeTune/K-SnT_static_freq.cfg deleted file mode 100644 index fb410d8..0000000 --- a/K-ShakeTune/K-SnT_static_freq.cfg +++ /dev/null @@ -1,24 +0,0 @@ -################################################ -###### STANDARD INPUT_SHAPER CALIBRATIONS ###### -################################################ -# Written by Frix_x#0161 # - -[gcode_macro EXCITATE_AXIS_AT_FREQ] -description: Maintain a specified excitation frequency for a period of time to diagnose and locate a source of vibration -gcode: - {% set frequency = params.FREQUENCY|default(25)|int %} - {% set time = params.TIME|default(10)|int %} - {% set axis = params.AXIS|default("x")|string|lower %} - - {% if axis not in ["x", "y", "a", "b"] %} - { action_raise_error("AXIS selection invalid. Should be either x, y, a or b!") } - {% endif %} - - {% if axis == "a" %} - {% set axis = "1,-1" %} - {% elif axis == "b" %} - {% set axis = "1,1" %} - {% endif %} - - TEST_RESONANCES OUTPUT=raw_data AXIS={axis} FREQ_START={frequency-1} FREQ_END={frequency+1} HZ_PER_SEC={1/(time/3)} - M400 diff --git a/K-ShakeTune/shaketune.sh b/K-ShakeTune/shaketune.sh deleted file mode 100755 index 53af59f..0000000 --- a/K-ShakeTune/shaketune.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -# This script is used to run the Shake&Tune Python scripts as a module -# from the project root directory using its virtual environment -# Usage: ./shaketune.sh - -source ~/klippain_shaketune-env/bin/activate -cd ~/klippain_shaketune -python -m src.is_workflow "$@" -deactivate diff --git a/README.md b/README.md index 16eeb20..1bb6546 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,9 @@ Follow these steps to install the Shake&Tune module in your printer: 1. Then, append the following to your `printer.cfg` file and restart Klipper (if prefered, you can include only the needed macros: using `*.cfg` is a convenient way to include them all at once): ``` [shaketune] - [include K-ShakeTune/*.cfg] + # result_folder: ~/printer_data/config/K-ShakeTune_results + # number_of_results_to_keep: 3 + # keep_raw_csv: False ``` ## Usage diff --git a/shaketune/__init__.py b/shaketune/__init__.py index f167f4b..297f10a 100644 --- a/shaketune/__init__.py +++ b/shaketune/__init__.py @@ -5,470 +5,13 @@ ############################################ # Written by Frix_x#0161 # -# This script is designed to be run from inside Klipper Console -# Use the provided Shake&Tune macros instead! +# This module functions as a plugin within Klipper, aimed at enhancing printer diagnostics. It serves multiple purposes: +# 1. Diagnosing and pinpointing vibration sources in the printer. +# 2. Conducting standard axis input shaper tests on the XY axes to determine the optimal input shaper filter. +# 3. Executing a specialized half-axis test for CoreXY printers to analyze and compare the frequency profiles of individual belts. -import abc -import argparse -import os -import shutil -import tarfile -import threading -import traceback -from datetime import datetime -from pathlib import Path -from typing import Callable, List, Optional - -from matplotlib.figure import Figure - -from .graph_creators.analyze_axesmap import axesmap_calibration -from .graph_creators.graph_belts import belts_calibration -from .graph_creators.graph_shaper import shaper_calibration -from .graph_creators.graph_vibrations import vibrations_profile -from .helpers import filemanager as fm -from .helpers.motorlogparser import MotorLogParser -from .helpers.console_output import ConsoleOutput - - -class Config: - KLIPPER_FOLDER = Path.home() / 'klipper' - KLIPPER_LOG_FOLDER = Path.home() / 'printer_data/logs' - RESULTS_BASE_FOLDER = Path.home() / 'printer_data/config/K-ShakeTune_results' - RESULTS_SUBFOLDERS = {'belts': 'belts', 'shaper': 'inputshaper', 'vibrations': 'vibrations'} - - @staticmethod - def get_results_folder(type: str) -> Path: - return Config.RESULTS_BASE_FOLDER / Config.RESULTS_SUBFOLDERS[type] - - @staticmethod - def get_git_version() -> str: - try: - from git import GitCommandError, Repo - - # Get the absolute path of the script, resolving any symlinks - # Then get 1 times to parent dir to be at the git root folder - script_path = Path(__file__).resolve() - repo_path = script_path.parents[1] - repo = Repo(repo_path) - try: - version = repo.git.describe('--tags') - except GitCommandError: - version = repo.head.commit.hexsha[:7] # If no tag is found, use the simplified commit SHA instead - return version - except Exception as e: - ConsoleOutput.print(f'Warning: unable to retrieve Shake&Tune version number: {e}') - return 'unknown' - - @staticmethod - def parse_arguments(params: Optional[List] = None) -> argparse.Namespace: - parser = argparse.ArgumentParser(description='Shake&Tune graphs generation script') - parser.add_argument( - '-t', - '--type', - dest='type', - choices=['belts', 'shaper', 'vibrations', 'axesmap'], - required=True, - help='Type of output graph to produce', - ) - parser.add_argument( - '--accel', - type=int, - default=None, - dest='accel_used', - help='Accelerometion used for vibrations profile creation or axes map calibration', - ) - parser.add_argument( - '--chip_name', - type=str, - default='adxl345', - dest='chip_name', - help='Accelerometer chip name used for vibrations profile creation or axes map calibration', - ) - parser.add_argument( - '--max_smoothing', - type=float, - default=None, - dest='max_smoothing', - help='Maximum smoothing to allow for input shaper filter recommendations', - ) - parser.add_argument( - '--scv', - '--square_corner_velocity', - type=float, - default=5.0, - dest='scv', - help='Square corner velocity used to compute max accel for input shapers filter recommendations', - ) - parser.add_argument( - '-m', - '--kinematics', - dest='kinematics', - default='cartesian', - choices=['cartesian', 'corexy'], - help='Machine kinematics configuration used for the vibrations profile creation', - ) - parser.add_argument( - '--metadata', - type=str, - default=None, - dest='metadata', - help='Motor configuration metadata printed on the vibrations profiles', - ) - parser.add_argument( - '-c', - '--keep_csv', - action='store_true', - default=False, - dest='keep_csv', - help='Whether to keep the raw CSV files after processing in addition to the PNG graphs', - ) - parser.add_argument( - '-n', - '--keep_results', - type=int, - default=3, - dest='keep_results', - help='Number of results to keep in the result folder after each run of the script', - ) - parser.add_argument('--dpi', type=int, default=150, dest='dpi', help='DPI of the output PNG files') - parser.add_argument('-v', '--version', action='version', version=f'Shake&Tune {Config.get_git_version()}') - - return parser.parse_args(params) - - -class GraphCreator(abc.ABC): - def __init__(self, keep_csv: bool, dpi: int): - self._keep_csv = keep_csv - self._dpi = dpi - - self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') - self._version = Config.get_git_version() - - self._type = None - self._folder = None - - def _setup_folder(self, graph_type: str) -> None: - self._type = graph_type - self._folder = Config.get_results_folder(graph_type) - - def _move_and_prepare_files( - self, - glob_pattern: str, - min_files_required: Optional[int] = None, - custom_name_func: Optional[Callable[[Path], str]] = None, - ) -> list[Path]: - tmp_path = Path('/tmp') - globbed_files = list(tmp_path.glob(glob_pattern)) - - # If min_files_required is not set, use the number of globbed files as the minimum - min_files_required = min_files_required or len(globbed_files) - - if not globbed_files: - raise FileNotFoundError(f'no CSV files found in the /tmp folder to create the {self._type} graphs!') - if len(globbed_files) < min_files_required: - raise FileNotFoundError(f'{min_files_required} CSV files are needed to create the {self._type} graphs!') - - lognames = [] - for filename in sorted(globbed_files, key=lambda f: f.stat().st_mtime, reverse=True)[:min_files_required]: - fm.wait_file_ready(filename) - custom_name = custom_name_func(filename) if custom_name_func else filename.name - new_file = self._folder / f'{self._type}_{self._graph_date}_{custom_name}.csv' - # shutil.move() is needed to move the file across filesystems (mainly for BTT CB1 Pi default OS image) - shutil.move(filename, new_file) - fm.wait_file_ready(new_file) - lognames.append(new_file) - return lognames - - def _save_figure_and_cleanup(self, fig: Figure, lognames: list[Path], axis_label: Optional[str] = None) -> None: - axis_suffix = f'_{axis_label}' if axis_label else '' - png_filename = self._folder / f'{self._type}_{self._graph_date}{axis_suffix}.png' - fig.savefig(png_filename, dpi=self._dpi) - - if self._keep_csv: - self._archive_files(lognames) - else: - self._remove_files(lognames) - - def _archive_files(self, _: list[Path]) -> None: - return - - def _remove_files(self, lognames: list[Path]) -> None: - for csv in lognames: - csv.unlink(missing_ok=True) - - @abc.abstractmethod - def create_graph(self) -> None: - pass - - @abc.abstractmethod - def clean_old_files(self, keep_results: int) -> None: - pass - - -class BeltsGraphCreator(GraphCreator): - def __init__(self, keep_csv: bool = False, dpi: int = 150): - super().__init__(keep_csv, dpi) - - self._setup_folder('belts') - - def create_graph(self) -> None: - lognames = self._move_and_prepare_files( - glob_pattern='raw_data_axis*.csv', - min_files_required=2, - custom_name_func=lambda f: f.stem.split('_')[3].upper(), - ) - fig = belts_calibration( - lognames=[str(path) for path in lognames], - klipperdir=str(Config.KLIPPER_FOLDER), - st_version=self._version, - ) - self._save_figure_and_cleanup(fig, lognames) - - def clean_old_files(self, keep_results: int = 3) -> None: - # Get all PNG files in the directory as a list of Path objects - files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) - - if len(files) <= keep_results: - return # No need to delete any files - - # Delete the older files - for old_file in files[keep_results:]: - file_date = '_'.join(old_file.stem.split('_')[1:3]) - for suffix in ['A', 'B']: - csv_file = self._folder / f'belts_{file_date}_{suffix}.csv' - csv_file.unlink(missing_ok=True) - old_file.unlink() - - -class ShaperGraphCreator(GraphCreator): - def __init__(self, keep_csv: bool = False, dpi: int = 150): - super().__init__(keep_csv, dpi) - - self._max_smoothing = None - self._scv = None - - self._setup_folder('shaper') - - def configure(self, scv: float, max_smoothing: float = None) -> None: - self._scv = scv - self._max_smoothing = max_smoothing - - def create_graph(self) -> None: - if not self._scv: - raise ValueError('scv must be set to create the input shaper graph!') - - lognames = self._move_and_prepare_files( - glob_pattern='raw_data*.csv', - min_files_required=1, - custom_name_func=lambda f: f.stem.split('_')[3].upper(), - ) - fig = shaper_calibration( - lognames=[str(path) for path in lognames], - klipperdir=str(Config.KLIPPER_FOLDER), - max_smoothing=self._max_smoothing, - scv=self._scv, - st_version=self._version, - ) - self._save_figure_and_cleanup(fig, lognames, lognames[0].stem.split('_')[-1]) - - def clean_old_files(self, keep_results: int = 3) -> None: - # Get all PNG files in the directory as a list of Path objects - files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) - - if len(files) <= 2 * keep_results: - return # No need to delete any files - - # Delete the older files - for old_file in files[2 * keep_results :]: - csv_file = old_file.with_suffix('.csv') - csv_file.unlink(missing_ok=True) - old_file.unlink() - - -class VibrationsGraphCreator(GraphCreator): - def __init__(self, keep_csv: bool = False, dpi: int = 150): - super().__init__(keep_csv, dpi) - - self._kinematics = None - self._accel = None - self._chip_name = None - self._motors = None - - self._setup_folder('vibrations') - - def configure(self, kinematics: str, accel: float, chip_name: str, metadata: str) -> None: - self._kinematics = kinematics - self._accel = accel - self._chip_name = chip_name - - parser = MotorLogParser(Config.KLIPPER_LOG_FOLDER / 'klippy.log', metadata) - self._motors = parser.get_motors() - - def _archive_files(self, lognames: list[Path]) -> None: - tar_path = self._folder / f'{self._type}_{self._graph_date}.tar.gz' - with tarfile.open(tar_path, 'w:gz') as tar: - for csv_file in lognames: - tar.add(csv_file, arcname=csv_file.name, recursive=False) - - def create_graph(self) -> None: - if not self._accel or not self._chip_name or not self._kinematics: - raise ValueError('accel, chip_name and kinematics must be set to create the vibrations profile graph!') - - lognames = self._move_and_prepare_files( - glob_pattern=f'{self._chip_name}-*.csv', - min_files_required=None, - custom_name_func=lambda f: f.name.replace(self._chip_name, self._type), - ) - fig = vibrations_profile( - lognames=[str(path) for path in lognames], - klipperdir=str(Config.KLIPPER_FOLDER), - kinematics=self._kinematics, - accel=self._accel, - st_version=self._version, - motors=self._motors, - ) - self._save_figure_and_cleanup(fig, lognames) - - def clean_old_files(self, keep_results: int = 3) -> None: - # Get all PNG files in the directory as a list of Path objects - files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) - - if len(files) <= keep_results: - return # No need to delete any files - - # Delete the older files - for old_file in files[keep_results:]: - old_file.unlink() - tar_file = old_file.with_suffix('.tar.gz') - tar_file.unlink(missing_ok=True) - - -class AxesMapFinder(GraphCreator): - def __init__(self, keep_csv: bool = False, dpi: int = 150): - super().__init__(keep_csv, dpi) - - self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') - self._type = 'axesmap' - self._folder = Config.RESULTS_BASE_FOLDER - - self._accel = None - self._chip_name = None - - def configure(self, accel: int, chip_name: str) -> None: - self._accel = accel - self._chip_name = chip_name - - def find_axesmap(self) -> None: - tmp_folder = Path('/tmp') - globbed_files = list(tmp_folder.glob(f'{self._chip_name}-*.csv')) - - if not globbed_files: - raise FileNotFoundError('no CSV files found in the /tmp folder to find the axes map!') - - # Find the CSV files with the latest timestamp and wait for it to be released by Klipper - logname = sorted(globbed_files, key=lambda f: f.stat().st_mtime, reverse=True)[0] - fm.wait_file_ready(logname) - - results = axesmap_calibration( - lognames=[str(logname)], - accel=self._accel, - ) - - result_filename = self._folder / f'{self._type}_{self._graph_date}.txt' - with result_filename.open('w') as f: - f.write(results) - - ConsoleOutput.print(f'Detected axes_map: {results}') - - def create_graph(self) -> None: - self.find_axesmap() - - def clean_old_files(self, keep_results: int) -> None: - pass - - -def create_graph(options: argparse.Namespace) -> None: - fm.ensure_folders_exist( - folders=[Config.RESULTS_BASE_FOLDER / subfolder for subfolder in Config.RESULTS_SUBFOLDERS.values()] - ) - - ConsoleOutput.print(f'Shake&Tune version: {Config.get_git_version()}') - - graph_creators = { - 'belts': (BeltsGraphCreator, None), - 'shaper': (ShaperGraphCreator, lambda gc: gc.configure(options.scv, options.max_smoothing)), - 'vibrations': ( - VibrationsGraphCreator, - lambda gc: gc.configure(options.kinematics, options.accel_used, options.chip_name, options.metadata), - ), - 'axesmap': (AxesMapFinder, lambda gc: gc.configure(options.accel_used, options.chip_name)), - } - - creator_info = graph_creators.get(options.type) - if not creator_info: - ConsoleOutput.print('Error: invalid graph type specified!') - return - - # Instantiate the graph creator - graph_creator_class, configure_func = creator_info - graph_creator = graph_creator_class(options.keep_csv, options.dpi) - - # Configure it if needed - if configure_func: - configure_func(graph_creator) - - # And then run it - try: - graph_creator.create_graph() - except FileNotFoundError as e: - ConsoleOutput.print(f'FileNotFound error: {e}') - return - except TimeoutError as e: - ConsoleOutput.print(f'Timeout error: {e}') - return - except Exception as e: - ConsoleOutput.print(f'Error while generating the graphs: {e}\n{traceback.print_exc()}') - return - - ConsoleOutput.print(f'{options.type} graphs created successfully!') - graph_creator.clean_old_files(options.keep_results) - ConsoleOutput.print(f'Cleaned output folder to keep only the last {options.keep_results} results!') - - -class ShakeTune: - def __init__(self, config) -> None: - self._printer = config.get_printer() - self._gcode = self._printer.lookup_object('gcode') - self.timeout = config.getfloat('timeout', 2.0, above=0.0) - - ConsoleOutput.register_output_callback(self._gcode.respond_info) - - self._gcode.register_command( - 'SHAKETUNE_POSTPROCESS', - self.cmd_SHAKETUNE_POSTPROCESS, - desc='Post process data for ShakeTune graph creation', - ) - - def shaketune_thread(self, options): - try: - os.nice(20) - except Exception: - ConsoleOutput.print('Failed reducing ShakeTune thread priority, continuing.') - create_graph(options) - - def cmd_SHAKETUNE_POSTPROCESS(self, gcmd) -> None: - options = Config.parse_arguments(gcmd.get('PARAMS').split()) - t = threading.Thread(target=self.shaketune_thread, args=(options,)) - t.start() - - reactor = self._printer.get_reactor() - event_time = reactor.monotonic() - end_time = event_time + self.timeout - while event_time < end_time: - event_time = reactor.pause(event_time + 0.05) - if not t.is_alive(): - break +from .shaketune import ShakeTune as ShakeTune def load_config(config) -> ShakeTune: diff --git a/shaketune/__main__.py b/shaketune/__main__.py deleted file mode 100644 index 6fa9e52..0000000 --- a/shaketune/__main__.py +++ /dev/null @@ -1,10 +0,0 @@ -from . import Config, create_graph - - -def main() -> None: - options = Config.parse_arguments() - create_graph(options) - - -if __name__ == '__main__': - main() diff --git a/shaketune/graph_creators/__init__.py b/shaketune/graph_creators/__init__.py index e69de29..5ec0700 100644 --- a/shaketune/graph_creators/__init__.py +++ b/shaketune/graph_creators/__init__.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 + +from .graph_creator import AxesMapFinder as AxesMapFinder +from .graph_creator import BeltsGraphCreator as BeltsGraphCreator +from .graph_creator import GraphCreator as GraphCreator +from .graph_creator import ShaperGraphCreator as ShaperGraphCreator +from .graph_creator import VibrationsGraphCreator as VibrationsGraphCreator diff --git a/shaketune/graph_creators/graph_creator.py b/shaketune/graph_creators/graph_creator.py new file mode 100644 index 0000000..75fc3da --- /dev/null +++ b/shaketune/graph_creators/graph_creator.py @@ -0,0 +1,276 @@ +#!/usr/bin/env python3 + +import abc +import shutil +import tarfile +from datetime import datetime +from pathlib import Path +from typing import Callable, Optional + +from matplotlib.figure import Figure + +from ..helpers import filemanager as fm +from ..helpers.console_output import ConsoleOutput +from ..helpers.motorlogparser import MotorLogParser +from ..shaketune_config import ShakeTuneConfig +from .analyze_axesmap import axesmap_calibration +from .graph_belts import belts_calibration +from .graph_shaper import shaper_calibration +from .graph_vibrations import vibrations_profile + + +class GraphCreator(abc.ABC): + def __init__(self, config: ShakeTuneConfig): + self._config = config + + self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') + self._version = ShakeTuneConfig.get_git_version() + + self._type = None + self._folder = None + + def _setup_folder(self, graph_type: str) -> None: + self._type = graph_type + self._folder = self._config.get_results_folder(graph_type) + + def _move_and_prepare_files( + self, + glob_pattern: str, + min_files_required: Optional[int] = None, + custom_name_func: Optional[Callable[[Path], str]] = None, + ) -> list[Path]: + tmp_path = Path('/tmp') + globbed_files = list(tmp_path.glob(glob_pattern)) + + # If min_files_required is not set, use the number of globbed files as the minimum + min_files_required = min_files_required or len(globbed_files) + + if not globbed_files: + raise FileNotFoundError(f'no CSV files found in the /tmp folder to create the {self._type} graphs!') + if len(globbed_files) < min_files_required: + raise FileNotFoundError(f'{min_files_required} CSV files are needed to create the {self._type} graphs!') + + lognames = [] + for filename in sorted(globbed_files, key=lambda f: f.stat().st_mtime, reverse=True)[:min_files_required]: + fm.wait_file_ready(filename) + custom_name = custom_name_func(filename) if custom_name_func else filename.name + new_file = self._folder / f'{self._type}_{self._graph_date}_{custom_name}.csv' + # shutil.move() is needed to move the file across filesystems (mainly for BTT CB1 Pi default OS image) + shutil.move(filename, new_file) + fm.wait_file_ready(new_file) + lognames.append(new_file) + return lognames + + def _save_figure_and_cleanup(self, fig: Figure, lognames: list[Path], axis_label: Optional[str] = None) -> None: + axis_suffix = f'_{axis_label}' if axis_label else '' + png_filename = self._folder / f'{self._type}_{self._graph_date}{axis_suffix}.png' + fig.savefig(png_filename, dpi=self._config.dpi) + + if self._config.keep_csv: + self._archive_files(lognames) + else: + self._remove_files(lognames) + + def _archive_files(self, _: list[Path]) -> None: + return + + def _remove_files(self, lognames: list[Path]) -> None: + for csv in lognames: + csv.unlink(missing_ok=True) + + def get_type(self) -> str: + return self._type + + @abc.abstractmethod + def create_graph(self) -> None: + pass + + @abc.abstractmethod + def clean_old_files(self, keep_results: int) -> None: + pass + + +class BeltsGraphCreator(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config) + + self._setup_folder('belts') + + def create_graph(self) -> None: + lognames = self._move_and_prepare_files( + glob_pattern='raw_data_axis*.csv', + min_files_required=2, + custom_name_func=lambda f: f.stem.split('_')[3].upper(), + ) + fig = belts_calibration( + lognames=[str(path) for path in lognames], + klipperdir=str(self._config.klipper_folder), + st_version=self._version, + ) + self._save_figure_and_cleanup(fig, lognames) + + def clean_old_files(self, keep_results: int = 3) -> None: + # Get all PNG files in the directory as a list of Path objects + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + + if len(files) <= keep_results: + return # No need to delete any files + + # Delete the older files + for old_file in files[keep_results:]: + file_date = '_'.join(old_file.stem.split('_')[1:3]) + for suffix in ['A', 'B']: + csv_file = self._folder / f'belts_{file_date}_{suffix}.csv' + csv_file.unlink(missing_ok=True) + old_file.unlink() + + +class ShaperGraphCreator(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config) + + self._max_smoothing = None + self._scv = None + + self._setup_folder('shaper') + + def configure(self, scv: float, max_smoothing: float = None) -> None: + self._scv = scv + self._max_smoothing = max_smoothing + + def create_graph(self) -> None: + if not self._scv: + raise ValueError('scv must be set to create the input shaper graph!') + + lognames = self._move_and_prepare_files( + glob_pattern='raw_data*.csv', + min_files_required=1, + custom_name_func=lambda f: f.stem.split('_')[3].upper(), + ) + fig = shaper_calibration( + lognames=[str(path) for path in lognames], + klipperdir=str(self._config.klipper_folder), + max_smoothing=self._max_smoothing, + scv=self._scv, + st_version=self._version, + ) + self._save_figure_and_cleanup(fig, lognames, lognames[0].stem.split('_')[-1]) + + def clean_old_files(self, keep_results: int = 3) -> None: + # Get all PNG files in the directory as a list of Path objects + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + + if len(files) <= 2 * keep_results: + return # No need to delete any files + + # Delete the older files + for old_file in files[2 * keep_results :]: + csv_file = old_file.with_suffix('.csv') + csv_file.unlink(missing_ok=True) + old_file.unlink() + + +class VibrationsGraphCreator(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config) + + self._kinematics = None + self._accel = None + self._chip_name = None + self._motors = None + + self._setup_folder('vibrations') + + def configure(self, kinematics: str, accel: float, chip_name: str, metadata: str) -> None: + self._kinematics = kinematics + self._accel = accel + self._chip_name = chip_name + + parser = MotorLogParser(self._config.klipper_log_folder / 'klippy.log', metadata) + self._motors = parser.get_motors() + + def _archive_files(self, lognames: list[Path]) -> None: + tar_path = self._folder / f'{self._type}_{self._graph_date}.tar.gz' + with tarfile.open(tar_path, 'w:gz') as tar: + for csv_file in lognames: + tar.add(csv_file, arcname=csv_file.name, recursive=False) + + def create_graph(self) -> None: + if not self._accel or not self._chip_name or not self._kinematics: + raise ValueError('accel, chip_name and kinematics must be set to create the vibrations profile graph!') + + lognames = self._move_and_prepare_files( + glob_pattern=f'{self._chip_name}-*.csv', + min_files_required=None, + custom_name_func=lambda f: f.name.replace(self._chip_name, self._type), + ) + fig = vibrations_profile( + lognames=[str(path) for path in lognames], + klipperdir=str(self._config.klipper_folder), + kinematics=self._kinematics, + accel=self._accel, + st_version=self._version, + motors=self._motors, + ) + self._save_figure_and_cleanup(fig, lognames) + + def clean_old_files(self, keep_results: int = 3) -> None: + # Get all PNG files in the directory as a list of Path objects + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + + if len(files) <= keep_results: + return # No need to delete any files + + # Delete the older files + for old_file in files[keep_results:]: + old_file.unlink() + tar_file = old_file.with_suffix('.tar.gz') + tar_file.unlink(missing_ok=True) + + +class AxesMapFinder(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config) + + self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') + self._type = 'axesmap' + self._folder = config.get_results_folder() + + self._accel = None + self._chip_name = None + + def configure(self, accel: int, chip_name: str) -> None: + self._accel = accel + self._chip_name = chip_name + + def find_axesmap(self) -> None: + tmp_folder = Path('/tmp') + globbed_files = list(tmp_folder.glob(f'{self._chip_name}-*.csv')) + + if not globbed_files: + raise FileNotFoundError('no CSV files found in the /tmp folder to find the axes map!') + + # Find the CSV files with the latest timestamp and wait for it to be released by Klipper + logname = sorted(globbed_files, key=lambda f: f.stat().st_mtime, reverse=True)[0] + fm.wait_file_ready(logname) + + results = axesmap_calibration( + lognames=[str(logname)], + accel=self._accel, + ) + ConsoleOutput.print(results) + + result_filename = self._folder / f'{self._type}_{self._graph_date}.txt' + with result_filename.open('w') as f: + f.write(results) + + # While the AxesMapFinder doesn't directly create a graph, we need to implement this + # method to allow using it seemlessly like all the other GraphCreator objects + def create_graph(self) -> None: + self.find_axesmap() + + def clean_old_files(self, keep_results: int) -> None: + tmp_folder = Path('/tmp') + globbed_files = list(tmp_folder.glob(f'{self._chip_name}-*.csv')) + for csv_file in globbed_files: + csv_file.unlink() diff --git a/shaketune/helpers/common_func.py b/shaketune/helpers/common_func.py index 56edff5..6546347 100644 --- a/shaketune/helpers/common_func.py +++ b/shaketune/helpers/common_func.py @@ -11,6 +11,7 @@ from pathlib import Path import numpy as np from scipy.signal import spectrogram + from .console_output import ConsoleOutput @@ -70,6 +71,7 @@ def get_git_version(): # Get the absolute path of the script, resolving any symlinks # Then get 2 times to parent dir to be at the git root folder from git import GitCommandError, Repo + script_path = Path(__file__).resolve() repo_path = script_path.parents[1] repo = Repo(repo_path) diff --git a/K-ShakeTune/K-SnT_vibrations.cfg b/shaketune/macros/K-SnT_vibrations.cfg similarity index 100% rename from K-ShakeTune/K-SnT_vibrations.cfg rename to shaketune/macros/K-SnT_vibrations.cfg diff --git a/shaketune/macros/__init__.py b/shaketune/macros/__init__.py new file mode 100644 index 0000000..5486211 --- /dev/null +++ b/shaketune/macros/__init__.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 + +from .axes_input_shaper import axes_shaper_calibration as axes_shaper_calibration +from .axes_map import axes_map_calibration as axes_map_calibration +from .belts_comparison import compare_belts_responses as compare_belts_responses +from .static_freq import excitate_axis_at_freq as excitate_axis_at_freq + +# graph_creators = { +# 'axesmap': (AxesMapFinder, lambda gc: gc.configure(options.accel_used, options.chip_name)), +# 'belts': (BeltsGraphCreator, None), +# 'shaper': (ShaperGraphCreator, lambda gc: gc.configure(options.scv, options.max_smoothing)), +# 'vibrations': ( +# VibrationsGraphCreator, +# lambda gc: gc.configure(options.kinematics, options.accel_used, options.chip_name, options.metadata), +# ), +# } diff --git a/shaketune/macros/accelerometer.py b/shaketune/macros/accelerometer.py new file mode 100644 index 0000000..63f77b6 --- /dev/null +++ b/shaketune/macros/accelerometer.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python3 + diff --git a/shaketune/macros/axes_input_shaper.py b/shaketune/macros/axes_input_shaper.py new file mode 100644 index 0000000..47b72d7 --- /dev/null +++ b/shaketune/macros/axes_input_shaper.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + + +from ..helpers.console_output import ConsoleOutput +from ..shaketune_thread import ShakeTuneThread + + +def axes_shaper_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: + min_freq = gcmd.get_float('FREQ_START', default=5, minval=1) + max_freq = gcmd.get_float('FREQ_END', default=133.33, minval=1) + hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1, minval=1) + axis = gcmd.get('AXIS', default='all') + if axis not in ['x', 'y', 'all']: + gcmd.error('AXIS selection invalid. Should be either x, y, or all!') + scv = gcmd.get_float('SCV', default=None, minval=0) + max_sm = gcmd.get_float('MAX_SMOOTHING', default=None, minval=0) + + if scv is None: + systime = printer.get_reactor().monotonic() + toolhead = printer.lookup_object('toolhead') + toolhead_info = toolhead.get_status(systime) + scv = toolhead_info['square_corner_velocity'] + + creator = st_thread.get_graph_creator() + creator.configure(scv, max_sm) + + axis_flags = {'x': axis in ('x', 'all'), 'y': axis in ('y', 'all')} + for axis in ['x', 'y']: + if axis_flags[axis]: + gcode.run_script_from_command( + f'TEST_RESONANCES AXIS={axis.upper()} OUTPUT=raw_data NAME={axis} FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec}' + ) + ConsoleOutput.print(f'{axis.upper()} axis frequency profile generation...') + ConsoleOutput.print('This may take some time (1-3min)') + st_thread.run() diff --git a/shaketune/macros/axes_map.py b/shaketune/macros/axes_map.py new file mode 100644 index 0000000..279f95d --- /dev/null +++ b/shaketune/macros/axes_map.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 + + +from ..helpers.console_output import ConsoleOutput +from ..shaketune_thread import ShakeTuneThread + + +def find_axis_accelerometer(printer, axis: str = 'xy'): + accel_chip_names = printer.lookup_object('resonance_tester').accel_chip_names + for chip_axis, chip_name in accel_chip_names: + if axis in ['x', 'y'] and chip_axis == 'xy': + return chip_name + elif chip_axis == axis: + return chip_name + return None + + +def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: + z_height = gcmd.get_float('Z_HEIGHT', default=20.0) + speed = gcmd.get_float('SPEED', default=80.0, minval=20.0) + accel = gcmd.get_int('ACCEL', default=1500, minval=100) + feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) + accel_chip = gcmd.get('ACCEL_CHIP', default=None) + + if accel_chip is None: + accel_chip = find_axis_accelerometer(printer, 'xy') + if accel_chip is None: + gcmd.error( + 'No accelerometer specified for measurement! Multi-accelerometer configurations are not supported for this macro.' + ) + + systime = printer.get_reactor().monotonic() + toolhead = printer.lookup_object('toolhead') + toolhead_info = toolhead.get_status(systime) + old_accel = toolhead_info['max_accel'] + old_mcr = toolhead_info['minimum_cruise_ratio'] + old_sqv = toolhead_info['square_corner_velocity'] + + # set the wanted acceleration values + gcode.run_script_from_command(f'SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY=5.0') + + # Deactivate input shaper if it is active to get raw movements + input_shaper = printer.lookup_object('input_shaper', None) + if input_shaper is not None: + input_shaper.disable_shaping() + else: + input_shaper = None + + kin_info = toolhead.kin.get_status(systime) + mid_x = (kin_info['axis_minimum'].x + kin_info['axis_maximum'].x) / 2 + mid_y = (kin_info['axis_minimum'].y + kin_info['axis_maximum'].y) / 2 + _, _, _, E = toolhead.get_position() + + # Going to the start position + toolhead.move([mid_x - 15, mid_y - 15, z_height, E], feedrate_travel) + toolhead.dwell(0.5) + + # Start the measurements and do the movements (+X, +Y and then +Z) + gcode.run_script_from_command(f'ACCELEROMETER_MEASURE CHIP={accel_chip}') + toolhead.dwell(1) + toolhead.move([mid_x + 15, mid_y - 15, z_height, E], speed) + toolhead.dwell(1) + toolhead.move([mid_x + 15, mid_y + 15, z_height, E], speed) + toolhead.dwell(1) + toolhead.move([mid_x + 15, mid_y + 15, z_height + 15, E], speed) + toolhead.dwell(1) + gcode.run_script_from_command(f'ACCELEROMETER_MEASURE CHIP={accel_chip} NAME=axemap') + + # Re-enable the input shaper if it was active + if input_shaper is not None: + input_shaper.enable_shaping() + + # Restore the previous acceleration values + gcode.run_script_from_command( + f'SET_VELOCITY_LIMIT ACCEL={old_accel} MINIMUM_CRUISE_RATIO={old_mcr} SQUARE_CORNER_VELOCITY={old_sqv}' + ) + toolhead.wait_moves() + + # Run post-processing + ConsoleOutput.print('Analysis of the movements...') + creator = st_thread.get_graph_creator() + creator.configure(accel, accel_chip) + st_thread.run() diff --git a/shaketune/macros/belts_comparison.py b/shaketune/macros/belts_comparison.py new file mode 100644 index 0000000..7a4abf6 --- /dev/null +++ b/shaketune/macros/belts_comparison.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + + +from ..helpers.console_output import ConsoleOutput +from ..shaketune_thread import ShakeTuneThread + + +def compare_belts_responses(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: + min_freq = gcmd.get_float('FREQ_START', default=5, minval=1) + max_freq = gcmd.get_float('FREQ_END', default=133.33, minval=1) + hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1, minval=1) + + toolhead = printer.lookup_object('toolhead') + + gcode.run_script_from_command( + f'TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=b FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec}' + ) + toolhead.wait_moves() + + gcode.run_script_from_command( + f'TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=a FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec}' + ) + toolhead.wait_moves() + + # Run post-processing + ConsoleOutput.print('Belts comparative frequency profile generation...') + ConsoleOutput.print('This may take some time (3-5min)') + st_thread.run() diff --git a/shaketune/macros/static_freq.py b/shaketune/macros/static_freq.py new file mode 100644 index 0000000..596a32c --- /dev/null +++ b/shaketune/macros/static_freq.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +from ..helpers.console_output import ConsoleOutput + + +def excitate_axis_at_freq(gcmd, gcode) -> None: + freq = gcmd.get_int('FREQUENCY', default=25, minval=1) + duration = gcmd.get_int('DURATION', default=10, minval=1) + axis = gcmd.get('AXIS', default='x') + if axis not in ['x', 'y', 'a', 'b']: + gcmd.error('AXIS selection invalid. Should be either x, y, a or b!') + + ConsoleOutput.print(f'Excitating {axis.upper()} axis at {freq}Hz for {duration} seconds') + + if axis == 'a': + axis = '1,-1' + elif axis == 'b': + axis = '1,1' + + gcode.run_script_from_command( + f'TEST_RESONANCES OUTPUT=raw_data AXIS={axis} FREQ_START={freq-1} FREQ_END={freq+1} HZ_PER_SEC={1/(duration/3)}' + ) diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py new file mode 100644 index 0000000..17ff7bf --- /dev/null +++ b/shaketune/shaketune.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 + + +from pathlib import Path + +from .graph_creators import AxesMapFinder, BeltsGraphCreator, ShaperGraphCreator +from .helpers.console_output import ConsoleOutput +from .macros import axes_map_calibration, axes_shaper_calibration, compare_belts_responses, excitate_axis_at_freq +from .shaketune_config import ShakeTuneConfig +from .shaketune_thread import ShakeTuneThread + + +class ShakeTune: + def __init__(self, config) -> None: + self._printer = config.get_printer() + self._gcode = self._printer.lookup_object('gcode') + + res_tester = self._printer.lookup_object('resonance_tester') + if res_tester is None: + config.error('No [resonance_tester] config section found in printer.cfg! Please add one to use Shake&Tune') + + self.timeout = config.getfloat('timeout', 2.0, above=0.0) + + result_folder = config.get('result_folder', default='~/printer_data/config/K-ShakeTune_results') + result_folder_path = Path(result_folder).expanduser() if result_folder else None + keep_n_results = config.getint('number_of_results_to_keep', default=3, minval=0) + keep_csv = config.getboolean('keep_raw_csv', default=False) + dpi = config.getint('dpi', default=150, minval=100, maxval=500) + + self._config = ShakeTuneConfig(result_folder_path, keep_n_results, keep_csv, dpi) + ConsoleOutput.register_output_callback(self._gcode.respond_info) + + self._gcode.register_command( + 'EXCITATE_AXIS_AT_FREQ', + self.cmd_EXCITATE_AXIS_AT_FREQ, + desc=self.cmd_EXCITATE_AXIS_AT_FREQ_help, + ) + self._gcode.register_command( + 'COMPARE_BELTS_RESPONSES', + self.cmd_COMPARE_BELTS_RESPONSES, + desc=self.cmd_COMPARE_BELTS_RESPONSES_help, + ) + self._gcode.register_command( + 'AXES_SHAPER_CALIBRATION', + self.cmd_AXES_SHAPER_CALIBRATION, + desc=self.cmd_AXES_SHAPER_CALIBRATION_help, + ) + self._gcode.register_command( + 'AXES_MAP_CALIBRATION', + self.cmd_AXES_MAP_CALIBRATION, + desc=self.cmd_AXES_MAP_CALIBRATION_help, + ) + + cmd_EXCITATE_AXIS_AT_FREQ_help = ( + 'Maintain a specified excitation frequency for a period of time to diagnose and locate a source of vibration' + ) + + def cmd_EXCITATE_AXIS_AT_FREQ(self, gcmd) -> None: + ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') + excitate_axis_at_freq(gcmd, self._gcode) + + cmd_COMPARE_BELTS_RESPONSES_help = 'Perform a custom half-axis test to analyze and compare the frequency profiles of individual belts on CoreXY printers' + + def cmd_COMPARE_BELTS_RESPONSES(self, gcmd) -> None: + ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') + belt_graph_creator = BeltsGraphCreator(self._config) + st_thread = ShakeTuneThread(self._config, belt_graph_creator, self._printer.get_reactor(), self.timeout) + compare_belts_responses(gcmd, self._gcode, self._printer, st_thread) + + cmd_AXES_SHAPER_CALIBRATION_help = ( + 'Perform standard axis input shaper tests on one or both XY axes to select the best input shaper filter' + ) + + def cmd_AXES_SHAPER_CALIBRATION(self, gcmd) -> None: + ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') + shaper_graph_creator = ShaperGraphCreator(self._config) + st_thread = ShakeTuneThread(self._config, shaper_graph_creator, self._printer.get_reactor(), self.timeout) + axes_shaper_calibration(gcmd, self._gcode, self._printer, st_thread) + + cmd_AXES_MAP_CALIBRATION_help = 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer' + + def cmd_AXES_MAP_CALIBRATION(self, gcmd) -> None: + ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') + axes_map_finder = AxesMapFinder(self._config) + st_thread = ShakeTuneThread(self._config, axes_map_finder, self._printer.get_reactor(), self.timeout) + axes_map_calibration(gcmd, self._gcode, self._printer, st_thread) diff --git a/shaketune/shaketune_config.py b/shaketune/shaketune_config.py new file mode 100644 index 0000000..bf0e96d --- /dev/null +++ b/shaketune/shaketune_config.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python3 + +from pathlib import Path + +from .helpers.console_output import ConsoleOutput + +KLIPPER_FOLDER = Path.home() / 'klipper' +KLIPPER_LOG_FOLDER = Path.home() / 'printer_data/logs' +RESULTS_BASE_FOLDER = Path.home() / 'printer_data/config/K-ShakeTune_results' +RESULTS_SUBFOLDERS = {'belts': 'belts', 'shaper': 'inputshaper', 'vibrations': 'vibrations'} + + +class ShakeTuneConfig: + def __init__( + self, result_folder: Path = RESULTS_BASE_FOLDER, keep_n_results: int = 3, keep_csv: bool = False, dpi: int = 150 + ) -> None: + self._result_folder = result_folder + + self.keep_n_results = keep_n_results + self.keep_csv = keep_csv + self.dpi = dpi + + self.klipper_folder = KLIPPER_FOLDER + self.klipper_log_folder = KLIPPER_LOG_FOLDER + + def get_results_folder(self, type: str = None) -> Path: + if type is None: + return self._result_folder + else: + return self._result_folder / RESULTS_SUBFOLDERS[type] + + def get_results_subfolders(self) -> Path: + subfolders = [self._result_folder / subfolder for subfolder in RESULTS_SUBFOLDERS.values()] + return subfolders + + @staticmethod + def get_git_version() -> str: + try: + from git import GitCommandError, Repo + + # Get the absolute path of the script, resolving any symlinks + # Then get 1 times to parent dir to be at the git root folder + script_path = Path(__file__).resolve() + repo_path = script_path.parents[1] + repo = Repo(repo_path) + try: + version = repo.git.describe('--tags') + except GitCommandError: + version = repo.head.commit.hexsha[:7] # If no tag is found, use the simplified commit SHA instead + return version + except Exception as e: + ConsoleOutput.print(f'Warning: unable to retrieve Shake&Tune version number: {e}') + return 'unknown' + + # @staticmethod + # def parse_arguments(params: Optional[List] = None) -> argparse.Namespace: + # parser = argparse.ArgumentParser(description='Shake&Tune graphs generation script') + # parser.add_argument( + # '-t', + # '--type', + # dest='type', + # choices=['belts', 'shaper', 'vibrations', 'axesmap'], + # required=True, + # help='Type of output graph to produce', + # ) + # parser.add_argument( + # '--accel', + # type=int, + # default=None, + # dest='accel_used', + # help='Accelerometion used for vibrations profile creation or axes map calibration', + # ) + # parser.add_argument( + # '--chip_name', + # type=str, + # default='adxl345', + # dest='chip_name', + # help='Accelerometer chip name used for vibrations profile creation or axes map calibration', + # ) + # parser.add_argument( + # '--max_smoothing', + # type=float, + # default=None, + # dest='max_smoothing', + # help='Maximum smoothing to allow for input shaper filter recommendations', + # ) + # parser.add_argument( + # '--scv', + # '--square_corner_velocity', + # type=float, + # default=5.0, + # dest='scv', + # help='Square corner velocity used to compute max accel for input shapers filter recommendations', + # ) + # parser.add_argument( + # '-m', + # '--kinematics', + # dest='kinematics', + # default='cartesian', + # choices=['cartesian', 'corexy'], + # help='Machine kinematics configuration used for the vibrations profile creation', + # ) + # parser.add_argument( + # '--metadata', + # type=str, + # default=None, + # dest='metadata', + # help='Motor configuration metadata printed on the vibrations profiles', + # ) + # parser.add_argument( + # '-c', + # '--keep_csv', + # action='store_true', + # default=False, + # dest='keep_csv', + # help='Whether to keep the raw CSV files after processing in addition to the PNG graphs', + # ) + # parser.add_argument( + # '-n', + # '--keep_results', + # type=int, + # default=3, + # dest='keep_results', + # help='Number of results to keep in the result folder after each run of the script', + # ) + # parser.add_argument('--dpi', type=int, default=150, dest='dpi', help='DPI of the output PNG files') + # parser.add_argument( + # '-v', '--version', action='version', version=f'Shake&Tune {ShakeTuneConfig.get_git_version()}' + # ) + + # return parser.parse_args(params) diff --git a/shaketune/shaketune_thread.py b/shaketune/shaketune_thread.py new file mode 100644 index 0000000..4cd0bd1 --- /dev/null +++ b/shaketune/shaketune_thread.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + + +import os +import threading +import traceback + +from .helpers import filemanager as fm +from .helpers.console_output import ConsoleOutput +from .shaketune_config import ShakeTuneConfig + + +class ShakeTuneThread(threading.Thread): + def __init__(self, config: ShakeTuneConfig, graph_creator, reactor, timeout: float): + super(ShakeTuneThread, self).__init__() + self._config = config + self.graph_creator = graph_creator + self._reactor = reactor + self._timeout = timeout + + def get_graph_creator(self): + return self.graph_creator + + def run(self) -> None: + # Start the target function in a new thread + internal_thread = threading.Thread(target=self._shaketune_thread, args=(self.graph_creator,)) + internal_thread.start() + + # Monitor the thread execution and stop it if it takes too long + event_time = self._reactor.monotonic() + end_time = event_time + self._timeout + while event_time < end_time: + event_time = self._reactor.pause(event_time + 0.05) + if not internal_thread.is_alive(): + break + + # This function run in its own thread is used to do the CSV analysis and create the graphs + def _shaketune_thread(self, graph_creator) -> None: + # Trying to reduce the Shake&Tune prost-processing thread priority to avoid slowing down the main Klipper process + # as this could lead to random "Timer" errors when already running CANbus, etc... + try: + os.nice(20) + except Exception: + ConsoleOutput.print('Warning: failed reducing Shake&Tune thread priority, continuing...') + + fm.ensure_folders_exist(self._config.get_results_subfolders()) + + try: + graph_creator.create_graph() + except FileNotFoundError as e: + ConsoleOutput.print(f'FileNotFound error: {e}') + return + except TimeoutError as e: + ConsoleOutput.print(f'Timeout error: {e}') + return + except Exception as e: + ConsoleOutput.print(f'Error while generating the graphs: {e}\n{traceback.print_exc()}') + return + + graph_creator.clean_old_files(self._config.keep_n_results) + + if graph_creator.get_type() != 'axesmap': + ConsoleOutput.print(f'{graph_creator.get_type()} graphs created successfully!') + ConsoleOutput.print( + f'Cleaned up the output folder (only the last {self._config.keep_n_results} results were kept)!' + ) From 187ba13c98a199681935fa78070792360cdceeba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sun, 12 May 2024 18:50:31 +0200 Subject: [PATCH 17/50] added my own accelerometer interface --- shaketune/macros/accelerometer.py | 38 +++++++++++++++++++++++++++++++ shaketune/macros/axes_map.py | 10 ++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/shaketune/macros/accelerometer.py b/shaketune/macros/accelerometer.py index 63f77b6..6b3b182 100644 --- a/shaketune/macros/accelerometer.py +++ b/shaketune/macros/accelerometer.py @@ -1,2 +1,40 @@ #!/usr/bin/env python3 +import time + +from ..helpers.console_output import ConsoleOutput + + +class Accelerometer: + def __init__(self, klipper_accelerometer): + self._k_accelerometer = klipper_accelerometer + + def start_measurement(self): + if self._k_accelerometer.bg_client is None: + self._k_accelerometer.bg_client = self._k_accelerometer.chip.start_internal_client() + ConsoleOutput.print('accelerometer measurements started') + else: + raise ValueError('measurements already started!') + + def stop_measurement(self, name: str = None): + if self._k_accelerometer.bg_client is not None: + name = name or time.strftime('%Y%m%d_%H%M%S') + if not name.replace('-', '').replace('_', '').isalnum(): + raise ValueError('invalid file name!') + + bg_client = self._k_accelerometer.bg_client + self._k_accelerometer.bg_client = None + bg_client.finish_measurements() + + filename = f'/tmp/shaketune-{name}.csv' + self._write_to_file(bg_client, filename) + ConsoleOutput.print(f'Measurements stopped. Data written to {filename}') + else: + raise ValueError('measurements need to be started first!') + + def _write_to_file(self, bg_client, filename): + with open(filename, 'w') as f: + f.write('#time,accel_x,accel_y,accel_z\n') + samples = bg_client.samples or bg_client.get_samples() + for t, accel_x, accel_y, accel_z in samples: + f.write('%.6f,%.6f,%.6f,%.6f\n' % (t, accel_x, accel_y, accel_z)) diff --git a/shaketune/macros/axes_map.py b/shaketune/macros/axes_map.py index 279f95d..877b856 100644 --- a/shaketune/macros/axes_map.py +++ b/shaketune/macros/axes_map.py @@ -3,6 +3,7 @@ from ..helpers.console_output import ConsoleOutput from ..shaketune_thread import ShakeTuneThread +from .accelerometer import Accelerometer def find_axis_accelerometer(printer, axis: str = 'xy'): @@ -56,7 +57,10 @@ def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> No toolhead.dwell(0.5) # Start the measurements and do the movements (+X, +Y and then +Z) - gcode.run_script_from_command(f'ACCELEROMETER_MEASURE CHIP={accel_chip}') + accelerometer = Accelerometer(printer.lookup_object(accel_chip)) + accelerometer.start_measurement() + # gcode.run_script_from_command(f'ACCELEROMETER_MEASURE CHIP={accel_chip}') + toolhead.dwell(1) toolhead.move([mid_x + 15, mid_y - 15, z_height, E], speed) toolhead.dwell(1) @@ -64,7 +68,9 @@ def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> No toolhead.dwell(1) toolhead.move([mid_x + 15, mid_y + 15, z_height + 15, E], speed) toolhead.dwell(1) - gcode.run_script_from_command(f'ACCELEROMETER_MEASURE CHIP={accel_chip} NAME=axemap') + + accelerometer.stop_measurement('axemap') + # gcode.run_script_from_command(f'ACCELEROMETER_MEASURE CHIP={accel_chip} NAME=axemap') # Re-enable the input shaper if it was active if input_shaper is not None: From 375190610cc6d7d09f736ce57d71c152ac259171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sun, 12 May 2024 20:58:53 +0200 Subject: [PATCH 18/50] using my own resonance tester algorithm --- README.md | 2 +- docs/README.md | 9 ++- docs/macros/axis_tuning.md | 17 +++-- docs/macros/belts_tuning.md | 11 +-- shaketune/graph_creators/graph_creator.py | 13 ++-- shaketune/macros/__init__.py | 7 ++ shaketune/macros/accelerometer.py | 56 +++++++++----- shaketune/macros/axes_input_shaper.py | 93 ++++++++++++++++++++--- shaketune/macros/axes_map.py | 18 +---- shaketune/macros/belts_comparison.py | 79 ++++++++++++++++--- shaketune/macros/resonance_test.py | 50 ++++++++++++ shaketune/macros/static_freq.py | 53 ++++++++++--- 12 files changed, 317 insertions(+), 91 deletions(-) create mode 100644 shaketune/macros/resonance_test.py diff --git a/README.md b/README.md index 1bb6546..e4156ac 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Klipper Shake&Tune Module +# Klipper Shake&Tune plugin This "Shake&Tune" repository is a standalone module from the [Klippain](https://github.com/Frix-x/klippain) ecosystem, designed to automate and calibrate the input shaper system on your Klipper 3D printer with a streamlined workflow and insightful vizualisations. This can be installed on any Klipper machine. It is not limited to those using Klippain. diff --git a/docs/README.md b/docs/README.md index 714db9d..3e45ec6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# Klippain Shake&Tune module documentation +# Klipper Shake&Tune plugin documentation ![](./banner_long.png) @@ -89,7 +89,7 @@ Here are the parameters available when calling this macro: |SPEED|80|speed of the toolhead in mm/s for the movements| |ACCEL|1500 (or max printer accel)|accel in mm/s^2 used for all the moves| |TRAVEL_SPEED|120|speed in mm/s used for all the travels moves| -|ACCEL_CHIP|"adxl345"|accelerometer chip name in the config| +|ACCEL_CHIP|None|accelerometer to use for the test. If unset, it will automatically select the proper accelerometer based on what is configured in your `[resonance_tester]` config section| The machine will move slightly in +X, +Y, and +Z, and output in the console: `Detected axes_map: -z,y,x`. @@ -108,8 +108,11 @@ Here are the parameters available when calling this macro: | parameters | default value | description | |-----------:|---------------|-------------| |FREQUENCY|25|excitation frequency (in Hz) that you want to maintain. Usually, it's the frequency of a peak on one of the graphs| -|TIME|10|time in second to maintain this excitation| +|DURATION|10|duration in second to maintain this excitation| +|ACCEL_PER_HZ|None|accel per Hz value used for the test. If unset, it will use the value from your `[resonance_tester]` config section (75 is the default)| |AXIS|x|axis you want to excitate. Can be set to either "x", "y", "a", "b"| +|TRAVEL_SPEED|120|speed in mm/s used for all the travel movements (to go to the start position prior to the test)| +|Z_HEIGHT|None|Z height wanted for the test. This value can be used if needed to override the Z value of the probe_point set in your `[resonance_tester]` config section| ## Complementary ressources diff --git a/docs/macros/axis_tuning.md b/docs/macros/axis_tuning.md index a37168b..3a4c1e1 100644 --- a/docs/macros/axis_tuning.md +++ b/docs/macros/axis_tuning.md @@ -11,14 +11,15 @@ Then, call the `AXES_SHAPER_CALIBRATION` macro and look for the graphs in the re | parameters | default value | description | |-----------:|---------------|-------------| -|FREQ_START|5|Starting excitation frequency| -|FREQ_END|133|Maximum excitation frequency| -|HZ_PER_SEC|1|Number of Hz per seconds for the test| -|AXIS|"all"|Axis you want to test in the list of "all", "X" or "Y"| -|SCV|printer square corner velocity|Square corner velocity you want to use to calculate shaper recommendations. Using higher SCV values usually results in more smoothing and lower maximum accelerations| -|MAX_SMOOTHING|None|Max smoothing allowed when calculating shaper recommendations| -|KEEP_N_RESULTS|3|Total number of results to keep in the result folder after running the test. The older results are automatically cleaned up| -|KEEP_CSV|0|Weither or not to keep the CSV data file alonside the PNG graphs| +|FREQ_START|5|starting excitation frequency| +|FREQ_END|133|maximum excitation frequency| +|HZ_PER_SEC|1|number of Hz per seconds for the test| +|ACCEL_PER_HZ|None|accel per Hz value used for the test. If unset, it will use the value from your `[resonance_tester]` config section (75 is the default)| +|AXIS|"all"|axis you want to test in the list of "all", "X" or "Y"| +|SCV|printer square corner velocity|square corner velocity you want to use to calculate shaper recommendations. Using higher SCV values usually results in more smoothing and lower maximum accelerations| +|MAX_SMOOTHING|None|max smoothing allowed when calculating shaper recommendations| +|TRAVEL_SPEED|120|speed in mm/s used for all the travel movements (to go to the start position prior to the test)| +|Z_HEIGHT|None|Z height wanted for the test. This value can be used if needed to override the Z value of the probe_point set in your `[resonance_tester]` config section| ## Graphs description diff --git a/docs/macros/belts_tuning.md b/docs/macros/belts_tuning.md index 0ce42c0..d1b3fd2 100644 --- a/docs/macros/belts_tuning.md +++ b/docs/macros/belts_tuning.md @@ -11,11 +11,12 @@ Then, call the `COMPARE_BELTS_RESPONSES` macro and look for the graphs in the re | parameters | default value | description | |-----------:|---------------|-------------| -|FREQ_START|5|Starting excitation frequency| -|FREQ_END|133|Maximum excitation frequency| -|HZ_PER_SEC|1|Number of Hz per seconds for the test| -|KEEP_N_RESULTS|3|Total number of results to keep in the result folder after running the test. The older results are automatically cleaned up| -|KEEP_CSV|0|Weither or not to keep the CSV data files alonside the PNG graphs| +|FREQ_START|5|starting excitation frequency| +|FREQ_END|133|maximum excitation frequency| +|HZ_PER_SEC|1|number of Hz per seconds for the test| +|ACCEL_PER_HZ|None|accel per Hz value used for the test. If unset, it will use the value from your `[resonance_tester]` config section (75 is the default)| +|TRAVEL_SPEED|120|speed in mm/s used for all the travel movements (to go to the start position prior to the test)| +|Z_HEIGHT|None|Z height wanted for the test. This value can be used if needed to override the Z value of the probe_point set in your `[resonance_tester]` config section| ## Graphs description diff --git a/shaketune/graph_creators/graph_creator.py b/shaketune/graph_creators/graph_creator.py index 75fc3da..4902d37 100644 --- a/shaketune/graph_creators/graph_creator.py +++ b/shaketune/graph_creators/graph_creator.py @@ -57,7 +57,6 @@ class GraphCreator(abc.ABC): new_file = self._folder / f'{self._type}_{self._graph_date}_{custom_name}.csv' # shutil.move() is needed to move the file across filesystems (mainly for BTT CB1 Pi default OS image) shutil.move(filename, new_file) - fm.wait_file_ready(new_file) lognames.append(new_file) return lognames @@ -98,9 +97,9 @@ class BeltsGraphCreator(GraphCreator): def create_graph(self) -> None: lognames = self._move_and_prepare_files( - glob_pattern='raw_data_axis*.csv', + glob_pattern='shaketune-belt_*.csv', min_files_required=2, - custom_name_func=lambda f: f.stem.split('_')[3].upper(), + custom_name_func=lambda f: f.stem.split('_')[1].upper(), ) fig = belts_calibration( lognames=[str(path) for path in lognames], @@ -245,15 +244,13 @@ class AxesMapFinder(GraphCreator): def find_axesmap(self) -> None: tmp_folder = Path('/tmp') - globbed_files = list(tmp_folder.glob(f'{self._chip_name}-*.csv')) + globbed_files = list(tmp_folder.glob('shaketune-axemap_*.csv')) if not globbed_files: raise FileNotFoundError('no CSV files found in the /tmp folder to find the axes map!') - # Find the CSV files with the latest timestamp and wait for it to be released by Klipper + # Find the CSV files with the latest timestamp and process it logname = sorted(globbed_files, key=lambda f: f.stat().st_mtime, reverse=True)[0] - fm.wait_file_ready(logname) - results = axesmap_calibration( lognames=[str(logname)], accel=self._accel, @@ -271,6 +268,6 @@ class AxesMapFinder(GraphCreator): def clean_old_files(self, keep_results: int) -> None: tmp_folder = Path('/tmp') - globbed_files = list(tmp_folder.glob(f'{self._chip_name}-*.csv')) + globbed_files = list(tmp_folder.glob('shaketune-axemap_*.csv')) for csv_file in globbed_files: csv_file.unlink() diff --git a/shaketune/macros/__init__.py b/shaketune/macros/__init__.py index 5486211..e6338e4 100644 --- a/shaketune/macros/__init__.py +++ b/shaketune/macros/__init__.py @@ -5,6 +5,13 @@ from .axes_map import axes_map_calibration as axes_map_calibration from .belts_comparison import compare_belts_responses as compare_belts_responses from .static_freq import excitate_axis_at_freq as excitate_axis_at_freq +AXIS_CONFIG = [ + {'axis': 'x', 'direction': (1, 0, 0), 'label': 'axis_X'}, + {'axis': 'y', 'direction': (0, 1, 0), 'label': 'axis_Y'}, + {'axis': 'a', 'direction': (1, -1, 0), 'label': 'belt_A'}, + {'axis': 'b', 'direction': (1, 1, 0), 'label': 'belt_B'}, +] + # graph_creators = { # 'axesmap': (AxesMapFinder, lambda gc: gc.configure(options.accel_used, options.chip_name)), # 'belts': (BeltsGraphCreator, None), diff --git a/shaketune/macros/accelerometer.py b/shaketune/macros/accelerometer.py index 6b3b182..1a2e3c3 100644 --- a/shaketune/macros/accelerometer.py +++ b/shaketune/macros/accelerometer.py @@ -1,37 +1,57 @@ #!/usr/bin/env python3 +# This file provides a custom and internal Shake&Tune Accelerometer helper that is +# an interface to Klipper's own accelerometer classes. It is used to start and +# stop accelerometer measurements and write the data to a file in a blocking manner. + import time -from ..helpers.console_output import ConsoleOutput +# from ..helpers.console_output import ConsoleOutput class Accelerometer: def __init__(self, klipper_accelerometer): self._k_accelerometer = klipper_accelerometer + self._bg_client = None + + @staticmethod + def find_axis_accelerometer(printer, axis: str = 'xy'): + accel_chip_names = printer.lookup_object('resonance_tester').accel_chip_names + for chip_axis, chip_name in accel_chip_names: + if axis in ['x', 'y'] and chip_axis == 'xy': + return chip_name + elif chip_axis == axis: + return chip_name + return None def start_measurement(self): - if self._k_accelerometer.bg_client is None: - self._k_accelerometer.bg_client = self._k_accelerometer.chip.start_internal_client() - ConsoleOutput.print('accelerometer measurements started') + if self._bg_client is None: + self._bg_client = self._k_accelerometer.start_internal_client() + # ConsoleOutput.print('Accelerometer measurements started') else: raise ValueError('measurements already started!') - def stop_measurement(self, name: str = None): - if self._k_accelerometer.bg_client is not None: - name = name or time.strftime('%Y%m%d_%H%M%S') - if not name.replace('-', '').replace('_', '').isalnum(): - raise ValueError('invalid file name!') - - bg_client = self._k_accelerometer.bg_client - self._k_accelerometer.bg_client = None - bg_client.finish_measurements() - - filename = f'/tmp/shaketune-{name}.csv' - self._write_to_file(bg_client, filename) - ConsoleOutput.print(f'Measurements stopped. Data written to {filename}') - else: + def stop_measurement(self, name: str = None, append_time: bool = True): + if self._bg_client is None: raise ValueError('measurements need to be started first!') + timestamp = time.strftime('%Y%m%d_%H%M%S') + if name is None: + name = timestamp + elif append_time: + name += f'_{timestamp}' + + if not name.replace('-', '').replace('_', '').isalnum(): + raise ValueError('invalid file name!') + + bg_client = self._bg_client + self._bg_client = None + bg_client.finish_measurements() + + filename = f'/tmp/shaketune-{name}.csv' + self._write_to_file(bg_client, filename) + # ConsoleOutput.print(f'Accelerometer measurements stopped. Data written to {filename}') + def _write_to_file(self, bg_client, filename): with open(filename, 'w') as f: f.write('#time,accel_x,accel_y,accel_z\n') diff --git a/shaketune/macros/axes_input_shaper.py b/shaketune/macros/axes_input_shaper.py index 47b72d7..d25209d 100644 --- a/shaketune/macros/axes_input_shaper.py +++ b/shaketune/macros/axes_input_shaper.py @@ -3,33 +3,102 @@ from ..helpers.console_output import ConsoleOutput from ..shaketune_thread import ShakeTuneThread +from . import AXIS_CONFIG +from .accelerometer import Accelerometer +from .resonance_test import vibrate_axis def axes_shaper_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: min_freq = gcmd.get_float('FREQ_START', default=5, minval=1) max_freq = gcmd.get_float('FREQ_END', default=133.33, minval=1) hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1, minval=1) - axis = gcmd.get('AXIS', default='all') - if axis not in ['x', 'y', 'all']: + accel_per_hz = gcmd.get_float('ACCEL_PER_HZ', default=None) + axis_input = gcmd.get('AXIS', default='all').lower() + if axis_input not in ['x', 'y', 'all']: gcmd.error('AXIS selection invalid. Should be either x, y, or all!') scv = gcmd.get_float('SCV', default=None, minval=0) max_sm = gcmd.get_float('MAX_SMOOTHING', default=None, minval=0) + feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) + z_height = gcmd.get_float('Z_HEIGHT', default=None, minval=1) + + systime = printer.get_reactor().monotonic() + toolhead = printer.lookup_object('toolhead') + res_tester = printer.lookup_object('resonance_tester') if scv is None: - systime = printer.get_reactor().monotonic() - toolhead = printer.lookup_object('toolhead') toolhead_info = toolhead.get_status(systime) scv = toolhead_info['square_corner_velocity'] + if accel_per_hz is None: + accel_per_hz = res_tester.test.accel_per_hz + max_accel = max_freq * accel_per_hz + + # Move to the starting point + test_points = res_tester.test.get_start_test_points() + if len(test_points) > 1: + gcmd.error('Only one test point in the [resonance_tester] section is supported by Shake&Tune.') + if test_points[0] == (-1, -1, -1): + if z_height is None: + gcmd.error( + 'Z_HEIGHT parameter is required if the test_point in [resonance_tester] section is set to -1,-1,-1' + ) + # Use center of bed in case the test point in [resonance_tester] is set to -1,-1,-1 + # This is usefull to get something automatic and is also used in the Klippain modular config + kin_info = toolhead.kin.get_status(systime) + mid_x = (kin_info['axis_minimum'].x + kin_info['axis_maximum'].x) / 2 + mid_y = (kin_info['axis_minimum'].y + kin_info['axis_maximum'].y) / 2 + point = (mid_x, mid_y, z_height) + else: + x, y, z = test_points[0] + if z_height is not None: + z = z_height + point = (x, y, z) + + toolhead.manual_move(point, feedrate_travel) + + # Configure the graph creator creator = st_thread.get_graph_creator() creator.configure(scv, max_sm) - axis_flags = {'x': axis in ('x', 'all'), 'y': axis in ('y', 'all')} - for axis in ['x', 'y']: - if axis_flags[axis]: - gcode.run_script_from_command( - f'TEST_RESONANCES AXIS={axis.upper()} OUTPUT=raw_data NAME={axis} FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec}' + # set the needed acceleration values for the test + toolhead_info = toolhead.get_status(systime) + old_accel = toolhead_info['max_accel'] + old_mcr = toolhead_info['minimum_cruise_ratio'] + gcode.run_script_from_command(f'SET_VELOCITY_LIMIT ACCEL={max_accel} MINIMUM_CRUISE_RATIO=0') + + # Deactivate input shaper if it is active to get raw movements + input_shaper = printer.lookup_object('input_shaper', None) + if input_shaper is not None: + input_shaper.disable_shaping() + else: + input_shaper = None + + # Filter axis configurations based on user input, assuming 'axis_input' can be 'x', 'y', 'all' (that means 'x' and 'y') + filtered_config = [ + a for a in AXIS_CONFIG if a['axis'] == axis_input or (axis_input == 'all' and a['axis'] in ('x', 'y')) + ] + for config in filtered_config: + # First we need to find the accelerometer chip suited for the axis + accel_chip = Accelerometer.find_axis_accelerometer(printer, config['axis']) + if accel_chip is None: + gcmd.error( + 'No suitable accelerometer found for measurement! Multi-accelerometer configurations are not supported for this macro.' ) - ConsoleOutput.print(f'{axis.upper()} axis frequency profile generation...') - ConsoleOutput.print('This may take some time (1-3min)') - st_thread.run() + accelerometer = Accelerometer(printer.lookup_object(accel_chip)) + + # Then do the actual measurements + accelerometer.start_measurement() + vibrate_axis(toolhead, gcode, config['direction'], min_freq, max_freq, hz_per_sec, accel_per_hz) + accelerometer.stop_measurement(config['label'], append_time=True) + + # And finally generate the graph for each measured axis + ConsoleOutput.print(f'{config['axis'].upper()} axis frequency profile generation...') + ConsoleOutput.print('This may take some time (1-3min)') + st_thread.run() + + # Re-enable the input shaper if it was active + if input_shaper is not None: + input_shaper.enable_shaping() + + # Restore the previous acceleration values + gcode.run_script_from_command(f'SET_VELOCITY_LIMIT ACCEL={old_accel} MINIMUM_CRUISE_RATIO={old_mcr}') diff --git a/shaketune/macros/axes_map.py b/shaketune/macros/axes_map.py index 877b856..38d1e0e 100644 --- a/shaketune/macros/axes_map.py +++ b/shaketune/macros/axes_map.py @@ -6,16 +6,6 @@ from ..shaketune_thread import ShakeTuneThread from .accelerometer import Accelerometer -def find_axis_accelerometer(printer, axis: str = 'xy'): - accel_chip_names = printer.lookup_object('resonance_tester').accel_chip_names - for chip_axis, chip_name in accel_chip_names: - if axis in ['x', 'y'] and chip_axis == 'xy': - return chip_name - elif chip_axis == axis: - return chip_name - return None - - def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: z_height = gcmd.get_float('Z_HEIGHT', default=20.0) speed = gcmd.get_float('SPEED', default=80.0, minval=20.0) @@ -24,11 +14,12 @@ def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> No accel_chip = gcmd.get('ACCEL_CHIP', default=None) if accel_chip is None: - accel_chip = find_axis_accelerometer(printer, 'xy') + accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy') if accel_chip is None: gcmd.error( 'No accelerometer specified for measurement! Multi-accelerometer configurations are not supported for this macro.' ) + accelerometer = Accelerometer(printer.lookup_object(accel_chip)) systime = printer.get_reactor().monotonic() toolhead = printer.lookup_object('toolhead') @@ -57,10 +48,7 @@ def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> No toolhead.dwell(0.5) # Start the measurements and do the movements (+X, +Y and then +Z) - accelerometer = Accelerometer(printer.lookup_object(accel_chip)) accelerometer.start_measurement() - # gcode.run_script_from_command(f'ACCELEROMETER_MEASURE CHIP={accel_chip}') - toolhead.dwell(1) toolhead.move([mid_x + 15, mid_y - 15, z_height, E], speed) toolhead.dwell(1) @@ -68,9 +56,7 @@ def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> No toolhead.dwell(1) toolhead.move([mid_x + 15, mid_y + 15, z_height + 15, E], speed) toolhead.dwell(1) - accelerometer.stop_measurement('axemap') - # gcode.run_script_from_command(f'ACCELEROMETER_MEASURE CHIP={accel_chip} NAME=axemap') # Re-enable the input shaper if it was active if input_shaper is not None: diff --git a/shaketune/macros/belts_comparison.py b/shaketune/macros/belts_comparison.py index 7a4abf6..3e3a546 100644 --- a/shaketune/macros/belts_comparison.py +++ b/shaketune/macros/belts_comparison.py @@ -3,24 +3,83 @@ from ..helpers.console_output import ConsoleOutput from ..shaketune_thread import ShakeTuneThread +from . import AXIS_CONFIG +from .accelerometer import Accelerometer +from .resonance_test import vibrate_axis def compare_belts_responses(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: - min_freq = gcmd.get_float('FREQ_START', default=5, minval=1) + min_freq = gcmd.get_float('FREQ_START', default=5.0, minval=1) max_freq = gcmd.get_float('FREQ_END', default=133.33, minval=1) - hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1, minval=1) + hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1.0, minval=1) + accel_per_hz = gcmd.get_float('ACCEL_PER_HZ', default=None) + feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) + z_height = gcmd.get_float('Z_HEIGHT', default=None, minval=1) + systime = printer.get_reactor().monotonic() toolhead = printer.lookup_object('toolhead') + res_tester = printer.lookup_object('resonance_tester') - gcode.run_script_from_command( - f'TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data NAME=b FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec}' - ) - toolhead.wait_moves() + accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy') + if accel_chip is None: + gcmd.error( + 'No suitable accelerometer found for measurement! Multi-accelerometer configurations are not supported for this macro.' + ) + accelerometer = Accelerometer(printer.lookup_object(accel_chip)) - gcode.run_script_from_command( - f'TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data NAME=a FREQ_START={min_freq} FREQ_END={max_freq} HZ_PER_SEC={hz_per_sec}' - ) - toolhead.wait_moves() + if accel_per_hz is None: + accel_per_hz = res_tester.test.accel_per_hz + max_accel = max_freq * accel_per_hz + + # Move to the starting point + test_points = res_tester.test.get_start_test_points() + if len(test_points) > 1: + gcmd.error('Only one test point in the [resonance_tester] section is supported by Shake&Tune.') + if test_points[0] == (-1, -1, -1): + if z_height is None: + gcmd.error( + 'Z_HEIGHT parameter is required if the test_point in [resonance_tester] section is set to -1,-1,-1' + ) + # Use center of bed in case the test point in [resonance_tester] is set to -1,-1,-1 + # This is usefull to get something automatic and is also used in the Klippain modular config + kin_info = toolhead.kin.get_status(systime) + mid_x = (kin_info['axis_minimum'].x + kin_info['axis_maximum'].x) / 2 + mid_y = (kin_info['axis_minimum'].y + kin_info['axis_maximum'].y) / 2 + point = (mid_x, mid_y, z_height) + else: + x, y, z = test_points[0] + if z_height is not None: + z = z_height + point = (x, y, z) + + toolhead.manual_move(point, feedrate_travel) + + # set the needed acceleration values for the test + toolhead_info = toolhead.get_status(systime) + old_accel = toolhead_info['max_accel'] + old_mcr = toolhead_info['minimum_cruise_ratio'] + gcode.run_script_from_command(f'SET_VELOCITY_LIMIT ACCEL={max_accel} MINIMUM_CRUISE_RATIO=0') + + # Deactivate input shaper if it is active to get raw movements + input_shaper = printer.lookup_object('input_shaper', None) + if input_shaper is not None: + input_shaper.disable_shaping() + else: + input_shaper = None + + # Filter axis configurations to get the A and B axis only + filtered_config = [a for a in AXIS_CONFIG if a['axis'] in ('x', 'y')] + for config in filtered_config: + accelerometer.start_measurement() + vibrate_axis(toolhead, gcode, config['direction'], min_freq, max_freq, hz_per_sec, accel_per_hz) + accelerometer.stop_measurement(config['label'], append_time=True) + + # Re-enable the input shaper if it was active + if input_shaper is not None: + input_shaper.enable_shaping() + + # Restore the previous acceleration values + gcode.run_script_from_command(f'SET_VELOCITY_LIMIT ACCEL={old_accel} MINIMUM_CRUISE_RATIO={old_mcr}') # Run post-processing ConsoleOutput.print('Belts comparative frequency profile generation...') diff --git a/shaketune/macros/resonance_test.py b/shaketune/macros/resonance_test.py new file mode 100644 index 0000000..6913626 --- /dev/null +++ b/shaketune/macros/resonance_test.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +# The logic in this file was "extracted" from Klipper's orignal resonance_tester.py file +# Courtesy of Dmitry Butyugin for the original implementation + +# This derive a bit from Klipper's implementation as there are two main changes: +# 1. Original code doesn't use euclidean distance for the moves calculation with projection. The new approach implemented here +# ensures that the vector's total length remains constant (= L), regardless of the direction components. It's especially +# important when the direction vector involves combinations of movements along multiple axes like for the diagonal belt tests. +# 2. Original code doesn't allow Z axis movement that was added here for later use + +import math + +from ..helpers.console_output import ConsoleOutput + + +# This function is used to vibrate the toolhead in a specific axis direction +# to test the resonance frequency of the printer and its components +def vibrate_axis(toolhead, gcode, axis_direction, min_freq, max_freq, hz_per_sec, accel_per_hz): + freq = min_freq + X, Y, Z, E = toolhead.get_position() # Get current position + sign = 1.0 + + while freq <= max_freq + 0.000001: + t_seg = 0.25 / freq # Time segment for one vibration cycle + accel = accel_per_hz * freq # Acceleration for each half-cycle + max_v = accel * t_seg # Max velocity for each half-cycle + toolhead.cmd_M204(gcode.create_gcode_command('M204', 'M204', {'S': accel})) + L = 0.5 * accel * t_seg**2 # Distance for each half-cycle + + # Calculate move points based on axis direction (X, Y and Z) + magnitude = math.sqrt(sum([component**2 for component in axis_direction])) + normalized_direction = tuple(component / magnitude for component in axis_direction) + dX, dY, dZ = normalized_direction[0] * L, normalized_direction[1] * L, normalized_direction[2] * L + nX = X + sign * dX + nY = Y + sign * dY + nZ = Z + sign * dZ + + # Execute movement + toolhead.move([nX, nY, nZ, E], max_v) + toolhead.move([X, Y, Z, E], max_v) + sign *= -1 + + # Increase frequency for next cycle + old_freq = freq + freq += 2 * t_seg * hz_per_sec + if int(freq) > int(old_freq): + ConsoleOutput.print(f'Testing frequency: {freq:.0f} Hz') + + toolhead.wait_moves() diff --git a/shaketune/macros/static_freq.py b/shaketune/macros/static_freq.py index 596a32c..b6bbf12 100644 --- a/shaketune/macros/static_freq.py +++ b/shaketune/macros/static_freq.py @@ -1,22 +1,55 @@ #!/usr/bin/env python3 from ..helpers.console_output import ConsoleOutput +from . import AXIS_CONFIG +from .resonance_test import vibrate_axis -def excitate_axis_at_freq(gcmd, gcode) -> None: +def excitate_axis_at_freq(gcmd, printer, gcode) -> None: freq = gcmd.get_int('FREQUENCY', default=25, minval=1) duration = gcmd.get_int('DURATION', default=10, minval=1) - axis = gcmd.get('AXIS', default='x') - if axis not in ['x', 'y', 'a', 'b']: + accel_per_hz = gcmd.get_float('ACCEL_PER_HZ', default=None) + axis = gcmd.get('AXIS', default='x').lower() + feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) + z_height = gcmd.get_float('Z_HEIGHT', default=None, minval=1) + + axis_config = next((item for item in AXIS_CONFIG if item['axis'] == axis), None) + if axis_config is None: gcmd.error('AXIS selection invalid. Should be either x, y, a or b!') ConsoleOutput.print(f'Excitating {axis.upper()} axis at {freq}Hz for {duration} seconds') - if axis == 'a': - axis = '1,-1' - elif axis == 'b': - axis = '1,1' + systime = printer.get_reactor().monotonic() + toolhead = printer.lookup_object('toolhead') + res_tester = printer.lookup_object('resonance_tester') - gcode.run_script_from_command( - f'TEST_RESONANCES OUTPUT=raw_data AXIS={axis} FREQ_START={freq-1} FREQ_END={freq+1} HZ_PER_SEC={1/(duration/3)}' - ) + if accel_per_hz is None: + accel_per_hz = res_tester.test.accel_per_hz + + # Move to the starting point + test_points = res_tester.test.get_start_test_points() + if len(test_points) > 1: + gcmd.error('Only one test point in the [resonance_tester] section is supported by Shake&Tune.') + if test_points[0] == (-1, -1, -1): + if z_height is None: + gcmd.error( + 'Z_HEIGHT parameter is required if the test_point in [resonance_tester] section is set to -1,-1,-1' + ) + # Use center of bed in case the test point in [resonance_tester] is set to -1,-1,-1 + # This is usefull to get something automatic and is also used in the Klippain modular config + kin_info = toolhead.kin.get_status(systime) + mid_x = (kin_info['axis_minimum'].x + kin_info['axis_maximum'].x) / 2 + mid_y = (kin_info['axis_minimum'].y + kin_info['axis_maximum'].y) / 2 + point = (mid_x, mid_y, z_height) + else: + x, y, z = test_points[0] + if z_height is not None: + z = z_height + point = (x, y, z) + + toolhead.manual_move(point, feedrate_travel) + + min_freq = freq - 1 + max_freq = freq + 1 + hz_per_sec = 1 / (duration / 3) + vibrate_axis(toolhead, gcode, axis_config['direction'], min_freq, max_freq, hz_per_sec, accel_per_hz) From a37ece7ece67a8e97d841bfbc9bdd67a44042a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 13 May 2024 17:22:05 +0200 Subject: [PATCH 19/50] rename folders in measurement and post-processing --- .../{macros => measurement}/K-SnT_vibrations.cfg | 0 shaketune/{macros => measurement}/__init__.py | 0 shaketune/{macros => measurement}/accelerometer.py | 0 .../{macros => measurement}/axes_input_shaper.py | 0 shaketune/{macros => measurement}/axes_map.py | 0 .../{macros => measurement}/belts_comparison.py | 0 shaketune/{macros => measurement}/resonance_test.py | 0 shaketune/{macros => measurement}/static_freq.py | 0 .../{graph_creators => post_processing}/__init__.py | 0 .../analyze_axesmap.py | 0 .../graph_belts.py | 0 .../graph_creator.py | 0 .../graph_shaper.py | 0 .../graph_vibrations.py | 0 .../klippain.png | Bin shaketune/shaketune.py | 4 ++-- 16 files changed, 2 insertions(+), 2 deletions(-) rename shaketune/{macros => measurement}/K-SnT_vibrations.cfg (100%) rename shaketune/{macros => measurement}/__init__.py (100%) rename shaketune/{macros => measurement}/accelerometer.py (100%) rename shaketune/{macros => measurement}/axes_input_shaper.py (100%) rename shaketune/{macros => measurement}/axes_map.py (100%) rename shaketune/{macros => measurement}/belts_comparison.py (100%) rename shaketune/{macros => measurement}/resonance_test.py (100%) rename shaketune/{macros => measurement}/static_freq.py (100%) rename shaketune/{graph_creators => post_processing}/__init__.py (100%) rename shaketune/{graph_creators => post_processing}/analyze_axesmap.py (100%) rename shaketune/{graph_creators => post_processing}/graph_belts.py (100%) rename shaketune/{graph_creators => post_processing}/graph_creator.py (100%) rename shaketune/{graph_creators => post_processing}/graph_shaper.py (100%) rename shaketune/{graph_creators => post_processing}/graph_vibrations.py (100%) rename shaketune/{graph_creators => post_processing}/klippain.png (100%) diff --git a/shaketune/macros/K-SnT_vibrations.cfg b/shaketune/measurement/K-SnT_vibrations.cfg similarity index 100% rename from shaketune/macros/K-SnT_vibrations.cfg rename to shaketune/measurement/K-SnT_vibrations.cfg diff --git a/shaketune/macros/__init__.py b/shaketune/measurement/__init__.py similarity index 100% rename from shaketune/macros/__init__.py rename to shaketune/measurement/__init__.py diff --git a/shaketune/macros/accelerometer.py b/shaketune/measurement/accelerometer.py similarity index 100% rename from shaketune/macros/accelerometer.py rename to shaketune/measurement/accelerometer.py diff --git a/shaketune/macros/axes_input_shaper.py b/shaketune/measurement/axes_input_shaper.py similarity index 100% rename from shaketune/macros/axes_input_shaper.py rename to shaketune/measurement/axes_input_shaper.py diff --git a/shaketune/macros/axes_map.py b/shaketune/measurement/axes_map.py similarity index 100% rename from shaketune/macros/axes_map.py rename to shaketune/measurement/axes_map.py diff --git a/shaketune/macros/belts_comparison.py b/shaketune/measurement/belts_comparison.py similarity index 100% rename from shaketune/macros/belts_comparison.py rename to shaketune/measurement/belts_comparison.py diff --git a/shaketune/macros/resonance_test.py b/shaketune/measurement/resonance_test.py similarity index 100% rename from shaketune/macros/resonance_test.py rename to shaketune/measurement/resonance_test.py diff --git a/shaketune/macros/static_freq.py b/shaketune/measurement/static_freq.py similarity index 100% rename from shaketune/macros/static_freq.py rename to shaketune/measurement/static_freq.py diff --git a/shaketune/graph_creators/__init__.py b/shaketune/post_processing/__init__.py similarity index 100% rename from shaketune/graph_creators/__init__.py rename to shaketune/post_processing/__init__.py diff --git a/shaketune/graph_creators/analyze_axesmap.py b/shaketune/post_processing/analyze_axesmap.py similarity index 100% rename from shaketune/graph_creators/analyze_axesmap.py rename to shaketune/post_processing/analyze_axesmap.py diff --git a/shaketune/graph_creators/graph_belts.py b/shaketune/post_processing/graph_belts.py similarity index 100% rename from shaketune/graph_creators/graph_belts.py rename to shaketune/post_processing/graph_belts.py diff --git a/shaketune/graph_creators/graph_creator.py b/shaketune/post_processing/graph_creator.py similarity index 100% rename from shaketune/graph_creators/graph_creator.py rename to shaketune/post_processing/graph_creator.py diff --git a/shaketune/graph_creators/graph_shaper.py b/shaketune/post_processing/graph_shaper.py similarity index 100% rename from shaketune/graph_creators/graph_shaper.py rename to shaketune/post_processing/graph_shaper.py diff --git a/shaketune/graph_creators/graph_vibrations.py b/shaketune/post_processing/graph_vibrations.py similarity index 100% rename from shaketune/graph_creators/graph_vibrations.py rename to shaketune/post_processing/graph_vibrations.py diff --git a/shaketune/graph_creators/klippain.png b/shaketune/post_processing/klippain.png similarity index 100% rename from shaketune/graph_creators/klippain.png rename to shaketune/post_processing/klippain.png diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index 17ff7bf..1c6ffe5 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -3,9 +3,9 @@ from pathlib import Path -from .graph_creators import AxesMapFinder, BeltsGraphCreator, ShaperGraphCreator from .helpers.console_output import ConsoleOutput -from .macros import axes_map_calibration, axes_shaper_calibration, compare_belts_responses, excitate_axis_at_freq +from .measurement import axes_map_calibration, axes_shaper_calibration, compare_belts_responses, excitate_axis_at_freq +from .post_processing import AxesMapFinder, BeltsGraphCreator, ShaperGraphCreator from .shaketune_config import ShakeTuneConfig from .shaketune_thread import ShakeTuneThread From dd081626162e0fa5bc3dee73c3488238de69bfb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 13 May 2024 18:38:35 +0200 Subject: [PATCH 20/50] added back the vibrations profile measurement --- shaketune/helpers/motorlogparser.py | 205 ------------------- shaketune/measurement/K-SnT_vibrations.cfg | 214 -------------------- shaketune/measurement/__init__.py | 1 + shaketune/measurement/axes_map.py | 4 +- shaketune/measurement/motorsconfigparser.py | 190 +++++++++++++++++ shaketune/measurement/static_freq.py | 2 +- shaketune/measurement/vibrations_profile.py | 137 +++++++++++++ shaketune/post_processing/graph_creator.py | 24 +-- shaketune/shaketune.py | 41 +++- shaketune/shaketune_config.py | 78 ------- 10 files changed, 370 insertions(+), 526 deletions(-) delete mode 100644 shaketune/helpers/motorlogparser.py delete mode 100644 shaketune/measurement/K-SnT_vibrations.cfg create mode 100644 shaketune/measurement/motorsconfigparser.py create mode 100644 shaketune/measurement/vibrations_profile.py diff --git a/shaketune/helpers/motorlogparser.py b/shaketune/helpers/motorlogparser.py deleted file mode 100644 index 4e6e743..0000000 --- a/shaketune/helpers/motorlogparser.py +++ /dev/null @@ -1,205 +0,0 @@ -#!/usr/bin/env python3 - -# Classes to parse the Klipper log and parse the TMC dump to extract the relevant information -# Written by Frix_x#0161 # - -import re -from pathlib import Path -from typing import Any, Dict, List, Optional, Union - - -class Motor: - def __init__(self, name: str): - self._name: str = name - self._registers: Dict[str, Dict[str, Any]] = {} - self._properties: Dict[str, Any] = {} - - def set_register(self, register: str, value: Any) -> None: - # Special parsing for CHOPCONF to extract meaningful values - if register == 'CHOPCONF': - # Add intpol=0 if missing from the register dump - if 'intpol=' not in value: - value += ' intpol=0' - # Simplify the microstep resolution format - mres_match = re.search(r'mres=\d+\((\d+)usteps\)', value) - if mres_match: - value = re.sub(r'mres=\d+\(\d+usteps\)', f'mres={mres_match.group(1)}', value) - - # Special parsing for CHOPCONF to avoid pwm_ before each values - if register == 'PWMCONF': - parts = value.split() - new_parts = [] - for part in parts: - key, val = part.split('=', 1) - if key.startswith('pwm_'): - key = key[4:] - new_parts.append(f'{key}={val}') - value = ' '.join(new_parts) - - # General cleaning to remove extraneous labels and colons and parse the whole into Motor _registers - cleaned_values = re.sub(r'\b\w+:\s+\S+\s+', '', value) - - # Then fill the registers while merging all the thresholds into the same THRS virtual register - if register in ['TPWMTHRS', 'TCOOLTHRS']: - existing_thrs = self._registers.get('THRS', {}) - new_values = self._parse_register_values(cleaned_values) - merged_values = {**existing_thrs, **new_values} - self._registers['THRS'] = merged_values - else: - self._registers[register] = self._parse_register_values(cleaned_values) - - def _parse_register_values(self, register_string: str) -> Dict[str, Any]: - parsed = {} - parts = register_string.split() - for part in parts: - if '=' in part: - k, v = part.split('=', 1) - parsed[k] = v - return parsed - - def get_register(self, register: str) -> Optional[Dict[str, Any]]: - return self._registers.get(register) - - def get_registers(self) -> Dict[str, Dict[str, Any]]: - return self._registers - - def set_property(self, property: str, value: Any) -> None: - self._properties[property] = value - - def get_property(self, property: str) -> Optional[Any]: - return self._properties.get(property) - - def __str__(self): - return f'Stepper: {self._name}\nKlipper config: {self._properties}\nTMC Registers: {self._registers}' - - # Return the other motor properties and registers that are different from the current motor - def compare_to(self, other: 'Motor') -> Optional[Dict[str, Dict[str, Any]]]: - differences = {'properties': {}, 'registers': {}} - - # Compare properties - all_keys = self._properties.keys() | other._properties.keys() - for key in all_keys: - val1 = self._properties.get(key) - val2 = other._properties.get(key) - if val1 != val2: - differences['properties'][key] = val2 - - # Compare registers - all_keys = self._registers.keys() | other._registers.keys() - for key in all_keys: - reg1 = self._registers.get(key, {}) - reg2 = other._registers.get(key, {}) - if reg1 != reg2: - reg_diffs = {} - sub_keys = reg1.keys() | reg2.keys() - for sub_key in sub_keys: - reg_val1 = reg1.get(sub_key) - reg_val2 = reg2.get(sub_key) - if reg_val1 != reg_val2: - reg_diffs[sub_key] = reg_val2 - if reg_diffs: - differences['registers'][key] = reg_diffs - - # Clean up: remove empty sections if there are no differences - if not differences['properties']: - del differences['properties'] - if not differences['registers']: - del differences['registers'] - - if not differences: - return None - - return differences - - -class MotorLogParser: - _section_pattern: str = r'DUMP_TMC stepper_(x|y)' - _register_patterns: Dict[str, str] = { - 'CHOPCONF': r'CHOPCONF:\s+\S+\s+(.*)', - 'PWMCONF': r'PWMCONF:\s+\S+\s+(.*)', - 'COOLCONF': r'COOLCONF:\s+(.*)', - 'TPWMTHRS': r'TPWMTHRS:\s+\S+\s+(.*)', - 'TCOOLTHRS': r'TCOOLTHRS:\s+\S+\s+(.*)', - } - - def __init__(self, filepath: Path, config_string: Optional[str] = None): - self._filepath = filepath - - self._motors: List[Motor] = [] - self._config = self._parse_config(config_string) if config_string else {} - - self._parse_registers() - - def _parse_config(self, config_string: str) -> Dict[str, Any]: - config = {} - entries = config_string.split('|') - for entry in entries: - if entry: - key, value = entry.split(':') - config[key.strip()] = self._convert_value(value.strip()) - return config - - def _convert_value(self, value: str) -> Union[int, float, bool, str]: - if value.isdigit(): - return int(value) - try: - return float(value) - except ValueError: - if value.lower() in ['true', 'false']: - return value.lower() == 'true' - return value - - def _parse_registers(self) -> None: - with open(self._filepath, 'r') as file: - log_content = file.read() - - sections = re.split(self._section_pattern, log_content) - - # Detect only the latest dumps from the log (to ignore potential previous and outdated dumps) - last_sections: Dict[str, int] = {} - for i in range(1, len(sections), 2): - stepper_name = 'stepper_' + sections[i].strip() - last_sections[stepper_name] = i - - for stepper_name, index in last_sections.items(): - content = sections[index + 1] - motor = Motor(stepper_name) - - # Apply general properties from config string - for key, value in self._config.items(): - if stepper_name in key: - prop_key = key.replace(stepper_name + '_', '') - motor.set_property(prop_key, value) - elif 'autotune' in key: - motor.set_property(key, value) - - # Parse TMC registers - for key, pattern in self._register_patterns.items(): - match = re.search(pattern, content) - if match: - values = match.group(1).strip() - motor.set_register(key, values) - - self._motors.append(motor) - - # Find and return the motor by its name - def get_motor(self, motor_name: str) -> Optional[Motor]: - for motor in self._motors: - if motor._name == motor_name: - return motor - return None - - # Get all the motor list at once - def get_motors(self) -> List[Motor]: - return self._motors - - -# # Usage example: -# config_string = "stepper_x_tmc:tmc2240|stepper_x_run_current:0.9|stepper_x_hold_current:0.9|stepper_y_tmc:tmc2240|stepper_y_run_current:0.9|stepper_y_hold_current:0.9|autotune_enabled:True|stepper_x_motor:ldo-35sth48-1684ah|stepper_x_voltage:|stepper_y_motor:ldo-35sth48-1684ah|stepper_y_voltage:|" -# parser = MotorLogParser('/path/to/your/logfile.log', config_string) - -# stepper_x = parser.get_motor('stepper_x') -# stepper_y = parser.get_motor('stepper_y') - -# print(stepper_x) -# print(stepper_y) diff --git a/shaketune/measurement/K-SnT_vibrations.cfg b/shaketune/measurement/K-SnT_vibrations.cfg deleted file mode 100644 index d6ebacd..0000000 --- a/shaketune/measurement/K-SnT_vibrations.cfg +++ /dev/null @@ -1,214 +0,0 @@ -######################################### -###### MACHINE VIBRATIONS ANALYSIS ###### -######################################### -# Written by Frix_x#0161 # - -[gcode_macro CREATE_VIBRATIONS_PROFILE] -gcode: - {% set size = params.SIZE|default(100)|int %} # size of the circle where the angled lines are done - {% set z_height = params.Z_HEIGHT|default(20)|int %} # z height to put the toolhead before starting the movements - {% set max_speed = params.MAX_SPEED|default(200)|float * 60 %} # maximum feedrate for the movements - {% set speed_increment = params.SPEED_INCREMENT|default(2)|float * 60 %} # feedrate increment between each move - - {% set feedrate_travel = params.TRAVEL_SPEED|default(200)|int * 60 %} # travel feedrate between moves - {% set accel = params.ACCEL|default(3000)|int %} # accel value used to move on the pattern - {% set accel_chip = params.ACCEL_CHIP|default("adxl345") %} # ADXL chip name in the config - - {% set keep_results = params.KEEP_N_RESULTS|default(3)|int %} - {% set keep_csv = params.KEEP_CSV|default(0)|int %} - - {% set mid_x = printer.toolhead.axis_maximum.x|float / 2 %} - {% set mid_y = printer.toolhead.axis_maximum.y|float / 2 %} - {% set min_speed = 2 * 60 %} # minimum feedrate for the movements is set to 2mm/s - {% set nb_speed_samples = ((max_speed - min_speed) / speed_increment + 1) | int %} - - {% set accel = [accel, printer.configfile.settings.printer.max_accel]|min %} - {% set old_accel = printer.toolhead.max_accel %} - {% set old_cruise_ratio = printer.toolhead.minimum_cruise_ratio %} - {% set old_sqv = printer.toolhead.square_corner_velocity %} - - {% set kinematics = printer.configfile.settings.printer.kinematics %} - - - {% if not 'xyz' in printer.toolhead.homed_axes %} - { action_raise_error("Must Home printer first!") } - {% endif %} - - {% if params.SPEED_INCREMENT|default(2)|float * 100 != (params.SPEED_INCREMENT|default(2)|float * 100)|int %} - { action_raise_error("Only 2 decimal digits are allowed for SPEED_INCREMENT") } - {% endif %} - - {% if (size / (max_speed / 60)) < 0.25 %} - { action_raise_error("SIZE is too small for this MAX_SPEED. Increase SIZE or decrease MAX_SPEED!") } - {% endif %} - - {action_respond_info("")} - {action_respond_info("Starting machine vibrations profile measurement")} - {action_respond_info("This operation can not be interrupted by normal means. Hit the \"emergency stop\" button to stop it if needed")} - {action_respond_info("")} - - SAVE_GCODE_STATE NAME=CREATE_VIBRATIONS_PROFILE - - G90 - - # Set the wanted acceleration values (not too high to avoid oscillation, not too low to be able to reach constant speed on each segments) - SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY={[(accel / 1000), 5.0]|max} - - # Going to the start position - G1 Z{z_height} F{feedrate_travel / 10} - G1 X{mid_x } Y{mid_y} F{feedrate_travel} - - - {% if kinematics == "cartesian" %} - # Cartesian motors are on X and Y axis directly - RESPOND MSG="Cartesian kinematics mode" - {% set main_angles = [0, 90] %} - {% elif kinematics == "corexy" %} - # CoreXY motors are on A and B axis (45 and 135 degrees) - RESPOND MSG="CoreXY kinematics mode" - {% set main_angles = [45, 135] %} - {% else %} - { action_raise_error("Only Cartesian and CoreXY kinematics are supported at the moment for the vibrations measurement tool!") } - {% endif %} - - {% set pi = (3.141592653589793) | float %} - {% set tau = (pi * 2) | float %} - - - {% for curr_angle in main_angles %} - {% for curr_speed_sample in range(0, nb_speed_samples) %} - {% set curr_speed = min_speed + curr_speed_sample * speed_increment %} - {% set rad_angle_full = (curr_angle|float * pi / 180) %} - - # ----------------------------------------------------------------------------------------------------------- - # Here are some maths to approximate the sin and cos values of rad_angle in Jinja - # Thanks a lot to Aubey! for sharing the idea of using hardcoded Taylor series and - # the associated bit of code to do it easily! This is pure madness! - {% set rad_angle = ((rad_angle_full % tau) - (tau / 2)) | float %} - - {% if rad_angle < (-(tau / 4)) %} - {% set rad_angle = (rad_angle + (tau / 2)) | float %} - {% set final_mult = (-1) %} - {% elif rad_angle > (tau / 4) %} - {% set rad_angle = (rad_angle - (tau / 2)) | float %} - {% set final_mult = (-1) %} - {% else %} - {% set final_mult = (1) %} - {% endif %} - - {% set sin0 = (rad_angle) %} - {% set sin1 = ((rad_angle ** 3) / 6) | float %} - {% set sin2 = ((rad_angle ** 5) / 120) | float %} - {% set sin3 = ((rad_angle ** 7) / 5040) | float %} - {% set sin4 = ((rad_angle ** 9) / 362880) | float %} - {% set sin5 = ((rad_angle ** 11) / 39916800) | float %} - {% set sin6 = ((rad_angle ** 13) / 6227020800) | float %} - {% set sin7 = ((rad_angle ** 15) / 1307674368000) | float %} - {% set sin = (-(sin0 - sin1 + sin2 - sin3 + sin4 - sin5 + sin6 - sin7) * final_mult) | float %} - - {% set cos0 = (1) | float %} - {% set cos1 = ((rad_angle ** 2) / 2) | float %} - {% set cos2 = ((rad_angle ** 4) / 24) | float %} - {% set cos3 = ((rad_angle ** 6) / 720) | float %} - {% set cos4 = ((rad_angle ** 8) / 40320) | float %} - {% set cos5 = ((rad_angle ** 10) / 3628800) | float %} - {% set cos6 = ((rad_angle ** 12) / 479001600) | float %} - {% set cos7 = ((rad_angle ** 14) / 87178291200) | float %} - {% set cos = (-(cos0 - cos1 + cos2 - cos3 + cos4 - cos5 + cos6 - cos7) * final_mult) | float %} - # ----------------------------------------------------------------------------------------------------------- - - # Reduce the segments length for the lower speed range (0-100mm/s). The minimum length is 1/3 of the SIZE and is gradually increased - # to the nominal SIZE at 100mm/s. No further size changes are made above this speed. The goal is to ensure that the print head moves - # enough to collect enough data for vibration analysis, without doing unnecessary distance to save time. At higher speeds, the full - # segments lengths are used because the head moves faster and travels more distance in the same amount of time and we want enough data - {% if curr_speed < (100 * 60) %} - {% set segment_length_multiplier = 1/5 + 4/5 * (curr_speed / 60) / 100 %} - {% else %} - {% set segment_length_multiplier = 1 %} - {% endif %} - - # Calculate angle coordinates using trigonometry and length multiplier and move to start point - {% set dx = (size / 2) * cos * segment_length_multiplier %} - {% set dy = (size / 2) * sin * segment_length_multiplier %} - G1 X{mid_x - dx} Y{mid_y - dy} F{feedrate_travel} - - # Adjust the number of back and forth movements based on speed to also save time on lower speed range - # 3 movements are done by default, reduced to 2 between 150-250mm/s and to 1 under 150mm/s. - {% set movements = 3 %} - {% if curr_speed < (150 * 60) %} - {% set movements = 1 %} - {% elif curr_speed < (250 * 60) %} - {% set movements = 2 %} - {% endif %} - - ACCELEROMETER_MEASURE CHIP={accel_chip} - - # Back and forth movements to record the vibrations at constant speed in both direction - {% for n in range(movements) %} - G1 X{mid_x + dx} Y{mid_y + dy} F{curr_speed} - G1 X{mid_x - dx} Y{mid_y - dy} F{curr_speed} - {% endfor %} - - ACCELEROMETER_MEASURE CHIP={accel_chip} NAME=an{("%.2f" % curr_angle|float)|replace('.','_')}sp{("%.2f" % (curr_speed / 60)|float)|replace('.','_')} - G4 P300 - - M400 - {% endfor %} - {% endfor %} - - # Restore the previous acceleration values - SET_VELOCITY_LIMIT ACCEL={old_accel} MINIMUM_CRUISE_RATIO={old_cruise_ratio} SQUARE_CORNER_VELOCITY={old_sqv} - - # Extract the TMC names and configuration - {% set ns_x = namespace(path='') %} - {% set ns_y = namespace(path='') %} - - {% for item in printer %} - {% set parts = item.split() %} - {% if parts|length == 2 and parts[0].startswith('tmc') and parts[0][3:].isdigit() %} - {% if parts[1] == 'stepper_x' %} - {% set ns_x.path = parts[0] %} - {% elif parts[1] == 'stepper_y' %} - {% set ns_y.path = parts[0] %} - {% endif %} - {% endif %} - {% endfor %} - - {% if ns_x.path and ns_y.path %} - {% set metadata = - "stepper_x_tmc:" ~ ns_x.path ~ "|" - "stepper_x_run_current:" ~ (printer[ns_x.path + ' stepper_x'].run_current | round(2) | string) ~ "|" - "stepper_x_hold_current:" ~ (printer[ns_x.path + ' stepper_x'].hold_current | round(2) | string) ~ "|" - "stepper_y_tmc:" ~ ns_y.path ~ "|" - "stepper_y_run_current:" ~ (printer[ns_y.path + ' stepper_y'].run_current | round(2) | string) ~ "|" - "stepper_y_hold_current:" ~ (printer[ns_y.path + ' stepper_y'].hold_current | round(2) | string) ~ "|" - %} - - {% set autotune_x = printer.configfile.config['autotune_tmc stepper_x'] if 'autotune_tmc stepper_x' in printer.configfile.config else none %} - {% set autotune_y = printer.configfile.config['autotune_tmc stepper_y'] if 'autotune_tmc stepper_y' in printer.configfile.config else none %} - {% if autotune_x and autotune_y %} - {% set stepper_x_voltage = autotune_x.voltage if autotune_x.voltage else '24.0' %} - {% set stepper_y_voltage = autotune_y.voltage if autotune_y.voltage else '24.0' %} - {% set metadata = metadata ~ - "autotune_enabled:True|" - "stepper_x_motor:" ~ autotune_x.motor ~ "|" - "stepper_x_voltage:" ~ stepper_x_voltage ~ "|" - "stepper_y_motor:" ~ autotune_y.motor ~ "|" - "stepper_y_voltage:" ~ stepper_y_voltage ~ "|" - %} - {% else %} - {% set metadata = metadata ~ "autotune_enabled:False|" %} - {% endif %} - - DUMP_TMC STEPPER=stepper_x - DUMP_TMC STEPPER=stepper_y - - {% else %} - { action_respond_info("No TMC drivers found for X and Y steppers") } - {% endif %} - - RESPOND MSG="Machine vibrations profile generation..." - RESPOND MSG="This may take some time (3-5min)" - SHAKETUNE_POSTPROCESS PARAMS="--type vibrations --accel {accel|int} --kinematics {kinematics} {% if metadata %}--metadata {metadata}{% endif %} --chip_name {accel_chip} {% if keep_csv %}--keep_csv{% endif %} --keep_results {keep_results}" - - RESTORE_GCODE_STATE NAME=CREATE_VIBRATIONS_PROFILE diff --git a/shaketune/measurement/__init__.py b/shaketune/measurement/__init__.py index e6338e4..8cffad7 100644 --- a/shaketune/measurement/__init__.py +++ b/shaketune/measurement/__init__.py @@ -4,6 +4,7 @@ from .axes_input_shaper import axes_shaper_calibration as axes_shaper_calibratio from .axes_map import axes_map_calibration as axes_map_calibration from .belts_comparison import compare_belts_responses as compare_belts_responses from .static_freq import excitate_axis_at_freq as excitate_axis_at_freq +from .vibrations_profile import create_vibrations_profile as create_vibrations_profile AXIS_CONFIG = [ {'axis': 'x', 'direction': (1, 0, 0), 'label': 'axis_X'}, diff --git a/shaketune/measurement/axes_map.py b/shaketune/measurement/axes_map.py index 38d1e0e..bbf0dc5 100644 --- a/shaketune/measurement/axes_map.py +++ b/shaketune/measurement/axes_map.py @@ -19,7 +19,7 @@ def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> No gcmd.error( 'No accelerometer specified for measurement! Multi-accelerometer configurations are not supported for this macro.' ) - accelerometer = Accelerometer(printer.lookup_object(accel_chip)) + accelerometer = Accelerometer(printer.lookup_object(accel_chip)) systime = printer.get_reactor().monotonic() toolhead = printer.lookup_object('toolhead') @@ -71,5 +71,5 @@ def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> No # Run post-processing ConsoleOutput.print('Analysis of the movements...') creator = st_thread.get_graph_creator() - creator.configure(accel, accel_chip) + creator.configure(accel) st_thread.run() diff --git a/shaketune/measurement/motorsconfigparser.py b/shaketune/measurement/motorsconfigparser.py new file mode 100644 index 0000000..3dab656 --- /dev/null +++ b/shaketune/measurement/motorsconfigparser.py @@ -0,0 +1,190 @@ +#!/usr/bin/env python3 + +# Classes to retrieve a couple of motors infos and extract the relevant information +# from the Klipper configuration and the TMC registers +# Written by Frix_x#0161 # + +import re +from typing import Any, Dict, List, Optional, Tuple + +TRINAMIC_DRIVERS = ['tmc2130', 'tmc2208', 'tmc2209', 'tmc2240', 'tmc2660', 'tmc5160'] +MOTORS = ['stepper_x', 'stepper_y', 'stepper_x1', 'stepper_y1', 'stepper_z', 'stepper_z1', 'stepper_z2', 'stepper_z3'] +RELEVANT_TMC_REGISTERS = ['CHOPCONF', 'PWMCONF', 'COOLCONF', 'TPWMTHRS', 'TCOOLTHRS'] + + +class Motor: + def __init__(self, name: str): + self.name: str = name + self._registers: Dict[str, Dict[str, Any]] = {} + self._config: Dict[str, Any] = {} + self._driver: Tuple[str, Any] = ('', None) + + def set_driver(self, driver_name: str, tmc_object: Any) -> None: + self._driver = (driver_name, tmc_object) + + def get_driver(self) -> Tuple[str, Any]: + return self._driver + + def set_register(self, register: str, value_dict: dict) -> None: + # Special parsing for CHOPCONF to extract meaningful values + if register == 'CHOPCONF': + # Add intpol=0 if missing from the register dump + if 'intpol=' not in value_dict: + value_dict['intpol'] = '0' + # Simplify the microstep resolution format + if 'mres' in value_dict: + mres_match = re.search(r'(\d+)usteps', value_dict['mres']) + if mres_match: + value_dict['mres'] = mres_match.group(1) + + # Special parsing for CHOPCONF to avoid pwm_ before each values + if register == 'PWMCONF': + new_value_dict = {} + for key, val in value_dict.items(): + if key.startswith('pwm_'): + key = key[4:] + new_value_dict[key] = val + value_dict = new_value_dict + + # Then fill the registers while merging all the thresholds into the same THRS virtual register + if register in ['TPWMTHRS', 'TCOOLTHRS']: + existing_thrs = self._registers.get('THRS', {}) + merged_values = {**existing_thrs, **value_dict} + self._registers['THRS'] = merged_values + else: + self._registers[register] = value_dict + + def get_register(self, register: str) -> Optional[Dict[str, Any]]: + return self._registers.get(register) + + def get_registers(self) -> Dict[str, Dict[str, Any]]: + return self._registers + + def set_config(self, field: str, value: Any) -> None: + self._config[field] = value + + def get_config(self, field: str) -> Optional[Any]: + return self._config.get(field) + + def __str__(self): + return f'Stepper: {self.name}\nKlipper config: {self._config}\nTMC Registers: {self._registers}' + + # Return the other motor config and registers that are different from the current motor + def compare_to(self, other: 'Motor') -> Optional[Dict[str, Dict[str, Any]]]: + differences = {'config': {}, 'registers': {}} + + # Compare Klipper config + all_keys = self._config.keys() | other._config.keys() + for key in all_keys: + val1 = self._config.get(key) + val2 = other._config.get(key) + if val1 != val2: + differences['config'][key] = val2 + + # Compare TMC registers + all_keys = self._registers.keys() | other._registers.keys() + for key in all_keys: + reg1 = self._registers.get(key, {}) + reg2 = other._registers.get(key, {}) + if reg1 != reg2: + reg_diffs = {} + sub_keys = reg1.keys() | reg2.keys() + for sub_key in sub_keys: + reg_val1 = reg1.get(sub_key) + reg_val2 = reg2.get(sub_key) + if reg_val1 != reg_val2: + reg_diffs[sub_key] = reg_val2 + if reg_diffs: + differences['registers'][key] = reg_diffs + + # Clean up: remove empty sections if there are no differences + if not differences['config']: + del differences['config'] + if not differences['registers']: + del differences['registers'] + + if not differences: + return None + + return differences + + +class MotorsConfigParser: + def __init__(self, printer, motors: List[str] = MOTORS, drivers: List[str] = TRINAMIC_DRIVERS): + self._motors: List[Motor] = [] + self._printer = printer + + for motor_name in motors: + for driver in drivers: + tmc_object = printer.lookup_object(f'{driver} {motor_name}', None) + if tmc_object is None: + continue + motor = self._create_motor(motor_name, driver, tmc_object) + self._motors.append(motor) + + # Create a Motor object with the given name, driver and TMC object + # and fill it with the relevant configuration and registers + def _create_motor(self, motor_name: str, driver: str, tmc_object: Any) -> Motor: + motor = Motor(motor_name) + motor.set_driver(driver.upper(), tmc_object) + self._parse_klipper_config(motor, tmc_object) + self._parse_tmc_registers(motor, tmc_object) + return motor + + def _parse_klipper_config(self, motor: Motor, tmc: Any) -> None: + # The TMCCommandHelper isn't a direct member of the TMC object... but we can still get it this way + tmc_cmdhelper = tmc.get_status.__self__ + + motor_currents = tmc_cmdhelper.current_helper.get_current() + motor.set_config('run_current', motor_currents[0]) + motor.set_config('hold_current', motor_currents[1]) + + autotune_object = self._printer.lookup_object(f'autotune_tmc {motor.name}', None) + if autotune_object is not None: + motor.set_config('autotune_enabled', True) + motor.set_config('motor', autotune_object.motor) + motor.set_config('voltage', autotune_object.voltage) + else: + motor.set_config('autotune_enabled', False) + + def _parse_tmc_registers(self, motor: Motor, tmc: Any) -> None: + # The TMCCommandHelper isn't a direct member of the TMC object... but we can still get it this way + tmc_cmdhelper = tmc.get_status.__self__ + + for register in RELEVANT_TMC_REGISTERS: + # value = tmc_cmdhelper.read_register(register) + # motor.set_register(register, value) + + val = tmc_cmdhelper.fields.registers.get(register) + if (val is not None) and (register not in tmc_cmdhelper.read_registers): + # write-only register + fields_string = self._extract_register_values(register, val) + elif register in tmc_cmdhelper.read_registers: + # readable register + val = tmc_cmdhelper.mcu_tmc.get_register(register) + if tmc_cmdhelper.read_translate is not None: + register, val = tmc_cmdhelper.read_translate(register, val) + fields_string = self._extract_register_values(register, val) + + motor.set_register(register, fields_string) + + def _extract_register_values(self, tmc_cmdhelper, register, val): + # Provide a dictionary of register values + reg_fields = tmc_cmdhelper.fields.all_fields.get(register, {}) + reg_fields = sorted([(mask, name) for name, mask in reg_fields.items()]) + fields = {} + for mask, field_name in reg_fields: + field_value = tmc_cmdhelper.fields.get_field(field_name, val, register) + fields[field_name] = field_value + return fields + + # Find and return the motor by its name + def get_motor(self, motor_name: str) -> Optional[Motor]: + for motor in self._motors: + if motor._name == motor_name: + return motor + return None + + # Get all the motor list at once + def get_motors(self) -> List[Motor]: + return self._motors diff --git a/shaketune/measurement/static_freq.py b/shaketune/measurement/static_freq.py index b6bbf12..7bc41b1 100644 --- a/shaketune/measurement/static_freq.py +++ b/shaketune/measurement/static_freq.py @@ -5,7 +5,7 @@ from . import AXIS_CONFIG from .resonance_test import vibrate_axis -def excitate_axis_at_freq(gcmd, printer, gcode) -> None: +def excitate_axis_at_freq(gcmd, gcode, printer) -> None: freq = gcmd.get_int('FREQUENCY', default=25, minval=1) duration = gcmd.get_int('DURATION', default=10, minval=1) accel_per_hz = gcmd.get_float('ACCEL_PER_HZ', default=None) diff --git a/shaketune/measurement/vibrations_profile.py b/shaketune/measurement/vibrations_profile.py new file mode 100644 index 0000000..f580d9f --- /dev/null +++ b/shaketune/measurement/vibrations_profile.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 + + +import math + +from ..helpers.console_output import ConsoleOutput +from ..shaketune_thread import ShakeTuneThread +from .accelerometer import Accelerometer +from .motorsconfigparser import MotorsConfigParser + +MIN_SPEED = 2 # mm/s + + +def create_vibrations_profile(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: + size = gcmd.get_float('SIZE', default=100.0, minval=50.0) + z_height = gcmd.get_float('Z_HEIGHT', default=20.0) + max_speed = gcmd.get_float('MAX_SPEED', default=200.0, minval=10.0) + speed_increment = gcmd.get_float('SPEED_INCREMENT', default=2.0, minval=1.0) + accel = gcmd.get_int('ACCEL', default=3000, minval=100) + feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) + accel_chip = gcmd.get('ACCEL_CHIP', default=None) + + if (size / (max_speed / 60)) < 0.25: + gcmd.error('The size of the movement is too small for the given speed! Increase SIZE or decrease MAX_SPEED!') + + # Check that input shaper is already configured + input_shaper = printer.lookup_object('input_shaper', None) + if input_shaper is None: + gcmd.error('Input shaper is not configured! Please run the shaper calibration macro first.') + + # TODO: Add the kinematics check to define the main_angles + # but this needs to retrieve it from the printer configuration + # {% if kinematics == "cartesian" %} + # # Cartesian motors are on X and Y axis directly + # RESPOND MSG="Cartesian kinematics mode" + # {% set main_angles = [0, 90] %} + # {% elif kinematics == "corexy" %} + # # CoreXY motors are on A and B axis (45 and 135 degrees) + # RESPOND MSG="CoreXY kinematics mode" + # {% set main_angles = [45, 135] %} + # {% else %} + # { action_raise_error("Only Cartesian and CoreXY kinematics are supported at the moment for the vibrations measurement tool!") } + # {% endif %} + kinematics = 'cartesian' + main_angles = [0, 90] + + systime = printer.get_reactor().monotonic() + toolhead = printer.lookup_object('toolhead') + toolhead_info = toolhead.get_status(systime) + old_accel = toolhead_info['max_accel'] + old_mcr = toolhead_info['minimum_cruise_ratio'] + old_sqv = toolhead_info['square_corner_velocity'] + + # set the wanted acceleration values + gcode.run_script_from_command(f'SET_VELOCITY_LIMIT ACCEL={accel} MINIMUM_CRUISE_RATIO=0 SQUARE_CORNER_VELOCITY=5.0') + + kin_info = toolhead.kin.get_status(systime) + mid_x = (kin_info['axis_minimum'].x + kin_info['axis_maximum'].x) / 2 + mid_y = (kin_info['axis_minimum'].y + kin_info['axis_maximum'].y) / 2 + X, Y, _, E = toolhead.get_position() + + # Going to the start position + toolhead.move([X, Y, z_height, E], feedrate_travel / 10) + toolhead.move([mid_x - 15, mid_y - 15, z_height, E], feedrate_travel) + toolhead.dwell(0.5) + + nb_speed_samples = int((max_speed - MIN_SPEED) / speed_increment + 1) + for curr_angle in main_angles: + radian_angle = math.radians(curr_angle) + + # Find the best accelerometer chip for the current angle if not specified + if curr_angle == 0: + accel_axis = 'x' + elif curr_angle == 90: + accel_axis = 'y' + else: + accel_axis = 'xy' + if accel_chip is None: + accel_chip = Accelerometer.find_axis_accelerometer(printer, accel_axis) + if accel_chip is None: + gcmd.error( + 'No accelerometer specified for measurement! Multi-accelerometer configurations are not supported for this macro.' + ) + accelerometer = Accelerometer(printer.lookup_object(accel_chip)) + + # Sweep the speed range to record the vibrations at different speeds + for curr_speed_sample in range(nb_speed_samples): + curr_speed = MIN_SPEED + curr_speed_sample * speed_increment + + # Reduce the segments length for the lower speed range (0-100mm/s). The minimum length is 1/3 of the SIZE and is gradually increased + # to the nominal SIZE at 100mm/s. No further size changes are made above this speed. The goal is to ensure that the print head moves + # enough to collect enough data for vibration analysis, without doing unnecessary distance to save time. At higher speeds, the full + # segments lengths are used because the head moves faster and travels more distance in the same amount of time and we want enough data + if curr_speed < 100: + segment_length_multiplier = 1 / 5 + 4 / 5 * curr_speed / 100 + else: + segment_length_multiplier = 1 + + # Calculate angle coordinates using trigonometry and length multiplier and move to start point + dX = (size / 2) * math.cos(radian_angle) * segment_length_multiplier + dY = (size / 2) * math.sin(radian_angle) * segment_length_multiplier + toolhead.move([mid_x - dX, mid_y - dY, z_height, E], feedrate_travel) + + # Adjust the number of back and forth movements based on speed to also save time on lower speed range + # 3 movements are done by default, reduced to 2 between 150-250mm/s and to 1 under 150mm/s. + movements = 3 + if curr_speed < 150: + movements = 1 + elif curr_speed < 250: + movements = 2 + + # Back and forth movements to record the vibrations at constant speed in both direction + accelerometer.start_measurement() + for _ in range(movements): + toolhead.move([mid_x + dX, mid_y + dY, z_height, E], curr_speed) + toolhead.move([mid_x - dX, mid_y - dY, z_height, E], curr_speed) + name = f'vib_an{curr_angle:.2f}sp{curr_speed:.2f}'.replace('.', '_') + accelerometer.stop_measurement(name) + + toolhead.dwell(0.3) + toolhead.wait_moves() + + # Restore the previous acceleration values + gcode.run_script_from_command( + f'SET_VELOCITY_LIMIT ACCEL={old_accel} MINIMUM_CRUISE_RATIO={old_mcr} SQUARE_CORNER_VELOCITY={old_sqv}' + ) + toolhead.wait_moves() + + # Get the motors and TMC configurations from Klipper + motors_config_parser = MotorsConfigParser(printer, motors=['stepper_x', 'stepper_y']) + + # Run post-processing + ConsoleOutput.print('Machine vibrations profile generation...') + ConsoleOutput.print('This may take some time (5-8min)') + creator = st_thread.get_graph_creator() + creator.configure(kinematics, accel, motors_config_parser) + st_thread.run() diff --git a/shaketune/post_processing/graph_creator.py b/shaketune/post_processing/graph_creator.py index 4902d37..d8af166 100644 --- a/shaketune/post_processing/graph_creator.py +++ b/shaketune/post_processing/graph_creator.py @@ -11,7 +11,7 @@ from matplotlib.figure import Figure from ..helpers import filemanager as fm from ..helpers.console_output import ConsoleOutput -from ..helpers.motorlogparser import MotorLogParser +from ..measurement.motorsconfigparser import MotorsConfigParser from ..shaketune_config import ShakeTuneConfig from .analyze_axesmap import axesmap_calibration from .graph_belts import belts_calibration @@ -142,9 +142,9 @@ class ShaperGraphCreator(GraphCreator): raise ValueError('scv must be set to create the input shaper graph!') lognames = self._move_and_prepare_files( - glob_pattern='raw_data*.csv', + glob_pattern='shaketune-axis_*.csv', min_files_required=1, - custom_name_func=lambda f: f.stem.split('_')[3].upper(), + custom_name_func=lambda f: f.stem.split('_')[1].upper(), ) fig = shaper_calibration( lognames=[str(path) for path in lognames], @@ -175,18 +175,14 @@ class VibrationsGraphCreator(GraphCreator): self._kinematics = None self._accel = None - self._chip_name = None self._motors = None self._setup_folder('vibrations') - def configure(self, kinematics: str, accel: float, chip_name: str, metadata: str) -> None: + def configure(self, kinematics: str, accel: float, motor_config_parser: MotorsConfigParser) -> None: self._kinematics = kinematics self._accel = accel - self._chip_name = chip_name - - parser = MotorLogParser(self._config.klipper_log_folder / 'klippy.log', metadata) - self._motors = parser.get_motors() + self._motors = motor_config_parser.get_motors() def _archive_files(self, lognames: list[Path]) -> None: tar_path = self._folder / f'{self._type}_{self._graph_date}.tar.gz' @@ -195,13 +191,13 @@ class VibrationsGraphCreator(GraphCreator): tar.add(csv_file, arcname=csv_file.name, recursive=False) def create_graph(self) -> None: - if not self._accel or not self._chip_name or not self._kinematics: + if not self._accel or not self._kinematics: raise ValueError('accel, chip_name and kinematics must be set to create the vibrations profile graph!') lognames = self._move_and_prepare_files( - glob_pattern=f'{self._chip_name}-*.csv', + glob_pattern='shaketune-vib_*.csv', min_files_required=None, - custom_name_func=lambda f: f.name.replace(self._chip_name, self._type), + custom_name_func=lambda f: f.name, ) fig = vibrations_profile( lognames=[str(path) for path in lognames], @@ -236,11 +232,9 @@ class AxesMapFinder(GraphCreator): self._folder = config.get_results_folder() self._accel = None - self._chip_name = None - def configure(self, accel: int, chip_name: str) -> None: + def configure(self, accel: int) -> None: self._accel = accel - self._chip_name = chip_name def find_axesmap(self) -> None: tmp_folder = Path('/tmp') diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index 1c6ffe5..6999bd2 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -4,8 +4,14 @@ from pathlib import Path from .helpers.console_output import ConsoleOutput -from .measurement import axes_map_calibration, axes_shaper_calibration, compare_belts_responses, excitate_axis_at_freq -from .post_processing import AxesMapFinder, BeltsGraphCreator, ShaperGraphCreator +from .measurement import ( + axes_map_calibration, + axes_shaper_calibration, + compare_belts_responses, + create_vibrations_profile, + excitate_axis_at_freq, +) +from .post_processing import AxesMapFinder, BeltsGraphCreator, ShaperGraphCreator, VibrationsGraphCreator from .shaketune_config import ShakeTuneConfig from .shaketune_thread import ShakeTuneThread @@ -35,6 +41,11 @@ class ShakeTune: self.cmd_EXCITATE_AXIS_AT_FREQ, desc=self.cmd_EXCITATE_AXIS_AT_FREQ_help, ) + self._gcode.register_command( + 'AXES_MAP_CALIBRATION', + self.cmd_AXES_MAP_CALIBRATION, + desc=self.cmd_AXES_MAP_CALIBRATION_help, + ) self._gcode.register_command( 'COMPARE_BELTS_RESPONSES', self.cmd_COMPARE_BELTS_RESPONSES, @@ -46,9 +57,9 @@ class ShakeTune: desc=self.cmd_AXES_SHAPER_CALIBRATION_help, ) self._gcode.register_command( - 'AXES_MAP_CALIBRATION', - self.cmd_AXES_MAP_CALIBRATION, - desc=self.cmd_AXES_MAP_CALIBRATION_help, + 'CREATE_VIBRATIONS_PROFILE', + self.cmd_CREATE_VIBRATIONS_PROFILE, + desc=self.cmd_CREATE_VIBRATIONS_PROFILE_help, ) cmd_EXCITATE_AXIS_AT_FREQ_help = ( @@ -57,7 +68,15 @@ class ShakeTune: def cmd_EXCITATE_AXIS_AT_FREQ(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') - excitate_axis_at_freq(gcmd, self._gcode) + excitate_axis_at_freq(gcmd, self._gcode, self._printer) + + cmd_AXES_MAP_CALIBRATION_help = 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer' + + def cmd_AXES_MAP_CALIBRATION(self, gcmd) -> None: + ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') + axes_map_finder = AxesMapFinder(self._config) + st_thread = ShakeTuneThread(self._config, axes_map_finder, self._printer.get_reactor(), self.timeout) + axes_map_calibration(gcmd, self._gcode, self._printer, st_thread) cmd_COMPARE_BELTS_RESPONSES_help = 'Perform a custom half-axis test to analyze and compare the frequency profiles of individual belts on CoreXY printers' @@ -77,10 +96,10 @@ class ShakeTune: st_thread = ShakeTuneThread(self._config, shaper_graph_creator, self._printer.get_reactor(), self.timeout) axes_shaper_calibration(gcmd, self._gcode, self._printer, st_thread) - cmd_AXES_MAP_CALIBRATION_help = 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer' + cmd_CREATE_VIBRATIONS_PROFILE_help = 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer' - def cmd_AXES_MAP_CALIBRATION(self, gcmd) -> None: + def cmd_CREATE_VIBRATIONS_PROFILE(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') - axes_map_finder = AxesMapFinder(self._config) - st_thread = ShakeTuneThread(self._config, axes_map_finder, self._printer.get_reactor(), self.timeout) - axes_map_calibration(gcmd, self._gcode, self._printer, st_thread) + vibration_profile_creator = VibrationsGraphCreator(self._config) + st_thread = ShakeTuneThread(self._config, vibration_profile_creator, self._printer.get_reactor(), self.timeout) + create_vibrations_profile(gcmd, self._gcode, self._printer, st_thread) diff --git a/shaketune/shaketune_config.py b/shaketune/shaketune_config.py index bf0e96d..057900a 100644 --- a/shaketune/shaketune_config.py +++ b/shaketune/shaketune_config.py @@ -51,81 +51,3 @@ class ShakeTuneConfig: except Exception as e: ConsoleOutput.print(f'Warning: unable to retrieve Shake&Tune version number: {e}') return 'unknown' - - # @staticmethod - # def parse_arguments(params: Optional[List] = None) -> argparse.Namespace: - # parser = argparse.ArgumentParser(description='Shake&Tune graphs generation script') - # parser.add_argument( - # '-t', - # '--type', - # dest='type', - # choices=['belts', 'shaper', 'vibrations', 'axesmap'], - # required=True, - # help='Type of output graph to produce', - # ) - # parser.add_argument( - # '--accel', - # type=int, - # default=None, - # dest='accel_used', - # help='Accelerometion used for vibrations profile creation or axes map calibration', - # ) - # parser.add_argument( - # '--chip_name', - # type=str, - # default='adxl345', - # dest='chip_name', - # help='Accelerometer chip name used for vibrations profile creation or axes map calibration', - # ) - # parser.add_argument( - # '--max_smoothing', - # type=float, - # default=None, - # dest='max_smoothing', - # help='Maximum smoothing to allow for input shaper filter recommendations', - # ) - # parser.add_argument( - # '--scv', - # '--square_corner_velocity', - # type=float, - # default=5.0, - # dest='scv', - # help='Square corner velocity used to compute max accel for input shapers filter recommendations', - # ) - # parser.add_argument( - # '-m', - # '--kinematics', - # dest='kinematics', - # default='cartesian', - # choices=['cartesian', 'corexy'], - # help='Machine kinematics configuration used for the vibrations profile creation', - # ) - # parser.add_argument( - # '--metadata', - # type=str, - # default=None, - # dest='metadata', - # help='Motor configuration metadata printed on the vibrations profiles', - # ) - # parser.add_argument( - # '-c', - # '--keep_csv', - # action='store_true', - # default=False, - # dest='keep_csv', - # help='Whether to keep the raw CSV files after processing in addition to the PNG graphs', - # ) - # parser.add_argument( - # '-n', - # '--keep_results', - # type=int, - # default=3, - # dest='keep_results', - # help='Number of results to keep in the result folder after each run of the script', - # ) - # parser.add_argument('--dpi', type=int, default=150, dest='dpi', help='DPI of the output PNG files') - # parser.add_argument( - # '-v', '--version', action='version', version=f'Shake&Tune {ShakeTuneConfig.get_git_version()}' - # ) - - # return parser.parse_args(params) From 55895c150785779b16b59bff3b95f0acef2085c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Thu, 16 May 2024 23:33:49 +0200 Subject: [PATCH 21/50] fixed most of the bugs now as a Klipper plugin --- shaketune/helpers/common_func.py | 8 +++ shaketune/measurement/__init__.py | 17 ------ shaketune/measurement/axes_input_shaper.py | 10 ++-- shaketune/measurement/axes_map.py | 9 ++- shaketune/measurement/belts_comparison.py | 10 ++-- shaketune/measurement/macros.cfg | 8 +++ shaketune/measurement/motorsconfigparser.py | 60 +++++++++---------- shaketune/measurement/static_freq.py | 8 ++- shaketune/measurement/vibrations_profile.py | 46 +++++++------- shaketune/post_processing/analyze_axesmap.py | 3 +- shaketune/post_processing/graph_creator.py | 4 +- shaketune/post_processing/graph_vibrations.py | 14 ++--- shaketune/shaketune.py | 25 ++++---- 13 files changed, 116 insertions(+), 106 deletions(-) create mode 100644 shaketune/measurement/macros.cfg diff --git a/shaketune/helpers/common_func.py b/shaketune/helpers/common_func.py index 6546347..b908da2 100644 --- a/shaketune/helpers/common_func.py +++ b/shaketune/helpers/common_func.py @@ -14,6 +14,14 @@ from scipy.signal import spectrogram from .console_output import ConsoleOutput +# Constant used to define the standard axis direction and names +AXIS_CONFIG = [ + {'axis': 'x', 'direction': (1, 0, 0), 'label': 'axis_X'}, + {'axis': 'y', 'direction': (0, 1, 0), 'label': 'axis_Y'}, + {'axis': 'a', 'direction': (1, -1, 0), 'label': 'belt_A'}, + {'axis': 'b', 'direction': (1, 1, 0), 'label': 'belt_B'}, +] + def parse_log(logname): try: diff --git a/shaketune/measurement/__init__.py b/shaketune/measurement/__init__.py index 8cffad7..72d968b 100644 --- a/shaketune/measurement/__init__.py +++ b/shaketune/measurement/__init__.py @@ -5,20 +5,3 @@ from .axes_map import axes_map_calibration as axes_map_calibration from .belts_comparison import compare_belts_responses as compare_belts_responses from .static_freq import excitate_axis_at_freq as excitate_axis_at_freq from .vibrations_profile import create_vibrations_profile as create_vibrations_profile - -AXIS_CONFIG = [ - {'axis': 'x', 'direction': (1, 0, 0), 'label': 'axis_X'}, - {'axis': 'y', 'direction': (0, 1, 0), 'label': 'axis_Y'}, - {'axis': 'a', 'direction': (1, -1, 0), 'label': 'belt_A'}, - {'axis': 'b', 'direction': (1, 1, 0), 'label': 'belt_B'}, -] - -# graph_creators = { -# 'axesmap': (AxesMapFinder, lambda gc: gc.configure(options.accel_used, options.chip_name)), -# 'belts': (BeltsGraphCreator, None), -# 'shaper': (ShaperGraphCreator, lambda gc: gc.configure(options.scv, options.max_smoothing)), -# 'vibrations': ( -# VibrationsGraphCreator, -# lambda gc: gc.configure(options.kinematics, options.accel_used, options.chip_name, options.metadata), -# ), -# } diff --git a/shaketune/measurement/axes_input_shaper.py b/shaketune/measurement/axes_input_shaper.py index d25209d..48b4d64 100644 --- a/shaketune/measurement/axes_input_shaper.py +++ b/shaketune/measurement/axes_input_shaper.py @@ -1,14 +1,14 @@ #!/usr/bin/env python3 +from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput from ..shaketune_thread import ShakeTuneThread -from . import AXIS_CONFIG from .accelerometer import Accelerometer from .resonance_test import vibrate_axis -def axes_shaper_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: +def axes_shaper_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: min_freq = gcmd.get_float('FREQ_START', default=5, minval=1) max_freq = gcmd.get_float('FREQ_END', default=133.33, minval=1) hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1, minval=1) @@ -21,9 +21,11 @@ def axes_shaper_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) z_height = gcmd.get_float('Z_HEIGHT', default=None, minval=1) - systime = printer.get_reactor().monotonic() + printer = config.get_printer() + gcode = printer.lookup_object('gcode') toolhead = printer.lookup_object('toolhead') res_tester = printer.lookup_object('resonance_tester') + systime = printer.get_reactor().monotonic() if scv is None: toolhead_info = toolhead.get_status(systime) @@ -92,7 +94,7 @@ def axes_shaper_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> accelerometer.stop_measurement(config['label'], append_time=True) # And finally generate the graph for each measured axis - ConsoleOutput.print(f'{config['axis'].upper()} axis frequency profile generation...') + ConsoleOutput.print(f'{config["axis"].upper()} axis frequency profile generation...') ConsoleOutput.print('This may take some time (1-3min)') st_thread.run() diff --git a/shaketune/measurement/axes_map.py b/shaketune/measurement/axes_map.py index bbf0dc5..c386976 100644 --- a/shaketune/measurement/axes_map.py +++ b/shaketune/measurement/axes_map.py @@ -6,13 +6,18 @@ from ..shaketune_thread import ShakeTuneThread from .accelerometer import Accelerometer -def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: +def axes_map_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: z_height = gcmd.get_float('Z_HEIGHT', default=20.0) speed = gcmd.get_float('SPEED', default=80.0, minval=20.0) accel = gcmd.get_int('ACCEL', default=1500, minval=100) feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) accel_chip = gcmd.get('ACCEL_CHIP', default=None) + printer = config.get_printer() + gcode = printer.lookup_object('gcode') + toolhead = printer.lookup_object('toolhead') + systime = printer.get_reactor().monotonic() + if accel_chip is None: accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy') if accel_chip is None: @@ -21,8 +26,6 @@ def axes_map_calibration(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> No ) accelerometer = Accelerometer(printer.lookup_object(accel_chip)) - systime = printer.get_reactor().monotonic() - toolhead = printer.lookup_object('toolhead') toolhead_info = toolhead.get_status(systime) old_accel = toolhead_info['max_accel'] old_mcr = toolhead_info['minimum_cruise_ratio'] diff --git a/shaketune/measurement/belts_comparison.py b/shaketune/measurement/belts_comparison.py index 3e3a546..e0d312d 100644 --- a/shaketune/measurement/belts_comparison.py +++ b/shaketune/measurement/belts_comparison.py @@ -1,14 +1,14 @@ #!/usr/bin/env python3 +from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput from ..shaketune_thread import ShakeTuneThread -from . import AXIS_CONFIG from .accelerometer import Accelerometer from .resonance_test import vibrate_axis -def compare_belts_responses(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: +def compare_belts_responses(gcmd, config, st_thread: ShakeTuneThread) -> None: min_freq = gcmd.get_float('FREQ_START', default=5.0, minval=1) max_freq = gcmd.get_float('FREQ_END', default=133.33, minval=1) hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1.0, minval=1) @@ -16,9 +16,11 @@ def compare_belts_responses(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) z_height = gcmd.get_float('Z_HEIGHT', default=None, minval=1) - systime = printer.get_reactor().monotonic() + printer = config.get_printer() + gcode = printer.lookup_object('gcode') toolhead = printer.lookup_object('toolhead') res_tester = printer.lookup_object('resonance_tester') + systime = printer.get_reactor().monotonic() accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy') if accel_chip is None: @@ -68,7 +70,7 @@ def compare_belts_responses(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> input_shaper = None # Filter axis configurations to get the A and B axis only - filtered_config = [a for a in AXIS_CONFIG if a['axis'] in ('x', 'y')] + filtered_config = [a for a in AXIS_CONFIG if a['axis'] in ('a', 'b')] for config in filtered_config: accelerometer.start_measurement() vibrate_axis(toolhead, gcode, config['direction'], min_freq, max_freq, hz_per_sec, accel_per_hz) diff --git a/shaketune/measurement/macros.cfg b/shaketune/measurement/macros.cfg new file mode 100644 index 0000000..c34a9d9 --- /dev/null +++ b/shaketune/measurement/macros.cfg @@ -0,0 +1,8 @@ + +# [gcode_macro AXES_MAP_CALIBRATION] +# gcode: +# {% set z_height = params.Z_HEIGHT|default(20)|int %} # z height to put the toolhead before starting the movements +# {% set speed = params.SPEED|default(80)|float * 60 %} # feedrate for the movements +# {% set accel = params.ACCEL|default(1500)|int %} # accel value used to move on the pattern +# {% set feedrate_travel = params.TRAVEL_SPEED|default(120)|int * 60 %} # travel feedrate between moves +# {% set accel_chip = params.ACCEL_CHIP|default("adxl345") %} # ADXL chip name in the config diff --git a/shaketune/measurement/motorsconfigparser.py b/shaketune/measurement/motorsconfigparser.py index 3dab656..4da86ba 100644 --- a/shaketune/measurement/motorsconfigparser.py +++ b/shaketune/measurement/motorsconfigparser.py @@ -4,8 +4,7 @@ # from the Klipper configuration and the TMC registers # Written by Frix_x#0161 # -import re -from typing import Any, Dict, List, Optional, Tuple +from typing import Any, Dict, List, Optional TRINAMIC_DRIVERS = ['tmc2130', 'tmc2208', 'tmc2209', 'tmc2240', 'tmc2660', 'tmc5160'] MOTORS = ['stepper_x', 'stepper_y', 'stepper_x1', 'stepper_y1', 'stepper_z', 'stepper_z1', 'stepper_z2', 'stepper_z3'] @@ -17,25 +16,20 @@ class Motor: self.name: str = name self._registers: Dict[str, Dict[str, Any]] = {} self._config: Dict[str, Any] = {} - self._driver: Tuple[str, Any] = ('', None) - - def set_driver(self, driver_name: str, tmc_object: Any) -> None: - self._driver = (driver_name, tmc_object) - - def get_driver(self) -> Tuple[str, Any]: - return self._driver def set_register(self, register: str, value_dict: dict) -> None: + # First we filter out entries with a value of 0 to avoid having too much uneeded data + value_dict = {k: v for k, v in value_dict.items() if v != 0} + # Special parsing for CHOPCONF to extract meaningful values if register == 'CHOPCONF': - # Add intpol=0 if missing from the register dump - if 'intpol=' not in value_dict: + # Add intpol=0 if missing from the register dump to force printing it as it's important + if 'intpol' not in value_dict: value_dict['intpol'] = '0' - # Simplify the microstep resolution format + # Remove the microsteps entry as the format here is not easy to read and + # it's already read in the correct format directly from the Klipper config if 'mres' in value_dict: - mres_match = re.search(r'(\d+)usteps', value_dict['mres']) - if mres_match: - value_dict['mres'] = mres_match.group(1) + del value_dict['mres'] # Special parsing for CHOPCONF to avoid pwm_ before each values if register == 'PWMCONF': @@ -46,7 +40,7 @@ class Motor: new_value_dict[key] = val value_dict = new_value_dict - # Then fill the registers while merging all the thresholds into the same THRS virtual register + # Then gets merged all the thresholds into the same THRS virtual register if register in ['TPWMTHRS', 'TCOOLTHRS']: existing_thrs = self._registers.get('THRS', {}) merged_values = {**existing_thrs, **value_dict} @@ -110,35 +104,42 @@ class Motor: class MotorsConfigParser: - def __init__(self, printer, motors: List[str] = MOTORS, drivers: List[str] = TRINAMIC_DRIVERS): + def __init__(self, config, motors: List[str] = MOTORS, drivers: List[str] = TRINAMIC_DRIVERS): + self._printer = config.get_printer() + self._motors: List[Motor] = [] - self._printer = printer for motor_name in motors: for driver in drivers: - tmc_object = printer.lookup_object(f'{driver} {motor_name}', None) + tmc_object = self._printer.lookup_object(f'{driver} {motor_name}', None) if tmc_object is None: continue motor = self._create_motor(motor_name, driver, tmc_object) self._motors.append(motor) + pconfig = self._printer.lookup_object('configfile') + self.kinematics = pconfig.status_raw_config['printer']['kinematics'] + # Create a Motor object with the given name, driver and TMC object # and fill it with the relevant configuration and registers def _create_motor(self, motor_name: str, driver: str, tmc_object: Any) -> Motor: motor = Motor(motor_name) - motor.set_driver(driver.upper(), tmc_object) + motor.set_config('tmc', driver) self._parse_klipper_config(motor, tmc_object) self._parse_tmc_registers(motor, tmc_object) return motor - def _parse_klipper_config(self, motor: Motor, tmc: Any) -> None: + def _parse_klipper_config(self, motor: Motor, tmc_object: Any) -> None: # The TMCCommandHelper isn't a direct member of the TMC object... but we can still get it this way - tmc_cmdhelper = tmc.get_status.__self__ + tmc_cmdhelper = tmc_object.get_status.__self__ motor_currents = tmc_cmdhelper.current_helper.get_current() motor.set_config('run_current', motor_currents[0]) motor.set_config('hold_current', motor_currents[1]) + pconfig = self._printer.lookup_object('configfile') + motor.set_config('microsteps', int(pconfig.status_raw_config[motor.name]['microsteps'])) + autotune_object = self._printer.lookup_object(f'autotune_tmc {motor.name}', None) if autotune_object is not None: motor.set_config('autotune_enabled', True) @@ -147,24 +148,21 @@ class MotorsConfigParser: else: motor.set_config('autotune_enabled', False) - def _parse_tmc_registers(self, motor: Motor, tmc: Any) -> None: + def _parse_tmc_registers(self, motor: Motor, tmc_object: Any) -> None: # The TMCCommandHelper isn't a direct member of the TMC object... but we can still get it this way - tmc_cmdhelper = tmc.get_status.__self__ + tmc_cmdhelper = tmc_object.get_status.__self__ for register in RELEVANT_TMC_REGISTERS: - # value = tmc_cmdhelper.read_register(register) - # motor.set_register(register, value) - val = tmc_cmdhelper.fields.registers.get(register) if (val is not None) and (register not in tmc_cmdhelper.read_registers): # write-only register - fields_string = self._extract_register_values(register, val) + fields_string = self._extract_register_values(tmc_cmdhelper, register, val) elif register in tmc_cmdhelper.read_registers: # readable register val = tmc_cmdhelper.mcu_tmc.get_register(register) if tmc_cmdhelper.read_translate is not None: register, val = tmc_cmdhelper.read_translate(register, val) - fields_string = self._extract_register_values(register, val) + fields_string = self._extract_register_values(tmc_cmdhelper, register, val) motor.set_register(register, fields_string) @@ -173,7 +171,7 @@ class MotorsConfigParser: reg_fields = tmc_cmdhelper.fields.all_fields.get(register, {}) reg_fields = sorted([(mask, name) for name, mask in reg_fields.items()]) fields = {} - for mask, field_name in reg_fields: + for _, field_name in reg_fields: field_value = tmc_cmdhelper.fields.get_field(field_name, val, register) fields[field_name] = field_value return fields @@ -181,7 +179,7 @@ class MotorsConfigParser: # Find and return the motor by its name def get_motor(self, motor_name: str) -> Optional[Motor]: for motor in self._motors: - if motor._name == motor_name: + if motor.name == motor_name: return motor return None diff --git a/shaketune/measurement/static_freq.py b/shaketune/measurement/static_freq.py index 7bc41b1..1dbf188 100644 --- a/shaketune/measurement/static_freq.py +++ b/shaketune/measurement/static_freq.py @@ -1,11 +1,11 @@ #!/usr/bin/env python3 +from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput -from . import AXIS_CONFIG from .resonance_test import vibrate_axis -def excitate_axis_at_freq(gcmd, gcode, printer) -> None: +def excitate_axis_at_freq(gcmd, config) -> None: freq = gcmd.get_int('FREQUENCY', default=25, minval=1) duration = gcmd.get_int('DURATION', default=10, minval=1) accel_per_hz = gcmd.get_float('ACCEL_PER_HZ', default=None) @@ -19,9 +19,11 @@ def excitate_axis_at_freq(gcmd, gcode, printer) -> None: ConsoleOutput.print(f'Excitating {axis.upper()} axis at {freq}Hz for {duration} seconds') - systime = printer.get_reactor().monotonic() + printer = config.get_printer() + gcode = printer.lookup_object('gcode') toolhead = printer.lookup_object('toolhead') res_tester = printer.lookup_object('resonance_tester') + systime = printer.get_reactor().monotonic() if accel_per_hz is None: accel_per_hz = res_tester.test.accel_per_hz diff --git a/shaketune/measurement/vibrations_profile.py b/shaketune/measurement/vibrations_profile.py index f580d9f..31e748d 100644 --- a/shaketune/measurement/vibrations_profile.py +++ b/shaketune/measurement/vibrations_profile.py @@ -11,7 +11,7 @@ from .motorsconfigparser import MotorsConfigParser MIN_SPEED = 2 # mm/s -def create_vibrations_profile(gcmd, gcode, printer, st_thread: ShakeTuneThread) -> None: +def create_vibrations_profile(gcmd, config, st_thread: ShakeTuneThread) -> None: size = gcmd.get_float('SIZE', default=100.0, minval=50.0) z_height = gcmd.get_float('Z_HEIGHT', default=20.0) max_speed = gcmd.get_float('MAX_SPEED', default=200.0, minval=10.0) @@ -23,29 +23,30 @@ def create_vibrations_profile(gcmd, gcode, printer, st_thread: ShakeTuneThread) if (size / (max_speed / 60)) < 0.25: gcmd.error('The size of the movement is too small for the given speed! Increase SIZE or decrease MAX_SPEED!') - # Check that input shaper is already configured + printer = config.get_printer() + gcode = printer.lookup_object('gcode') + toolhead = printer.lookup_object('toolhead') input_shaper = printer.lookup_object('input_shaper', None) + systime = printer.get_reactor().monotonic() + + # Check that input shaper is already configured if input_shaper is None: gcmd.error('Input shaper is not configured! Please run the shaper calibration macro first.') - # TODO: Add the kinematics check to define the main_angles - # but this needs to retrieve it from the printer configuration - # {% if kinematics == "cartesian" %} - # # Cartesian motors are on X and Y axis directly - # RESPOND MSG="Cartesian kinematics mode" - # {% set main_angles = [0, 90] %} - # {% elif kinematics == "corexy" %} - # # CoreXY motors are on A and B axis (45 and 135 degrees) - # RESPOND MSG="CoreXY kinematics mode" - # {% set main_angles = [45, 135] %} - # {% else %} - # { action_raise_error("Only Cartesian and CoreXY kinematics are supported at the moment for the vibrations measurement tool!") } - # {% endif %} - kinematics = 'cartesian' - main_angles = [0, 90] + motors_config_parser = MotorsConfigParser(config, motors=['stepper_x', 'stepper_y']) + + if motors_config_parser.kinematics == 'cartesian' or motors_config_parser.kinematics == 'corexz': + # Cartesian motors are on X and Y axis directly, same for CoreXZ + main_angles = [0, 90] + elif motors_config_parser.kinematics == 'corexy': + # CoreXY motors are on A and B axis (45 and 135 degrees) + main_angles = [45, 135] + else: + gcmd.error( + 'Only Cartesian and CoreXY kinematics are supported at the moment for the vibrations measurement tool!' + ) + ConsoleOutput.print(f'{motors_config_parser.kinematics.upper()} kinematics mode') - systime = printer.get_reactor().monotonic() - toolhead = printer.lookup_object('toolhead') toolhead_info = toolhead.get_status(systime) old_accel = toolhead_info['max_accel'] old_mcr = toolhead_info['minimum_cruise_ratio'] @@ -66,6 +67,7 @@ def create_vibrations_profile(gcmd, gcode, printer, st_thread: ShakeTuneThread) nb_speed_samples = int((max_speed - MIN_SPEED) / speed_increment + 1) for curr_angle in main_angles: + ConsoleOutput.print(f'-> Measuring angle: {curr_angle} degrees...') radian_angle = math.radians(curr_angle) # Find the best accelerometer chip for the current angle if not specified @@ -86,6 +88,7 @@ def create_vibrations_profile(gcmd, gcode, printer, st_thread: ShakeTuneThread) # Sweep the speed range to record the vibrations at different speeds for curr_speed_sample in range(nb_speed_samples): curr_speed = MIN_SPEED + curr_speed_sample * speed_increment + ConsoleOutput.print(f'Current speed: {curr_speed} mm/s') # Reduce the segments length for the lower speed range (0-100mm/s). The minimum length is 1/3 of the SIZE and is gradually increased # to the nominal SIZE at 100mm/s. No further size changes are made above this speed. The goal is to ensure that the print head moves @@ -126,12 +129,9 @@ def create_vibrations_profile(gcmd, gcode, printer, st_thread: ShakeTuneThread) ) toolhead.wait_moves() - # Get the motors and TMC configurations from Klipper - motors_config_parser = MotorsConfigParser(printer, motors=['stepper_x', 'stepper_y']) - # Run post-processing ConsoleOutput.print('Machine vibrations profile generation...') ConsoleOutput.print('This may take some time (5-8min)') creator = st_thread.get_graph_creator() - creator.configure(kinematics, accel, motors_config_parser) + creator.configure(motors_config_parser.kinematics, accel, motors_config_parser) st_thread.run() diff --git a/shaketune/post_processing/analyze_axesmap.py b/shaketune/post_processing/analyze_axesmap.py index 1a818d9..4c094a3 100644 --- a/shaketune/post_processing/analyze_axesmap.py +++ b/shaketune/post_processing/analyze_axesmap.py @@ -109,7 +109,8 @@ def axesmap_calibration(lognames, accel=None): axes_map = ','.join([f'{spike[0][0]}{spike[1]}' for spike in spikes_sorted]) # alignment_error, sensitivity_error = compute_errors(filtered_data, spikes_sorted, accel, NUM_POINTS) - results = f'Detected axes_map:\n {axes_map}\n' + results = f'Be aware that this macro is experimental and has been known to sometimes produce incorrect results. Use it with caution and always check the results!\n' + results += f'Detected axes_map:\n {axes_map}\n' # TODO: work on this function that is currently not giving good results... # results += "Accelerometer angle deviation:\n" diff --git a/shaketune/post_processing/graph_creator.py b/shaketune/post_processing/graph_creator.py index d8af166..9316bcb 100644 --- a/shaketune/post_processing/graph_creator.py +++ b/shaketune/post_processing/graph_creator.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import abc +import re import shutil import tarfile from datetime import datetime @@ -189,6 +190,7 @@ class VibrationsGraphCreator(GraphCreator): with tarfile.open(tar_path, 'w:gz') as tar: for csv_file in lognames: tar.add(csv_file, arcname=csv_file.name, recursive=False) + csv_file.unlink() def create_graph(self) -> None: if not self._accel or not self._kinematics: @@ -197,7 +199,7 @@ class VibrationsGraphCreator(GraphCreator): lognames = self._move_and_prepare_files( glob_pattern='shaketune-vib_*.csv', min_files_required=None, - custom_name_func=lambda f: f.name, + custom_name_func=lambda f: re.search(r'shaketune-vib_(.*?)_\d{8}_\d{6}', f.name).group(1), ) fig = vibrations_profile( lognames=[str(path) for path in lognames], diff --git a/shaketune/post_processing/graph_vibrations.py b/shaketune/post_processing/graph_vibrations.py index 05bcf7e..48c32a9 100644 --- a/shaketune/post_processing/graph_vibrations.py +++ b/shaketune/post_processing/graph_vibrations.py @@ -564,23 +564,23 @@ def plot_motor_config_txt(fig, motors, differences): motor_details = [(motors[0], 'X motor'), (motors[1], 'Y motor')] distance = 0.12 - if motors[0].get_property('autotune_enabled'): - distance = 0.24 + if motors[0].get_config('autotune_enabled'): + distance = 0.27 config_blocks = [ - f"| {lbl}: {mot.get_property('motor').upper()} on {mot.get_property('tmc').upper()} @ {mot.get_property('voltage')}V {mot.get_property('run_current')}A" + f"| {lbl}: {mot.get_config('motor').upper()} on {mot.get_config('tmc').upper()} @ {mot.get_config('voltage'):0.1f}V {mot.get_config('run_current'):0.2f}A - {mot.get_config('microsteps')}usteps" for mot, lbl in motor_details ] config_blocks.append('| TMC Autotune enabled') else: config_blocks = [ - f"| {lbl}: {mot.get_property('tmc').upper()} @ {mot.get_property('run_current')}A" + f"| {lbl}: {mot.get_config('tmc').upper()} @ {mot.get_config('run_current'):0.2f}A - {mot.get_config('microsteps')}usteps" for mot, lbl in motor_details ] config_blocks.append('| TMC Autotune not detected') for idx, block in enumerate(config_blocks): fig.text( - 0.40, 0.990 - 0.015 * idx, block, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple'] + 0.41, 0.990 - 0.015 * idx, block, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple'] ) tmc_registers = motors[0].get_registers() @@ -589,7 +589,7 @@ def plot_motor_config_txt(fig, motors, differences): settings_str = ' '.join(f'{k}={v}' for k, v in settings.items()) tmc_block = f'| {register.upper()}: {settings_str}' fig.text( - 0.40 + distance, + 0.41 + distance, 0.990 - 0.015 * idx, tmc_block, ha='left', @@ -601,7 +601,7 @@ def plot_motor_config_txt(fig, motors, differences): if differences is not None: differences_text = f'| Y motor diff: {differences}' fig.text( - 0.40 + distance, + 0.41 + distance, 0.990 - 0.015 * (idx + 1), differences_text, ha='left', diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index 6999bd2..f7d058b 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -18,8 +18,9 @@ from .shaketune_thread import ShakeTuneThread class ShakeTune: def __init__(self, config) -> None: + self._pconfig = config self._printer = config.get_printer() - self._gcode = self._printer.lookup_object('gcode') + gcode = self._printer.lookup_object('gcode') res_tester = self._printer.lookup_object('resonance_tester') if res_tester is None: @@ -34,29 +35,29 @@ class ShakeTune: dpi = config.getint('dpi', default=150, minval=100, maxval=500) self._config = ShakeTuneConfig(result_folder_path, keep_n_results, keep_csv, dpi) - ConsoleOutput.register_output_callback(self._gcode.respond_info) + ConsoleOutput.register_output_callback(gcode.respond_info) - self._gcode.register_command( + gcode.register_command( 'EXCITATE_AXIS_AT_FREQ', self.cmd_EXCITATE_AXIS_AT_FREQ, desc=self.cmd_EXCITATE_AXIS_AT_FREQ_help, ) - self._gcode.register_command( + gcode.register_command( 'AXES_MAP_CALIBRATION', self.cmd_AXES_MAP_CALIBRATION, desc=self.cmd_AXES_MAP_CALIBRATION_help, ) - self._gcode.register_command( + gcode.register_command( 'COMPARE_BELTS_RESPONSES', self.cmd_COMPARE_BELTS_RESPONSES, desc=self.cmd_COMPARE_BELTS_RESPONSES_help, ) - self._gcode.register_command( + gcode.register_command( 'AXES_SHAPER_CALIBRATION', self.cmd_AXES_SHAPER_CALIBRATION, desc=self.cmd_AXES_SHAPER_CALIBRATION_help, ) - self._gcode.register_command( + gcode.register_command( 'CREATE_VIBRATIONS_PROFILE', self.cmd_CREATE_VIBRATIONS_PROFILE, desc=self.cmd_CREATE_VIBRATIONS_PROFILE_help, @@ -68,7 +69,7 @@ class ShakeTune: def cmd_EXCITATE_AXIS_AT_FREQ(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') - excitate_axis_at_freq(gcmd, self._gcode, self._printer) + excitate_axis_at_freq(gcmd, self._pconfig) cmd_AXES_MAP_CALIBRATION_help = 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer' @@ -76,7 +77,7 @@ class ShakeTune: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') axes_map_finder = AxesMapFinder(self._config) st_thread = ShakeTuneThread(self._config, axes_map_finder, self._printer.get_reactor(), self.timeout) - axes_map_calibration(gcmd, self._gcode, self._printer, st_thread) + axes_map_calibration(gcmd, self._pconfig, st_thread) cmd_COMPARE_BELTS_RESPONSES_help = 'Perform a custom half-axis test to analyze and compare the frequency profiles of individual belts on CoreXY printers' @@ -84,7 +85,7 @@ class ShakeTune: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') belt_graph_creator = BeltsGraphCreator(self._config) st_thread = ShakeTuneThread(self._config, belt_graph_creator, self._printer.get_reactor(), self.timeout) - compare_belts_responses(gcmd, self._gcode, self._printer, st_thread) + compare_belts_responses(gcmd, self._pconfig, st_thread) cmd_AXES_SHAPER_CALIBRATION_help = ( 'Perform standard axis input shaper tests on one or both XY axes to select the best input shaper filter' @@ -94,7 +95,7 @@ class ShakeTune: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') shaper_graph_creator = ShaperGraphCreator(self._config) st_thread = ShakeTuneThread(self._config, shaper_graph_creator, self._printer.get_reactor(), self.timeout) - axes_shaper_calibration(gcmd, self._gcode, self._printer, st_thread) + axes_shaper_calibration(gcmd, self._pconfig, st_thread) cmd_CREATE_VIBRATIONS_PROFILE_help = 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer' @@ -102,4 +103,4 @@ class ShakeTune: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') vibration_profile_creator = VibrationsGraphCreator(self._config) st_thread = ShakeTuneThread(self._config, vibration_profile_creator, self._printer.get_reactor(), self.timeout) - create_vibrations_profile(gcmd, self._gcode, self._printer, st_thread) + create_vibrations_profile(gcmd, self._pconfig, st_thread) From 9f4da8b80d01cdfc0558934145997ed990b5bff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sun, 19 May 2024 11:36:27 +0200 Subject: [PATCH 22/50] added accel_per_hertz to the graphs --- shaketune/measurement/axes_input_shaper.py | 2 +- shaketune/measurement/belts_comparison.py | 4 +++ shaketune/post_processing/graph_belts.py | 5 ++-- shaketune/post_processing/graph_creator.py | 8 +++++- shaketune/post_processing/graph_shaper.py | 31 ++++++++++++++++------ 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/shaketune/measurement/axes_input_shaper.py b/shaketune/measurement/axes_input_shaper.py index 48b4d64..87d7734 100644 --- a/shaketune/measurement/axes_input_shaper.py +++ b/shaketune/measurement/axes_input_shaper.py @@ -60,7 +60,7 @@ def axes_shaper_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: # Configure the graph creator creator = st_thread.get_graph_creator() - creator.configure(scv, max_sm) + creator.configure(scv, max_sm, accel_per_hz) # set the needed acceleration values for the test toolhead_info = toolhead.get_status(systime) diff --git a/shaketune/measurement/belts_comparison.py b/shaketune/measurement/belts_comparison.py index e0d312d..047967d 100644 --- a/shaketune/measurement/belts_comparison.py +++ b/shaketune/measurement/belts_comparison.py @@ -56,6 +56,10 @@ def compare_belts_responses(gcmd, config, st_thread: ShakeTuneThread) -> None: toolhead.manual_move(point, feedrate_travel) + # Configure the graph creator + creator = st_thread.get_graph_creator() + creator.configure(accel_per_hz) + # set the needed acceleration values for the test toolhead_info = toolhead.get_status(systime) old_accel = toolhead_info['max_accel'] diff --git a/shaketune/post_processing/graph_belts.py b/shaketune/post_processing/graph_belts.py index 16858b1..ff6b506 100644 --- a/shaketune/post_processing/graph_belts.py +++ b/shaketune/post_processing/graph_belts.py @@ -452,7 +452,7 @@ def compute_signal_data(data, max_freq): ###################################################################### -def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, st_version=None): +def belts_calibration(lognames, klipperdir='~/klipper', max_freq=200.0, accel_per_hz=None, st_version='unknown'): global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) @@ -538,6 +538,7 @@ def main(): opts = optparse.OptionParser(usage) opts.add_option('-o', '--output', type='string', dest='output', default=None, help='filename of output graph') opts.add_option('-f', '--max_freq', type='float', default=200.0, help='maximum frequency to graph') + opts.add_option('--accel_per_hz', type='float', default=None, help='accel_per_hz used during the measurement') opts.add_option( '-k', '--klipper_dir', type='string', dest='klipperdir', default='~/klipper', help='main klipper directory' ) @@ -547,7 +548,7 @@ def main(): if options.output is None: opts.error('You must specify an output file.png to use the script (option -o)') - fig = belts_calibration(args, options.klipperdir, options.max_freq) + fig = belts_calibration(args, options.klipperdir, options.max_freq, options.accel_per_hz, 'unknown') fig.savefig(options.output, dpi=150) diff --git a/shaketune/post_processing/graph_creator.py b/shaketune/post_processing/graph_creator.py index 9316bcb..305eeb5 100644 --- a/shaketune/post_processing/graph_creator.py +++ b/shaketune/post_processing/graph_creator.py @@ -96,6 +96,9 @@ class BeltsGraphCreator(GraphCreator): self._setup_folder('belts') + def configure(self, accel_per_hz: float = None) -> None: + self._accel_per_hz = accel_per_hz + def create_graph(self) -> None: lognames = self._move_and_prepare_files( glob_pattern='shaketune-belt_*.csv', @@ -105,6 +108,7 @@ class BeltsGraphCreator(GraphCreator): fig = belts_calibration( lognames=[str(path) for path in lognames], klipperdir=str(self._config.klipper_folder), + accel_per_hz=self._accel_per_hz, st_version=self._version, ) self._save_figure_and_cleanup(fig, lognames) @@ -134,9 +138,10 @@ class ShaperGraphCreator(GraphCreator): self._setup_folder('shaper') - def configure(self, scv: float, max_smoothing: float = None) -> None: + def configure(self, scv: float, max_smoothing: float = None, accel_per_hz: float = None) -> None: self._scv = scv self._max_smoothing = max_smoothing + self._accel_per_hz = accel_per_hz def create_graph(self) -> None: if not self._scv: @@ -152,6 +157,7 @@ class ShaperGraphCreator(GraphCreator): klipperdir=str(self._config.klipper_folder), max_smoothing=self._max_smoothing, scv=self._scv, + accel_per_hz=self._accel_per_hz, st_version=self._version, ) self._save_figure_and_cleanup(fig, lognames, lognames[0].stem.split('_')[-1]) diff --git a/shaketune/post_processing/graph_shaper.py b/shaketune/post_processing/graph_shaper.py index ca89901..741a3af 100644 --- a/shaketune/post_processing/graph_shaper.py +++ b/shaketune/post_processing/graph_shaper.py @@ -294,7 +294,15 @@ def plot_spectrogram(ax, t, bins, pdata, peaks, max_freq): ###################################################################### -def shaper_calibration(lognames, klipperdir='~/klipper', max_smoothing=None, scv=5.0, max_freq=200.0, st_version=None): +def shaper_calibration( + lognames, + klipperdir='~/klipper', + max_smoothing=None, + scv=5.0, + max_freq=200.0, + accel_per_hz=None, + st_version='unknown', +): global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) @@ -359,19 +367,23 @@ def shaper_calibration(lognames, klipperdir='~/klipper', max_smoothing=None, scv dt = datetime.strptime(f'{filename_parts[1]} {filename_parts[2]}', '%Y%m%d %H%M%S') title_line2 = dt.strftime('%x %X') + ' -- ' + filename_parts[3].upper().split('.')[0] + ' axis' if compat: - title_line3 = '| Compatibility mode with older Klipper,' - title_line4 = '| and no custom S&T parameters are used!' + title_line3 = '| Older Klipper version detected, damping ratio' + title_line4 = '| and SCV are not used for filter recommendations!' + title_line5 = f'| Accel per Hz used: {accel_per_hz}' if accel_per_hz is not None else '' else: - title_line3 = '| Square corner velocity: ' + str(scv) + 'mm/s' - title_line4 = '| Max allowed smoothing: ' + str(max_smoothing) + title_line3 = f'| Square corner velocity: {scv}mm/s' + title_line4 = f'| Max allowed smoothing: {max_smoothing}' + title_line5 = f'| Accel per Hz used: {accel_per_hz}' if accel_per_hz is not None else '' except Exception: ConsoleOutput.print('Warning: CSV filename look to be different than expected (%s)' % (lognames[0])) title_line2 = lognames[0].split('/')[-1] title_line3 = '' title_line4 = '' + title_line5 = '' fig.text(0.12, 0.957, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) - fig.text(0.58, 0.960, title_line3, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) - fig.text(0.58, 0.946, title_line4, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.58, 0.965, title_line3, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.58, 0.951, title_line4, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.58, 0.919, title_line5, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) # Plot the graphs plot_freq_response( @@ -401,6 +413,7 @@ def main(): opts.add_option( '--scv', '--square_corner_velocity', type='float', dest='scv', default=5.0, help='square corner velocity' ) + opts.add_option('--accel_per_hz', type='float', default=None, help='accel_per_hz used during the measurement') opts.add_option( '-k', '--klipper_dir', type='string', dest='klipperdir', default='~/klipper', help='main klipper directory' ) @@ -412,7 +425,9 @@ def main(): if options.max_smoothing is not None and options.max_smoothing < 0.05: opts.error('Too small max_smoothing specified (must be at least 0.05)') - fig = shaper_calibration(args, options.klipperdir, options.max_smoothing, options.scv, options.max_freq) + fig = shaper_calibration( + args, options.klipperdir, options.max_smoothing, options.scv, options.max_freq, options.accel_per_hz, 'unknown' + ) fig.savefig(options.output, dpi=150) From 1d4c68265d8fb51067777e8bcf45b7f4d5480523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sun, 19 May 2024 13:02:56 +0200 Subject: [PATCH 23/50] small bug-fixes and greek alphabet for paired peaks --- docs/macros/belts_tuning.md | 4 ++-- shaketune/measurement/axes_input_shaper.py | 1 + shaketune/measurement/belts_comparison.py | 1 + shaketune/measurement/static_freq.py | 1 + shaketune/post_processing/graph_belts.py | 4 ++-- shaketune/post_processing/graph_creator.py | 1 + shaketune/post_processing/graph_shaper.py | 6 +++--- 7 files changed, 11 insertions(+), 7 deletions(-) diff --git a/docs/macros/belts_tuning.md b/docs/macros/belts_tuning.md index f354b21..a4ac25b 100644 --- a/docs/macros/belts_tuning.md +++ b/docs/macros/belts_tuning.md @@ -25,7 +25,7 @@ Then, call the `COMPARE_BELTS_RESPONSES` macro and look for the graphs in the re ### Belts frequency profiles -On these graphs, **you want both curves to look similar and overlap to form a single curve**: try to make them fit as closely as possible in frequency **and** in amplitude. Usually a belt graph is composed of one or two main peaks (more than 2 peaks can hint about mechanical problems). It's acceptable to have "noise" around the main peaks, but it should be present on both curves with a comparable amplitude. Keep in mind that when you tighten a belt, its peaks should move diagonally toward the upper right corner, changing significantly in amplitude and slightly in frequency. Additionally, the magnitude order of the main peaks *should typically* range from ~500k to ~2M on most machines. +On these graphs, **you want both curves to look similar and overlap to form a single curve**: try to make them fit as closely as possible in frequency **and** in amplitude. Usually a belt graph is composed of one or two main paired peaks (more than 2 peaks can hint about mechanical problems). It's acceptable to have "noise" around the main peaks, but it should be present on both curves with a comparable amplitude. Keep in mind that when you tighten a belt, its peaks should move diagonally toward the upper right corner, changing significantly in amplitude and slightly in frequency. Additionally, the magnitude order of the main peaks *should typically* range from ~500k to ~2M on most machines. Aside from the actual belt tension, the resonant frequency/amplitude of the curves depends primarily on three parameters: - the *mass of the toolhead*, which is identical on CoreXY, CrossXY and H-Bot machines for both belts. So this will unlikely have any effect here @@ -40,7 +40,7 @@ The Cross-Belts plot is an innovative cool way to compare the frequency profiles The good zone, wider at the bottom (low-amplitude regions where the deviation doesn't matter much) and narrower at the top right (high-energy region where the main peaks lie), represents acceptable deviations. So **you want all points to be close to the ideal center line and as many as possible within the green zone**, as this means that the bands are well tuned and behave similarly. -Paired peaks of exactly the same frequency will be on the same point (labeled A1/A2, ...) and the distance from the center line will show the difference in energy. For paired peaks that also have a frequency delta between them, they are displayed as two points (labeled A1 and A2, ...) and the additional distance between them along the plotted line represents their frequency delta. +Paired peaks of exactly the same frequency will be on the same point (labeled α1/α2, β1/β2, ...) and the distance from the center line will show the difference in energy. For paired peaks that also have a frequency delta between them, they are displayed as two points (labeled α1 and α2, ...) and the additional distance between them along the plotted line represents their frequency delta. ### Estimated similarity and mechanical issues indicator diff --git a/shaketune/measurement/axes_input_shaper.py b/shaketune/measurement/axes_input_shaper.py index 87d7734..f10fa63 100644 --- a/shaketune/measurement/axes_input_shaper.py +++ b/shaketune/measurement/axes_input_shaper.py @@ -57,6 +57,7 @@ def axes_shaper_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: point = (x, y, z) toolhead.manual_move(point, feedrate_travel) + toolhead.dwell(0.5) # Configure the graph creator creator = st_thread.get_graph_creator() diff --git a/shaketune/measurement/belts_comparison.py b/shaketune/measurement/belts_comparison.py index d2f4857..5b9bcb1 100644 --- a/shaketune/measurement/belts_comparison.py +++ b/shaketune/measurement/belts_comparison.py @@ -56,6 +56,7 @@ def compare_belts_responses(gcmd, config, st_thread: ShakeTuneThread) -> None: point = (x, y, z) toolhead.manual_move(point, feedrate_travel) + toolhead.dwell(0.5) # Configure the graph creator motors_config_parser = MotorsConfigParser(config, motors=None) diff --git a/shaketune/measurement/static_freq.py b/shaketune/measurement/static_freq.py index 1dbf188..0699dab 100644 --- a/shaketune/measurement/static_freq.py +++ b/shaketune/measurement/static_freq.py @@ -50,6 +50,7 @@ def excitate_axis_at_freq(gcmd, config) -> None: point = (x, y, z) toolhead.manual_move(point, feedrate_travel) + toolhead.dwell(0.5) min_freq = freq - 1 max_freq = freq + 1 diff --git a/shaketune/post_processing/graph_belts.py b/shaketune/post_processing/graph_belts.py index 0a5c46b..94a04e2 100644 --- a/shaketune/post_processing/graph_belts.py +++ b/shaketune/post_processing/graph_belts.py @@ -22,7 +22,7 @@ matplotlib.use('Agg') from ..helpers.common_func import detect_peaks, parse_log, setup_klipper_import from ..helpers.console_output import ConsoleOutput -ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' # For paired peaks names +ALPHABET = 'αβγδεζηθικλμνξοπρστυφχψω' # For paired peak names (using the Greek alphabet to avoid confusion with belt names) PEAKS_DETECTION_THRESHOLD = 0.1 # Threshold to detect peaks in the PSD signal (10% of max) DC_MAX_PEAKS = 2 # Maximum ideal number of peaks @@ -524,7 +524,7 @@ def belts_calibration( # Adding Shake&Tune version in the top right corner if st_version != 'unknown': - fig.text(0.995, 0.985, st_version, ha='right', va='bottom', fontsize=8, color=KLIPPAIN_COLORS['purple']) + fig.text(0.995, 0.980, st_version, ha='right', va='bottom', fontsize=8, color=KLIPPAIN_COLORS['purple']) return fig diff --git a/shaketune/post_processing/graph_creator.py b/shaketune/post_processing/graph_creator.py index 22d868c..b937055 100644 --- a/shaketune/post_processing/graph_creator.py +++ b/shaketune/post_processing/graph_creator.py @@ -111,6 +111,7 @@ class BeltsGraphCreator(GraphCreator): ) fig = belts_calibration( lognames=[str(path) for path in lognames], + kinematics=self._kinematics, klipperdir=str(self._config.klipper_folder), accel_per_hz=self._accel_per_hz, st_version=self._version, diff --git a/shaketune/post_processing/graph_shaper.py b/shaketune/post_processing/graph_shaper.py index 26962e8..c1f2be5 100644 --- a/shaketune/post_processing/graph_shaper.py +++ b/shaketune/post_processing/graph_shaper.py @@ -381,9 +381,9 @@ def shaper_calibration( title_line4 = '' title_line5 = '' fig.text(0.12, 0.957, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) - fig.text(0.58, 0.965, title_line3, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) - fig.text(0.58, 0.951, title_line4, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) - fig.text(0.58, 0.919, title_line5, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.58, 0.963, title_line3, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.58, 0.948, title_line4, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.58, 0.933, title_line5, ha='left', va='top', fontsize=10, color=KLIPPAIN_COLORS['dark_purple']) # Plot the graphs plot_freq_response( From 83655864e8a0beb8c2472bf57a39b42c77f609a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sun, 19 May 2024 17:27:49 +0200 Subject: [PATCH 24/50] added dummy macros automatic loading --- README.md | 12 ++++- shaketune/dummy_macros.cfg | 67 +++++++++++++++++++++++++++ shaketune/measurement/macros.cfg | 8 ---- shaketune/shaketune.py | 79 +++++++++++++++----------------- 4 files changed, 115 insertions(+), 51 deletions(-) create mode 100644 shaketune/dummy_macros.cfg delete mode 100644 shaketune/measurement/macros.cfg diff --git a/README.md b/README.md index e4156ac..a153c96 100644 --- a/README.md +++ b/README.md @@ -29,18 +29,26 @@ Follow these steps to install the Shake&Tune module in your printer: 1. Then, append the following to your `printer.cfg` file and restart Klipper (if prefered, you can include only the needed macros: using `*.cfg` is a convenient way to include them all at once): ``` [shaketune] - # result_folder: ~/printer_data/config/K-ShakeTune_results + # result_folder: ~/printer_data/config/ShakeTune_results + # The folder where the results will be stored. It will be created if it doesn't exist. # number_of_results_to_keep: 3 + # The number of results to keep in the result_folder. The oldest results will + # be automatically deleted after each runs. # keep_raw_csv: False + # If True, the raw CSV files will be kept in the result_folder alongside the + # PNG graphs. If False, they will be deleted and only the graphs will be kept. + # show_macros_in_webui: True + # Mainsail and Fluidd doesn't create buttons for "system" macros that are not in the + # printer.cfg file. If you want to see the macros in the webui, set this to True. ``` ## Usage Ensure your machine is homed, then invoke one of the following macros as needed: + - `EXCITATE_AXIS_AT_FREQ` to maintain a specific excitation frequency, useful to inspect and find out what is resonating. - `AXES_MAP_CALIBRATION` to automatically find Klipper's `axes_map` parameter for your accelerometer orientation (be careful, this is experimental for now and known to give bad results). - `COMPARE_BELTS_RESPONSES` for a differential belt resonance graph, useful for checking relative belt tensions and belt path behaviors on a CoreXY printer. - `AXES_SHAPER_CALIBRATION` for standard input shaper graphs, used to mitigate ringing/ghosting by tuning Klipper's input shaper filters. - `CREATE_VIBRATIONS_PROFILE` for vibrations graphs as a function of toolhead direction and speed, used to find problematic ranges where the printer could be exposed to more VFAs and optimize your slicer speed profiles and TMC driver parameters. - - `EXCITATE_AXIS_AT_FREQ` to maintain a specific excitation frequency, useful to inspect and find out what is resonating. For further insights on the usage of these macros and the generated graphs, refer to the [K-Shake&Tune module documentation](./docs/README.md). diff --git a/shaketune/dummy_macros.cfg b/shaketune/dummy_macros.cfg new file mode 100644 index 0000000..40607de --- /dev/null +++ b/shaketune/dummy_macros.cfg @@ -0,0 +1,67 @@ +# This file contains dummy gcode macros to inject them at Klipper startup +# by the Shake&Tune plugin in order to make them available in the UI. +# Indeed, system macros in Klipper are not available as buttons in Mainsail/Fluidd +# and this is a workaround to have a good and friendly UX when using Shake&Tune. + + +[gcode_macro EXCITATE_AXIS_AT_FREQ] +description: dummy +gcode: + {% set dummy = params.FREQUENCY|default(25) %} + {% set dummy = params.DURATION|default(10) %} + {% set dummy = params.ACCEL_PER_HZ %} + {% set dummy = params.AXIS|default('x') %} + {% set dummy = params.TRAVEL_SPEED|default(120) %} + {% set dummy = params.Z_HEIGHT %} + _EXCITATE_AXIS_AT_FREQ {rawparams} + + +[gcode_macro AXES_MAP_CALIBRATION] +description: dummy +gcode: + {% set dummy = params.Z_HEIGHT|default(20) %} + {% set dummy = params.SPEED|default(80) %} + {% set dummy = params.ACCEL|default(1500) %} + {% set dummy = params.TRAVEL_SPEED|default(120) %} + {% set dummy = params.ACCEL_CHIP %} + _AXES_MAP_CALIBRATION {rawparams} + + +[gcode_macro COMPARE_BELTS_RESPONSES] +description: dummy +gcode: + {% set dummy = params.FREQ_START|default(5) %} + {% set dummy = params.FREQ_END|default(133.33) %} + {% set dummy = params.HZ_PER_SEC|default(1) %} + {% set dummy = params.ACCEL_PER_HZ %} + {% set dummy = params.TRAVEL_SPEED|default(120) %} + {% set dummy = params.Z_HEIGHT %} + _COMPARE_BELTS_RESPONSES {rawparams} + + +[gcode_macro AXES_SHAPER_CALIBRATION] +description: dummy +gcode: + {% set dummy = params.FREQ_START|default(5) %} + {% set dummy = params.FREQ_END|default(133.33) %} + {% set dummy = params.HZ_PER_SEC|default(1) %} + {% set dummy = params.ACCEL_PER_HZ %} + {% set dummy = params.AXIS|default('all') %} + {% set dummy = params.SCV %} + {% set dummy = params.MAX_SMOOTHING %} + {% set dummy = params.TRAVEL_SPEED|default(120) %} + {% set dummy = params.Z_HEIGHT %} + _AXES_SHAPER_CALIBRATION {rawparams} + + +[gcode_macro CREATE_VIBRATIONS_PROFILE] +description: dummy +gcode: + {% set dummy = params.SIZE|default(100) %} + {% set dummy = params.Z_HEIGHT|default(20) %} + {% set dummy = params.MAX_SPEED|default(200) %} + {% set dummy = params.SPEED_INCREMENT|default(2) %} + {% set dummy = params.ACCEL|default(3000) %} + {% set dummy = params.TRAVEL_SPEED|default(120) %} + {% set dummy = params.ACCEL_CHIP %} + _CREATE_VIBRATIONS_PROFILE {rawparams} diff --git a/shaketune/measurement/macros.cfg b/shaketune/measurement/macros.cfg deleted file mode 100644 index c34a9d9..0000000 --- a/shaketune/measurement/macros.cfg +++ /dev/null @@ -1,8 +0,0 @@ - -# [gcode_macro AXES_MAP_CALIBRATION] -# gcode: -# {% set z_height = params.Z_HEIGHT|default(20)|int %} # z height to put the toolhead before starting the movements -# {% set speed = params.SPEED|default(80)|float * 60 %} # feedrate for the movements -# {% set accel = params.ACCEL|default(1500)|int %} # accel value used to move on the pattern -# {% set feedrate_travel = params.TRAVEL_SPEED|default(120)|int * 60 %} # travel feedrate between moves -# {% set accel_chip = params.ACCEL_CHIP|default("adxl345") %} # ADXL chip name in the config diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index f7d058b..ec7ea50 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 +import os from pathlib import Path from .helpers.console_output import ConsoleOutput @@ -24,81 +25,77 @@ class ShakeTune: res_tester = self._printer.lookup_object('resonance_tester') if res_tester is None: - config.error('No [resonance_tester] config section found in printer.cfg! Please add one to use Shake&Tune') + config.error('No [resonance_tester] config section found in printer.cfg! Please add one to use Shake&Tune.') self.timeout = config.getfloat('timeout', 2.0, above=0.0) - - result_folder = config.get('result_folder', default='~/printer_data/config/K-ShakeTune_results') + result_folder = config.get('result_folder', default='~/printer_data/config/ShakeTune_results') result_folder_path = Path(result_folder).expanduser() if result_folder else None keep_n_results = config.getint('number_of_results_to_keep', default=3, minval=0) keep_csv = config.getboolean('keep_raw_csv', default=False) + show_macros = config.getboolean('show_macros_in_webui', default=True) dpi = config.getint('dpi', default=150, minval=100, maxval=500) self._config = ShakeTuneConfig(result_folder_path, keep_n_results, keep_csv, dpi) ConsoleOutput.register_output_callback(gcode.respond_info) - gcode.register_command( - 'EXCITATE_AXIS_AT_FREQ', - self.cmd_EXCITATE_AXIS_AT_FREQ, - desc=self.cmd_EXCITATE_AXIS_AT_FREQ_help, - ) - gcode.register_command( - 'AXES_MAP_CALIBRATION', - self.cmd_AXES_MAP_CALIBRATION, - desc=self.cmd_AXES_MAP_CALIBRATION_help, - ) - gcode.register_command( - 'COMPARE_BELTS_RESPONSES', - self.cmd_COMPARE_BELTS_RESPONSES, - desc=self.cmd_COMPARE_BELTS_RESPONSES_help, - ) - gcode.register_command( - 'AXES_SHAPER_CALIBRATION', - self.cmd_AXES_SHAPER_CALIBRATION, - desc=self.cmd_AXES_SHAPER_CALIBRATION_help, - ) - gcode.register_command( - 'CREATE_VIBRATIONS_PROFILE', - self.cmd_CREATE_VIBRATIONS_PROFILE, - desc=self.cmd_CREATE_VIBRATIONS_PROFILE_help, - ) + commands = [ + ('EXCITATE_AXIS_AT_FREQ', self.cmd_EXCITATE_AXIS_AT_FREQ, 'Maintain a specified excitation frequency for a period of time to diagnose and locate a source of vibration'), + ('AXES_MAP_CALIBRATION', self.cmd_AXES_MAP_CALIBRATION, 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer'), + ('COMPARE_BELTS_RESPONSES', self.cmd_COMPARE_BELTS_RESPONSES, 'Perform a custom half-axis test to analyze and compare the frequency profiles of individual belts on CoreXY printers'), + ('AXES_SHAPER_CALIBRATION', self.cmd_AXES_SHAPER_CALIBRATION, 'Perform standard axis input shaper tests on one or both XY axes to select the best input shaper filter'), + ('CREATE_VIBRATIONS_PROFILE', self.cmd_CREATE_VIBRATIONS_PROFILE, 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer') + ] + command_descriptions = {name: desc for name, _, desc in commands} + + for name, command, description in commands: + gcode.register_command( + f'_{name}' if show_macros else name, + command, + desc=description + ) + + # Load the dummy macros with their description in order to show them in the web interfaces + if show_macros: + pconfig = self._printer.lookup_object('configfile') + dirname = os.path.dirname(os.path.realpath(__file__)) + filename = os.path.join(dirname, 'dummy_macros.cfg') + try: + dummy_macros = pconfig.read_config(filename) + except Exception as err: + raise config.error("Cannot load Shake&Tune dummy macro '%s'" % (filename,)) from err + for macro in dummy_macros.get_prefix_sections(''): + section = macro.get_name() + command = section.split(' ', 1)[1] + if command in command_descriptions: + description = command_descriptions[command] + else: + description = 'Shake&Tune macro' + macro.fileconfig._sections[section]['description'] = description + self._printer.load_object(dummy_macros, section) - cmd_EXCITATE_AXIS_AT_FREQ_help = ( - 'Maintain a specified excitation frequency for a period of time to diagnose and locate a source of vibration' - ) def cmd_EXCITATE_AXIS_AT_FREQ(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') excitate_axis_at_freq(gcmd, self._pconfig) - cmd_AXES_MAP_CALIBRATION_help = 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer' - def cmd_AXES_MAP_CALIBRATION(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') axes_map_finder = AxesMapFinder(self._config) st_thread = ShakeTuneThread(self._config, axes_map_finder, self._printer.get_reactor(), self.timeout) axes_map_calibration(gcmd, self._pconfig, st_thread) - cmd_COMPARE_BELTS_RESPONSES_help = 'Perform a custom half-axis test to analyze and compare the frequency profiles of individual belts on CoreXY printers' - def cmd_COMPARE_BELTS_RESPONSES(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') belt_graph_creator = BeltsGraphCreator(self._config) st_thread = ShakeTuneThread(self._config, belt_graph_creator, self._printer.get_reactor(), self.timeout) compare_belts_responses(gcmd, self._pconfig, st_thread) - cmd_AXES_SHAPER_CALIBRATION_help = ( - 'Perform standard axis input shaper tests on one or both XY axes to select the best input shaper filter' - ) - def cmd_AXES_SHAPER_CALIBRATION(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') shaper_graph_creator = ShaperGraphCreator(self._config) st_thread = ShakeTuneThread(self._config, shaper_graph_creator, self._printer.get_reactor(), self.timeout) axes_shaper_calibration(gcmd, self._pconfig, st_thread) - cmd_CREATE_VIBRATIONS_PROFILE_help = 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer' - def cmd_CREATE_VIBRATIONS_PROFILE(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') vibration_profile_creator = VibrationsGraphCreator(self._config) From 8117e604c5d867fb59cc9207120c0c52dc2e8e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Wed, 22 May 2024 23:23:56 +0200 Subject: [PATCH 25/50] fixed macros injection into Klipper objects --- shaketune/shaketune.py | 67 +++++++++++++++++++++++++++++------------- 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index ec7ea50..783a899 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -39,20 +39,36 @@ class ShakeTune: ConsoleOutput.register_output_callback(gcode.respond_info) commands = [ - ('EXCITATE_AXIS_AT_FREQ', self.cmd_EXCITATE_AXIS_AT_FREQ, 'Maintain a specified excitation frequency for a period of time to diagnose and locate a source of vibration'), - ('AXES_MAP_CALIBRATION', self.cmd_AXES_MAP_CALIBRATION, 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer'), - ('COMPARE_BELTS_RESPONSES', self.cmd_COMPARE_BELTS_RESPONSES, 'Perform a custom half-axis test to analyze and compare the frequency profiles of individual belts on CoreXY printers'), - ('AXES_SHAPER_CALIBRATION', self.cmd_AXES_SHAPER_CALIBRATION, 'Perform standard axis input shaper tests on one or both XY axes to select the best input shaper filter'), - ('CREATE_VIBRATIONS_PROFILE', self.cmd_CREATE_VIBRATIONS_PROFILE, 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer') + ( + 'EXCITATE_AXIS_AT_FREQ', + self.cmd_EXCITATE_AXIS_AT_FREQ, + 'Maintain a specified excitation frequency for a period of time to diagnose and locate a source of vibration', + ), + ( + 'AXES_MAP_CALIBRATION', + self.cmd_AXES_MAP_CALIBRATION, + 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer', + ), + ( + 'COMPARE_BELTS_RESPONSES', + self.cmd_COMPARE_BELTS_RESPONSES, + 'Perform a custom half-axis test to analyze and compare the frequency profiles of individual belts on CoreXY printers', + ), + ( + 'AXES_SHAPER_CALIBRATION', + self.cmd_AXES_SHAPER_CALIBRATION, + 'Perform standard axis input shaper tests on one or both XY axes to select the best input shaper filter', + ), + ( + 'CREATE_VIBRATIONS_PROFILE', + self.cmd_CREATE_VIBRATIONS_PROFILE, + 'Perform a set of movements to measure the orientation of the accelerometer and help you set the best axes_map configuration for your printer', + ), ] command_descriptions = {name: desc for name, _, desc in commands} for name, command, description in commands: - gcode.register_command( - f'_{name}' if show_macros else name, - command, - desc=description - ) + gcode.register_command(f'_{name}' if show_macros else name, command, desc=description) # Load the dummy macros with their description in order to show them in the web interfaces if show_macros: @@ -60,19 +76,30 @@ class ShakeTune: dirname = os.path.dirname(os.path.realpath(__file__)) filename = os.path.join(dirname, 'dummy_macros.cfg') try: - dummy_macros = pconfig.read_config(filename) + dummy_macros_cfg = pconfig.read_config(filename) except Exception as err: raise config.error("Cannot load Shake&Tune dummy macro '%s'" % (filename,)) from err - for macro in dummy_macros.get_prefix_sections(''): - section = macro.get_name() - command = section.split(' ', 1)[1] - if command in command_descriptions: - description = command_descriptions[command] - else: - description = 'Shake&Tune macro' - macro.fileconfig._sections[section]['description'] = description - self._printer.load_object(dummy_macros, section) + for gcode_macro in dummy_macros_cfg.get_prefix_sections('gcode_macro '): + gcode_macro_name = gcode_macro.get_name() + + # Replace the dummy description by the one here (to avoid code duplication and define it in only one place) + command = gcode_macro_name.split(' ', 1)[1] + description = command_descriptions.get(command, 'Shake&Tune macro') + gcode_macro.fileconfig.set(gcode_macro_name, 'description', description) + + # Add the section to the Klipper configuration object with all its options + if not config.fileconfig.has_section(gcode_macro_name.lower()): + config.fileconfig.add_section(gcode_macro_name.lower()) + for option in gcode_macro.fileconfig.options(gcode_macro_name): + value = gcode_macro.fileconfig.get(gcode_macro_name, option) + config.fileconfig.set(gcode_macro_name.lower(), option, value) + + # Small trick to ensure the new injected sections are considered valid by Klipper config system + config.access_tracking[(gcode_macro_name.lower(), option.lower())] = 1 + + # Finally, load the section within the printer objects + self._printer.load_object(config, gcode_macro_name.lower()) def cmd_EXCITATE_AXIS_AT_FREQ(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') From 150a8ee03044685d8e975f062f1225ea9910ef7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Thu, 23 May 2024 22:46:43 +0200 Subject: [PATCH 26/50] added CoreXZ support for the belt comparison tool --- shaketune/helpers/common_func.py | 2 ++ shaketune/measurement/belts_comparison.py | 33 ++++++++++++++--------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/shaketune/helpers/common_func.py b/shaketune/helpers/common_func.py index 106a174..b56704c 100644 --- a/shaketune/helpers/common_func.py +++ b/shaketune/helpers/common_func.py @@ -20,6 +20,8 @@ AXIS_CONFIG = [ {'axis': 'y', 'direction': (0, 1, 0), 'label': 'axis_Y'}, {'axis': 'a', 'direction': (1, -1, 0), 'label': 'belt_A'}, {'axis': 'b', 'direction': (1, 1, 0), 'label': 'belt_B'}, + {'axis': 'corexz_x', 'direction': (1, 0, 1), 'label': 'belt_X'}, + {'axis': 'corexz_z', 'direction': (-1, 0, 1), 'label': 'belt_Z'}, ] diff --git a/shaketune/measurement/belts_comparison.py b/shaketune/measurement/belts_comparison.py index 5b9bcb1..3c196fc 100644 --- a/shaketune/measurement/belts_comparison.py +++ b/shaketune/measurement/belts_comparison.py @@ -23,17 +23,32 @@ def compare_belts_responses(gcmd, config, st_thread: ShakeTuneThread) -> None: res_tester = printer.lookup_object('resonance_tester') systime = printer.get_reactor().monotonic() - accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy') + if accel_per_hz is None: + accel_per_hz = res_tester.test.accel_per_hz + max_accel = max_freq * accel_per_hz + + # Configure the graph creator + motors_config_parser = MotorsConfigParser(config, motors=None) + creator = st_thread.get_graph_creator() + creator.configure(motors_config_parser.kinematics, accel_per_hz) + + if motors_config_parser.kinematics == 'corexy': + filtered_config = [a for a in AXIS_CONFIG if a['axis'] in ('a', 'b')] + accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy') + elif motors_config_parser.kinematics == 'corexz': + filtered_config = [a for a in AXIS_CONFIG if a['axis'] in ('corexz_x', 'corexz_z')] + # For CoreXZ kinematics, we can use the X axis accelerometer as most of the time they are moving bed printers + accel_chip = Accelerometer.find_axis_accelerometer(printer, 'x') + else: + gcmd.error('Only CoreXY and CoreXZ kinematics are supported for the belt comparison tool!') + ConsoleOutput.print(f'{motors_config_parser.kinematics.upper()} kinematics mode') + if accel_chip is None: gcmd.error( 'No suitable accelerometer found for measurement! Multi-accelerometer configurations are not supported for this macro.' ) accelerometer = Accelerometer(printer.lookup_object(accel_chip)) - if accel_per_hz is None: - accel_per_hz = res_tester.test.accel_per_hz - max_accel = max_freq * accel_per_hz - # Move to the starting point test_points = res_tester.test.get_start_test_points() if len(test_points) > 1: @@ -58,11 +73,6 @@ def compare_belts_responses(gcmd, config, st_thread: ShakeTuneThread) -> None: toolhead.manual_move(point, feedrate_travel) toolhead.dwell(0.5) - # Configure the graph creator - motors_config_parser = MotorsConfigParser(config, motors=None) - creator = st_thread.get_graph_creator() - creator.configure(motors_config_parser.kinematics, accel_per_hz) - # set the needed acceleration values for the test toolhead_info = toolhead.get_status(systime) old_accel = toolhead_info['max_accel'] @@ -76,8 +86,7 @@ def compare_belts_responses(gcmd, config, st_thread: ShakeTuneThread) -> None: else: input_shaper = None - # Filter axis configurations to get the A and B axis only - filtered_config = [a for a in AXIS_CONFIG if a['axis'] in ('a', 'b')] + # Run the test for each axis for config in filtered_config: accelerometer.start_measurement() vibrate_axis(toolhead, gcode, config['direction'], min_freq, max_freq, hz_per_sec, accel_per_hz) From 339e8a6d7cd2a0d3c6e3b0ea4d7d681014a3b399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Thu, 23 May 2024 23:07:52 +0200 Subject: [PATCH 27/50] fixed belt similarity and MHI for corexz printers --- shaketune/post_processing/graph_belts.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/shaketune/post_processing/graph_belts.py b/shaketune/post_processing/graph_belts.py index 94a04e2..0f2ac61 100644 --- a/shaketune/post_processing/graph_belts.py +++ b/shaketune/post_processing/graph_belts.py @@ -22,7 +22,9 @@ matplotlib.use('Agg') from ..helpers.common_func import detect_peaks, parse_log, setup_klipper_import from ..helpers.console_output import ConsoleOutput -ALPHABET = 'αβγδεζηθικλμνξοπρστυφχψω' # For paired peak names (using the Greek alphabet to avoid confusion with belt names) +ALPHABET = ( + 'αβγδεζηθικλμνξοπρστυφχψω' # For paired peak names (using the Greek alphabet to avoid confusion with belt names) +) PEAKS_DETECTION_THRESHOLD = 0.1 # Threshold to detect peaks in the PSD signal (10% of max) DC_MAX_PEAKS = 2 # Maximum ideal number of peaks @@ -503,7 +505,7 @@ def belts_calibration( # We add the estimated similarity and the MHI value to the title only if the kinematics is CoreXY # as it make no sense to compute these values for other kinematics that doesn't have paired belts - if kinematics == 'corexy': + if kinematics in ['corexy', 'corexz']: title_line3 = f'| Estimated similarity: {similarity_factor:.1f}%' title_line4 = f'| {mhi} (experimental)' fig.text(0.55, 0.985, title_line3, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) From 0e96b36703c7e2cf407905c1b6bfa7929997b53e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Fri, 24 May 2024 09:26:29 +0200 Subject: [PATCH 28/50] fixed CoreXZ kinematics in vibrations measurement tool --- shaketune/measurement/vibrations_profile.py | 2 +- shaketune/post_processing/graph_vibrations.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/shaketune/measurement/vibrations_profile.py b/shaketune/measurement/vibrations_profile.py index 31e748d..1a6cd04 100644 --- a/shaketune/measurement/vibrations_profile.py +++ b/shaketune/measurement/vibrations_profile.py @@ -43,7 +43,7 @@ def create_vibrations_profile(gcmd, config, st_thread: ShakeTuneThread) -> None: main_angles = [45, 135] else: gcmd.error( - 'Only Cartesian and CoreXY kinematics are supported at the moment for the vibrations measurement tool!' + 'Only Cartesian, CoreXY and CoreXZ kinematics are supported at the moment for the vibrations measurement tool!' ) ConsoleOutput.print(f'{motors_config_parser.kinematics.upper()} kinematics mode') diff --git a/shaketune/post_processing/graph_vibrations.py b/shaketune/post_processing/graph_vibrations.py index 48c32a9..156d5dd 100644 --- a/shaketune/post_processing/graph_vibrations.py +++ b/shaketune/post_processing/graph_vibrations.py @@ -637,12 +637,12 @@ def vibrations_profile( global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) - if kinematics == 'cartesian': + if kinematics == 'cartesian' or kinematics == 'corexz': main_angles = [0, 90] elif kinematics == 'corexy': main_angles = [45, 135] else: - raise ValueError('Only Cartesian and CoreXY kinematics are supported by this tool at the moment!') + raise ValueError('Only Cartesian, CoreXY and CoreXZ kinematics are supported by this tool at the moment!') psds = defaultdict(lambda: defaultdict(list)) psds_sum = defaultdict(lambda: defaultdict(list)) @@ -830,8 +830,8 @@ def main(): opts.error('No CSV file(s) to analyse') if options.output is None: opts.error('You must specify an output file.png to use the script (option -o)') - if options.kinematics not in ['cartesian', 'corexy']: - opts.error('Only cartesian and corexy kinematics are supported by this tool at the moment!') + if options.kinematics not in ['cartesian', 'corexy', 'corexz']: + opts.error('Only cartesian, corexy and corexz kinematics are supported by this tool at the moment!') fig = vibrations_profile(args, options.klipperdir, options.kinematics, options.accel, options.max_freq) fig.savefig(options.output, dpi=150) From ee9d9f994a3ff2eb0d86da0342dfc999f0ee7819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Fri, 24 May 2024 14:49:27 +0200 Subject: [PATCH 29/50] fixed S&T thread and potential timer too close errors --- README.md | 2 ++ shaketune/measurement/axes_input_shaper.py | 5 ++-- shaketune/shaketune.py | 10 +++---- shaketune/shaketune_thread.py | 35 ++++++++++++++-------- 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index a153c96..790b6ed 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,8 @@ Follow these steps to install the Shake&Tune module in your printer: # show_macros_in_webui: True # Mainsail and Fluidd doesn't create buttons for "system" macros that are not in the # printer.cfg file. If you want to see the macros in the webui, set this to True. + # timeout: 300 + # The maximum time in seconds to let Shake&Tune process the CSV files and generate the graphs. ``` ## Usage diff --git a/shaketune/measurement/axes_input_shaper.py b/shaketune/measurement/axes_input_shaper.py index f10fa63..14ac2b4 100644 --- a/shaketune/measurement/axes_input_shaper.py +++ b/shaketune/measurement/axes_input_shaper.py @@ -84,9 +84,7 @@ def axes_shaper_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: # First we need to find the accelerometer chip suited for the axis accel_chip = Accelerometer.find_axis_accelerometer(printer, config['axis']) if accel_chip is None: - gcmd.error( - 'No suitable accelerometer found for measurement! Multi-accelerometer configurations are not supported for this macro.' - ) + gcmd.error('No suitable accelerometer found for measurement!') accelerometer = Accelerometer(printer.lookup_object(accel_chip)) # Then do the actual measurements @@ -98,6 +96,7 @@ def axes_shaper_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: ConsoleOutput.print(f'{config["axis"].upper()} axis frequency profile generation...') ConsoleOutput.print('This may take some time (1-3min)') st_thread.run() + st_thread.wait_for_completion() # Re-enable the input shaper if it was active if input_shaper is not None: diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index 783a899..4be0955 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -27,7 +27,7 @@ class ShakeTune: if res_tester is None: config.error('No [resonance_tester] config section found in printer.cfg! Please add one to use Shake&Tune.') - self.timeout = config.getfloat('timeout', 2.0, above=0.0) + self.timeout = config.getfloat('timeout', 300, above=0.0) result_folder = config.get('result_folder', default='~/printer_data/config/ShakeTune_results') result_folder_path = Path(result_folder).expanduser() if result_folder else None keep_n_results = config.getint('number_of_results_to_keep', default=3, minval=0) @@ -108,23 +108,23 @@ class ShakeTune: def cmd_AXES_MAP_CALIBRATION(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') axes_map_finder = AxesMapFinder(self._config) - st_thread = ShakeTuneThread(self._config, axes_map_finder, self._printer.get_reactor(), self.timeout) + st_thread = ShakeTuneThread(self._config, axes_map_finder, self.timeout) axes_map_calibration(gcmd, self._pconfig, st_thread) def cmd_COMPARE_BELTS_RESPONSES(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') belt_graph_creator = BeltsGraphCreator(self._config) - st_thread = ShakeTuneThread(self._config, belt_graph_creator, self._printer.get_reactor(), self.timeout) + st_thread = ShakeTuneThread(self._config, belt_graph_creator, self.timeout) compare_belts_responses(gcmd, self._pconfig, st_thread) def cmd_AXES_SHAPER_CALIBRATION(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') shaper_graph_creator = ShaperGraphCreator(self._config) - st_thread = ShakeTuneThread(self._config, shaper_graph_creator, self._printer.get_reactor(), self.timeout) + st_thread = ShakeTuneThread(self._config, shaper_graph_creator, self.timeout) axes_shaper_calibration(gcmd, self._pconfig, st_thread) def cmd_CREATE_VIBRATIONS_PROFILE(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') vibration_profile_creator = VibrationsGraphCreator(self._config) - st_thread = ShakeTuneThread(self._config, vibration_profile_creator, self._printer.get_reactor(), self.timeout) + st_thread = ShakeTuneThread(self._config, vibration_profile_creator, self.timeout) create_vibrations_profile(gcmd, self._pconfig, st_thread) diff --git a/shaketune/shaketune_thread.py b/shaketune/shaketune_thread.py index 4cd0bd1..1993f1a 100644 --- a/shaketune/shaketune_thread.py +++ b/shaketune/shaketune_thread.py @@ -4,6 +4,7 @@ import os import threading import traceback +from typing import Optional from .helpers import filemanager as fm from .helpers.console_output import ConsoleOutput @@ -11,33 +12,41 @@ from .shaketune_config import ShakeTuneConfig class ShakeTuneThread(threading.Thread): - def __init__(self, config: ShakeTuneConfig, graph_creator, reactor, timeout: float): + def __init__(self, config: ShakeTuneConfig, graph_creator, timeout: Optional[float] = None) -> None: super(ShakeTuneThread, self).__init__() self._config = config self.graph_creator = graph_creator - self._reactor = reactor self._timeout = timeout + self._internal_thread = None + self._stop_event = threading.Event() + def get_graph_creator(self): return self.graph_creator def run(self) -> None: # Start the target function in a new thread - internal_thread = threading.Thread(target=self._shaketune_thread, args=(self.graph_creator,)) - internal_thread.start() + self._internal_thread = threading.Thread(target=self._shaketune_thread, args=(self.graph_creator,)) + self._internal_thread.start() - # Monitor the thread execution and stop it if it takes too long - event_time = self._reactor.monotonic() - end_time = event_time + self._timeout - while event_time < end_time: - event_time = self._reactor.pause(event_time + 0.05) - if not internal_thread.is_alive(): - break + # If a timeout is specified, start a timer thread to monitor the timeout + if self._timeout is not None: + timer_thread = threading.Timer(self._timeout, self._handle_timeout) + timer_thread.start() - # This function run in its own thread is used to do the CSV analysis and create the graphs + def _handle_timeout(self) -> None: + if self._internal_thread.is_alive(): + self._stop_event.set() + ConsoleOutput.print('Timeout: Shake&Tune computation did not finish within the specified timeout!') + + def wait_for_completion(self) -> None: + if self._internal_thread is not None: + self._internal_thread.join() + + # This function run in a thread is used to do the CSV analysis and create the graphs def _shaketune_thread(self, graph_creator) -> None: # Trying to reduce the Shake&Tune prost-processing thread priority to avoid slowing down the main Klipper process - # as this could lead to random "Timer" errors when already running CANbus, etc... + # as this could lead to random "Timer too close" errors when already running CANbus, etc... try: os.nice(20) except Exception: From e680a7ee6bd64af06bf0637c8ed045d1aaf7b639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Fri, 24 May 2024 16:08:25 +0200 Subject: [PATCH 30/50] fix corexz vibration tool error --- shaketune/post_processing/graph_vibrations.py | 2 +- shaketune/shaketune_thread.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/shaketune/post_processing/graph_vibrations.py b/shaketune/post_processing/graph_vibrations.py index 156d5dd..55009de 100644 --- a/shaketune/post_processing/graph_vibrations.py +++ b/shaketune/post_processing/graph_vibrations.py @@ -125,7 +125,7 @@ def compute_dir_speed_spectrogram(measured_speeds, data, kinematics='cartesian', # Compute the spectrum vibrations for each angle and speed combination for target_angle_idx, (cos_val, sin_val) in enumerate(zip(cos_vals, sin_vals)): for target_speed_idx, target_speed in enumerate(spectrum_speeds): - if kinematics == 'cartesian': + if kinematics == 'cartesian' or kinematics == 'corexz': speed_1 = np.abs(target_speed * cos_val) speed_2 = np.abs(target_speed * sin_val) elif kinematics == 'corexy': diff --git a/shaketune/shaketune_thread.py b/shaketune/shaketune_thread.py index 1993f1a..a34bc2d 100644 --- a/shaketune/shaketune_thread.py +++ b/shaketune/shaketune_thread.py @@ -45,7 +45,7 @@ class ShakeTuneThread(threading.Thread): # This function run in a thread is used to do the CSV analysis and create the graphs def _shaketune_thread(self, graph_creator) -> None: - # Trying to reduce the Shake&Tune prost-processing thread priority to avoid slowing down the main Klipper process + # Trying to reduce the Shake&Tune post-processing thread priority to avoid slowing down the main Klipper process # as this could lead to random "Timer too close" errors when already running CANbus, etc... try: os.nice(20) From d15e06b0c88130897134f3a94f2e1b3505135a58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Fri, 24 May 2024 20:18:41 +0200 Subject: [PATCH 31/50] improved automatic accelerometer choice and removed filemanager.py --- docs/README.md | 1 - shaketune/helpers/filemanager.py | 38 --------------------- shaketune/measurement/axes_map.py | 13 +++---- shaketune/measurement/vibrations_profile.py | 21 +++++------- shaketune/post_processing/graph_creator.py | 2 -- shaketune/shaketune_thread.py | 5 +-- 6 files changed, 17 insertions(+), 63 deletions(-) delete mode 100644 shaketune/helpers/filemanager.py diff --git a/docs/README.md b/docs/README.md index 3e45ec6..406b783 100644 --- a/docs/README.md +++ b/docs/README.md @@ -89,7 +89,6 @@ Here are the parameters available when calling this macro: |SPEED|80|speed of the toolhead in mm/s for the movements| |ACCEL|1500 (or max printer accel)|accel in mm/s^2 used for all the moves| |TRAVEL_SPEED|120|speed in mm/s used for all the travels moves| -|ACCEL_CHIP|None|accelerometer to use for the test. If unset, it will automatically select the proper accelerometer based on what is configured in your `[resonance_tester]` config section| The machine will move slightly in +X, +Y, and +Z, and output in the console: `Detected axes_map: -z,y,x`. diff --git a/shaketune/helpers/filemanager.py b/shaketune/helpers/filemanager.py deleted file mode 100644 index 9ac2d75..0000000 --- a/shaketune/helpers/filemanager.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 - -# Common file management functions for the Shake&Tune package -# Written by Frix_x#0161 # - -import os -import time -from pathlib import Path - - -def wait_file_ready(filepath: Path, timeout: int = 60) -> None: - file_busy = True - loop_count = 0 - - while file_busy: - if loop_count >= timeout: - raise TimeoutError(f'Klipper is taking too long to release the CSV file ({filepath})!') - - # Try to open the file in write-only mode to check if it is in use - # If we successfully open and close the file, it is not in use - try: - fd = os.open(filepath, os.O_WRONLY) - os.close(fd) - file_busy = False - except OSError: - # If OSError is caught, it indicates the file is still being used - pass - except Exception: - # If another exception is raised, it's not a problem, we just loop again - pass - - loop_count += 1 - time.sleep(1) - - -def ensure_folders_exist(folders: list[Path]) -> None: - for folder in folders: - folder.mkdir(parents=True, exist_ok=True) diff --git a/shaketune/measurement/axes_map.py b/shaketune/measurement/axes_map.py index c386976..d3002f0 100644 --- a/shaketune/measurement/axes_map.py +++ b/shaketune/measurement/axes_map.py @@ -11,20 +11,17 @@ def axes_map_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: speed = gcmd.get_float('SPEED', default=80.0, minval=20.0) accel = gcmd.get_int('ACCEL', default=1500, minval=100) feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) - accel_chip = gcmd.get('ACCEL_CHIP', default=None) printer = config.get_printer() gcode = printer.lookup_object('gcode') toolhead = printer.lookup_object('toolhead') systime = printer.get_reactor().monotonic() - if accel_chip is None: - accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy') - if accel_chip is None: - gcmd.error( - 'No accelerometer specified for measurement! Multi-accelerometer configurations are not supported for this macro.' - ) - accelerometer = Accelerometer(printer.lookup_object(accel_chip)) + accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy') + k_accelerometer = printer.lookup_object(accel_chip, None) + if k_accelerometer is None: + gcmd.error('Error: multi-accelerometer configurations are not supported for this macro!') + accelerometer = Accelerometer(k_accelerometer) toolhead_info = toolhead.get_status(systime) old_accel = toolhead_info['max_accel'] diff --git a/shaketune/measurement/vibrations_profile.py b/shaketune/measurement/vibrations_profile.py index 1a6cd04..6f7a846 100644 --- a/shaketune/measurement/vibrations_profile.py +++ b/shaketune/measurement/vibrations_profile.py @@ -70,20 +70,17 @@ def create_vibrations_profile(gcmd, config, st_thread: ShakeTuneThread) -> None: ConsoleOutput.print(f'-> Measuring angle: {curr_angle} degrees...') radian_angle = math.radians(curr_angle) - # Find the best accelerometer chip for the current angle if not specified - if curr_angle == 0: - accel_axis = 'x' - elif curr_angle == 90: - accel_axis = 'y' - else: - accel_axis = 'xy' + # Map angles to accelerometer axes and default to 'xy' if angle is not 0 or 90 degrees + # and then find the best accelerometer chip for the current angle if not manually specified + angle_to_axis = {0: 'x', 90: 'y'} + accel_axis = angle_to_axis.get(curr_angle, 'xy') if accel_chip is None: accel_chip = Accelerometer.find_axis_accelerometer(printer, accel_axis) - if accel_chip is None: - gcmd.error( - 'No accelerometer specified for measurement! Multi-accelerometer configurations are not supported for this macro.' - ) - accelerometer = Accelerometer(printer.lookup_object(accel_chip)) + k_accelerometer = printer.lookup_object(accel_chip, None) + if k_accelerometer is None: + gcmd.error(f'Error: accelerometer "{accel_chip}" not found!') + accelerometer = Accelerometer(k_accelerometer) + ConsoleOutput.print(f'Accelerometer chip for {curr_angle} degree angle: {accel_chip}') # Sweep the speed range to record the vibrations at different speeds for curr_speed_sample in range(nb_speed_samples): diff --git a/shaketune/post_processing/graph_creator.py b/shaketune/post_processing/graph_creator.py index b937055..905e6a1 100644 --- a/shaketune/post_processing/graph_creator.py +++ b/shaketune/post_processing/graph_creator.py @@ -10,7 +10,6 @@ from typing import Callable, Optional from matplotlib.figure import Figure -from ..helpers import filemanager as fm from ..helpers.console_output import ConsoleOutput from ..measurement.motorsconfigparser import MotorsConfigParser from ..shaketune_config import ShakeTuneConfig @@ -53,7 +52,6 @@ class GraphCreator(abc.ABC): lognames = [] for filename in sorted(globbed_files, key=lambda f: f.stat().st_mtime, reverse=True)[:min_files_required]: - fm.wait_file_ready(filename) custom_name = custom_name_func(filename) if custom_name_func else filename.name new_file = self._folder / f'{self._type}_{self._graph_date}_{custom_name}.csv' # shutil.move() is needed to move the file across filesystems (mainly for BTT CB1 Pi default OS image) diff --git a/shaketune/shaketune_thread.py b/shaketune/shaketune_thread.py index a34bc2d..3b2de5d 100644 --- a/shaketune/shaketune_thread.py +++ b/shaketune/shaketune_thread.py @@ -6,7 +6,6 @@ import threading import traceback from typing import Optional -from .helpers import filemanager as fm from .helpers.console_output import ConsoleOutput from .shaketune_config import ShakeTuneConfig @@ -52,7 +51,9 @@ class ShakeTuneThread(threading.Thread): except Exception: ConsoleOutput.print('Warning: failed reducing Shake&Tune thread priority, continuing...') - fm.ensure_folders_exist(self._config.get_results_subfolders()) + # Ensure the output folders exist + for folder in self._config.get_results_subfolders(): + folder.mkdir(parents=True, exist_ok=True) try: graph_creator.create_graph() From b6ec4d0229f8384e053c783f7ffb6ff0eb74eebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Fri, 24 May 2024 21:17:58 +0200 Subject: [PATCH 32/50] fixed vibration accelermeter chip selection logic --- shaketune/measurement/vibrations_profile.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/shaketune/measurement/vibrations_profile.py b/shaketune/measurement/vibrations_profile.py index 6f7a846..fcf40ff 100644 --- a/shaketune/measurement/vibrations_profile.py +++ b/shaketune/measurement/vibrations_profile.py @@ -34,13 +34,10 @@ def create_vibrations_profile(gcmd, config, st_thread: ShakeTuneThread) -> None: gcmd.error('Input shaper is not configured! Please run the shaper calibration macro first.') motors_config_parser = MotorsConfigParser(config, motors=['stepper_x', 'stepper_y']) - if motors_config_parser.kinematics == 'cartesian' or motors_config_parser.kinematics == 'corexz': - # Cartesian motors are on X and Y axis directly, same for CoreXZ - main_angles = [0, 90] + main_angles = [0, 90] # Cartesian motors are on X and Y axis directly, same for CoreXZ elif motors_config_parser.kinematics == 'corexy': - # CoreXY motors are on A and B axis (45 and 135 degrees) - main_angles = [45, 135] + main_angles = [45, 135] # CoreXY motors are on A and B axis (45 and 135 degrees) else: gcmd.error( 'Only Cartesian, CoreXY and CoreXZ kinematics are supported at the moment for the vibrations measurement tool!' @@ -74,13 +71,14 @@ def create_vibrations_profile(gcmd, config, st_thread: ShakeTuneThread) -> None: # and then find the best accelerometer chip for the current angle if not manually specified angle_to_axis = {0: 'x', 90: 'y'} accel_axis = angle_to_axis.get(curr_angle, 'xy') - if accel_chip is None: - accel_chip = Accelerometer.find_axis_accelerometer(printer, accel_axis) - k_accelerometer = printer.lookup_object(accel_chip, None) + current_accel_chip = accel_chip # to retain the manually specified chip + if current_accel_chip is None: + current_accel_chip = Accelerometer.find_axis_accelerometer(printer, accel_axis) + k_accelerometer = printer.lookup_object(current_accel_chip, None) if k_accelerometer is None: - gcmd.error(f'Error: accelerometer "{accel_chip}" not found!') + gcmd.error(f'Error: accelerometer [{current_accel_chip}] not found!') accelerometer = Accelerometer(k_accelerometer) - ConsoleOutput.print(f'Accelerometer chip for {curr_angle} degree angle: {accel_chip}') + ConsoleOutput.print(f'Accelerometer chip used for this angle: [{current_accel_chip}]') # Sweep the speed range to record the vibrations at different speeds for curr_speed_sample in range(nb_speed_samples): From 1d3d22ef385fe15c0b0a409e7332f1c8de200c3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Fri, 24 May 2024 22:57:18 +0200 Subject: [PATCH 33/50] modified shaper recomendation to account for changes when injecting damping ratio --- shaketune/post_processing/graph_shaper.py | 91 +++++++++++++---------- 1 file changed, 51 insertions(+), 40 deletions(-) diff --git a/shaketune/post_processing/graph_shaper.py b/shaketune/post_processing/graph_shaper.py index c1f2be5..2ee1b5c 100644 --- a/shaketune/post_processing/graph_shaper.py +++ b/shaketune/post_processing/graph_shaper.py @@ -32,7 +32,7 @@ from ..helpers.console_output import ConsoleOutput PEAKS_DETECTION_THRESHOLD = 0.05 PEAKS_EFFECT_THRESHOLD = 0.12 SPECTROGRAM_LOW_PERCENTILE_FILTER = 5 -MAX_SMOOTHING = 0.1 +MAX_VIBRATIONS = 5.0 KLIPPAIN_COLORS = { 'purple': '#70088C', @@ -98,7 +98,7 @@ def calibrate_shaper(datas, max_smoothing, scv, max_freq): def plot_freq_response( - ax, calibration_data, shapers, performance_shaper, peaks, peaks_freqs, peaks_threshold, fr, zeta, max_freq + ax, calibration_data, shapers, klipper_shaper_choice, peaks, peaks_freqs, peaks_threshold, fr, zeta, max_freq ): freqs = calibration_data.freqs psd = calibration_data.psd_sum @@ -128,13 +128,7 @@ def plot_freq_response( ax2 = ax.twinx() ax2.yaxis.set_visible(False) - lowvib_shaper_vibrs = float('inf') - lowvib_shaper = None - lowvib_shaper_freq = None - lowvib_shaper_accel = 0 - # Draw the shappers curves and add their specific parameters in the legend - # This adds also a way to find the best shaper with a low level of vibrations (with a resonable level of smoothing) for shaper in shapers: shaper_max_accel = round(shaper.max_accel / 100.0) * 100.0 label = '%s (%.1f Hz, vibr=%.1f%%, sm~=%.2f, accel<=%.f)' % ( @@ -146,58 +140,75 @@ def plot_freq_response( ) ax2.plot(freqs, shaper.vals, label=label, linestyle='dotted') - # Get the performance shaper - if shaper.name == performance_shaper: - performance_shaper_freq = shaper.freq - performance_shaper_vibr = shaper.vibrs * 100.0 - performance_shaper_vals = shaper.vals + # Get the Klipper recommended shaper (usually it's a good low vibration compromise) + if shaper.name == klipper_shaper_choice: + klipper_shaper_freq = shaper.freq + klipper_shaper_vals = shaper.vals + klipper_shaper_accel = shaper_max_accel - # Get the low vibration shaper + # This adds also the two selected shapers with good performances or low level of vibrations + perf_shaper_vibrs = float('inf') + perf_shaper = None + perf_shaper_vals = None + perf_shaper_freq = None + perf_shaper_accel = 0 + for shaper in shapers: + shaper_max_accel = round(shaper.max_accel / 100.0) * 100.0 + # Get the a new performance filter that have higher accel than Klipper filter reco but still under 5% vibration + # as this looks to be reasonable when injecting the SCV and damping ratio in the computation... if ( - shaper.vibrs * 100 < lowvib_shaper_vibrs - or (shaper.vibrs * 100 == lowvib_shaper_vibrs and shaper_max_accel > lowvib_shaper_accel) - ) and shaper.smoothing < MAX_SMOOTHING: - lowvib_shaper_accel = shaper_max_accel - lowvib_shaper = shaper.name - lowvib_shaper_freq = shaper.freq - lowvib_shaper_vibrs = shaper.vibrs * 100 - lowvib_shaper_vals = shaper.vals + shaper_max_accel > klipper_shaper_accel + and shaper.vibrs * 100 < MAX_VIBRATIONS + and ( + shaper.vibrs * 100 < perf_shaper_vibrs + or (shaper.vibrs * 100 == perf_shaper_vibrs and shaper_max_accel > perf_shaper_accel) + ) + ): + perf_shaper_accel = shaper_max_accel + perf_shaper = shaper.name + perf_shaper_freq = shaper.freq + perf_shaper_vibrs = shaper.vibrs * 100 + perf_shaper_vals = shaper.vals - # User recommendations are added to the legend: one is Klipper's original suggestion that is usually good for performances - # and the other one is the custom "low vibration" recommendation that looks for a suitable shaper that doesn't have excessive - # smoothing and that have a lower vibration level. If both recommendation are the same shaper, or if no suitable "low - # vibration" shaper is found, then only a single line as the "best shaper" recommendation is added to the legend - if ( - lowvib_shaper is not None - and lowvib_shaper != performance_shaper - and lowvib_shaper_vibrs <= performance_shaper_vibr - ): + # User recommendations are added to the legend: one is Klipper's original suggestion that is usually good for low vibrations + # and the other one is the custom "performance" recommendation that looks for a suitable shaper that doesn't have excessive + # vibrations level but have higher accelerations. If both recommendation are the same shaper, or if no suitable "performance" + # shaper is found, then only a single line as the "best shaper" recommendation is added to the legend + if perf_shaper is not None and perf_shaper != klipper_shaper_choice and perf_shaper_accel >= klipper_shaper_accel: ax2.plot( [], [], ' ', - label='Recommended performance shaper: %s @ %.1f Hz' - % (performance_shaper.upper(), performance_shaper_freq), + label='Recommended performance shaper: %s @ %.1f Hz' % (perf_shaper.upper(), perf_shaper_freq), ) ax.plot( - freqs, psd * performance_shaper_vals, label='With %s applied' % (performance_shaper.upper()), color='cyan' + freqs, + psd * perf_shaper_vals, + label='With %s applied' % (perf_shaper.upper()), + color='cyan', ) ax2.plot( [], [], ' ', - label='Recommended low vibrations shaper: %s @ %.1f Hz' % (lowvib_shaper.upper(), lowvib_shaper_freq), + label='Recommended low vibrations shaper: %s @ %.1f Hz' + % (klipper_shaper_choice.upper(), klipper_shaper_freq), + ) + ax.plot( + freqs, psd * klipper_shaper_vals, label='With %s applied' % (klipper_shaper_choice.upper()), color='lime' ) - ax.plot(freqs, psd * lowvib_shaper_vals, label='With %s applied' % (lowvib_shaper.upper()), color='lime') else: ax2.plot( [], [], ' ', - label='Recommended best shaper: %s @ %.1f Hz' % (performance_shaper.upper(), performance_shaper_freq), + label='Recommended best shaper: %s @ %.1f Hz' % (klipper_shaper_choice.upper(), klipper_shaper_freq), ) ax.plot( - freqs, psd * performance_shaper_vals, label='With %s applied' % (performance_shaper.upper()), color='cyan' + freqs, + psd * klipper_shaper_vals, + label='With %s applied' % (klipper_shaper_choice.upper()), + color='cyan', ) # And the estimated damping ratio is finally added at the end of the legend @@ -312,7 +323,7 @@ def shaper_calibration( ConsoleOutput.print('Warning: incorrect number of .csv files detected. Only the first one will be used!') # Compute shapers, PSD outputs and spectrogram - performance_shaper, shapers, calibration_data, fr, zeta, compat = calibrate_shaper( + klipper_shaper_choice, shapers, calibration_data, fr, zeta, compat = calibrate_shaper( datas[0], max_smoothing, scv, max_freq ) pdata, bins, t = compute_spectrogram(datas[0]) @@ -387,7 +398,7 @@ def shaper_calibration( # Plot the graphs plot_freq_response( - ax1, calibration_data, shapers, performance_shaper, peaks, peaks_freqs, peaks_threshold, fr, zeta, max_freq + ax1, calibration_data, shapers, klipper_shaper_choice, peaks, peaks_freqs, peaks_threshold, fr, zeta, max_freq ) plot_spectrogram(ax2, t, bins, pdata, peaks_freqs, max_freq) From c892e1a03de8ea8ea45bf3cacaf990dd7397c867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sun, 26 May 2024 22:23:49 +0200 Subject: [PATCH 34/50] fixed last commit about changes in recommendations --- shaketune/post_processing/graph_shaper.py | 42 +++++++++-------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/shaketune/post_processing/graph_shaper.py b/shaketune/post_processing/graph_shaper.py index 2ee1b5c..7f3e276 100644 --- a/shaketune/post_processing/graph_shaper.py +++ b/shaketune/post_processing/graph_shaper.py @@ -129,6 +129,10 @@ def plot_freq_response( ax2.yaxis.set_visible(False) # Draw the shappers curves and add their specific parameters in the legend + perf_shaper_choice = None + perf_shaper_vals = None + perf_shaper_freq = None + perf_shaper_accel = 0 for shaper in shapers: shaper_max_accel = round(shaper.max_accel / 100.0) * 100.0 label = '%s (%.1f Hz, vibr=%.1f%%, sm~=%.2f, accel<=%.f)' % ( @@ -146,45 +150,33 @@ def plot_freq_response( klipper_shaper_vals = shaper.vals klipper_shaper_accel = shaper_max_accel - # This adds also the two selected shapers with good performances or low level of vibrations - perf_shaper_vibrs = float('inf') - perf_shaper = None - perf_shaper_vals = None - perf_shaper_freq = None - perf_shaper_accel = 0 - for shaper in shapers: - shaper_max_accel = round(shaper.max_accel / 100.0) * 100.0 - # Get the a new performance filter that have higher accel than Klipper filter reco but still under 5% vibration - # as this looks to be reasonable when injecting the SCV and damping ratio in the computation... - if ( - shaper_max_accel > klipper_shaper_accel - and shaper.vibrs * 100 < MAX_VIBRATIONS - and ( - shaper.vibrs * 100 < perf_shaper_vibrs - or (shaper.vibrs * 100 == perf_shaper_vibrs and shaper_max_accel > perf_shaper_accel) - ) - ): + # Find the shaper with the highest accel but with vibrs under MAX_VIBRATIONS as it's + # a good performance compromise when injecting the SCV and damping ratio in the computation + if perf_shaper_accel < shaper_max_accel and shaper.vibrs * 100 < MAX_VIBRATIONS: + perf_shaper_choice = shaper.name perf_shaper_accel = shaper_max_accel - perf_shaper = shaper.name perf_shaper_freq = shaper.freq - perf_shaper_vibrs = shaper.vibrs * 100 perf_shaper_vals = shaper.vals - # User recommendations are added to the legend: one is Klipper's original suggestion that is usually good for low vibrations + # Recommendations are added to the legend: one is Klipper's original suggestion that is usually good for low vibrations # and the other one is the custom "performance" recommendation that looks for a suitable shaper that doesn't have excessive - # vibrations level but have higher accelerations. If both recommendation are the same shaper, or if no suitable "performance" + # vibrations level but have higher accelerations. If both recommendations are the same shaper, or if no suitable "performance" # shaper is found, then only a single line as the "best shaper" recommendation is added to the legend - if perf_shaper is not None and perf_shaper != klipper_shaper_choice and perf_shaper_accel >= klipper_shaper_accel: + if ( + perf_shaper_choice is not None + and perf_shaper_choice != klipper_shaper_choice + and perf_shaper_accel >= klipper_shaper_accel + ): ax2.plot( [], [], ' ', - label='Recommended performance shaper: %s @ %.1f Hz' % (perf_shaper.upper(), perf_shaper_freq), + label='Recommended performance shaper: %s @ %.1f Hz' % (perf_shaper_choice.upper(), perf_shaper_freq), ) ax.plot( freqs, psd * perf_shaper_vals, - label='With %s applied' % (perf_shaper.upper()), + label='With %s applied' % (perf_shaper_choice.upper()), color='cyan', ) ax2.plot( From 9ce82e3dc0a2b8fff8f993f3a0fe147471429fd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sun, 26 May 2024 22:43:46 +0200 Subject: [PATCH 35/50] updated documentation about shaper recommendations --- docs/macros/axis_tuning.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/macros/axis_tuning.md b/docs/macros/axis_tuning.md index 3a4c1e1..93042a0 100644 --- a/docs/macros/axis_tuning.md +++ b/docs/macros/axis_tuning.md @@ -37,18 +37,18 @@ To effectively analyze input shaper graphs, there is no one-size-fits-all approa ![](../images/shaper_graphs/shaper_recommandations.png) For setting your Input Shaping filters, rely on the auto-computed values displayed in the top right corner of the graph. Here's a breakdown of the legend for a better grasp: - - **Filtering algortihms**: Klipper automatically computes these lines. This computation works pretty well if the graphs are clean enough. But if your graphs are junk, it can't do magic and will give you pretty bad recommendations. It's better to address the mechanical issues first before continuing. Each shapers has its pro and cons: - * `ZV` is a pretty light filter and usually has some remaining vibrations. My recommendation would be to use it only if you want to do speed benchies and get the highest acceleration values while maintaining a low amount of smoothing on your parts. If you have "perfect" graphs and do not care that much about some remaining ringing, you can try it. - * `MZV` is usually the top pick for well-adjusted machines. It's a good compromise for low remaining vibrations while still allowing pretty good acceleration values. Keep in mind, `MZV` is only recommended by Klipper on good graphs. + - **Filtering algortihms**: This computation works pretty well if the graphs are clean enough. But if your graphs are junk, it can't do magic and will give you pretty bad recommendations. It's better to address the mechanical issues first before continuing. Each shapers has its pro and cons: + * `ZV` is a pretty light filter and usually has some remaining vibrations. Use it only if you want to do speed benchies and get the highest accelerations while maintaining a low amount of smoothing on your parts. If you have "perfect" graphs and do not care that much about some remaining ringing, you can try it. + * `MZV` is usually the top pick for well-adjusted machines. It's a good compromise for low remaining vibrations while still allowing pretty good accelerations. Keep in mind, `MZV` is only recommended on good graphs. * `EI` can be used as a fallback for challenging graphs. But first, try to fix your mechanical issues before using it: almost every printer should be able to run `MZV` instead. - * `2HUMP_EI` and `3HUMP_EI` are last-resort choices. Usually, they lead to a high level of smoothing in order to suppress the ringing while also using relatively low acceleration values. If they pop up as suggestions, it's likely your machine has underlying mechanical issues (that lead to pretty bad or "wide" graphs). - - **Recommended Acceleration** (`accel<=...`): This isn't a standalone figure. It's essential to also consider the `vibr` and `sm` values as it's a compromise between the three. They will give you the percentage of remaining vibrations and the smoothing after Input Shaping, when using the recommended acceleration. Nothing will prevent you from using higher acceleration values; they are not a limit. However, in this case, Input Shaping may not be able to suppress all the ringing on your parts, and more smoothing will occur. Finally, keep in mind that high acceleration values are not useful at all if there is still a high level of remaining vibrations: you should address any mechanical issues first. - - **The remaining vibrations** (`vibr`): This directly correlates with ringing. It correspond to the total value of the "after shaper" signal. Ideally, you want a filter with minimal remaining vibrations. + * `2HUMP_EI` and `3HUMP_EI` are last-resort choices as they usually lead to a high level of smoothing. If they pop up as the main suggestions, it's likely your machine has underlying mechanical issues (that lead to pretty bad or "wide" graphs). + - **Recommended Acceleration** (`accel<=...`): This isn't a standalone value: you need to also consider the `vibr` and `sm` values as it's a compromise between the three. They will give you the remaining vibrations and the smoothing after Input Shaping, at the recommended acceleration. Nothing will prevent you from using higher acceleration values; they are not a limit. However, in this case, Input Shaping may not be able to suppress all the ringing on your parts, and more smoothing will occur. Finally, keep in mind that high accelerations are not useful at all if there is still a high level of remaining vibrations: you should address any mechanical issues first. + - **The remaining vibrations** (`vibr`): This directly correlates to ringing. Ideally, you want a filter with minimal remaining vibrations. - **Shaper recommendations**: This script will give you some tailored recommendations based on your graphs. Pick the one that suit your needs: - * The "performance" shaper is Klipper's original suggestion, which is good for high acceleration, but sometimes allows a little residual vibration while minimizing smoothing. Use it if your goal is speed printing and you don't care much about some remaining ringing. - * The "low vibration" shaper aims for the lowest level of remaining vibration to ensure the best print quality with minimal ringing. This should be the best bet for most users. - * Sometimes only a single recommendation is given as the "best" shaper. This means that either no suitable "low vibration" shaper was found (due to a high level of residual vibration or too much smoothing), or that the "performance" shaper is also the one with the lowest vibration level. - - **Damping Ratio**: Displayed at the end, this is an estimate based on your data that is used to improve the shaper recommendations for your machine. Defining it in the `[input_shaper]` section (instead of Klipper's default value of 0.1) can further reduce ringing at high accelerations and higher square corner velocities. + * The "performance" shaper, which should be good for most people as it's a compromise for high accelerations, with little residual vibrations that should remove most ringing on your parts. + * The "low vibration" shaper aims for a lower level of remaining vibration to ensure the best print quality with minimal ringing. This should can be used in case the performance shaper is not good enough for your needs. + * Sometimes only a single recommendation is given as the "best" shaper. This means that either no suitable "performance" shaper was found (due to a high level of residual vibrations or too much smoothing), or that the "low vibration" shaper is the same as the "performance" shaper. + - **Damping Ratio**: At the end, you will see an estimate based on your measured data, which will be used to better tailor the shaper recommendations to your machine. You need to define it in the `[input_shaper]` section. Then, add to your configuration: ``` From d22b3fcbefa5dc73a5b42515a365188092c22f41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 3 Jun 2024 17:49:28 +0200 Subject: [PATCH 36/50] switched to multiprocessing instead of threading --- shaketune/measurement/axes_input_shaper.py | 10 ++-- shaketune/measurement/axes_map.py | 8 +-- shaketune/measurement/belts_comparison.py | 8 +-- shaketune/measurement/vibrations_profile.py | 8 +-- shaketune/shaketune.py | 18 +++--- ...aketune_thread.py => shaketune_process.py} | 59 +++++++++++-------- 6 files changed, 59 insertions(+), 52 deletions(-) rename shaketune/{shaketune_thread.py => shaketune_process.py} (54%) diff --git a/shaketune/measurement/axes_input_shaper.py b/shaketune/measurement/axes_input_shaper.py index 14ac2b4..c4d77f1 100644 --- a/shaketune/measurement/axes_input_shaper.py +++ b/shaketune/measurement/axes_input_shaper.py @@ -3,12 +3,12 @@ from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput -from ..shaketune_thread import ShakeTuneThread +from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer from .resonance_test import vibrate_axis -def axes_shaper_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: +def axes_shaper_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: min_freq = gcmd.get_float('FREQ_START', default=5, minval=1) max_freq = gcmd.get_float('FREQ_END', default=133.33, minval=1) hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1, minval=1) @@ -60,7 +60,7 @@ def axes_shaper_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: toolhead.dwell(0.5) # Configure the graph creator - creator = st_thread.get_graph_creator() + creator = st_process.get_graph_creator() creator.configure(scv, max_sm, accel_per_hz) # set the needed acceleration values for the test @@ -95,8 +95,8 @@ def axes_shaper_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: # And finally generate the graph for each measured axis ConsoleOutput.print(f'{config["axis"].upper()} axis frequency profile generation...') ConsoleOutput.print('This may take some time (1-3min)') - st_thread.run() - st_thread.wait_for_completion() + st_process.run() + st_process.wait_for_completion() # Re-enable the input shaper if it was active if input_shaper is not None: diff --git a/shaketune/measurement/axes_map.py b/shaketune/measurement/axes_map.py index d3002f0..8660abb 100644 --- a/shaketune/measurement/axes_map.py +++ b/shaketune/measurement/axes_map.py @@ -2,11 +2,11 @@ from ..helpers.console_output import ConsoleOutput -from ..shaketune_thread import ShakeTuneThread +from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer -def axes_map_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: +def axes_map_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: z_height = gcmd.get_float('Z_HEIGHT', default=20.0) speed = gcmd.get_float('SPEED', default=80.0, minval=20.0) accel = gcmd.get_int('ACCEL', default=1500, minval=100) @@ -70,6 +70,6 @@ def axes_map_calibration(gcmd, config, st_thread: ShakeTuneThread) -> None: # Run post-processing ConsoleOutput.print('Analysis of the movements...') - creator = st_thread.get_graph_creator() + creator = st_process.get_graph_creator() creator.configure(accel) - st_thread.run() + st_process.run() diff --git a/shaketune/measurement/belts_comparison.py b/shaketune/measurement/belts_comparison.py index 3c196fc..ef7a203 100644 --- a/shaketune/measurement/belts_comparison.py +++ b/shaketune/measurement/belts_comparison.py @@ -3,13 +3,13 @@ from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput -from ..shaketune_thread import ShakeTuneThread +from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer from .motorsconfigparser import MotorsConfigParser from .resonance_test import vibrate_axis -def compare_belts_responses(gcmd, config, st_thread: ShakeTuneThread) -> None: +def compare_belts_responses(gcmd, config, st_process: ShakeTuneProcess) -> None: min_freq = gcmd.get_float('FREQ_START', default=5.0, minval=1) max_freq = gcmd.get_float('FREQ_END', default=133.33, minval=1) hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1.0, minval=1) @@ -29,7 +29,7 @@ def compare_belts_responses(gcmd, config, st_thread: ShakeTuneThread) -> None: # Configure the graph creator motors_config_parser = MotorsConfigParser(config, motors=None) - creator = st_thread.get_graph_creator() + creator = st_process.get_graph_creator() creator.configure(motors_config_parser.kinematics, accel_per_hz) if motors_config_parser.kinematics == 'corexy': @@ -102,4 +102,4 @@ def compare_belts_responses(gcmd, config, st_thread: ShakeTuneThread) -> None: # Run post-processing ConsoleOutput.print('Belts comparative frequency profile generation...') ConsoleOutput.print('This may take some time (3-5min)') - st_thread.run() + st_process.run() diff --git a/shaketune/measurement/vibrations_profile.py b/shaketune/measurement/vibrations_profile.py index fcf40ff..625d887 100644 --- a/shaketune/measurement/vibrations_profile.py +++ b/shaketune/measurement/vibrations_profile.py @@ -4,14 +4,14 @@ import math from ..helpers.console_output import ConsoleOutput -from ..shaketune_thread import ShakeTuneThread +from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer from .motorsconfigparser import MotorsConfigParser MIN_SPEED = 2 # mm/s -def create_vibrations_profile(gcmd, config, st_thread: ShakeTuneThread) -> None: +def create_vibrations_profile(gcmd, config, st_process: ShakeTuneProcess) -> None: size = gcmd.get_float('SIZE', default=100.0, minval=50.0) z_height = gcmd.get_float('Z_HEIGHT', default=20.0) max_speed = gcmd.get_float('MAX_SPEED', default=200.0, minval=10.0) @@ -127,6 +127,6 @@ def create_vibrations_profile(gcmd, config, st_thread: ShakeTuneThread) -> None: # Run post-processing ConsoleOutput.print('Machine vibrations profile generation...') ConsoleOutput.print('This may take some time (5-8min)') - creator = st_thread.get_graph_creator() + creator = st_process.get_graph_creator() creator.configure(motors_config_parser.kinematics, accel, motors_config_parser) - st_thread.run() + st_process.run() diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index 4be0955..93d26eb 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -14,7 +14,7 @@ from .measurement import ( ) from .post_processing import AxesMapFinder, BeltsGraphCreator, ShaperGraphCreator, VibrationsGraphCreator from .shaketune_config import ShakeTuneConfig -from .shaketune_thread import ShakeTuneThread +from .shaketune_process import ShakeTuneProcess class ShakeTune: @@ -108,23 +108,23 @@ class ShakeTune: def cmd_AXES_MAP_CALIBRATION(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') axes_map_finder = AxesMapFinder(self._config) - st_thread = ShakeTuneThread(self._config, axes_map_finder, self.timeout) - axes_map_calibration(gcmd, self._pconfig, st_thread) + st_process = ShakeTuneProcess(self._config, axes_map_finder, self.timeout) + axes_map_calibration(gcmd, self._pconfig, st_process) def cmd_COMPARE_BELTS_RESPONSES(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') belt_graph_creator = BeltsGraphCreator(self._config) - st_thread = ShakeTuneThread(self._config, belt_graph_creator, self.timeout) - compare_belts_responses(gcmd, self._pconfig, st_thread) + st_process = ShakeTuneProcess(self._config, belt_graph_creator, self.timeout) + compare_belts_responses(gcmd, self._pconfig, st_process) def cmd_AXES_SHAPER_CALIBRATION(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') shaper_graph_creator = ShaperGraphCreator(self._config) - st_thread = ShakeTuneThread(self._config, shaper_graph_creator, self.timeout) - axes_shaper_calibration(gcmd, self._pconfig, st_thread) + st_process = ShakeTuneProcess(self._config, shaper_graph_creator, self.timeout) + axes_shaper_calibration(gcmd, self._pconfig, st_process) def cmd_CREATE_VIBRATIONS_PROFILE(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') vibration_profile_creator = VibrationsGraphCreator(self._config) - st_thread = ShakeTuneThread(self._config, vibration_profile_creator, self.timeout) - create_vibrations_profile(gcmd, self._pconfig, st_thread) + st_process = ShakeTuneProcess(self._config, vibration_profile_creator, self.timeout) + create_vibrations_profile(gcmd, self._pconfig, st_process) diff --git a/shaketune/shaketune_thread.py b/shaketune/shaketune_process.py similarity index 54% rename from shaketune/shaketune_thread.py rename to shaketune/shaketune_process.py index 3b2de5d..faa4fa0 100644 --- a/shaketune/shaketune_thread.py +++ b/shaketune/shaketune_process.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 - import os +import multiprocessing import threading import traceback from typing import Optional @@ -10,51 +10,58 @@ from .helpers.console_output import ConsoleOutput from .shaketune_config import ShakeTuneConfig -class ShakeTuneThread(threading.Thread): +class ShakeTuneProcess: def __init__(self, config: ShakeTuneConfig, graph_creator, timeout: Optional[float] = None) -> None: - super(ShakeTuneThread, self).__init__() self._config = config self.graph_creator = graph_creator self._timeout = timeout - self._internal_thread = None - self._stop_event = threading.Event() + self._process = None def get_graph_creator(self): return self.graph_creator - def run(self) -> None: - # Start the target function in a new thread - self._internal_thread = threading.Thread(target=self._shaketune_thread, args=(self.graph_creator,)) - self._internal_thread.start() - - # If a timeout is specified, start a timer thread to monitor the timeout - if self._timeout is not None: - timer_thread = threading.Timer(self._timeout, self._handle_timeout) - timer_thread.start() - - def _handle_timeout(self) -> None: - if self._internal_thread.is_alive(): - self._stop_event.set() - ConsoleOutput.print('Timeout: Shake&Tune computation did not finish within the specified timeout!') + def start(self) -> None: + # Start the target function in a new process (a thread is known to cause issues with Klipper and CANbus due to the GIL) + self._process = multiprocessing.Process( + target=self._shaketune_process_wrapper, args=(self.graph_creator, self._timeout) + ) + self._process.start() def wait_for_completion(self) -> None: - if self._internal_thread is not None: - self._internal_thread.join() + if self._process is not None: + self._process.join() - # This function run in a thread is used to do the CSV analysis and create the graphs - def _shaketune_thread(self, graph_creator) -> None: - # Trying to reduce the Shake&Tune post-processing thread priority to avoid slowing down the main Klipper process + # This function is a simple wrapper to start the Shake&Tune process. It's needed in order to get the timeout + # as a Timer in a thread INSIDE the Shake&Tune child process to not interfere with the main Klipper process + def _shaketune_process_wrapper(self, graph_creator, timeout) -> None: + if timeout is not None: + timer = threading.Timer(timeout, self._handle_timeout) + timer.start() + + try: + self._shaketune_process(graph_creator) + finally: + if timeout is not None: + timer.cancel() + + def _handle_timeout(self) -> None: + ConsoleOutput.print('Timeout: Shake&Tune computation did not finish within the specified timeout!') + os._exit(1) # Forcefully exit the process + + def _shaketune_process(self, graph_creator) -> None: + # Trying to reduce Shake&Tune process priority to avoid slowing down the main Klipper process # as this could lead to random "Timer too close" errors when already running CANbus, etc... try: - os.nice(20) + os.nice(15) except Exception: - ConsoleOutput.print('Warning: failed reducing Shake&Tune thread priority, continuing...') + ConsoleOutput.print('Warning: failed reducing Shake&Tune process priority, continuing...') # Ensure the output folders exist for folder in self._config.get_results_subfolders(): folder.mkdir(parents=True, exist_ok=True) + # Generate the graphs try: graph_creator.create_graph() except FileNotFoundError as e: From 0fbdef4a17f864bcb6a2505a241ef2a475a9090c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 3 Jun 2024 19:23:12 +0200 Subject: [PATCH 37/50] fixed typo in ShakeTuneProcess --- shaketune/shaketune_process.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaketune/shaketune_process.py b/shaketune/shaketune_process.py index faa4fa0..84ed167 100644 --- a/shaketune/shaketune_process.py +++ b/shaketune/shaketune_process.py @@ -21,7 +21,7 @@ class ShakeTuneProcess: def get_graph_creator(self): return self.graph_creator - def start(self) -> None: + def run(self) -> None: # Start the target function in a new process (a thread is known to cause issues with Klipper and CANbus due to the GIL) self._process = multiprocessing.Process( target=self._shaketune_process_wrapper, args=(self.graph_creator, self._timeout) From bb6907e5e6582ce543214c68a897b80be71765b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Tue, 4 Jun 2024 18:31:23 +0200 Subject: [PATCH 38/50] AXES_MAP detection reworked (#110) --- requirements.txt | 10 +- shaketune/dummy_macros.cfg | 1 - shaketune/measurement/axes_map.py | 36 +- shaketune/post_processing/analyze_axesmap.py | 441 +++++++++++++++---- shaketune/post_processing/graph_creator.py | 65 ++- shaketune/shaketune_config.py | 2 +- shaketune/shaketune_process.py | 11 +- 7 files changed, 423 insertions(+), 143 deletions(-) diff --git a/requirements.txt b/requirements.txt index db89e34..8b16114 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,5 @@ GitPython==3.1.40 -matplotlib==3.8.2 ; python_version >= '3.9' -matplotlib==3.3.4 ; python_version < '3.9' -numpy==1.26.2 ; python_version >= '3.9' -numpy==1.19.5 ; python_version < '3.9' -scipy==1.11.4 ; python_version >= '3.9' -scipy==1.7.3 ; python_version < '3.9' +matplotlib==3.8.2 +numpy==1.26.2 +scipy==1.11.4 +PyWavelets==1.6.0 diff --git a/shaketune/dummy_macros.cfg b/shaketune/dummy_macros.cfg index 40607de..d3909f8 100644 --- a/shaketune/dummy_macros.cfg +++ b/shaketune/dummy_macros.cfg @@ -23,7 +23,6 @@ gcode: {% set dummy = params.SPEED|default(80) %} {% set dummy = params.ACCEL|default(1500) %} {% set dummy = params.TRAVEL_SPEED|default(120) %} - {% set dummy = params.ACCEL_CHIP %} _AXES_MAP_CALIBRATION {rawparams} diff --git a/shaketune/measurement/axes_map.py b/shaketune/measurement/axes_map.py index 8660abb..ef21ab8 100644 --- a/shaketune/measurement/axes_map.py +++ b/shaketune/measurement/axes_map.py @@ -5,6 +5,8 @@ from ..helpers.console_output import ConsoleOutput from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer +SEGMENT_LENGTH = 30 # mm + def axes_map_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: z_height = gcmd.get_float('Z_HEIGHT', default=20.0) @@ -21,6 +23,12 @@ def axes_map_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: k_accelerometer = printer.lookup_object(accel_chip, None) if k_accelerometer is None: gcmd.error('Error: multi-accelerometer configurations are not supported for this macro!') + pconfig = printer.lookup_object('configfile') + current_axes_map = pconfig.status_raw_config[accel_chip]['axes_map'] + if current_axes_map.strip().replace(' ', '') != 'x,y,z': + gcmd.error( + f'Error: The parameter axes_map is already set in your {accel_chip} configuration! Please remove it (or set it to "x,y,z")!' + ) accelerometer = Accelerometer(k_accelerometer) toolhead_info = toolhead.get_status(systime) @@ -44,19 +52,27 @@ def axes_map_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: _, _, _, E = toolhead.get_position() # Going to the start position - toolhead.move([mid_x - 15, mid_y - 15, z_height, E], feedrate_travel) + toolhead.move([mid_x - SEGMENT_LENGTH / 2, mid_y - SEGMENT_LENGTH / 2, z_height, E], feedrate_travel) toolhead.dwell(0.5) # Start the measurements and do the movements (+X, +Y and then +Z) accelerometer.start_measurement() - toolhead.dwell(1) - toolhead.move([mid_x + 15, mid_y - 15, z_height, E], speed) - toolhead.dwell(1) - toolhead.move([mid_x + 15, mid_y + 15, z_height, E], speed) - toolhead.dwell(1) - toolhead.move([mid_x + 15, mid_y + 15, z_height + 15, E], speed) - toolhead.dwell(1) - accelerometer.stop_measurement('axemap') + toolhead.dwell(0.5) + toolhead.move([mid_x + SEGMENT_LENGTH / 2, mid_y - SEGMENT_LENGTH / 2, z_height, E], speed) + toolhead.dwell(0.5) + accelerometer.stop_measurement('axesmap_X', append_time=True) + toolhead.dwell(0.5) + accelerometer.start_measurement() + toolhead.dwell(0.5) + toolhead.move([mid_x + SEGMENT_LENGTH / 2, mid_y + SEGMENT_LENGTH / 2, z_height, E], speed) + toolhead.dwell(0.5) + accelerometer.stop_measurement('axesmap_Y', append_time=True) + toolhead.dwell(0.5) + accelerometer.start_measurement() + toolhead.dwell(0.5) + toolhead.move([mid_x + SEGMENT_LENGTH / 2, mid_y + SEGMENT_LENGTH / 2, z_height + SEGMENT_LENGTH, E], speed) + toolhead.dwell(0.5) + accelerometer.stop_measurement('axesmap_Z', append_time=True) # Re-enable the input shaper if it was active if input_shaper is not None: @@ -71,5 +87,5 @@ def axes_map_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: # Run post-processing ConsoleOutput.print('Analysis of the movements...') creator = st_process.get_graph_creator() - creator.configure(accel) + creator.configure(accel, SEGMENT_LENGTH) st_process.run() diff --git a/shaketune/post_processing/analyze_axesmap.py b/shaketune/post_processing/analyze_axesmap.py index 4c094a3..4c968eb 100644 --- a/shaketune/post_processing/analyze_axesmap.py +++ b/shaketune/post_processing/analyze_axesmap.py @@ -6,13 +6,31 @@ # Written by Frix_x#0161 # import optparse +import os +from datetime import datetime +import matplotlib +import matplotlib.colors +import matplotlib.font_manager +import matplotlib.pyplot as plt +import matplotlib.ticker import numpy as np -from scipy.signal import butter, filtfilt +import pywt +from scipy import stats +matplotlib.use('Agg') + +from ..helpers.common_func import parse_log from ..helpers.console_output import ConsoleOutput -NUM_POINTS = 500 +KLIPPAIN_COLORS = { + 'purple': '#70088C', + 'orange': '#FF8D32', + 'dark_purple': '#150140', + 'dark_orange': '#F24130', + 'red_pink': '#F2055C', +} +MACHINE_AXES = ['x', 'y', 'z'] ###################################################################### @@ -20,58 +38,230 @@ NUM_POINTS = 500 ###################################################################### -def accel_signal_filter(data, cutoff=2, fs=100, order=5): - nyq = 0.5 * fs - normal_cutoff = cutoff / nyq - b, a = butter(order, normal_cutoff, btype='low', analog=False) - filtered_data = filtfilt(b, a, data) - filtered_data -= np.mean(filtered_data) - return filtered_data +def wavelet_denoise(data, wavelet='db1', level=1): + coeffs = pywt.wavedec(data, wavelet, mode='smooth') + threshold = np.median(np.abs(coeffs[-level])) / 0.6745 * np.sqrt(2 * np.log(len(data))) + new_coeffs = [pywt.threshold(c, threshold, mode='soft') for c in coeffs] + denoised_data = pywt.waverec(new_coeffs, wavelet) + + # Compute noise by subtracting denoised data from original data + noise = data - denoised_data[: len(data)] + return denoised_data, noise -def find_first_spike(data): - min_index, max_index = np.argmin(data), np.argmax(data) - return ('-', min_index) if min_index < max_index else ('', max_index) +def integrate_trapz(accel, time): + return np.array([np.trapz(accel[:i], time[:i]) for i in range(2, len(time) + 1)]) -def get_movement_vector(data, start_idx, end_idx): - if start_idx < end_idx: - vector = [] - for i in range(3): - vector.append(np.mean(data[i][start_idx:end_idx], axis=0)) - return vector - else: - return np.zeros(3) +def process_acceleration_data(time, accel_x, accel_y, accel_z): + # Calculate the constant offset (gravity component) + offset_x = np.mean(accel_x) + offset_y = np.mean(accel_y) + offset_z = np.mean(accel_z) + + # Remove the constant offset from acceleration data + accel_x -= offset_x + accel_y -= offset_y + accel_z -= offset_z + + # Apply wavelet denoising + accel_x, noise_x = wavelet_denoise(accel_x) + accel_y, noise_y = wavelet_denoise(accel_y) + accel_z, noise_z = wavelet_denoise(accel_z) + + # Integrate acceleration to get velocity using trapezoidal rule + velocity_x = integrate_trapz(accel_x, time) + velocity_y = integrate_trapz(accel_y, time) + velocity_z = integrate_trapz(accel_z, time) + + # Correct drift in velocity by resetting to zero at the beginning and end + velocity_x -= np.linspace(velocity_x[0], velocity_x[-1], len(velocity_x)) + velocity_y -= np.linspace(velocity_y[0], velocity_y[-1], len(velocity_y)) + velocity_z -= np.linspace(velocity_z[0], velocity_z[-1], len(velocity_z)) + + # Integrate velocity to get position using trapezoidal rule + position_x = integrate_trapz(velocity_x, time[1:]) + position_y = integrate_trapz(velocity_y, time[1:]) + position_z = integrate_trapz(velocity_z, time[1:]) + + noise_intensity = np.mean([np.std(noise_x), np.std(noise_y), np.std(noise_z)]) + + return offset_x, offset_y, offset_z, position_x, position_y, position_z, noise_intensity -def angle_between(v1, v2): - v1_u = v1 / np.linalg.norm(v1) - v2_u = v2 / np.linalg.norm(v2) - return np.arccos(np.clip(np.dot(v1_u, v2_u), -1.0, 1.0)) +def scale_positions_to_fixed_length(position_x, position_y, position_z, fixed_length): + # Calculate the total distance traveled in 3D space + total_distance = np.sqrt(np.diff(position_x) ** 2 + np.diff(position_y) ** 2 + np.diff(position_z) ** 2).sum() + scale_factor = fixed_length / total_distance + + # Apply the scale factor to the positions + position_x *= scale_factor + position_y *= scale_factor + position_z *= scale_factor + + return position_x, position_y, position_z -def compute_errors(filtered_data, spikes_sorted, accel_value, num_points): - # Get the movement start points in the correct order from the sorted bag of spikes - movement_starts = [spike[0][1] for spike in spikes_sorted] +def find_nearest_perfect_vector(average_direction_vector): + # Define the perfect vectors + perfect_vectors = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [-1, 0, 0], [0, -1, 0], [0, 0, -1]]) - # Theoretical unit vectors for X, Y, Z printer axes - printer_axes = {'x': np.array([1, 0, 0]), 'y': np.array([0, 1, 0]), 'z': np.array([0, 0, 1])} + # Find the nearest perfect vector + dot_products = perfect_vectors @ average_direction_vector + nearest_vector_idx = np.argmax(dot_products) + nearest_vector = perfect_vectors[nearest_vector_idx] - alignment_errors = {} - sensitivity_errors = {} - for i, axis in enumerate(['x', 'y', 'z']): - movement_start = movement_starts[i] - movement_end = movement_start + num_points - movement_vector = get_movement_vector(filtered_data, movement_start, movement_end) - alignment_errors[axis] = angle_between(movement_vector, printer_axes[axis]) + # Calculate the angle error + angle_error = np.arccos(dot_products[nearest_vector_idx]) * 180 / np.pi - measured_accel_magnitude = np.linalg.norm(movement_vector) - if accel_value != 0: - sensitivity_errors[axis] = abs(measured_accel_magnitude - accel_value) / accel_value * 100 - else: - sensitivity_errors[axis] = None + return nearest_vector, angle_error - return alignment_errors, sensitivity_errors + +def linear_regression_direction(position_x, position_y, position_z, trim_length=0.25): + # Trim the start and end of the position data to keep only the center of the segment + # as the start and stop positions are not always perfectly aligned and can be a bit noisy + t = len(position_x) + trim_start = int(t * trim_length) + trim_end = int(t * (1 - trim_length)) + position_x = position_x[trim_start:trim_end] + position_y = position_y[trim_start:trim_end] + position_z = position_z[trim_start:trim_end] + + # Compute the direction vector using linear regression over the position data + time = np.arange(len(position_x)) + slope_x, intercept_x, _, _, _ = stats.linregress(time, position_x) + slope_y, intercept_y, _, _, _ = stats.linregress(time, position_y) + slope_z, intercept_z, _, _, _ = stats.linregress(time, position_z) + end_position = np.array( + [slope_x * time[-1] + intercept_x, slope_y * time[-1] + intercept_y, slope_z * time[-1] + intercept_z] + ) + direction_vector = end_position - np.array([intercept_x, intercept_y, intercept_z]) + direction_vector = direction_vector / np.linalg.norm(direction_vector) + return direction_vector + + +###################################################################### +# Graphing +###################################################################### + + +def plot_compare_frequency(ax, time, accel_x, accel_y, accel_z, offset, i): + # Plot acceleration data + ax.plot( + time, + accel_x, + label='X' if i == 0 else '', + color=KLIPPAIN_COLORS['purple'], + linewidth=0.5, + zorder=50 if i == 0 else 10, + ) + ax.plot( + time, + accel_y, + label='Y' if i == 0 else '', + color=KLIPPAIN_COLORS['orange'], + linewidth=0.5, + zorder=50 if i == 1 else 10, + ) + ax.plot( + time, + accel_z, + label='Z' if i == 0 else '', + color=KLIPPAIN_COLORS['red_pink'], + linewidth=0.5, + zorder=50 if i == 2 else 10, + ) + + # Setting axis parameters, grid and graph title + ax.set_xlabel('Time (s)') + ax.set_ylabel('Acceleration (mm/s²)') + + ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) + ax.yaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) + ax.ticklabel_format(axis='y', style='scientific', scilimits=(0, 0)) + ax.grid(which='major', color='grey') + ax.grid(which='minor', color='lightgrey') + fontP = matplotlib.font_manager.FontProperties() + fontP.set_size('small') + ax.set_title( + 'Acceleration (gravity offset removed)', + fontsize=14, + color=KLIPPAIN_COLORS['dark_orange'], + weight='bold', + ) + + ax.legend(loc='upper left', prop=fontP) + + # Add gravity offset to the graph + if i == 0: + ax2 = ax.twinx() # To split the legends in two box + ax2.yaxis.set_visible(False) + ax2.plot([], [], ' ', label=f'Measured gravity: {offset / 1000:0.3f} m/s²') + ax2.legend(loc='upper right', prop=fontP) + + +def plot_3d_path(ax, i, position_x, position_y, position_z, average_direction_vector, angle_error): + ax.plot(position_x, position_y, position_z, color=KLIPPAIN_COLORS['orange'], linestyle=':', linewidth=2) + ax.scatter(position_x[0], position_y[0], position_z[0], color=KLIPPAIN_COLORS['red_pink'], zorder=10) + ax.text( + position_x[0] + 1, + position_y[0], + position_z[0], + str(i + 1), + color='black', + fontsize=16, + fontweight='bold', + zorder=20, + ) + + # Plot the average direction vector + start_position = np.array([position_x[0], position_y[0], position_z[0]]) + end_position = start_position + average_direction_vector * np.linalg.norm( + [position_x[-1] - position_x[0], position_y[-1] - position_y[0], position_z[-1] - position_z[0]] + ) + axes = ['X', 'Y', 'Z'] + ax.plot( + [start_position[0], end_position[0]], + [start_position[1], end_position[1]], + [start_position[2], end_position[2]], + label=f'{axes[i]} angle: {angle_error:0.2f}°', + color=KLIPPAIN_COLORS['purple'], + linestyle='-', + linewidth=2, + ) + + # Setting axis parameters, grid and graph title + ax.set_xlabel('X Position (mm)') + ax.set_ylabel('Y Position (mm)') + ax.set_zlabel('Z Position (mm)') + + ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) + ax.yaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) + ax.grid(which='major', color='grey') + ax.grid(which='minor', color='lightgrey') + fontP = matplotlib.font_manager.FontProperties() + fontP.set_size('small') + ax.set_title( + 'Estimated movement in 3D space', + fontsize=14, + color=KLIPPAIN_COLORS['dark_orange'], + weight='bold', + ) + + ax.legend(loc='upper left', prop=fontP) + + +def format_direction_vector(vectors): + formatted_vector = [] + for vector in vectors: + for i in range(len(vector)): + if vector[i] > 0: + formatted_vector.append(MACHINE_AXES[i]) + break + elif vector[i] < 0: + formatted_vector.append(f'-{MACHINE_AXES[i]}') + break + return ', '.join(formatted_vector) ###################################################################### @@ -79,50 +269,122 @@ def compute_errors(filtered_data, spikes_sorted, accel_value, num_points): ###################################################################### -def parse_log(logname): - with open(logname) as f: - for header in f: - if not header.startswith('#'): - break - if not header.startswith('freq,psd_x,psd_y,psd_z,psd_xyz'): - # Raw accelerometer data - return np.loadtxt(logname, comments='#', delimiter=',') - # Power spectral density data or shaper calibration data - raise ValueError( - 'File %s does not contain raw accelerometer data and therefore ' - 'is not supported by this script. Please use the official Klipper ' - 'calibrate_shaper.py script to process it instead.' % (logname,) +def axesmap_calibration(lognames, fixed_length, accel=None, st_version='unknown'): + # Parse data from the log files while ignoring CSV in the wrong format (sorted by axis name) + raw_datas = {} + for logname in lognames: + data = parse_log(logname) + if data is not None: + _axis = logname.split('_')[-1].split('.')[0].lower() + raw_datas[_axis] = data + + if len(raw_datas) != 3: + raise ValueError('This tool needs 3 CSVs to work with (like axesmap_X.csv, axesmap_Y.csv and axesmap_Z.csv)') + + fig, ((ax1, ax2)) = plt.subplots( + 1, + 2, + gridspec_kw={ + 'width_ratios': [5, 3], + 'bottom': 0.080, + 'top': 0.840, + 'left': 0.055, + 'right': 0.960, + 'hspace': 0.166, + 'wspace': 0.060, + }, + ) + fig.set_size_inches(15, 7) + ax2.remove() + ax2 = fig.add_subplot(122, projection='3d') + + cumulative_start_position = np.array([0, 0, 0]) + direction_vectors = [] + total_noise_intensity = 0.0 + for i, machine_axis in enumerate(MACHINE_AXES): + if machine_axis not in raw_datas: + raise ValueError(f'Missing CSV file for axis {machine_axis}') + + # Get the accel data according to the current axes_map + time = raw_datas[machine_axis][:, 0] + accel_x = raw_datas[machine_axis][:, 1] + accel_y = raw_datas[machine_axis][:, 2] + accel_z = raw_datas[machine_axis][:, 3] + + offset_x, offset_y, offset_z, position_x, position_y, position_z, noise_intensity = process_acceleration_data( + time, accel_x, accel_y, accel_z + ) + position_x, position_y, position_z = scale_positions_to_fixed_length( + position_x, position_y, position_z, fixed_length + ) + position_x += cumulative_start_position[0] + position_y += cumulative_start_position[1] + position_z += cumulative_start_position[2] + + gravity = np.linalg.norm(np.array([offset_x, offset_y, offset_z])) + average_direction_vector = linear_regression_direction(position_x, position_y, position_z) + direction_vector, angle_error = find_nearest_perfect_vector(average_direction_vector) + ConsoleOutput.print( + f'Machine axis {machine_axis.upper()} -> nearest accelerometer direction vector: {direction_vector} (angle error: {angle_error:.2f}°)' + ) + direction_vectors.append(direction_vector) + + total_noise_intensity += noise_intensity + + plot_compare_frequency(ax1, time, accel_x, accel_y, accel_z, gravity, i) + plot_3d_path(ax2, i, position_x, position_y, position_z, average_direction_vector, angle_error) + + # Update the cumulative start position for the next segment + cumulative_start_position = np.array([position_x[-1], position_y[-1], position_z[-1]]) + + average_noise_intensity = total_noise_intensity / len(raw_datas) + if average_noise_intensity <= 350: + average_noise_intensity_text = '-> OK' + elif 350 < average_noise_intensity <= 700: + average_noise_intensity_text = '-> WARNING: accelerometer noise is a bit high' + else: + average_noise_intensity_text = '-> ERROR: accelerometer noise is too high!' + + formatted_direction_vector = format_direction_vector(direction_vectors) + ConsoleOutput.print(f'--> Detected axes_map: {formatted_direction_vector}') + ConsoleOutput.print( + f'Average accelerometer noise level: {average_noise_intensity:.2f} mm/s² {average_noise_intensity_text}' ) + # Add title + title_line1 = 'AXES MAP CALIBRATION TOOL' + fig.text( + 0.060, 0.947, title_line1, ha='left', va='bottom', fontsize=20, color=KLIPPAIN_COLORS['purple'], weight='bold' + ) + try: + filename = lognames[0].split('/')[-1] + dt = datetime.strptime(f"{filename.split('_')[1]} {filename.split('_')[2]}", '%Y%m%d %H%M%S') + title_line2 = dt.strftime('%x %X') + if accel is not None: + title_line2 += f' -- at {accel:0.0f} mm/s²' + except Exception: + ConsoleOutput.print( + 'Warning: CSV filenames look to be different than expected (%s , %s, %s)' + % (lognames[0], lognames[1], lognames[2]) + ) + title_line2 = lognames[0].split('/')[-1] + ' ...' + fig.text(0.060, 0.939, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) -def axesmap_calibration(lognames, accel=None): - # Parse the raw data and get them ready for analysis - raw_datas = [parse_log(filename) for filename in lognames] - if len(raw_datas) > 1: - raise ValueError('Analysis of multiple CSV files at once is not possible with this script') + title_line3 = f'| Detected axes_map: {formatted_direction_vector}' + title_line4 = f'| Accelerometer noise level: {average_noise_intensity:.2f} mm/s² {average_noise_intensity_text}' + fig.text(0.50, 0.985, title_line3, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.50, 0.950, title_line4, ha='left', va='top', fontsize=11, color=KLIPPAIN_COLORS['dark_purple']) - filtered_data = [accel_signal_filter(raw_datas[0][:, i + 1]) for i in range(3)] - spikes = [find_first_spike(filtered_data[i]) for i in range(3)] - spikes_sorted = sorted([(spikes[0], 'x'), (spikes[1], 'y'), (spikes[2], 'z')], key=lambda x: x[0][1]) + # Adding a small Klippain logo to the top left corner of the figure + ax_logo = fig.add_axes([0.001, 0.894, 0.105, 0.105], anchor='NW') + ax_logo.imshow(plt.imread(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'klippain.png'))) + ax_logo.axis('off') - # Using the previous variables to get the axes_map and errors - axes_map = ','.join([f'{spike[0][0]}{spike[1]}' for spike in spikes_sorted]) - # alignment_error, sensitivity_error = compute_errors(filtered_data, spikes_sorted, accel, NUM_POINTS) + # Adding Shake&Tune version in the top right corner + if st_version != 'unknown': + fig.text(0.995, 0.980, st_version, ha='right', va='bottom', fontsize=8, color=KLIPPAIN_COLORS['purple']) - results = f'Be aware that this macro is experimental and has been known to sometimes produce incorrect results. Use it with caution and always check the results!\n' - results += f'Detected axes_map:\n {axes_map}\n' - - # TODO: work on this function that is currently not giving good results... - # results += "Accelerometer angle deviation:\n" - # for axis, angle in alignment_error.items(): - # angle_degrees = np.degrees(angle) # Convert radians to degrees - # results += f" {axis.upper()} axis: {angle_degrees:.2f} degrees\n" - - # results += "Accelerometer sensitivity error:\n" - # for axis, error in sensitivity_error.items(): - # results += f" {axis.upper()} axis: {error:.2f}%\n" - - return results + return fig def main(): @@ -133,6 +395,9 @@ def main(): opts.add_option( '-a', '--accel', type='string', dest='accel', default=None, help='acceleration value used to do the movements' ) + opts.add_option( + '-l', '--length', type='float', dest='length', default=None, help='recorded length for each segment' + ) options, args = opts.parse_args() if len(args) < 1: opts.error('No CSV file(s) to analyse') @@ -142,13 +407,17 @@ def main(): accel_value = float(options.accel) except ValueError: opts.error('Invalid acceleration value. It should be a numeric value.') + if options.length is None: + opts.error('You must specify the length of the measured segments (option -l)') + try: + length_value = float(options.length) + except ValueError: + opts.error('Invalid length value. It should be a numeric value.') + if options.output is None: + opts.error('You must specify an output file.png to use the script (option -o)') - results = axesmap_calibration(args, accel_value) - ConsoleOutput.print(results) - - if options.output is not None: - with open(options.output, 'w') as f: - f.write(results) + fig = axesmap_calibration(args, length_value, accel_value, 'unknown') + fig.savefig(options.output, dpi=150) if __name__ == '__main__': diff --git a/shaketune/post_processing/graph_creator.py b/shaketune/post_processing/graph_creator.py index 905e6a1..401ff6b 100644 --- a/shaketune/post_processing/graph_creator.py +++ b/shaketune/post_processing/graph_creator.py @@ -10,7 +10,6 @@ from typing import Callable, Optional from matplotlib.figure import Figure -from ..helpers.console_output import ConsoleOutput from ..measurement.motorsconfigparser import MotorsConfigParser from ..shaketune_config import ShakeTuneConfig from .analyze_axesmap import axesmap_calibration @@ -238,41 +237,41 @@ class AxesMapFinder(GraphCreator): def __init__(self, config: ShakeTuneConfig): super().__init__(config) - self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') - self._type = 'axesmap' - self._folder = config.get_results_folder() - self._accel = None + self._segment_length = None + self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') - def configure(self, accel: int) -> None: + self._setup_folder('axesmap') + + def configure(self, accel: int, segment_length: float) -> None: self._accel = accel + self._segment_length = segment_length - def find_axesmap(self) -> None: - tmp_folder = Path('/tmp') - globbed_files = list(tmp_folder.glob('shaketune-axemap_*.csv')) - - if not globbed_files: - raise FileNotFoundError('no CSV files found in the /tmp folder to find the axes map!') - - # Find the CSV files with the latest timestamp and process it - logname = sorted(globbed_files, key=lambda f: f.stat().st_mtime, reverse=True)[0] - results = axesmap_calibration( - lognames=[str(logname)], - accel=self._accel, - ) - ConsoleOutput.print(results) - - result_filename = self._folder / f'{self._type}_{self._graph_date}.txt' - with result_filename.open('w') as f: - f.write(results) - - # While the AxesMapFinder doesn't directly create a graph, we need to implement this - # method to allow using it seemlessly like all the other GraphCreator objects def create_graph(self) -> None: - self.find_axesmap() + lognames = self._move_and_prepare_files( + glob_pattern='shaketune-axesmap_*.csv', + min_files_required=3, + custom_name_func=lambda f: f.stem.split('_')[1].upper(), + ) + fig = axesmap_calibration( + lognames=[str(path) for path in lognames], + accel=self._accel, + fixed_length=self._segment_length, + st_version=self._version, + ) + self._save_figure_and_cleanup(fig, lognames) - def clean_old_files(self, keep_results: int) -> None: - tmp_folder = Path('/tmp') - globbed_files = list(tmp_folder.glob('shaketune-axemap_*.csv')) - for csv_file in globbed_files: - csv_file.unlink() + def clean_old_files(self, keep_results: int = 3) -> None: + # Get all PNG files in the directory as a list of Path objects + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + + if len(files) <= keep_results: + return # No need to delete any files + + # Delete the older files + for old_file in files[keep_results:]: + file_date = '_'.join(old_file.stem.split('_')[1:3]) + for suffix in ['X', 'Y', 'Z']: + csv_file = self._folder / f'axesmap_{file_date}_{suffix}.csv' + csv_file.unlink(missing_ok=True) + old_file.unlink() diff --git a/shaketune/shaketune_config.py b/shaketune/shaketune_config.py index 057900a..71a8930 100644 --- a/shaketune/shaketune_config.py +++ b/shaketune/shaketune_config.py @@ -7,7 +7,7 @@ from .helpers.console_output import ConsoleOutput KLIPPER_FOLDER = Path.home() / 'klipper' KLIPPER_LOG_FOLDER = Path.home() / 'printer_data/logs' RESULTS_BASE_FOLDER = Path.home() / 'printer_data/config/K-ShakeTune_results' -RESULTS_SUBFOLDERS = {'belts': 'belts', 'shaper': 'inputshaper', 'vibrations': 'vibrations'} +RESULTS_SUBFOLDERS = {'axesmap': 'axesmap', 'belts': 'belts', 'shaper': 'inputshaper', 'vibrations': 'vibrations'} class ShakeTuneConfig: diff --git a/shaketune/shaketune_process.py b/shaketune/shaketune_process.py index 84ed167..ec0b06a 100644 --- a/shaketune/shaketune_process.py +++ b/shaketune/shaketune_process.py @@ -53,7 +53,7 @@ class ShakeTuneProcess: # Trying to reduce Shake&Tune process priority to avoid slowing down the main Klipper process # as this could lead to random "Timer too close" errors when already running CANbus, etc... try: - os.nice(15) + os.nice(19) except Exception: ConsoleOutput.print('Warning: failed reducing Shake&Tune process priority, continuing...') @@ -76,8 +76,7 @@ class ShakeTuneProcess: graph_creator.clean_old_files(self._config.keep_n_results) - if graph_creator.get_type() != 'axesmap': - ConsoleOutput.print(f'{graph_creator.get_type()} graphs created successfully!') - ConsoleOutput.print( - f'Cleaned up the output folder (only the last {self._config.keep_n_results} results were kept)!' - ) + ConsoleOutput.print(f'{graph_creator.get_type()} graphs created successfully!') + ConsoleOutput.print( + f'Cleaned up the output folder (only the last {self._config.keep_n_results} results were kept)!' + ) From f9e5d64eac6c3820e0bc8a9502db12d9aec44402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Tue, 4 Jun 2024 18:45:21 +0200 Subject: [PATCH 39/50] added PWM freq targets to vibration graphs --- shaketune/measurement/motorsconfigparser.py | 1 + shaketune/post_processing/graph_vibrations.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/shaketune/measurement/motorsconfigparser.py b/shaketune/measurement/motorsconfigparser.py index 038c508..0275438 100644 --- a/shaketune/measurement/motorsconfigparser.py +++ b/shaketune/measurement/motorsconfigparser.py @@ -146,6 +146,7 @@ class MotorsConfigParser: motor.set_config('autotune_enabled', True) motor.set_config('motor', autotune_object.motor) motor.set_config('voltage', autotune_object.voltage) + motor.set_config('pwm_freq_target', autotune_object.pwm_freq_target) else: motor.set_config('autotune_enabled', False) diff --git a/shaketune/post_processing/graph_vibrations.py b/shaketune/post_processing/graph_vibrations.py index 55009de..712a727 100644 --- a/shaketune/post_processing/graph_vibrations.py +++ b/shaketune/post_processing/graph_vibrations.py @@ -570,7 +570,9 @@ def plot_motor_config_txt(fig, motors, differences): f"| {lbl}: {mot.get_config('motor').upper()} on {mot.get_config('tmc').upper()} @ {mot.get_config('voltage'):0.1f}V {mot.get_config('run_current'):0.2f}A - {mot.get_config('microsteps')}usteps" for mot, lbl in motor_details ] - config_blocks.append('| TMC Autotune enabled') + config_blocks.append( + f'| TMC Autotune enabled (PWM freq target: X={motors[0].get_config('pwm_freq_target')}kHz / Y={motors[1].get_config("pwm_freq_target")}kHz)' + ) else: config_blocks = [ f"| {lbl}: {mot.get_config('tmc').upper()} @ {mot.get_config('run_current'):0.2f}A - {mot.get_config('microsteps')}usteps" From 867d0c90a07385f4c18e9d2c8fa7d27661e8ac4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Tue, 4 Jun 2024 22:09:54 +0200 Subject: [PATCH 40/50] fix gcmd error that wasn't sent correctly --- shaketune/measurement/axes_input_shaper.py | 8 ++++---- shaketune/measurement/axes_map.py | 10 +++++----- shaketune/measurement/belts_comparison.py | 8 ++++---- shaketune/measurement/static_freq.py | 6 +++--- shaketune/measurement/vibrations_profile.py | 8 ++++---- shaketune/post_processing/graph_vibrations.py | 2 +- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/shaketune/measurement/axes_input_shaper.py b/shaketune/measurement/axes_input_shaper.py index c4d77f1..20c1a58 100644 --- a/shaketune/measurement/axes_input_shaper.py +++ b/shaketune/measurement/axes_input_shaper.py @@ -15,7 +15,7 @@ def axes_shaper_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: accel_per_hz = gcmd.get_float('ACCEL_PER_HZ', default=None) axis_input = gcmd.get('AXIS', default='all').lower() if axis_input not in ['x', 'y', 'all']: - gcmd.error('AXIS selection invalid. Should be either x, y, or all!') + raise gcmd.error('AXIS selection invalid. Should be either x, y, or all!') scv = gcmd.get_float('SCV', default=None, minval=0) max_sm = gcmd.get_float('MAX_SMOOTHING', default=None, minval=0) feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) @@ -38,10 +38,10 @@ def axes_shaper_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: # Move to the starting point test_points = res_tester.test.get_start_test_points() if len(test_points) > 1: - gcmd.error('Only one test point in the [resonance_tester] section is supported by Shake&Tune.') + raise gcmd.error('Only one test point in the [resonance_tester] section is supported by Shake&Tune.') if test_points[0] == (-1, -1, -1): if z_height is None: - gcmd.error( + raise gcmd.error( 'Z_HEIGHT parameter is required if the test_point in [resonance_tester] section is set to -1,-1,-1' ) # Use center of bed in case the test point in [resonance_tester] is set to -1,-1,-1 @@ -84,7 +84,7 @@ def axes_shaper_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: # First we need to find the accelerometer chip suited for the axis accel_chip = Accelerometer.find_axis_accelerometer(printer, config['axis']) if accel_chip is None: - gcmd.error('No suitable accelerometer found for measurement!') + raise gcmd.error('No suitable accelerometer found for measurement!') accelerometer = Accelerometer(printer.lookup_object(accel_chip)) # Then do the actual measurements diff --git a/shaketune/measurement/axes_map.py b/shaketune/measurement/axes_map.py index ef21ab8..f43a584 100644 --- a/shaketune/measurement/axes_map.py +++ b/shaketune/measurement/axes_map.py @@ -22,12 +22,12 @@ def axes_map_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy') k_accelerometer = printer.lookup_object(accel_chip, None) if k_accelerometer is None: - gcmd.error('Error: multi-accelerometer configurations are not supported for this macro!') + raise gcmd.error('Multi-accelerometer configurations are not supported for this macro!') pconfig = printer.lookup_object('configfile') - current_axes_map = pconfig.status_raw_config[accel_chip]['axes_map'] - if current_axes_map.strip().replace(' ', '') != 'x,y,z': - gcmd.error( - f'Error: The parameter axes_map is already set in your {accel_chip} configuration! Please remove it (or set it to "x,y,z")!' + current_axes_map = pconfig.status_raw_config[accel_chip].get('axes_map', None) + if current_axes_map is not None and current_axes_map.strip().replace(' ', '') != 'x,y,z': + raise gcmd.error( + f'The parameter axes_map is already set in your {accel_chip} configuration! Please remove it (or set it to "x,y,z")!' ) accelerometer = Accelerometer(k_accelerometer) diff --git a/shaketune/measurement/belts_comparison.py b/shaketune/measurement/belts_comparison.py index ef7a203..3296fae 100644 --- a/shaketune/measurement/belts_comparison.py +++ b/shaketune/measurement/belts_comparison.py @@ -40,11 +40,11 @@ def compare_belts_responses(gcmd, config, st_process: ShakeTuneProcess) -> None: # For CoreXZ kinematics, we can use the X axis accelerometer as most of the time they are moving bed printers accel_chip = Accelerometer.find_axis_accelerometer(printer, 'x') else: - gcmd.error('Only CoreXY and CoreXZ kinematics are supported for the belt comparison tool!') + raise gcmd.error('Only CoreXY and CoreXZ kinematics are supported for the belt comparison tool!') ConsoleOutput.print(f'{motors_config_parser.kinematics.upper()} kinematics mode') if accel_chip is None: - gcmd.error( + raise gcmd.error( 'No suitable accelerometer found for measurement! Multi-accelerometer configurations are not supported for this macro.' ) accelerometer = Accelerometer(printer.lookup_object(accel_chip)) @@ -52,10 +52,10 @@ def compare_belts_responses(gcmd, config, st_process: ShakeTuneProcess) -> None: # Move to the starting point test_points = res_tester.test.get_start_test_points() if len(test_points) > 1: - gcmd.error('Only one test point in the [resonance_tester] section is supported by Shake&Tune.') + raise gcmd.error('Only one test point in the [resonance_tester] section is supported by Shake&Tune.') if test_points[0] == (-1, -1, -1): if z_height is None: - gcmd.error( + raise gcmd.error( 'Z_HEIGHT parameter is required if the test_point in [resonance_tester] section is set to -1,-1,-1' ) # Use center of bed in case the test point in [resonance_tester] is set to -1,-1,-1 diff --git a/shaketune/measurement/static_freq.py b/shaketune/measurement/static_freq.py index 0699dab..17ef82e 100644 --- a/shaketune/measurement/static_freq.py +++ b/shaketune/measurement/static_freq.py @@ -15,7 +15,7 @@ def excitate_axis_at_freq(gcmd, config) -> None: axis_config = next((item for item in AXIS_CONFIG if item['axis'] == axis), None) if axis_config is None: - gcmd.error('AXIS selection invalid. Should be either x, y, a or b!') + raise gcmd.error('AXIS selection invalid. Should be either x, y, a or b!') ConsoleOutput.print(f'Excitating {axis.upper()} axis at {freq}Hz for {duration} seconds') @@ -31,10 +31,10 @@ def excitate_axis_at_freq(gcmd, config) -> None: # Move to the starting point test_points = res_tester.test.get_start_test_points() if len(test_points) > 1: - gcmd.error('Only one test point in the [resonance_tester] section is supported by Shake&Tune.') + raise gcmd.error('Only one test point in the [resonance_tester] section is supported by Shake&Tune.') if test_points[0] == (-1, -1, -1): if z_height is None: - gcmd.error( + raise gcmd.error( 'Z_HEIGHT parameter is required if the test_point in [resonance_tester] section is set to -1,-1,-1' ) # Use center of bed in case the test point in [resonance_tester] is set to -1,-1,-1 diff --git a/shaketune/measurement/vibrations_profile.py b/shaketune/measurement/vibrations_profile.py index 625d887..e131bb3 100644 --- a/shaketune/measurement/vibrations_profile.py +++ b/shaketune/measurement/vibrations_profile.py @@ -21,7 +21,7 @@ def create_vibrations_profile(gcmd, config, st_process: ShakeTuneProcess) -> Non accel_chip = gcmd.get('ACCEL_CHIP', default=None) if (size / (max_speed / 60)) < 0.25: - gcmd.error('The size of the movement is too small for the given speed! Increase SIZE or decrease MAX_SPEED!') + raise gcmd.error('The size of the movement is too small for the given speed! Increase SIZE or decrease MAX_SPEED!') printer = config.get_printer() gcode = printer.lookup_object('gcode') @@ -31,7 +31,7 @@ def create_vibrations_profile(gcmd, config, st_process: ShakeTuneProcess) -> Non # Check that input shaper is already configured if input_shaper is None: - gcmd.error('Input shaper is not configured! Please run the shaper calibration macro first.') + raise gcmd.error('Input shaper is not configured! Please run the shaper calibration macro first.') motors_config_parser = MotorsConfigParser(config, motors=['stepper_x', 'stepper_y']) if motors_config_parser.kinematics == 'cartesian' or motors_config_parser.kinematics == 'corexz': @@ -39,7 +39,7 @@ def create_vibrations_profile(gcmd, config, st_process: ShakeTuneProcess) -> Non elif motors_config_parser.kinematics == 'corexy': main_angles = [45, 135] # CoreXY motors are on A and B axis (45 and 135 degrees) else: - gcmd.error( + raise gcmd.error( 'Only Cartesian, CoreXY and CoreXZ kinematics are supported at the moment for the vibrations measurement tool!' ) ConsoleOutput.print(f'{motors_config_parser.kinematics.upper()} kinematics mode') @@ -76,7 +76,7 @@ def create_vibrations_profile(gcmd, config, st_process: ShakeTuneProcess) -> Non current_accel_chip = Accelerometer.find_axis_accelerometer(printer, accel_axis) k_accelerometer = printer.lookup_object(current_accel_chip, None) if k_accelerometer is None: - gcmd.error(f'Error: accelerometer [{current_accel_chip}] not found!') + raise gcmd.error(f'Accelerometer [{current_accel_chip}] not found!') accelerometer = Accelerometer(k_accelerometer) ConsoleOutput.print(f'Accelerometer chip used for this angle: [{current_accel_chip}]') diff --git a/shaketune/post_processing/graph_vibrations.py b/shaketune/post_processing/graph_vibrations.py index 712a727..3a20ff4 100644 --- a/shaketune/post_processing/graph_vibrations.py +++ b/shaketune/post_processing/graph_vibrations.py @@ -571,7 +571,7 @@ def plot_motor_config_txt(fig, motors, differences): for mot, lbl in motor_details ] config_blocks.append( - f'| TMC Autotune enabled (PWM freq target: X={motors[0].get_config('pwm_freq_target')}kHz / Y={motors[1].get_config("pwm_freq_target")}kHz)' + f'| TMC Autotune enabled (PWM freq target: X={motors[0].get_config("pwm_freq_target")}kHz / Y={motors[1].get_config("pwm_freq_target")}kHz)' ) else: config_blocks = [ From 73b93107d7f70218e7716ba74972c0379d1a8a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Tue, 4 Jun 2024 23:04:11 +0200 Subject: [PATCH 41/50] fix crash when ACCEL_CHIP is an empty string --- shaketune/measurement/vibrations_profile.py | 3 +++ shaketune/post_processing/graph_vibrations.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/shaketune/measurement/vibrations_profile.py b/shaketune/measurement/vibrations_profile.py index e131bb3..d8a0f78 100644 --- a/shaketune/measurement/vibrations_profile.py +++ b/shaketune/measurement/vibrations_profile.py @@ -20,6 +20,9 @@ def create_vibrations_profile(gcmd, config, st_process: ShakeTuneProcess) -> Non feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) accel_chip = gcmd.get('ACCEL_CHIP', default=None) + if accel_chip == '': + accel_chip = None + if (size / (max_speed / 60)) < 0.25: raise gcmd.error('The size of the movement is too small for the given speed! Increase SIZE or decrease MAX_SPEED!') diff --git a/shaketune/post_processing/graph_vibrations.py b/shaketune/post_processing/graph_vibrations.py index 3a20ff4..5689cfb 100644 --- a/shaketune/post_processing/graph_vibrations.py +++ b/shaketune/post_processing/graph_vibrations.py @@ -571,7 +571,7 @@ def plot_motor_config_txt(fig, motors, differences): for mot, lbl in motor_details ] config_blocks.append( - f'| TMC Autotune enabled (PWM freq target: X={motors[0].get_config("pwm_freq_target")}kHz / Y={motors[1].get_config("pwm_freq_target")}kHz)' + f'| TMC Autotune enabled (PWM freq target: X={int(motors[0].get_config("pwm_freq_target"))}kHz / Y={int(motors[1].get_config("pwm_freq_target"))}kHz)' ) else: config_blocks = [ From abd3e2d98f63f9e257fa694647fcf0df066b430c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Tue, 4 Jun 2024 23:06:52 +0200 Subject: [PATCH 42/50] fix macro parameter None value crashing when it's an empty string --- shaketune/measurement/axes_input_shaper.py | 3 +++ shaketune/measurement/belts_comparison.py | 3 +++ shaketune/measurement/static_freq.py | 3 +++ 3 files changed, 9 insertions(+) diff --git a/shaketune/measurement/axes_input_shaper.py b/shaketune/measurement/axes_input_shaper.py index 20c1a58..a0985b2 100644 --- a/shaketune/measurement/axes_input_shaper.py +++ b/shaketune/measurement/axes_input_shaper.py @@ -21,6 +21,9 @@ def axes_shaper_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) z_height = gcmd.get_float('Z_HEIGHT', default=None, minval=1) + if accel_per_hz == '': + accel_per_hz = None + printer = config.get_printer() gcode = printer.lookup_object('gcode') toolhead = printer.lookup_object('toolhead') diff --git a/shaketune/measurement/belts_comparison.py b/shaketune/measurement/belts_comparison.py index 3296fae..4f5e235 100644 --- a/shaketune/measurement/belts_comparison.py +++ b/shaketune/measurement/belts_comparison.py @@ -17,6 +17,9 @@ def compare_belts_responses(gcmd, config, st_process: ShakeTuneProcess) -> None: feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) z_height = gcmd.get_float('Z_HEIGHT', default=None, minval=1) + if accel_per_hz == '': + accel_per_hz = None + printer = config.get_printer() gcode = printer.lookup_object('gcode') toolhead = printer.lookup_object('toolhead') diff --git a/shaketune/measurement/static_freq.py b/shaketune/measurement/static_freq.py index 17ef82e..bc77251 100644 --- a/shaketune/measurement/static_freq.py +++ b/shaketune/measurement/static_freq.py @@ -13,6 +13,9 @@ def excitate_axis_at_freq(gcmd, config) -> None: feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) z_height = gcmd.get_float('Z_HEIGHT', default=None, minval=1) + if accel_per_hz == '': + accel_per_hz = None + axis_config = next((item for item in AXIS_CONFIG if item['axis'] == axis), None) if axis_config is None: raise gcmd.error('AXIS selection invalid. Should be either x, y, a or b!') From f9394c5706436dab50774c983cd089ed190e1866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Wed, 5 Jun 2024 11:58:02 +0200 Subject: [PATCH 43/50] current unit for freq target --- shaketune/post_processing/graph_vibrations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaketune/post_processing/graph_vibrations.py b/shaketune/post_processing/graph_vibrations.py index 5689cfb..7fbf8e9 100644 --- a/shaketune/post_processing/graph_vibrations.py +++ b/shaketune/post_processing/graph_vibrations.py @@ -571,7 +571,7 @@ def plot_motor_config_txt(fig, motors, differences): for mot, lbl in motor_details ] config_blocks.append( - f'| TMC Autotune enabled (PWM freq target: X={int(motors[0].get_config("pwm_freq_target"))}kHz / Y={int(motors[1].get_config("pwm_freq_target"))}kHz)' + f'| TMC Autotune enabled (PWM freq target: X={int(motors[0].get_config("pwm_freq_target")/1000)}kHz / Y={int(motors[1].get_config("pwm_freq_target")/1000)}kHz)' ) else: config_blocks = [ From 4384a8339e574b1dc6bf9ac9a36489a96caf0664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Fri, 7 Jun 2024 18:43:17 +0200 Subject: [PATCH 44/50] improved the amplitude delta percentage computation on belt graph --- shaketune/post_processing/graph_belts.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/shaketune/post_processing/graph_belts.py b/shaketune/post_processing/graph_belts.py index 0f2ac61..80ca952 100644 --- a/shaketune/post_processing/graph_belts.py +++ b/shaketune/post_processing/graph_belts.py @@ -153,6 +153,8 @@ def plot_compare_frequency(ax, signal1, signal2, signal1_belt, signal2_belt, max ax.plot(signal1.freqs, signal1.psd, label='Belt ' + signal1_belt, color=KLIPPAIN_COLORS['purple']) ax.plot(signal2.freqs, signal2.psd, label='Belt ' + signal2_belt, color=KLIPPAIN_COLORS['orange']) + psd_highest_max = max(signal1.psd.max(), signal2.psd.max()) + # Trace and annotate the peaks on the graph paired_peak_count = 0 unpaired_peak_count = 0 @@ -160,9 +162,10 @@ def plot_compare_frequency(ax, signal1, signal2, signal1_belt, signal2_belt, max for _, (peak1, peak2) in enumerate(signal1.paired_peaks): label = ALPHABET[paired_peak_count] - amplitude_offset = abs( - ((signal2.psd[peak2[0]] - signal1.psd[peak1[0]]) / max(signal1.psd[peak1[0]], signal2.psd[peak2[0]])) * 100 - ) + # amplitude_offset = abs( + # ((signal2.psd[peak2[0]] - signal1.psd[peak1[0]]) / max(signal1.psd[peak1[0]], signal2.psd[peak2[0]])) * 100 + # ) + amplitude_offset = abs(((signal2.psd[peak2[0]] - signal1.psd[peak1[0]]) / psd_highest_max) * 100) frequency_offset = abs(signal2.freqs[peak2[0]] - signal1.freqs[peak1[0]]) offsets_table_data.append([f'Peaks {label}', f'{frequency_offset:.1f} Hz', f'{amplitude_offset:.1f} %']) @@ -232,7 +235,6 @@ def plot_compare_frequency(ax, signal1, signal2, signal1_belt, signal2_belt, max ax.set_xlabel('Frequency (Hz)') ax.set_xlim([0, max_freq]) ax.set_ylabel('Power spectral density') - psd_highest_max = max(signal1.psd.max(), signal2.psd.max()) ax.set_ylim([0, psd_highest_max * 1.1]) ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) From da51082b44cec0c64662920dbdc1892884efdf6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sat, 8 Jun 2024 17:02:28 +0200 Subject: [PATCH 45/50] Static freq optional graphs (#112) --- shaketune/dummy_macros.cfg | 4 +- shaketune/measurement/resonance_test.py | 32 +++- shaketune/measurement/static_freq.py | 51 +++++- shaketune/post_processing/__init__.py | 1 + shaketune/post_processing/graph_belts.py | 2 +- shaketune/post_processing/graph_creator.py | 50 ++++++ shaketune/post_processing/graph_static.py | 175 +++++++++++++++++++++ shaketune/shaketune.py | 12 +- shaketune/shaketune_config.py | 8 +- 9 files changed, 322 insertions(+), 13 deletions(-) create mode 100644 shaketune/post_processing/graph_static.py diff --git a/shaketune/dummy_macros.cfg b/shaketune/dummy_macros.cfg index d3909f8..5e7b43d 100644 --- a/shaketune/dummy_macros.cfg +++ b/shaketune/dummy_macros.cfg @@ -7,12 +7,14 @@ [gcode_macro EXCITATE_AXIS_AT_FREQ] description: dummy gcode: + {% set dummy = params.CREATE_GRAPH|default(0) %} {% set dummy = params.FREQUENCY|default(25) %} - {% set dummy = params.DURATION|default(10) %} + {% set dummy = params.DURATION|default(30) %} {% set dummy = params.ACCEL_PER_HZ %} {% set dummy = params.AXIS|default('x') %} {% set dummy = params.TRAVEL_SPEED|default(120) %} {% set dummy = params.Z_HEIGHT %} + {% set dummy = params.ACCEL_CHIP %} _EXCITATE_AXIS_AT_FREQ {rawparams} diff --git a/shaketune/measurement/resonance_test.py b/shaketune/measurement/resonance_test.py index 6913626..9ce31b5 100644 --- a/shaketune/measurement/resonance_test.py +++ b/shaketune/measurement/resonance_test.py @@ -18,7 +18,7 @@ from ..helpers.console_output import ConsoleOutput # to test the resonance frequency of the printer and its components def vibrate_axis(toolhead, gcode, axis_direction, min_freq, max_freq, hz_per_sec, accel_per_hz): freq = min_freq - X, Y, Z, E = toolhead.get_position() # Get current position + X, Y, Z, E = toolhead.get_position() sign = 1.0 while freq <= max_freq + 0.000001: @@ -48,3 +48,33 @@ def vibrate_axis(toolhead, gcode, axis_direction, min_freq, max_freq, hz_per_sec ConsoleOutput.print(f'Testing frequency: {freq:.0f} Hz') toolhead.wait_moves() + + +# This function is used to vibrate the toolhead in a specific axis direction at a static frequency for a specific duration +def vibrate_axis_at_static_freq(toolhead, gcode, axis_direction, freq, duration, accel_per_hz): + X, Y, Z, E = toolhead.get_position() + sign = 1.0 + + # Compute movements values + t_seg = 0.25 / freq + accel = accel_per_hz * freq + max_v = accel * t_seg + toolhead.cmd_M204(gcode.create_gcode_command('M204', 'M204', {'S': accel})) + L = 0.5 * accel * t_seg**2 + + # Calculate move points based on axis direction (X, Y and Z) + magnitude = math.sqrt(sum([component**2 for component in axis_direction])) + normalized_direction = tuple(component / magnitude for component in axis_direction) + dX, dY, dZ = normalized_direction[0] * L, normalized_direction[1] * L, normalized_direction[2] * L + + # Start a timer to measure the duration of the test and execute the vibration within the specified time + start_time = toolhead.reactor.monotonic() + while toolhead.reactor.monotonic() - start_time < duration: + nX = X + sign * dX + nY = Y + sign * dY + nZ = Z + sign * dZ + toolhead.move([nX, nY, nZ, E], max_v) + toolhead.move([X, Y, Z, E], max_v) + sign *= -1 + + toolhead.wait_moves() diff --git a/shaketune/measurement/static_freq.py b/shaketune/measurement/static_freq.py index bc77251..011e305 100644 --- a/shaketune/measurement/static_freq.py +++ b/shaketune/measurement/static_freq.py @@ -2,17 +2,23 @@ from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput -from .resonance_test import vibrate_axis +from ..shaketune_process import ShakeTuneProcess +from .accelerometer import Accelerometer +from .resonance_test import vibrate_axis_at_static_freq -def excitate_axis_at_freq(gcmd, config) -> None: +def excitate_axis_at_freq(gcmd, config, st_process: ShakeTuneProcess) -> None: + create_graph = gcmd.get_int('CREATE_GRAPH', default=0, minval=0, maxval=1) == 1 freq = gcmd.get_int('FREQUENCY', default=25, minval=1) - duration = gcmd.get_int('DURATION', default=10, minval=1) + duration = gcmd.get_int('DURATION', default=30, minval=1) accel_per_hz = gcmd.get_float('ACCEL_PER_HZ', default=None) axis = gcmd.get('AXIS', default='x').lower() feedrate_travel = gcmd.get_float('TRAVEL_SPEED', default=120.0, minval=20.0) z_height = gcmd.get_float('Z_HEIGHT', default=None, minval=1) + accel_chip = gcmd.get('ACCEL_CHIP', default=None) + if accel_chip == '': + accel_chip = None if accel_per_hz == '': accel_per_hz = None @@ -20,6 +26,15 @@ def excitate_axis_at_freq(gcmd, config) -> None: if axis_config is None: raise gcmd.error('AXIS selection invalid. Should be either x, y, a or b!') + if create_graph: + printer = config.get_printer() + if accel_chip is None: + accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy' if axis in ['a', 'b'] else axis) + k_accelerometer = printer.lookup_object(accel_chip, None) + if k_accelerometer is None: + raise gcmd.error(f'Accelerometer chip [{accel_chip}] was not found!') + accelerometer = Accelerometer(k_accelerometer) + ConsoleOutput.print(f'Excitating {axis.upper()} axis at {freq}Hz for {duration} seconds') printer = config.get_printer() @@ -55,7 +70,29 @@ def excitate_axis_at_freq(gcmd, config) -> None: toolhead.manual_move(point, feedrate_travel) toolhead.dwell(0.5) - min_freq = freq - 1 - max_freq = freq + 1 - hz_per_sec = 1 / (duration / 3) - vibrate_axis(toolhead, gcode, axis_config['direction'], min_freq, max_freq, hz_per_sec, accel_per_hz) + # Deactivate input shaper if it is active to get raw movements + input_shaper = printer.lookup_object('input_shaper', None) + if input_shaper is not None: + input_shaper.disable_shaping() + else: + input_shaper = None + + # If the user want to create a graph, we start accelerometer recording + if create_graph: + accelerometer.start_measurement() + + toolhead.dwell(0.5) + vibrate_axis_at_static_freq(toolhead, gcode, axis_config['direction'], freq, duration, accel_per_hz) + toolhead.dwell(0.5) + + # Re-enable the input shaper if it was active + if input_shaper is not None: + input_shaper.enable_shaping() + + # If the user wanted to create a graph, we stop the recording and generate it + if create_graph: + accelerometer.stop_measurement(f'staticfreq_{axis.upper()}', append_time=True) + + creator = st_process.get_graph_creator() + creator.configure(freq, duration, accel_per_hz) + st_process.run() diff --git a/shaketune/post_processing/__init__.py b/shaketune/post_processing/__init__.py index 5ec0700..247c2ca 100644 --- a/shaketune/post_processing/__init__.py +++ b/shaketune/post_processing/__init__.py @@ -4,4 +4,5 @@ from .graph_creator import AxesMapFinder as AxesMapFinder from .graph_creator import BeltsGraphCreator as BeltsGraphCreator from .graph_creator import GraphCreator as GraphCreator from .graph_creator import ShaperGraphCreator as ShaperGraphCreator +from .graph_creator import StaticGraphCreator as StaticGraphCreator from .graph_creator import VibrationsGraphCreator as VibrationsGraphCreator diff --git a/shaketune/post_processing/graph_belts.py b/shaketune/post_processing/graph_belts.py index 80ca952..17d1204 100644 --- a/shaketune/post_processing/graph_belts.py +++ b/shaketune/post_processing/graph_belts.py @@ -239,7 +239,7 @@ def plot_compare_frequency(ax, signal1, signal2, signal1_belt, signal2_belt, max ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) ax.yaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) - ax.ticklabel_format(axis='y', style='scientific', scilimits=(0, 0)) + ax.ticklabel_format(axis='x', style='scientific', scilimits=(0, 0)) ax.grid(which='major', color='grey') ax.grid(which='minor', color='lightgrey') fontP = matplotlib.font_manager.FontProperties() diff --git a/shaketune/post_processing/graph_creator.py b/shaketune/post_processing/graph_creator.py index 401ff6b..a4c6b35 100644 --- a/shaketune/post_processing/graph_creator.py +++ b/shaketune/post_processing/graph_creator.py @@ -15,6 +15,7 @@ from ..shaketune_config import ShakeTuneConfig from .analyze_axesmap import axesmap_calibration from .graph_belts import belts_calibration from .graph_shaper import shaper_calibration +from .graph_static import static_frequency_tool from .graph_vibrations import vibrations_profile @@ -275,3 +276,52 @@ class AxesMapFinder(GraphCreator): csv_file = self._folder / f'axesmap_{file_date}_{suffix}.csv' csv_file.unlink(missing_ok=True) old_file.unlink() + + +class StaticGraphCreator(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config) + + self._freq = None + self._duration = None + self._accel_per_hz = None + + self._setup_folder('staticfreq') + + def configure(self, freq: float, duration: float, accel_per_hz: float = None) -> None: + self._freq = freq + self._duration = duration + self._accel_per_hz = accel_per_hz + + def create_graph(self) -> None: + if not self._freq or not self._duration or not self._accel_per_hz: + raise ValueError('freq, duration and accel_per_hz must be set to create the static frequency graph!') + + lognames = self._move_and_prepare_files( + glob_pattern='shaketune-staticfreq_*.csv', + min_files_required=1, + custom_name_func=lambda f: f.stem.split('_')[1].upper(), + ) + fig = static_frequency_tool( + lognames=[str(path) for path in lognames], + klipperdir=str(self._config.klipper_folder), + freq=self._freq, + duration=self._duration, + max_freq=200.0, + accel_per_hz=self._accel_per_hz, + st_version=self._version, + ) + self._save_figure_and_cleanup(fig, lognames, lognames[0].stem.split('_')[-1]) + + def clean_old_files(self, keep_results: int = 3) -> None: + # Get all PNG files in the directory as a list of Path objects + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + + if len(files) <= keep_results: + return # No need to delete any files + + # Delete the older files + for old_file in files[keep_results:]: + csv_file = old_file.with_suffix('.csv') + csv_file.unlink(missing_ok=True) + old_file.unlink() diff --git a/shaketune/post_processing/graph_static.py b/shaketune/post_processing/graph_static.py new file mode 100644 index 0000000..54564ca --- /dev/null +++ b/shaketune/post_processing/graph_static.py @@ -0,0 +1,175 @@ +#!/usr/bin/env python3 + +import optparse +import os +from datetime import datetime + +import matplotlib +import matplotlib.font_manager +import matplotlib.pyplot as plt +import matplotlib.ticker +import numpy as np + +matplotlib.use('Agg') + +from ..helpers.common_func import ( + compute_spectrogram, + parse_log, +) +from ..helpers.console_output import ConsoleOutput + +PEAKS_DETECTION_THRESHOLD = 0.05 +PEAKS_EFFECT_THRESHOLD = 0.12 +SPECTROGRAM_LOW_PERCENTILE_FILTER = 5 +MAX_VIBRATIONS = 5.0 + +KLIPPAIN_COLORS = { + 'purple': '#70088C', + 'orange': '#FF8D32', + 'dark_purple': '#150140', + 'dark_orange': '#F24130', + 'red_pink': '#F2055C', +} + + +###################################################################### +# Graphing +###################################################################### + + +def plot_spectrogram(ax, t, bins, pdata, max_freq): + ax.set_title('Time-Frequency Spectrogram', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') + + vmin_value = np.percentile(pdata, SPECTROGRAM_LOW_PERCENTILE_FILTER) + + cm = 'inferno' + norm = matplotlib.colors.LogNorm(vmin=vmin_value) + ax.imshow( + pdata.T, + norm=norm, + cmap=cm, + aspect='auto', + extent=[t[0], t[-1], bins[0], bins[-1]], + origin='lower', + interpolation='antialiased', + ) + + ax.set_xlim([0.0, max_freq]) + ax.set_ylabel('Time (s)') + ax.set_xlabel('Frequency (Hz)') + + return + + +def plot_energy_accumulation(ax, t, bins, pdata): + # Integrate the energy over the frequency bins for each time step and plot this vertically + ax.plot(np.trapz(pdata, t, axis=0), bins, color=KLIPPAIN_COLORS['orange']) + ax.set_title('Vibrations', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') + ax.set_xlabel('Cumulative Energy') + ax.set_ylabel('Time (s)') + ax.set_ylim([bins[0], bins[-1]]) + + ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) + ax.yaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) + ax.ticklabel_format(axis='x', style='scientific', scilimits=(0, 0)) + ax.grid(which='major', color='grey') + ax.grid(which='minor', color='lightgrey') + # ax.legend() + + +###################################################################### +# Startup and main routines +###################################################################### + + +def static_frequency_tool( + lognames, + klipperdir='~/klipper', + freq=None, + duration=None, + max_freq=500.0, + accel_per_hz=None, + st_version='unknown', +): + if freq is None or duration is None: + raise ValueError('Error: missing frequency or duration parameters!') + + datas = [data for data in (parse_log(fn) for fn in lognames) if data is not None] + if len(datas) > 1: + ConsoleOutput.print('Warning: incorrect number of .csv files detected. Only the first one will be used!') + + pdata, bins, t = compute_spectrogram(datas[0]) + del datas + + fig, ((ax1, ax3)) = plt.subplots( + 1, + 2, + gridspec_kw={ + 'width_ratios': [5, 3], + 'bottom': 0.080, + 'top': 0.840, + 'left': 0.050, + 'right': 0.985, + 'hspace': 0.166, + 'wspace': 0.138, + }, + ) + fig.set_size_inches(15, 7) + + title_line1 = 'STATIC FREQUENCY HELPER TOOL' + fig.text( + 0.060, 0.947, title_line1, ha='left', va='bottom', fontsize=20, color=KLIPPAIN_COLORS['purple'], weight='bold' + ) + try: + filename_parts = (lognames[0].split('/')[-1]).split('_') + dt = datetime.strptime(f'{filename_parts[1]} {filename_parts[2]}', '%Y%m%d %H%M%S') + title_line2 = dt.strftime('%x %X') + ' -- ' + filename_parts[3].upper().split('.')[0] + ' axis' + title_line3 = f'| Maintained frequency: {freq}Hz for {duration}s' + title_line4 = f'| Accel per Hz used: {accel_per_hz} mm/s²/Hz' if accel_per_hz is not None else '' + except Exception: + ConsoleOutput.print('Warning: CSV filename look to be different than expected (%s)' % (lognames[0])) + title_line2 = lognames[0].split('/')[-1] + title_line3 = '' + title_line4 = '' + fig.text(0.060, 0.939, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.55, 0.985, title_line3, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) + fig.text(0.55, 0.950, title_line4, ha='left', va='top', fontsize=11, color=KLIPPAIN_COLORS['dark_purple']) + + plot_spectrogram(ax1, t, bins, pdata, max_freq) + plot_energy_accumulation(ax3, t, bins, pdata) + + ax_logo = fig.add_axes([0.001, 0.894, 0.105, 0.105], anchor='NW') + ax_logo.imshow(plt.imread(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'klippain.png'))) + ax_logo.axis('off') + + if st_version != 'unknown': + fig.text(0.995, 0.980, st_version, ha='right', va='bottom', fontsize=8, color=KLIPPAIN_COLORS['purple']) + + return fig + + +def main(): + usage = '%prog [options] ' + opts = optparse.OptionParser(usage) + opts.add_option('-o', '--output', type='string', dest='output', default=None, help='filename of output graph') + opts.add_option('-f', '--freq', type='float', default=None, help='frequency maintained during the measurement') + opts.add_option('-d', '--duration', type='float', default=None, help='duration of the measurement') + opts.add_option('--max_freq', type='float', default=500.0, help='maximum frequency to graph') + opts.add_option('--accel_per_hz', type='float', default=None, help='accel_per_hz used during the measurement') + opts.add_option( + '-k', '--klipper_dir', type='string', dest='klipperdir', default='~/klipper', help='main klipper directory' + ) + options, args = opts.parse_args() + if len(args) < 1: + opts.error('Incorrect number of arguments') + if options.output is None: + opts.error('You must specify an output file.png to use the script (option -o)') + + fig = static_frequency_tool( + args, options.klipperdir, options.freq, options.duration, options.max_freq, options.accel_per_hz, 'unknown' + ) + fig.savefig(options.output, dpi=150) + + +if __name__ == '__main__': + main() diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index 93d26eb..266a94f 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -12,7 +12,13 @@ from .measurement import ( create_vibrations_profile, excitate_axis_at_freq, ) -from .post_processing import AxesMapFinder, BeltsGraphCreator, ShaperGraphCreator, VibrationsGraphCreator +from .post_processing import ( + AxesMapFinder, + BeltsGraphCreator, + ShaperGraphCreator, + StaticGraphCreator, + VibrationsGraphCreator, +) from .shaketune_config import ShakeTuneConfig from .shaketune_process import ShakeTuneProcess @@ -103,7 +109,9 @@ class ShakeTune: def cmd_EXCITATE_AXIS_AT_FREQ(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') - excitate_axis_at_freq(gcmd, self._pconfig) + static_freq_graph_creator = StaticGraphCreator(self._config) + st_process = ShakeTuneProcess(self._config, static_freq_graph_creator, self.timeout) + excitate_axis_at_freq(gcmd, self._pconfig, st_process) def cmd_AXES_MAP_CALIBRATION(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') diff --git a/shaketune/shaketune_config.py b/shaketune/shaketune_config.py index 71a8930..7046d0f 100644 --- a/shaketune/shaketune_config.py +++ b/shaketune/shaketune_config.py @@ -7,7 +7,13 @@ from .helpers.console_output import ConsoleOutput KLIPPER_FOLDER = Path.home() / 'klipper' KLIPPER_LOG_FOLDER = Path.home() / 'printer_data/logs' RESULTS_BASE_FOLDER = Path.home() / 'printer_data/config/K-ShakeTune_results' -RESULTS_SUBFOLDERS = {'axesmap': 'axesmap', 'belts': 'belts', 'shaper': 'inputshaper', 'vibrations': 'vibrations'} +RESULTS_SUBFOLDERS = { + 'axesmap': 'axes_map', + 'belts': 'belts', + 'shaper': 'input_shaper', + 'vibrations': 'vibrations', + 'staticfreq': 'static_freq', +} class ShakeTuneConfig: From 9739f6220ee43de91f205d32658c897032cd9d67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Sun, 9 Jun 2024 23:12:36 +0200 Subject: [PATCH 46/50] Docs update for v4 (#113) --- README.md | 34 ++------- docs/README.md | 68 ++++-------------- docs/images/axes_map_inaccuracy.png | Bin 0 -> 168714 bytes docs/images/axesmap_example.png | Bin 0 -> 512898 bytes docs/images/excitate_at_freq_example.png | Bin 0 -> 197746 bytes docs/macros/axes_map_calibration.md | 51 +++++++++++++ ..._tuning.md => axes_shaper_calibrations.md} | 15 ++-- ...s_tuning.md => compare_belts_responses.md} | 15 ++-- ...rofile.md => create_vibrations_profile.md} | 15 ++-- docs/macros/excitate_axis_at_freq.md | 38 ++++++++++ 10 files changed, 128 insertions(+), 108 deletions(-) create mode 100644 docs/images/axes_map_inaccuracy.png create mode 100644 docs/images/axesmap_example.png create mode 100644 docs/images/excitate_at_freq_example.png create mode 100644 docs/macros/axes_map_calibration.md rename docs/macros/{axis_tuning.md => axes_shaper_calibrations.md} (98%) rename docs/macros/{belts_tuning.md => compare_belts_responses.md} (91%) rename docs/macros/{vibrations_profile.md => create_vibrations_profile.md} (92%) create mode 100644 docs/macros/excitate_axis_at_freq.md diff --git a/README.md b/README.md index 790b6ed..644df13 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,21 @@ # Klipper Shake&Tune plugin -This "Shake&Tune" repository is a standalone module from the [Klippain](https://github.com/Frix-x/klippain) ecosystem, designed to automate and calibrate the input shaper system on your Klipper 3D printer with a streamlined workflow and insightful vizualisations. This can be installed on any Klipper machine. It is not limited to those using Klippain. +Shake&Tune is a Klipper plugin from the [Klippain](https://github.com/Frix-x/klippain) ecosystem, designed to create insightful visualizations to help you troubleshoot your mechanical problems and give you tools to better calibrate the input shaper filters on your 3D printer. It can be installed on any Klipper machine and is not limited to those using the full Klippain. + +Check out the **[detailed documentation here](./docs/README.md)**. ![logo banner](./docs/banner.png) -It operates in two steps: - 1. Utilizing specially tailored Klipper macros, it initiates tests on either the belts or the printer X/Y axis to measure the machine axes behavior. This is basically an automated call to the Klipper `TEST_RESONANCES` macro with custom parameters. - 2. Then a custom Python script is called to: - 1. Generate insightful and improved graphs, aiding in parameter tuning for the Klipper `[input_shaper]` system (including best shaper choice, resonant frequency and damping ratio) or diagnosing and rectifying mechanical issues (like belt tension, defective bearings, etc..) - 2. Relocates the graphs and associated CSV files to your Klipper config folder for easy access via Mainsail/Fluidd to eliminate the need for SSH. - 3. Manages the folder by retaining only the most recent results (default setting of keeping the latest three sets). - -Check out the **[detailed documentation of the Shake&Tune module here](./docs/README.md)**. You can also look at the documentation for each type of graph by directly clicking on them below to better understand your results and tune your machine! - -| [Belts graph](./docs/macros/belts_tuning.md) | [Axis input shaper graphs](./docs/macros/axis_tuning.md) | [Vibrations graph](./docs/macros/vibrations_profile.md) | -|:----------------:|:------------:|:---------------------:| -| [](./docs/macros/belts_tuning.md) | [](./docs/macros/axis_tuning.md) | [](./docs/macros/vibrations_profile.md) | - ## Installation -Follow these steps to install the Shake&Tune module in your printer: +Follow these steps to install Shake&Tune on your printer: 1. Be sure to have a working accelerometer on your machine and a `[resonance_tester]` section defined. You can follow the official [Measuring Resonances Klipper documentation](https://www.klipper3d.org/Measuring_Resonances.html) to configure it. - 1. Install the Shake&Tune package by running over SSH on your printer: + 1. Install Shake&Tune by running over SSH on your printer: ```bash wget -O - https://raw.githubusercontent.com/Frix-x/klippain-shaketune/main/install.sh | bash ``` - 1. Then, append the following to your `printer.cfg` file and restart Klipper (if prefered, you can include only the needed macros: using `*.cfg` is a convenient way to include them all at once): + 1. Then, append the following to your `printer.cfg` file and restart Klipper: ``` [shaketune] # result_folder: ~/printer_data/config/ShakeTune_results @@ -43,14 +32,3 @@ Follow these steps to install the Shake&Tune module in your printer: # timeout: 300 # The maximum time in seconds to let Shake&Tune process the CSV files and generate the graphs. ``` - -## Usage - -Ensure your machine is homed, then invoke one of the following macros as needed: - - `EXCITATE_AXIS_AT_FREQ` to maintain a specific excitation frequency, useful to inspect and find out what is resonating. - - `AXES_MAP_CALIBRATION` to automatically find Klipper's `axes_map` parameter for your accelerometer orientation (be careful, this is experimental for now and known to give bad results). - - `COMPARE_BELTS_RESPONSES` for a differential belt resonance graph, useful for checking relative belt tensions and belt path behaviors on a CoreXY printer. - - `AXES_SHAPER_CALIBRATION` for standard input shaper graphs, used to mitigate ringing/ghosting by tuning Klipper's input shaper filters. - - `CREATE_VIBRATIONS_PROFILE` for vibrations graphs as a function of toolhead direction and speed, used to find problematic ranges where the printer could be exposed to more VFAs and optimize your slicer speed profiles and TMC driver parameters. - -For further insights on the usage of these macros and the generated graphs, refer to the [K-Shake&Tune module documentation](./docs/README.md). diff --git a/docs/README.md b/docs/README.md index 406b783..a5e67e8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,16 +1,27 @@ -# Klipper Shake&Tune plugin documentation +# Shake&Tune documentation ![](./banner_long.png) When perfecting 3D prints and tuning your printer, there is all that resonance testing stuff that Shake&Tune will try to help you with. But keep in mind that it's part of a complete process, and Shake&Tune alone won't magically make your printer print at lightning speed. Also, when using the tools, **it's important to get back to the original need: good prints**. -While there are some ideal goals described in this documentation, you need to understand that it's not always possible to achieve the ideal resonance graphs due to a variety of factors unique to each printer, such as precision of the assembly, quality and brand of components, components wear, etc. Even a different accelerometer can give different results. But that's not a problem; the primary goal is to produce clean and satisfactory prints. If your test prints look good and meet your standards, even if the response curves aren't perfect, you're on the right track. **Trust your printer and your print results more than chasing ideal graphs!** If it's satisfactory, there's no need for further adjustments. +While there are some ideal goals described in this documentation, you need to understand that it's not always possible to achieve them due to a variety of factors unique to each printer, such as assembly precision, components quality and brand, components wear, etc. Even a different accelerometer can give different results. But that's not a problem; the primary goal is to produce clean and satisfactory prints. If your test prints look good and meet your standards, even if the response curves aren't perfect, you're on the right track. **Trust your printer and your print results more than chasing ideal graphs!** If it's satisfactory, there's no need for further adjustments. -First, you might want to check out the **[input shaping and tuning generalities](./is_tuning_generalities.md)** documentation to understand how it all works and what to look for when taking these measurements. +First, you may want to read the **[input shaping and tuning generalities](./is_tuning_generalities.md)** documentation to understand how it all works and what to look for when taking these measurements. -## Resonance testing +## Shake&Tune macros + +| Shake&Tune command | Resulting graphs example | +|:------|:-------:| +|[`AXES_MAP_CALIBRATION`](./macros/axes_map_calibration.md)

Verify that your accelerometer is working correctly and automatically find its Klipper's `axes_map` parameter | [](./macros/axes_map_calibration.md) | +|[`COMPARE_BELTS_RESPONSES`](./macros/compare_belts_responses.md)

Generate a differential belt resonance graph to verify relative belt tensions and belt path behaviors on a CoreXY or CoreXZ printer | [](./macros/compare_belts_responses.md) | +|[`AXES_SHAPER_CALIBRATION`](./macros/axes_shaper_calibrations.md)

Create the usual input shaper graphs to tune Klipper's input shaper filters and reduce ringing/ghosting | [](./macros/axes_shaper_calibrations.md) | +|[`CREATE_VIBRATIONS_PROFILE`](./macros/create_vibrations_profile.md)

Measure your global machine vibrations as a function of toolhead direction and speed to find problematic ranges where the printer could be exposed to more VFAs in order to optimize your slicer speed profiles and TMC drivers parameters | [](./macros/create_vibrations_profile.md) | +|[`EXCITATE_AXIS_AT_FREQ`](./macros/excitate_axis_at_freq.md)

Maintain a specific excitation frequency, useful to inspect parasite peaks and find out what is resonating | [](./macros/excitate_axis_at_freq.md) | + + +## Resonance testing workflow A standard tuning workflow might look something like this: @@ -64,55 +75,6 @@ flowchart TB class tensionBelts,checkmotion,SnT_Belts,SnT_IS,SnT_Vibrations,pressureAdvance,extrusionMultiplier,testPrint,checkTMC standard; ``` -You can access the documentation for each graph type by clicking on it in the table below. - -| [Belt response comparison](./macros/belts_tuning.md) | [Axis input shaper graphs](./macros/axis_tuning.md) | [Vibrations profile](./macros/vibrations_profile.md) | -|:----------------:|:------------:|:---------------------:| -| [](./macros/belts_tuning.md) | [](./macros/axis_tuning.md) | [](./macros/vibrations_profile.md) | - - -## Additional macros - -### AXES_MAP_CALIBRATION (experimental) - -All graphs generated by this package show plots based on accelerometer measurements, typically labeled with the X, Y, and Z axes. It's important to note that if the accelerometer is rotated, its axes may not align correctly with the machine axes, making the plots more difficult to interpret, analyze, and understand. The `AXES_MAP_CALIBRATION` is designed to automatically measure the alignement of the accelerometer in order to set it correctly. - - > **Note**: - > - > This misalignment doesn't affect the measurements because the total sum across all axes is used to set the input shaper filters. It's just an optional but convenient way to configure Klipper's `[adxl345]` (or whichever accelerometer you have) "axes_map" parameter. - -Here are the parameters available when calling this macro: - -| parameters | default value | description | -|-----------:|---------------|-------------| -|Z_HEIGHT|20|z height to put the toolhead before starting the movements. Be careful, if your accelerometer is mounted under the nozzle, increase it to avoid crashing it on the bed of the machine| -|SPEED|80|speed of the toolhead in mm/s for the movements| -|ACCEL|1500 (or max printer accel)|accel in mm/s^2 used for all the moves| -|TRAVEL_SPEED|120|speed in mm/s used for all the travels moves| - -The machine will move slightly in +X, +Y, and +Z, and output in the console: `Detected axes_map: -z,y,x`. - -Use this value in your `printer.cfg` config file: -``` -[adxl345] # replace "adxl345" by your correct accelerometer name -axes_map: -z,y,x -``` - -### EXCITATE_AXIS_AT_FREQ - -The `EXCITATE_AXIS_AT_FREQ` macro is particularly useful for troubleshooting mechanical vibrations or resonance issues. This macro allows you to maintain a specific excitation frequency for a set duration, enabling hands-on diagnostics. By touching different components during the excitation, you can identify the source of the vibration, as contact usually stops it. - -Here are the parameters available when calling this macro: - -| parameters | default value | description | -|-----------:|---------------|-------------| -|FREQUENCY|25|excitation frequency (in Hz) that you want to maintain. Usually, it's the frequency of a peak on one of the graphs| -|DURATION|10|duration in second to maintain this excitation| -|ACCEL_PER_HZ|None|accel per Hz value used for the test. If unset, it will use the value from your `[resonance_tester]` config section (75 is the default)| -|AXIS|x|axis you want to excitate. Can be set to either "x", "y", "a", "b"| -|TRAVEL_SPEED|120|speed in mm/s used for all the travel movements (to go to the start position prior to the test)| -|Z_HEIGHT|None|Z height wanted for the test. This value can be used if needed to override the Z value of the probe_point set in your `[resonance_tester]` config section| - ## Complementary ressources diff --git a/docs/images/axes_map_inaccuracy.png b/docs/images/axes_map_inaccuracy.png new file mode 100644 index 0000000000000000000000000000000000000000..a21d650cb276d5159671536b9dbaaf6c7f16fbfd GIT binary patch literal 168714 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

XLU$>iUI0_!bkUHcA>? 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%0Ay<_+*#w49rB3?PW0?B&;Kc*-y17#Ft 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ȺpfB7&^ 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%0AX7_ix;CZ}S zT8wlTzdB0o!ks}cUamnku9$5ZW4W$86JcoV{B3_k zP%q@uC$Z&;-whqB5IvH?VOgRq_)r^ z$3vLU9)fs*zCFUP^=B&P#fyhGUY|4ETAiUkZAD)n&K3?P8Ro}H^!~PsA3WD)zkK;p z)ni*3N^|@YhP7wh34lK{fKPDy8*7TXTE(n7shg$Nm|>FBd-fu4N>|Sh)joUr^gfmJ zI)+C`UIh(pLJ(@7{&g+Z8E;LaeRn<9-w%(-XnDNl%9Sg!;2C`uA8%9A4B>yi*Rk2K z>ORi;^6#4}g*LkI6yy-#O39f{lP7quG9ZuYBia*5u5|dZmB&>mx;}LnFh1P8mVNq@3Z-=jU_y50*|(RdD{Ay$&JS7zG$i7*rulI zsFfEcR~~}6bI;!&ub)7Vry<1WRK4P?s5uNt@^M%G~wwHlQavp==e`qo8AWDsI*8IBW)b}_%ykRWCHw*`l z(4Zqrm;S5+=VV8=e&@G?Sey>k@`?!k7YBb$yO3<9@Z(l zurLkG`Guvw-*K=T?`Z{LiJF)enDv*Pt=L)B9x#T75B`*=N<=XTF4CZ|2L}t6TBUD{ z5eyeLt{+T$A1?=K{V7nph5a66FcF^@N56TGx)74n-{)3}3l!Vy(Dx0U=_wppYL;mL zI6#Tfi`*sF^O)c&+uPlGw*?nRbl!DV0gf%e+(dt2RS+Ppd8%9UOs@614tQ&pdx*oF z5nx4AS*55g$Pkva+0QqA*>jM|15;CZdL6#;zgvoiX0*ay2eNq2*|TD1KdY#f9XoVg z4WU&{!e_fk;C%C2#Yp8!A8&a~@j@e|#L3(5LJYMbEIfPm%iyAXR{%qGBHz?zBT z*KT+6#UNcM{M^{vUb^}A?OXc1uUJ)oxhFh*#HMn`g`DLa-I;#3;}F>WA;VDh6j;~3 zQ+g@K`#Rro>_&!uB`c&t!a?snF^g7W*Is)f6eVZ-O7XDGwYhMxZx6n-t*BNy)AyFi z7`AHBOhJ!VxG8kc!8#g*X=z8KPLyaX ziTUoGkM}sZxd|b7KFyLUT>LEMu{=-kb^RMz6MWrf(2g zIc<>M)YNpUU=MDbT`|J^bUZ|TPA;yYlo-7lfNwt``ykw%;JbSk(5~?R(F1P>Xc29t zh399^JB=$}vE<(0ze!VMqK(Q|RPTIt%rz$SWH`r`LLPj#d|5;hQkmO$Vles?xXYo1 z2DSzWeE$*h#~Gc`wvRQ9uZEm0Y|=t35~&sj6ua0zV0{$43Qc$*3DGzjw7~Y6olRxf7hy z$O`;D(P~|4H{?IJg_;ro5WWETgqkGa36L^-+q8fj(av4eaTJ2y0(pqfLgv3X(U~#8 z^>H3~!ew^$y?+D?=O2e+@-dMu9YC{zpM2kxt;zrdK)^Liw=_vL?N-nXEdDFku8Bsy zEP)7zvb7Ox-wG?a;xx_Nq(pvLpoe)?g{*JhxY3^f{nc68g@pyPo`THm8GzvRc_!a} z0)R)_6U3s+bN%J02GQi}*SDSR%st+mzn{TrXmH4*5~&{@p@CUy&cC@Tcvs-eYo}C& zZ=+la9y9qJC{s7ZiV}f9SOXFHA#{Yim~cM`=UFPQ{q85?y;tu*a+JDq{d$x5_=VqM zs#!V=&?T$(Q@ZPdP;D?(1K@iE){>$9g-1Puo>Q>~!rc3BF1VP?_BRcl*egWSgIy{rQ5HiuC7LK*%L*VVvRBqv^=eHAXb zNQ{sJgfb&Y*W)e8L;!f~?~MHAD*f{dRvm@kwG%g9!7<+W!y_XBvutc^RKc}|T6!l- zzi05#V%q>ymFX_Vh&SlN+~k@zvqF#Xtqz;Q9vU__TVgX3ZcRI_oYkte8W=>VNT~EN za!fT_j|CDyoj(Ctj@^(PpVlX0ncel{sH+%KtiFTGKaWZ%kp>hdcZ^srzDt|)bLoyl zUYQO*B!k+{Tw`Ikc?13K0f_1bt*I*G1C^EL7H0p{I<_PvB&5Va@B zq8>rU24FgSaz@!(PvcHolVX~sE}0z4aH3YeS#OcBg77*U;iII7P-YuL z(Gz6dW!>e752JYqrp%cubXy!yGF)dhR2?cG)cN&2FI^&pVlvB(ng(N*@nME7TJwZU+c28)hrNWbxX(rsUg6RD!~^hl z%5rb=LpD1xF01>WXEoaYJo;8Q8ift$4zCMl^Lb%e35690lzDSyOJNhM(|H%~pP{{E z@GjDOYjp_L{Lg$YE-r>V<0wIWR+z&QE9SNj8V!&|?co>>{hrTHjxO}M4vhNP!87D+ zLeQX1cjihs{tYqow6I7QT$=iRW`I1n)(`S2Gc3UlQ`l3QIR+Q5ECC`UOG`_G+Bhl8 z8z2HlHp7>%yocPR1ElmJY@h-P3WzW^-))*azF<|Cljm!%smX4eVE)+Y6U5S!m#1fB_!NDxH;sje~9pS@%a`8)hi% zgDu+9FHqxeZ;T~K*bQQcxzVqL6+jOIER2Yg%WU3skSGvW(fIt-d$Rbip*)XYz>-BT zB1i=1Y$(9RAO``0lE4czz(E8mnOfp?4GkmEd0cIoT^@vz9^iEe-(5-Rt!Yt!f!ND4 zwm%#zf>}L?A!|3>zA5#9<-E%qsDL%|Ee=Nu>W2Z5F&bOVr46*ske!4b)E9#YC*Qrx zxw|JOyF*7CJUf0l32w!#CFx@PQWUQmDTLlySX}@lEZ8|XaDcUFpV=A= zpc+Q#uD94x*s4=V{$3&knPkv-Al{hAFTtK9(=M>W!I;mxke@tx(hb-l95+#N6VnU1 zT~_p>_s9t;7z1tkN`@fx*CT4+UK2e)sGsu<=i%HL+}-AW@5>D;2~&8!1+LaAxp%)6 z+|?Es47x}mAuD%9xEK4H!gA%hsGqDHncYblt1DTN*K%2^I7ScY6Tf(hf9pCf{zE}- z119oWg5w`F%crx{yA%l0{ZRM&~- zv{mQ*f`Ze0`W4IwxCr`gTzlo*ey3JWGI^-kcUSa>^p@41(b0?6fEAXWB_xD@{Be#f zB_+ko+`JlIckHw}tpm#{S?}mUf>z=qZ~XZ-&vi~OL$~w@z+%HD+xcFX9&5LWl$iMd zwr%W`dWI|zk(BBGtnQX~EoM3HOZQ%R&KA4DcFXlxvA7ZuX#V@%P?KnL9mSd6H`Aq1 zPHOTUDO+qj|UL&$g6YkS&MrWTQI{vu0B<^3E@Q6CByynrqN??R&r=dT%i7{OtYj_iDvEbRw5MB_ML<0&lcEepv>_ ztPBl_n%fE{N;0SxJT3L1G;HasoDH518-4pHi z*|P3+AA9XK^x!D_<6~&x${>_T%zXN7kgFMyUR+kj4C|`ed#x{6+_JsOA|ICaVYl6l zv5~OVVjv!##l!^5vfl@aKq_qstAZdFUOHPshCmA;A>sUtt?zkW9>;nHQv=975&&VZ zc1T6bY!6XgrN6ieiyD`n{QZ{;3E(G1wrpYu{@l`0P*f zXE-YBiD|q$p`R>vBHrzo&)(L+2-CoNea?=2BK2w8{*aBOv2c13511~n7i&qb^*XNi z&G`gF>K+8l(hw(Zd5PKedD`r(&Grb}UX^jU)amJbAg@UT%a;$Gw&^9V90;$ek$dI- zH`Z;?k4VU}JwqiE^$WunH!Gou*{wTeZuY7#ClZ~`u}DKbE}U`j;=^CgKhBPkGda_J zgJC@CC=+@qfXTLu27r)p&B%<)`FO8IMahjnk+pi-<#?)Ri{A?sdf5>I}(Or?)9LPj( z=N=^v>weta+q3xZQz=rzOg1$vF;^10LC|zch^YO9t z4OdZ+#Peu2mWDP1x3L{th_`=hQ^P{MN)EPg>=MeC7YV!(ItYknyFx`fq`ZyWXkj zFXRg*$ET*4+Ry%ld{74~BM6Z5(f6+$uGWk+3=d3yeVY9lP?kL!PE<}odU_Sf$X(<8 zERzv!A7)86>Vd8PwfaA0@|Be%OB_=QoI#Q9obd=2BXPhk$QpOId!NXzttWlB0y^rM!0HlC#}WI4#o+)vNzxst6W=2 z)rQ{ti#ki?`e(s;h>UO2(@DL(y`fen6sX*GkX#=O5Q@EioK@z?-o2akZ5sNaurg_& z)NcT!X%B%l+?|4UqJlnKoP1~ZhiJ1T9{c8;OEI@g)B%2v)9h5a=kHjo1D-O>Vc-4JRX@zVl*%O1A06VZh%r+5c1FS5nMD{V??1-%(m<|tRe}xCZ0GZ-tNWkBqvX&2CNq;lS63HS zaIruz&jg&cuKBxC4$q?zyNc0b{?ObYj!@1-bn0mr^-K1lQqNrHMIgC zNKa3HzuMpndOaOv6+BFcF_gTKGp)Rw1rEf#E0PG$@8*sqIrmzi!-U2}NrL&3ygc6K z)>cbr=R+V(MoadS86y|@e;S*VWI;QVPN2%n%oL(0H)f1}c3xb;#p(;ezsq5N!=bqk zai&P(NqYaDh@YPyBdk>a^@UUMR?S6VL<7FwZG`5uE>kf^VGx5<)zmoX$>kzA2`A8) zar69V;1^y#QBW|>%E_UIsE&t+C*d;P`66E1XE3wvugma9Mzo|X(vH)S;$U9V`adkN z|17mHCKUHRGHh&Y82j`u@Ho6>D~)PVc-KKCE%J=>(FJ&L)3GEHzQR4mgHh)gW}1T0 zI}LFgzy-vW`t9Co1L|r6yQbz3^|1e8@y>5}ou&GUO%@&5U)O(<2$NeLZf|=5h!05q z&kp1G&zd_H_XaF-0NoO|RhKn4rav}g7*I3}A05;4VUs`@DzNE;0tzUY|G8@VDMnZu z=M@fUG$jXwI2-_nkE~VhNx97SJ_7e0h35`}XAra>19@funf7ezfwaoARlixC@4Q+k6F9&4LbzN!^iJCxc12=)P_ONq-aNRJTn(AWLH99lpd81;q!&{nXsWJo(MKgJroaTDH(Z_W3Siq? zZ)jY#lL!H{&-&oO0|-jqv!n-*2o3wIjak=9GRS~X>Uwrs0>lGJX?=T4M&{jdiiVfK zQ`FuSxscp42!i0%%_4L(1XT1nntbzalI!(nD*Qm%q3p2*R-$O7UE3Z|0{{-WA6OE)}mr2af@DsuM@7?FK1#p zV-wgg^40zU+C=+bQDic^3y5bX@3pI?7@wGUCJ#93zfeH*Po^8&gyEu!_L*NU4H-@W6u7^vJ`$zJbj_6Y)T!KYIsG*p7< z1HkH!;LY~x0m+6@Fr7vR87Z#tqbqK~uYE(VbQN6~U^(Xw-C!7)5jg*|9%#hJfO;i5 z_EmWFyEH0c63mp_Foc(#oyBJ>_k2vY5Zo<;@qtW20g%x_GqJ?Fzl;H0)hvLwx8Wf0 zRQv9Z`3`R{H8&vfM%$*C0I8nR>w|d9%gckH-#zKxd-u{tj-9%y!h0(R>W@H6+nxdn zgxj)8CV9~b9te{3c<;v?ZYl(Ucmac;deVE#1;K5Q``jke-aF_X*}qcs&uFJc#o}SF zt)78;kb)jTRh68Wh$FLJO=Y+E^~4Ck*DDsGAiyw!P9*?55iaaAkQqln{gM@;59zjr z`0>+B%xxs}3_uTysOab#tJ5P0QO8Sp24!lisXg%BD)fbe9fEsi>VY)~`}_AEm#|^X#+i>X-VLi+}a5EjIgmXw@B)k7yp(5PIY zqoczxMn=XQP)7IX83IRy)*g(!e~Vci!s!FMtA&azcqpV})S}x)AG>}I41^>0<E@*>7pcOs=ynS&-@bNK7KR5w~^INaUj__51K_}$Q zfY)u3n(aR)WG>vkO{?cQBW}{;TDhgG<39R)9mMEM8RoS?6rIJ6C;GkDbYDTZYFxF2 z*_8mazW|)2F>q&!l?{n=YlwpTCRj=S(+KYRX{y+2S!HU^zO0e$RQ+6ndsVHSjJr2w96zNWwyK zHKuZ#0CYO0_6vVer37&Oa)vqlAT=Wc%r6ApJw4B7pma`6O|1e=GX>wIv9Xa|@z$+5 zwFu5$r{7BJHAgF`4?8KgLxr)h(d^3#CJ1uGYoPM|_3PJ2jriH#PKc=_$J|Qkn0g*| z@Jw0k&3Ck4%)|ovv=8}=@68#%-N{>iR^9pU5xU2c+@R>N1E+^E$dPuXeMK98Uvd!3 z{c5O$M6ljFCQbC@Gj3r|C=_m7+rw*H!87{m>PJ>Q3wtQAd5`kOg19)wCcw{~xw!?O z9oFX&lZOXst5%wlO**8#y`6JF_Y)+cp;{`Lx|_b6zdwZ$-5=PQbzL7mTKSM|dywdb zs3|3&@|KnsKNK#oK|6_GdN23aDo?>5c9ipkpZ4B7cHq!Vt48cSjW;&(JQUggqSy#Tpwh#7Sxnc~!NI(+q3!sJL@i8P)#)_Kq_JA$w`=`lg zP>T+MsLoO#)n1?p;u>Cd#}i-@1e4DlgV3A=D7kXuyY2kTf$e*pQ}Eu0F+k4z7Ex-F zu)28o`PF>(Hm9k!4lTGL z#}uSQp9L~R@q_K51~PP{9Yyi^>vzZKRp`)0G*#^(II4qA|6oQ(*ux=2iB|gHFSym9 z4_g^ofS~B+2Kho{Qd}|OXMcYftSC&DhfYpS?J)EaUA=mBILrKF*F0nh%AVaH=jRZc zR|lj*j@yC}5KSqc1hDN%jmjFxQu7}ZcE}ki_LPuYO`!{=dW#Pl+4V4nj=F^ZhWxau zaG&Ml%o28pOuXddQ<3Kl8VRzU*+b+V(x}`#oCV9g$kJw6-!NFHpu=l$4Y(A)^<6AmLU)JU*l2_+8u$lqS3OJEqkJ zLT^e+7-6|5*a2TM94xcVfxUq=jpANm<&L#g_otJyafAUlK()2x%=lEYVe`e!-U8_X zN@dQ7Q2LagpO}|-2tYV+?375!(DB(AEduvWa(h;0=4T**s4$2(N3lU5XB%Ms5n+f` zIiyFlzvvDo7VRR4`M-KfT?J7bM(hThlf9ACVOu(LdjI(k)l@$B;kN5$9_D#%I9LJ5 zk=bksN6v+sk%hqlU=HDE*E0q~H4n@?G$7-n!X2RJc|_;{vdH#X`GD$Xv>KmqEu@}| z{2Exfw=;)+rsuVA5n7B0;5K3XNdQl1TrrlLXVoQwe1dK(Z5lL`!N~rDd=ap$7>{7- zSy}b4!Rhm7x=a()e7+yF-iHSM?{11)1~1U7oT(=_-q#{EqE#zK*M&i#bUM$lhfDGC z<_<8?!J!u(7Ybs)(;;VwN)Jk_SQY3m&#i$JywNnG#7zr9n-y(%k}1Jcr=GZbyY3MtbvDEfg2tO(0uB zI)Q*wXI~YkTmCvR~4Lb=U<0cs`MKAW=sIj3?@tz^X{QRe z64LN?m*2~nm}IW5x}aRQ4jBY!GCm!rmWzmgN1SZs&WtTo^i+cjZg~y@@aIXdHmAI+ zwgtyZNcZ0?$$kRv>N6svVCO8atQf)wAZTGzI#W=T{AT}hco+jj%+HO4h@#!~%AxV3 z#AwuQw6cNO_|#qku7-J-fT4(M0@b#@TiSqX5~An4=RDm2V%j&bxEcV6yps`saBJw_ z`j=?$AdMdF6=j}41UYjXSZi5ad!J4H+W*CRAOwDi{UYzU3ss9D5(763X@q5PgmEFyR0K)P7T_WiE%-@@deJW-&<3lKS505T_51p>2Cg@Ek~B4mmX-|}2M&S#;XWAiM^_T2aJfsNJi+d_S%hws ze7}c>IXOFXmH&NoBA(vSQ;0qgmMai0!R0_}+trYqsG4y}&d)!rWj)Ejs~CY{ezNSN z#vi$uDe*8ZZSBi5%t<`Q=t!%_mXL3zaVw0DoDc`Qlx*KRN&o18luO0I%Jc-Wx@}Pj z_5TmDE>E{sXGrwbns4QeQN7!>J8419!TUrKBKy|3--KEI!$G0a-#2|!D>d<;yl%C# z#r;pM4lE!0>dr}GT&HuoSyvD4I!UGGACU3ySOEiYGAH?ZSl5gTCJPX_sl(I51H&kT zk57n$f=2CF+GRzE^+GDE)dRmBsB1VF-QmM2Z7T07D`h4ni`iWxPV(|H<~u%2B2H)y zPD(lk>VxFpeIgA5IBE31x4zzSGv)K<|IeN4)mB&HX735!Z=Dqv?@h2+_uA*z5QF)D z-kU7T+Iy|62mg>E|M##M4J3eQayhH)S)z=6v>^>->5`U)_S3&m-zoSH}tE5CB#`ygqn~8}@vB2~H>ksoDCdW8T zpVHqT{iMZTVBHf07%KJI1wi`iK(FDxz7d@5J!5$`!@=kzA734$0k*Xj#PzQO=l&4L zJ4f;l|6P}jy^s=f?|o-f)zDZ9#t~lkc8UBN^$+!M5oo;-Bn`ii@s-{kk=Z?N;i;%d zl2tTJiVsi-<_Y+(MoS3zXS%z)?b_5dE)tmWh@O5)0nkFNDI9JGYRLX7s0I=3_@_h_ zg3%-S$SL$>d-yt3y1n=_C`EJYXP^`zV^$r3k^H~Rc$kDa!T9As6iwlhsx>ZDq?t2w>CT@Z-><6@s zQB!}%-6O>K^WSZKXtgqrAQLt-<>jnv{|;r6@FJ8WC?%qM*z~)!pL~%~O2>Pp4M69` zFkaOJ;DZgIBH1@r-nkRo&bSAx!op`k9~$7__Ez-w9w6bywsPk*3RSDCtDn|%LCypx z$*Jrze^4QZ;XGyqd3pKnx&3v)O&O+l^|rP)6BJIuR-S(f;OlKWFAq-@u;oY(L&{bi zvIip-1_?U=aPVTjJ@4rl!gMZ!bc8xkBHqyHY$*h0?>iwDsMP%<$is%8PK z0T}cF3jreXpgVHJ2x#dKbdFMee$5(R|exkLm_?=y_5g<0Ds$PQ*|tik?XeVJs%UJ~@nD zy%G^MZwz{D<1RqBAWlUvn%{0(0dCC)&{I-Y79}kG)DIt^3}m8@U^sqLashvLK3HZj zTHB`ju!hdFDTjmQ2LJL90SXX7vLotdu$v#efK?$v3H(yV;GYBrj3k^29~Yrf4G=$?Q((J+Swq#p;EG4^%pRn97EmlmLD7SHJZNt{ ze6MO?Z`ajKj1ekL=ejj@4UJ$hOi_Y%|DeT8!QK5V;*!Y8$rWZgy1E_#0hRpmqhp;o z3ndXLDe0wN!FVWRjKDaGV0Q93FAa5dBQUsjmbp7>ZQ)iSZSr@*E*BMT6w-Exb>?$)_rrxxeiRk?WwZB1Xtv3Klh1bSe|Bg-s z=i@_A%{%B`(rNc1`_$c9>04w!a_JQ$qoUc8srf1WJw{Zp3zRS4LSuNGwFgLSWDfEJX-u$2Jgsf{61loNP^V zgUZZMBz7LyG88keOiF>8Pj33ko{*dn4=kz=z}q;yUn2S}(jsaE1W}cWj!mcrhJhKZ zhGK6jm5q>vV&8Q<7$W+EezhC+d>DeG-@kw75fHdxu8+BGPQ15oxp;I4z{>;m51;q8 zeD|n;m|*4BFaY%GurbU%aNcU>%?VCez3zzitSTSVA@NcvD3=(4$ z`xlTT13|;&R_g!~m-J&-2#~`H6OTVywDI!Y$-@V~?x}ugl=0g5rhmgC)5^li3LgW% zv~{QDVnI+4A>GlV?>`A*UbBt~wYkO(pbO#v%U3TMhL!^N2|^Q|vmSj0LR@~pU19gT ztXQ8s#>xefYcHzQ!G`h!#uar50LJ}(%kbaqE*7r~o5Br@A`4JMj-097pa88b^4t$I zG2TiTukqR0AfCq(P_5Vvc&~9#6Y~rm?cy)&J+!g~_9rH$(^j(9*8Jea4g@;UYq{kz zs%4&26JsEqBPJ9k(zPaT+eb#vcgGp|0-$MWW@e_*5+w-?vDvr$MSw14Ub!KX*Wa&) z-T!)*aW!t+`!C??sI}*SI$pVSn|Gahv45BNaF-_;L+{ni@-rIFJ1Yh0>eV-bc_t8Q z7bcVm?7?a?TEYywi9}$@{?WmG8czU!RtwB~{H>oLryv<0Q7z!1`d$5Om1f&#FXzqm zJ9qB1&h^20&s9?^xR`~71xOQPKUiEUG<$+JffWNF3VGpCQSz8J;5Z#qG0n^X7GF^6 zgUY%04BmYEmF)~$%= zjwu$f2f^RL4OTdw$$VHN*dF7DsK$!@+kPa(BOiGK_&3B#k2{@v<-5Cq%nHM^o-o~z zj6)5b|6K6b#PS(_;8VfY8Rlt zJ$&>ytG=@GeME}7LFG5UGv~_&)%ZgXZ%_dt#WY??{qf_5n7DZ2+qd{P-iywZ1W(S) zT-4QNfncqytc)4hIf1qP+dR}{!)UkG4q@1IcRm?%Q$sUJ7IVV?4kswIuOjmcQs82v z_`ZKBJxINwj>uZW>NS5s$F7`a?VEH#PRBd#By$Y*eWx4<2u(2G##yX z0at`+_E7n*%VWwu63BX|R)97$YEr`tKnaonFUJBj3m5{2*|>mMaqw9L14C~N>Mk)p zF6sh9O=qZ^M`i4)$-(k3laXZ=&Bt3IOuIEG{~r zCJE%k>du#f0$8PT56mlm=!3BP;61uV(pa~IxKRKn0|?FRht#ikYY^EkxjCN9!^d~s zQ$J3VQxTdKK>#^USc`VoC0J|!26~znY5*Z&lU@QKs3;~Jgn@Z3BL)x2wQ@y=^!(S>?=2Ywq8QZE;G9}6owlUdq$|*@1LnUoe z2~ngBVN0aKMw%#%BqcI68I#aNWysVdhwA;Tt#eNOpXYt9_r0ET?aS}_bxv&Gz1F?% z`!g-l0dj!_v-3Bxa0rVBHA?mVfsJTsEc_GVm0NG=F;5SW8iRzqEf98#(P=(*dT`^Eeot~H-6fJwRL8gv~5DZ#4c>ZHyo(qs~p zD@smmi64i!$$5Qrww>dm^dKFpaerw9obmhHK#cNlg7^Bbu1Z zb-&y~^a#$F=b`=Dhbfo*0MK!ySQRdaqkH3t&lbQefr?J0H+jh)$`s!nU#6Czq$(F* zno{*mG7Vi#Ch+(15sSN=>=vOlBc;FDO*97cvFMZo&`y~!_cJ(5{Y_Cpe>nN(WM@xu z%Abj!3p#w0FL`JbD%p=YA3`R+an-)3a{4LHU`YD7#+&;v)g@X?83|cec;{aV)4=rB z)zt+A((dG*iydSQETS7zd_VZ>Jv9|11qtttGSIAiX7$RIBGesE%?}~Re)(SYN*3a1 zmnRw>q+Mml4BWcEQIe|d{R~cDHO33tfysK$u;=T(-b)u$g&tQ|SGTslp4Zv8f6Lqx zZk<1(V&30Sf5N!T$CSYK07O``}V%K=6%`fixH#)Q?=0yOywumA66UfvfZ)Nw z-*Zp?F40~$cN`?*?&fT>eg(xyo6dnkZ_QNp zNz*LF6QAGI9%gX%l{!mm=U51Tt9nJ_ZjlP`uJkx*#@dm*S5(Pm*f;dF}>vrX+r5dI9d>`zsjnxo*gwHKz!`Q48@?b0ObbWV~amiy+#`vuy1+i9*CGO?g z%#TkHs>y1QQ8_N-mat@vtFMZ*Fz5R9HQl+>1o;-JsfD6l+gO_7tMlL`_FSFh>#qOE zD23EdM1Msn^}XM4UQPJ^wbI}FNSMEaXKX}-Kr2^y12U7y|# zF(87)xEmE1N(T=t4C0wSefkZM;YV9v8RFLw#x;DGj zvdAcf72P;pMXFnN-l=uMk4$2{62cd)y|7xUL1_c0D(;ft-&h+fRK}}to#e~K0c4FF zG;fC%4ei$1WBGk>C=gENCyWveeB{f=Q$M8ng{AKhEEULrIOU6}X;Xh&;SG#qgZMRw z>|o`M3do`-VPb`ON8Z3dj)KNuF8FGK=@16}=z{fAoYlrY;BmpEW!k;i(aqX`c zb%$^{V$EIe--8~EXzh!ArjP!UAh&;B6B2@7@Ta2%vO_hmQ8I|*fl0Mq-&RS;Cm`I; z_$U;g7@tWjlSRi9Hro&@f6%Nmq*9%pD3lVwj@ns_N@H_6+$ld2g|O5)boIFdN)`fq z;a~BcqM+1I2PeI3*)mK`4E!D#4s_1qaG@K&r)!jsd<%AqIM?=M0Ol8t-+~djU7V}I z>Ydk83(xcXDzxmmVbJuy*Ju{359bt0-TN`zYyZUl{|@!F5D)PSnfSYQ;^Ej1!gRgH z`y&J4cA(ix{tvKCE`maG#OMGqM<5s^q7!axYI+4N?yPGlV=qMT;SqJuw{PFb4NJac zRL3`|?d886^8%b8TF$a}A7265F#@DOCc&US?+sRGbDY%7y4g6RH&n?B{fhm|Zmw{8X9tC4x_1w=Amu@?b1=uDuv@){tSvo6V6#^A$@ zEVDG^Gqi7(XfZF1ulrhbE+?icmC z*1AZ3kFoiXrF=GTUvY8fTC?Yi2qeiH^0iEk$VXnH^qT*Dg9t19jYb~rED1k!Xv$K^ zqlqL1NYsq0x9NxAq~ZsX5?U&(N@T|b9Z(kdn0RW8K%nHaVs9a&`*vvLUjz1&x|Bm2 zG_?N2XPER-fC>WdQciFQ!r;Q-w&L$)HH6s41Tuk`Js_9O@gW^IkFy#}BcXNcO(9g$ zGU9C7@Z<01nlHqR-P@cmH}sYKe@`DDB2<}m6?Luyv-{oBaDIfA*eo3~365KO--KzR zCTXH0y_#3rxN>T>xIa7odfe(-#l-%3h40%k>pasTVxT3+G-cs``|u1krNh;ywSiiT zz%awh6+BY_BPEk|R2yv9Slc^?;Coak6k$s|wEh(tg1Gp92lvgMcnkdKowH-rU#o@lhDBv*&PNd+02R(T>WVpH1Cb7F zlyN04Pf)PC%2SEpzNW?!1ZMiJTkBh#)~-E-kDW-;ENyenpP%3Ddk4$-AQ9}Zaoj$M zFoTn(&LB2)BI`pBfqp^nHEs7TSsZVr1fnIprLXRZz}^ej2T_rYPd97?Y`Hz|8*pu3 z{NZc%DjQ;K)_m`eT?#gQ(V5}p)rn;^q}qUzHH2;nsM-nN2X^X4DS>GG$mm*Jy!3`+ z-bR_|*VUcgyK+KATrVGw8QZg@OUureAzWRRA$7v0k{t9*05U2%KwR+({c(fnM#ulL zWB}eKkmHT^tz(cj9-eYZsRO&S5@=vFapGs#(tEUSzcBFmQBY8j`{HIhD7NO_Kd*sA zc!^U`F5tbnOO$J*h#X_X20643E+zUbA7;Uf`3|8FV@@YWE13R2sqoTd@)2#rm0)(9 zCIFrb$O)wrIG8T3UWEA*7r&8u<+%OcbmIDmlo=)rsP~3Z8lLckeb*8QLTq7xq1lx7%2=GbI_rAJT=Y$P@4ZL)uV{eqESl^u+ua*1Iyfg)f3n&2wH^+OTND;^PlD=YJz^9<+p{KjPg- zk!J!VpU5cebWc=Hn{r@~fRMoR;%I9oQ3Np}kDwUbOj(#ZSWg1yQPj3upJzaAof`0s zy_6{-Hst`@Fk-2fYRjNi=H5uiM4sXn7%)WWkq8b1Z0_r~U{*lD-FF{(B*#7~{;0hu zohDV}u3c1=j_9hI5ON{fDD8|-2z+u4XU$fF#fBG?_4JEF z>n5mYgo~ZFtsPL6!Vm#Ef*E`pp1&(suDsNHF=BJK1KKO{3-OP{-+krV7~+O<$yFxh z*dUHh9N1|X1-TH$b^LCC`y~Ym;8k0XBJr%`8|{V8q%l7x!0yHxWT>T zjwtBPJ6u}cQUV`ZR_tx8aMHJK1bTtR;@0S$pp=1nB6VM4$^lzw;ZHYUqDf$T3qkCI zZuuokH*%8O*|TRU!^zjd&6f5BbP%&w@Q1`xci#A^j_O0iL51Q3`K#p#&TD9b4ts9d za*qgLac5|bqg*z2{X|}#F`Sy^NWHLSGBftm3tE_r1SP1{U*Wt62SSi(dRPq|7cdZX zh+4rGvbQEuVY5vpd5|&r`SZN<>sGA_2R3rUae>2yCt19+3k9QGN89|~$vF>tOK^8i z3#Rq|I?qI>{{wt^FQ^aP1}V&w@oabrsAj?>V!>!1QbDai7y;b1!$(FvC>PzKpPE%v50*(j8s>J(9)N@YF}%=qqQg#2_Bpikzjy`|>Ojhap_a+`5a|p~a zSAG`6eTS8A^{=X?9j>!FLsQk+0SW;-`ZXG%gHmaAy`P!hWaM4^E4WmbwG&QK{5a|k zvN><<9|a#)DO5uYgpglV5GfYH4~YzYIONApq6?SuHvr*(7qY*@SV1yGtqp-Isn#Tj zgXsN-Hr@t=M`$+kCksoy5=|U09zJFT0#lQrpdqghM_2{Xsc33z-*vzI3X5+kwAtVJ zp?tCG`ARrfjDrr>x5{7~=ZCa_`1}k&c@sml$+GAl`1=$^pvEEm)u5+q1#4U*xgDP9 zM5FFlrJYumJJagTN0HhT2{48@YXC2wPFpC0^L5gsNoWP}4B=4b`Lz31{dNLO5z7X3 zxkY+<+M*Qe$-OI{1Wt)BpYmvb*+xjI#q=I^ect^Oqw{nGr1D=!sB&w^qa|~^Psnkp z%zzfRvTGviLx^9sV)nh(nH1FM7hz+_-9oxD${FxX&9%URd#>uQ0OXYdZ%w@T9S0>l z?;hdIvWAoNss%p-1(qRgnb}gOnD!+qG=NU+?J?M3m=={MW;A*6Wa-hR&p`E(iwId&4GieNt;R5>=H2IP_vy;bcE~tpVw95cx^Lb#Z!fRA$P<7B7>0?umKG_k z5A=27O=8tP+8m(4aKRr@vY7lx8dojD$pgtKb{j=SmSwQgwii0q_PQ8&-De3hwJRju z#IIPezQ>1YfF=hLRtZ>Niol|OZu)g`cuEs_D>s4%V<=gQ%l2rKV6HZZvI-Z(R4ghy z9Ni|R^!!+Me3<$r-J0@e*D+`!G+-YXX*V}z@N2qydS+MmSkCqK)}#U4!Hc9%0MUWa zKCgaD#lUa}f-aD~qXRDukW1WbiWelB1jxH3a+O9)i+ZoF_(K=K^QanutP3lC#h~hR z2GK9RM$_`ZUrN)+JYk}dC~CU!h1FAUw&(4a+%(B;)0PRDmGi4d%cs<^cJAZ=&jOAO z00T^I7zXke1964@wL45=w^**$E-Ij4#|?kzZVc&%lEw0sD_7e4s)!1tU%NH~*a7CZ zt=DH^o}~O1>sttQZq>WQ&{Cd){q^_xz5Uo$n||9}pw;4)CSzvLq;JCXgUONTzr+Lf zM+ugj&^B8qV*2y+yhElH3vrmtZ1hJu#cn=!HO}#_oHftwdMms!B(MqX06GL^orac{ zGy6lRmng>gUZJgh5oNEAX`Wc6kl$|3N$ot6R2(-ZAL)*wOAamepT8DNG(F;6KoGdu zv5o|VkP|&!*%_?>l}WA*SXh7|%4&=13maXtitt&$vrEt{v^2{lOrb4%g`p2izN@DP z788m>Il*!1W}n!;b)_W5?A5Ba&wPnYaS@_@M9AB87%`ZoQcE<;NWbOw+Xe**Y9qT- zapxeF&KfemYGs{e;*v@(0!Pn7WLS@bNOZ*&!>bjzWW*gMW79Gw!2<#KTbLrOWWuBUh1JhpnM@0$NDz%cv0#%<^ zax9f7N#Q0lUa~>`UClK|mV5k*Wa+f+H`^&by}!|teht#c*DKerb70=1fU&Y`qubov zifcYSJ|dmUlg>IGkIlNadUyf%vl9MQLQ7u|!HT_X^`GhD# zVM&yDu!zJALre-xTif*aiS%M|?>(7&!%Js_>x_hloVo)piDb5A#mWh#L-%Ug5!J%aS*paZOX_G}6TP!{sfQ1O$O9OnOZ!8B&m`fV|cX`gorbKj`y zZ*MdM4L$&U7j&e!&w&^lISh)pXey>dJ$+e6Q?1j7t+8& zweRWe9bV^Y{rA_pu9NDi-gCUOcJzMU4L=I~RkkgCBK}*%nSjT|9i#u8aOd~Cw{0EX z-#?f{f0{tofj8F|%mLtM@*@c{&V)wmKVE~meD%5MK=;VhhZ&MBre!h>Qd*R!asota zAK$UwrlNBJhG)ZstX${PT3hQJ88=r%tsFq#h^mO{4nfjUKeN=jg#KqKEVjksgBW)q z7tMO__y+ggofj(ZqCLn&7=S#hNIkhz-kmF!g?h6dobEL^mJo?eNyVM}Ivm zu+~pbdCvdAzrpJ&_@kQLAkJ;+S?{p|Iz`ASMSNlZwFh+NY0CD7n(-#FYo7t)MTx@5 z7oGbuw0J|7y1{97v?SPy4=X)XLtI=TpV%^I@^8zl^FMe@ItVHG^a?S}c%i2>Mbn8vWn;$hY9-Zl@m*%Oi zu1v|`q!Rcy^(O_KSyw5i`4h&cX>n`Xy!9HLj~2#@3@1*$E!e*JNdQw~JKQ0#QW)kp zb8g&_glNZ7l;8XhwxUb&*~ZN{i!Q9ji^Tq6M!9}{CdO9qiAKPQ0M5gD1#J_oA#COf zo71Z%#|di18_bM1T6w}|@qC>Ict?nq3Z!z4z(qirR8zW zg>If-P0uyWU9Y8Zy}DOq*@m4v7voeUo=4Yeam~exIfaEwyk3}Oq&ak?ZR*pr*KJ?# z*TPhpRln;t)Q?EkM0ZD~ao9vSx{omKG(LF(3+0_|*4)yR;^N}mi>va&W*h6>js7yk zop$*kFeuY~R27oPeQc8BeFq-f0L;qc<6aW|5Nwi0Xu`n^JaE7Kq1Iq^@-b_(g<6Xj zD@qFTQWz_tRur2qdT{9m01qiNvxPCuJItQoq2Q$kMJmQAR7sRM<)t0Nqs;Z|g)Xc< zH_-!wEyI81{#Z>28=-6J&&>hNcgyMV(0&M_sNcw3laBpkcl1Hnz)FH>m@tcYA##B*bEx5D5T;-$J+^q8(_R0DWy#Mv3pfuvC;kD+>TjnM9u4=5oP6r> z>G!uGx6bZ}#_@C}C#pW)J&U;_DokVdEvIffawNqUfxP{1qBGGH#v$vgBWNU=se7Y* z$|=D<`m}AI>@o)}v1*CS60HNNmbY%*s_kYi8eXAISKJmSs8IfF@vKJCyUdS;SJ(c5 z`%my96S)8{01)C;L)VKT1$+lZp<5SE#Q_1hnj`+bO0z5B!pBMtJKu`l&#!T~5`6@) zANF9hbZWer7C@}6zYU!xS$=*qrHn+`=~2>arT+HaaIUGMZHD&?hYZ?ZaJ686!Q6$+ zp94hjaK=WVidz2fWZ&AozhtQ2%Q_m)D8CxwV+GIltx1ey;)}q0$)Z&fU^UPWfiwY$3|! z5sX-dZV|6v4kF|TSbDlERDF7m(;QTHS%qfx`ixG4+oaIH;ro3p&6QZ;-f6Hh5i8noA8HSeSMQC5Q}D$lPh!5ZIN@?$?{2xC{`yP(BUQGu z$g$XS=hvoGEWU;-xR?lf+d>@6)Pxy5g(~lToA9VB8*CR53sX3ct+A7Z_ZXhCJe_JE zuI?p$iydXHmk=GfRfoY58|R>TDM&i+fTcjJAQk%asG-iUK8K}L=m??4l5=`eDSTUA zA6Unj@`&)Y$YUVj5a_RnNgkhef4gyG@xgBg0srV(B+Bw*=L z6htK6jn-@z08C+Rl)zRN;Sz z9({Snk%A4Kxhmw{ZE~@75BoU!4QDF#{jp&9TPK=}!&OKRTNKq&i>rM=L?SAFS$_iL}cqrJJcl?q^fpm>f z-TsyT`>dDPy7Th?x1Z>T44`l-g;V#x7yw>{V~irD2`*N8p09D?3 zDG~*$g-n#v%$&w&OqIU?pu>LTP${)*3zoNM0a@NZQ(?XuxRDReO4ppe$>v@~txxrb@k%(FVpQm5GJdGk9{C-!3;T1Xe ztvUlnn!Wnzi7{8rE;l?hVPELg`jm3C&9vf;Uk1{$z^q-qylV189O7Jd>^86fKmb^K zBt^hL@&0OC(?5)kJFGvOAViQhH$6C8f7XgR&%gl-=NISh$lUb%nMWgbro5JE<(GV{ zioY(ZsN6h3LL*Cjo3x#`_dJrGh=C5{3^$0v+N!f8o+mP%SEoanu6X~=SH%bxBN9A+ zWyikC4ju~sDPU4!T0p`JjMAl{xw6G?H1T)_I&gzB4p;Rf}Yly}Bsw6)$HfvRCbtrMdF+k^%&A-1XGV zgjW=4ExBjTM9n%I)pio#nd_H_t8Iz+2JZ%Y6aN+++xFoY{}Ss?bytm(G5%)LA#y|n z3&usT?i*q8go4nrG6e<*5F``@mSHa=5*Wo`wpEM@8YJX0Y3prqIUeDUGG%#F%#OI>`ZYgU5ZJ=^JSoIFFawA$6T;7HL3Ocu>SdDlW zGRI^N{RBfY>+TFp9$&aCcKgjtajA?&cK?)9qiyeiyqqr1Yx3#{2((akRfx0MJPs2j zX~B?UlD&>m>}+#({U*DX#VNx_yE1lnj;0`B98Zu879U3lp@&w1Kv{=-L^GQ`28PyL zV+_?krS0Az6~h44LV|=SH8r*L{qAVE0BI(LN>S)WGV$m5wb8hDe{}Etc;Z}oOfkdt zn26+iUByTulFN(={dIIz$ef>`G#RWjSCzuPtEA}9j%r)5ZQ4X04AFlwaxl%Omy`rM ztj9&-^?hE6-GyijNn?y^j;VCMQ?Vq1rLn~TU{bZs%`>O7knmx)cki-)@j%A~YaTpH zNUEL?thIlFpICkM>WlP-^eS`wx@2M=TK?giJx)tB3RkXO%Y@01+k}W7z5m8ivK$9P zN>$y~ZgJB^Z-=V+Jn(?(nwulRml)+Y&&$AMB6pQfjJe=vtF1ZrYg{mwD$cAnmoQa^ zDAoPo;*;i>-$at#hL+F0bnSjCSUfcN=+#LMt+G<$=H%o+qhtpyrD^PV61xJC_-Ep5!v_ExBS*B< zVbkK&PuaAJBLk-~M_>YRfx{00QftB-u$wCp`pCl-#}zu_6g=JF78LwfUbyxLTD7#? zLY;>C`miTYR->g|F1r61#%W3johp0YulNX%IV4jdf*BY9D?Td7P_SJ1c9!05iv%TQ z0R;hGqR9XP$XFH_+a#s}3Rb&9^WGFbWnF#0#(D%-f`L7$<~yx0;#bUc&6=6$%Se13 z@H{MP9?76|xg|N(?w9ZFwLSHqa9We*r(3ZzTXL7Ic@^n1X$34!m;gw!6q++YUdoz^ z{FlZ@aIz2DR{9NYQJ?4*L8I+P_g%AFF$StPjSl5b z_3EiO6)~>uP1Qt;i;0c+kr5TO9m4XtA~DmjL}#j4Xnvtf3T{F?DPX7x6pkL0-Ft0| z?FwEc1&+GY*zxytOE{bf;H5E#kYtm#tvesMB+5t5Byomt$YE&{Ld3E*1OFM!BNRw~ z3S?GX+P?&$N6=hXpa9wbo=}Jb6;9x0*9xA-GMF0ga_G= zpX12yRxtevPiCcoX+WBo>2?Q58y;7=q;l~Y&nskXJu|d=!p)HTzqX^9W`9&i1h|?@ z1Y1ZPj8e*fhyE4;F(|f#8UTV&#<;CSd%?EkKkmctwyCcbGT^c6>FE^MhX|nc*Q#X< zD9A;T@HfvW66*$giC6NylET0|gQt(n1K-mVqa1I)xFm20lr$(lynudA0M7u`367tb zm>9A!8Cn1qp-Xsk(oaWva`PkqTGQ`;AF;4y^yg}^+qSEG@OE^)F15rLpldDi%_7Tq z&NbCw9FLjuJAz`T6t_0PfC73mFWB;VKs*J1ELemH&7E?H|3gWl`tJLxXK9N7egg?B~Iq@+z$q^fC z|JpF^GZ3`nh`!dMoV+Dt;N= z+*GH(S7Rcz>0%dBLk>SF?qm@zGqmBt}8V za0!t1)4l+=KI=!x^sa;lMcotKz!@XQskXM3!nlQKMqq2q$$?5V9%bkmAWmKmbSAX4 zw-28))*^;Plvys}!#81>UsY*0OSt!K;)+7S7}viGtD1&dXzlFoA@CQZM}=7s8e^nN zw$*KbCf-`Fs8iQ-Liqq)Lwuw+H|RWcgf^#VJ=w0}BmMJ zZjYcTHaRR5(P5<4VFy5W)PFIL?+l9_f0JG%5*Qf}xY^sg48H`XX&wr<2H7uH{{Rd% zDyn&}N{j6ZU6+$YHi^ncb`m~WY*X(?dQm1nK|_F_#0iW*Dn^Xgl!?5#7cRhMXNpgG zscfA3YLBcv`x>`shN+-a#9@uso!g9%>S23ez4&|Vy*%jF2xW@!_;;UAUuLMBaO%vT z4&fqm?E3r@LwC^RWQD8rcWIm zjuLDl6MR!s6Tk-K*q^Qc)4l82nP?|Vx5icKy(+rRw%8GOoGXta!#lIM*m23$E4<3p z0FPPoi2)5CH5_tqe1T$6&5&9$ND1mc#bqj%vlSYO=5VYB!hI&0GCqzOn}r-$F0ZVK zO3rH}YP)`Y3`79P_soseaKF6d)rdx)xuV>u?yhX>aP2#T!=l^lSDk-pjjjZrUyIM` zZ>=sYYQ2HTI@@VI#eK*>BO+T)%#KuMH$|6ZY_+?BsZj=Xg z<>l>7e9|}wuxrQRQ7H=1wct-cc){$s>pLraL80_5iCs(8KI}O-9Ysw!`Yu8eO0V!}0nVFg%s8^PM zLgRq5VA`r6+Niy~ov549K>~fKZE8ZKwzkjhx`gV#tEJC1c_r2I4(4CdMfoF-3+Fh< zF*TifRrOAgO7(dw`uwIFVsg*$ks*FC+

Eg8Y^}`zXLA7Z*6x*-_-2- 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

tLDa(_2{Nyg~M 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%0Ab5Hf5^$QH2B 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

D`wm^J%y?ncSabt25zuSD!{ z-F@i^;XIZF1iB8lYe+!y{~jL;%!hw{e^#@rLbI#tQPmtJ6mhb@s)t5e0>0jBL7{Bh zKbr1SYojX3_bpP&bS zH-JRDU9Y3_kfudfj=9Ucp0dYWvW(gK-*q1I^3Bm3^|`)6u{C&FMsdvWu1g+x(b$BP zZa~aK#qnwF4IWVyD)N5+8D|A$2Y`X4!J*H*4^%3$1E_esKLt)#CioS(b zH#25}FC(`EP)75$0$&h6K@WkMj;}Z|3>7e*$=XEK=V4 zAB^yrsso}dFh}vwh}3L-VJxDChWh%HqOuU`NwV)TFg0JZ26o~t5`>EviwIAA?y2QV zwzEm@-<-I%v-`w}F3KKNZ*x#{x)G2pPD>r%poX4L`ug z+29z<22EDrvRvg?*e?CV{tdgS5u~Xe5!jp@89yBW+oVLIfRSG)lVuU>i;QIAaC-6O zDzjuG{}#hkl12!Fh~-D`496AA$**OCB?J-Ck3;iv8<5)QwF$C&geLYA0r~Azs$nzu zmpy?<(yDUgP@lqm%9AExU4LPM241;D8TOU6?*(9>`gb#av--8TmFdS_yjDN}fzo!}oEILRx8~zs@!*6FSrG|g8W~HyQMVR| zLMQ45x)zwziM=d<8Ku2rn8KOu$IObsND5!J-MrU5O1V3T#TxshZSz!~;BkG7|E@Bf zk)1tcqSC875WN6qrtrM?*Zl{eh;Hxa&GNkL76H>XtH9|!om;kj{j8>jMn&otWg*N2 zwO0JFlCRpr$g~Gv+O>2uSN`*4>F~$s{LwuZaBuQdGNTqi+|q%jD*;-(ve0BP*z78C zrF9bnefdr;n{WCe$_IRK{dv5~euQ#&8R#Y2qF+m)*HlWc%ynN@4S-s}NJ)nh72%sg z>K8fSg#9kMA>EkhRMR+6>{Zw)Xv;YF79O>l_~i_=d~{U;wq43E?Bzw@WA&Nt3(-aY zjVIsZQ&PGQE##m_@BG36Jz_qfI034v$LAqKgypHYnr+!L;BefXW@NeTjW)QQgcUY6 z+3j{5(5IyEK3-43EVx)>nHxNvPBmN{pkK`WwB_!;Z|&tL6HYwo7SZB5G}v5N_8Y7< z8A<>~SR%3k{OXeZ)SK{!N12NDeDAhd>qyd2qn%2*Z{N{2BMk(Z7p^pT%s!As-KB&` zFa0yY$kXnz1JFJL0Y~80xZP`0I@0^A&vMqz2wt0n?7(=4CnnYgN|~bEh%r#69?m&@ zjWHr?H1Bg~C7$z)_q6jx%^F)IM=L31Wu(O8ytA((< zO_d+E@2^7c08MWCB7#oZiF4GUHQq_7V1yTmVlyf^nIb2(?Ptsar{W^2x8L_)6OfzfhA_b=mVklTG4Kx@i^5>Q+wX?rf*Elhhqf<8HD@7Rt6BbK;=+7B_auya=Kbo!)-Kh{9e-G4B zmi3UNV%&^xkOdewQr~tc z#9gabm!yE1qD9fQm>&*Q*0O8!v%Q97QLLQP0pr6CoPJ`z7=y2U5IidsKB93huKh)!K%ts|7lW)I}cA|(z&4G|{K z-46adK8^{7q{>unN>H*qvZr?Sl5#{2q4)}tMqr59Z}dc>wzS8Fa~8e`7gJQ-?aqt` z3QJIRMx^0PG7m-6tc^|kDP^IBWSp3_InNL+02uI{Z7-3Ntp_?V|C*eJH$$=aaX8El zSGU;sZ`1`WGx9W0g71f|FrT8@Rr!3gUHCyNuZ7co{`;2(BkWVMC(dcWOkb`qnu=br zZYkyJ%d=@4-Y2LEbImm19R{4sNjna%0Ao#Bz=RX;owHZl+YudUv88>Vp@vnRM+O?l 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�cbkNLsR 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 z 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%0AnQVPJC9KgLX+V^xZ@A%X5 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 KE6KOtAN~(d<#0*> literal 0 HcmV?d00001 diff --git a/docs/macros/axes_map_calibration.md b/docs/macros/axes_map_calibration.md new file mode 100644 index 0000000..0747ebd --- /dev/null +++ b/docs/macros/axes_map_calibration.md @@ -0,0 +1,51 @@ +# Accelerometer "axes_map" calibration + +All graphs generated by Shake&Tune show plots based on accelerometer measurements, typically labeled with the X, Y, and Z axes. If the accelerometer is rotated, its axes may not align correctly with the machine axes, making the plots more challenging to interpret, analyze, and understand. The `AXES_MAP_CALIBRATION` macro is designed to automatically measure the alignment of the accelerometer in order to set it correctly, making it easier than ever to get the most out of your data! + + > **Note**: + > + > This misalignment doesn't affect the accuracy of the measurements because the total sum across all axes is used in most Shake&Tune tools. It's just an optional but convenient way to configure Klipper's `[adxl345]` (or whichever accelerometer you have) "axes_map" parameter. + + +## Usage + +Call the `AXES_MAP_CALIBRATION` macro and look for the graphs in the results folder. Here are the parameters available: + +| parameters | default value | description | +|-----------:|---------------|-------------| +|Z_HEIGHT|20|z height to put the toolhead before starting the movements. Be careful, if your accelerometer is mounted under the nozzle, increase it to avoid crashing it on the bed of the machine| +|SPEED|80|speed of the toolhead in mm/s for the movements| +|ACCEL|1500 (or max printer accel)|accel in mm/s^2 used for all the moves| +|TRAVEL_SPEED|120|speed in mm/s used for all the travels moves| + + > **Note**: + > + > This command only works if you can move the same accelerometer in the 3 directions, like on a Voron V2.4 printer. If you have 2 accelerometers on your machine, like on a Prusa, Switchwire or Ender3, it won't work because it's impossible to detect the accelerometer orientation with only one movement (like for the bed). + +![](../images/axesmap_example.png) + +During the measurement, the machine will move slightly in +X, +Y, and +Z. This allow to automatically detect the orientation of the accelerometer. + +Use this value in your `printer.cfg` config file: +``` +[adxl345] # replace "adxl345" by your correct accelerometer name +axes_map: -z,y,x +``` + +### Acceleration plot + +This plot shows the acceleration data over time for the X, Y, and Z axes after removing the gravity offset. Look for patterns in the acceleration data for each axis: you should have exactly 2 spikes for each subplot (for the start and stop of the motion) that break away from the global noise. This can help identify any anomalies or inconsistencies in your accelerometer behavior. + +The detected gravity offset is printed in the legend to give some context to the readings and their scale: if it's too far from the standard 9.8-10 m/s², this means that your accelerometer is not working properly and should be fixed or calibrated. + +The average noise in the accelerometer measurement is calculated (using wavelet transform decomposition) and displayed at the top of the image. Usually values <500mm/s² are ok, but a note is automatically added by Shake&Tune in case your accelerometer has too much noise. + +### Estimated 3D movement path + +This graph visualizes the estimated path of the tool head as recorded by the accelerometer in 3D space. Keep in mind that even though Shake&Tune uses some mathematical tricks to get something as accurate as possible, we don't have a gyroscope to compensate for accelerometer drift, and this plot is still pretty much an "estimate". + +When examining it, look for path consistency by checking the smoothness of the paths (orange dotted lines): they should be mostly linear. Ideally, you should expect the computed direction vectors (in purple) to appear aligned along one of the primary axes (X, Y, or Z), with minimal angular error, indicating accurate alignment of the accelerometer chip with the machine axis. + +Keep in mind that since this graph is an estimate, there may be some variation between successive runs, especially in the calculated angles. For example, on my machine I had these results over 20 consecutive runs (mean square error about 3 to 5 degrees): + +![](../images/axes_map_inaccuracy.png) diff --git a/docs/macros/axis_tuning.md b/docs/macros/axes_shaper_calibrations.md similarity index 98% rename from docs/macros/axis_tuning.md rename to docs/macros/axes_shaper_calibrations.md index 93042a0..ca02b69 100644 --- a/docs/macros/axis_tuning.md +++ b/docs/macros/axes_shaper_calibrations.md @@ -1,6 +1,6 @@ -# Axis measurements +# Input shaper filters calibration -The `AXES_SHAPER_CALIBRATION` macro is used to measure and plot the axis behavior in order to tune Klipper's input shaper system. +The `AXES_SHAPER_CALIBRATION` macro is used to measure and plot your machine axis frequency profiles in order to tune Klipper's input shaper system. ## Usage @@ -21,14 +21,9 @@ Then, call the `AXES_SHAPER_CALIBRATION` macro and look for the graphs in the re |TRAVEL_SPEED|120|speed in mm/s used for all the travel movements (to go to the start position prior to the test)| |Z_HEIGHT|None|Z height wanted for the test. This value can be used if needed to override the Z value of the probe_point set in your `[resonance_tester]` config section| - -## Graphs description - ![](../images/shaper_graphs/shaper_graph_explanation.png) -## Analysis of the results - -### Generalities +## Generalities on IS graphs To effectively analyze input shaper graphs, there is no one-size-fits-all approach due to the variety of factors that can impact the 3D printer's performance or input shaper measurements. However, here are some hints on reading the graphs: - A graph with a **single and thin peak** well detached from the background noise is ideal, as it can be easily filtered by input shaping. But depending on the machine and its mechanical configuration, it's not always possible to obtain this shape. The key to getting better graphs is a clean mechanical assembly with a special focus on the rigidity and stiffness of everything, from the table the printer sits on to the frame and the toolhead. @@ -46,7 +41,7 @@ For setting your Input Shaping filters, rely on the auto-computed values display - **The remaining vibrations** (`vibr`): This directly correlates to ringing. Ideally, you want a filter with minimal remaining vibrations. - **Shaper recommendations**: This script will give you some tailored recommendations based on your graphs. Pick the one that suit your needs: * The "performance" shaper, which should be good for most people as it's a compromise for high accelerations, with little residual vibrations that should remove most ringing on your parts. - * The "low vibration" shaper aims for a lower level of remaining vibration to ensure the best print quality with minimal ringing. This should can be used in case the performance shaper is not good enough for your needs. + * The "low vibration" shaper aims for a lower level of remaining vibration to ensure the best print quality with minimal ringing. This should be used in case the performance shaper is not good enough for your needs. * Sometimes only a single recommendation is given as the "best" shaper. This means that either no suitable "performance" shaper was found (due to a high level of residual vibrations or too much smoothing), or that the "low vibration" shaper is the same as the "performance" shaper. - **Damping Ratio**: At the end, you will see an estimate based on your measured data, which will be used to better tailor the shaper recommendations to your machine. You need to define it in the `[input_shaper]` section. @@ -61,7 +56,7 @@ damping_ratio_x: ... # damping ratio for the X axis damping_ratio_y: ... # damping ratio for the Y axis ``` -### Useful facts and myths debunking +## Useful facts and myths debunking Some people suggest to cap data at 100 Hz by manually editing the .csv file, thinking values beyond that are wrong. But this can be misleading. The excitation and system's response frequencies differ, and aren't directly linked. You might see vibrations beyond the excitation range, and removing them from the file just hides potential issues. Though these high-frequency vibrations might not always affect print quality, they could signal mechanical problems. Instead of hiding them, look into resolving these issues. diff --git a/docs/macros/belts_tuning.md b/docs/macros/compare_belts_responses.md similarity index 91% rename from docs/macros/belts_tuning.md rename to docs/macros/compare_belts_responses.md index a4ac25b..e1707cc 100644 --- a/docs/macros/belts_tuning.md +++ b/docs/macros/compare_belts_responses.md @@ -1,11 +1,15 @@ -# Belt relative difference measurements +# Measuring belts relative differences -The `COMPARE_BELTS_RESPONSES` macro is dedicated for CoreXY machines where it can help you to diagnose belt path problems by measuring and plotting the differences between their behavior. It will also help you tension your belts at the same tension. Using it on Cartesian printers doesn't really make sense, as it's normal to have different responses in that case. +The `COMPARE_BELTS_RESPONSES` macro is dedicated for CoreXY or CoreXZ machines where it can help you to diagnose belt path problems by measuring and plotting the differences between their behaviors. It will also help you tension your belts at the same tension. + + > **Note**: + > + > While it might be tempting to use it on other kinds of printers, such as Cartesian printers, it's probably not the best idea. After all, it's normal to have different responses in that case due to the belts paths being not symmetric. ## Usage -**Before starting, ensure that the belts are properly tensioned**. For example, you can follow the [Voron belt tensioning documentation](https://docs.vorondesign.com/tuning/secondary_printer_tuning.html#belt-tension). You need a good starting point before starting to iterate from it! +**Before starting, ensure that the belts are properly tensioned**. For example, you can follow the [Voron belt tensioning documentation](https://docs.vorondesign.com/tuning/secondary_printer_tuning.html#belt-tension). You've got to have a solid foundation to build on! Then, call the `COMPARE_BELTS_RESPONSES` macro and look for the graphs in the results folder. Here are the parameters available: @@ -18,9 +22,6 @@ Then, call the `COMPARE_BELTS_RESPONSES` macro and look for the graphs in the re |TRAVEL_SPEED|120|speed in mm/s used for all the travel movements (to go to the start position prior to the test)| |Z_HEIGHT|None|Z height wanted for the test. This value can be used if needed to override the Z value of the probe_point set in your `[resonance_tester]` config section| - -## Graphs description - ![](../images/belts_example.png) ### Belts frequency profiles @@ -49,7 +50,7 @@ Paired peaks of exactly the same frequency will be on the same point (labeled α > **Note**: > - > If you are using this tool to check or adjust the tension after installing new belts, you will need to measure again after a few hours of printing, as the tension can change slightly as the belts stretch and settle to their final tension. Usually 24 hours should be sufficient. + > If you're using this tool to check or adjust the tension after installing new belts, you'll want to measure again after a few hours of printing. This is because the tension can change slightly as the belts stretch and settle to their final tension. But don't worry, a few hours of printing should be more than enough! ## Advanced explanation on why 1 or 2 peaks diff --git a/docs/macros/vibrations_profile.md b/docs/macros/create_vibrations_profile.md similarity index 92% rename from docs/macros/vibrations_profile.md rename to docs/macros/create_vibrations_profile.md index d11aeb0..79803d7 100644 --- a/docs/macros/vibrations_profile.md +++ b/docs/macros/create_vibrations_profile.md @@ -13,18 +13,13 @@ Call the `CREATE_VIBRATIONS_PROFILE` macro with the speed range you want to meas | parameters | default value | description | |-----------:|---------------|-------------| -|SIZE|100|maximum size in mm of the circle in which the recorded movements take place| -|Z_HEIGHT|20|z height to put the toolhead before starting the movements. Be careful, if your accelerometer is mounted under the nozzle, increase it to avoid crashing it on the bed of the machine| -|ACCEL|3000 (or max printer accel)|accel in mm/s^2 used for all moves. Try to keep it relatively low to avoid dynamic effects that alter the measurements, but high enough to achieve a constant speed for >~70% of the segments. 3000 is a reasonable default for most printers, unless you want to record at very high speed, in which case you will want to increase SIZE and decrease ACCEL a bit.| +|SIZE|100|diameter in mm of the circle in which the recorded movements take place| +|Z_HEIGHT|20|Z height to put the toolhead before starting the movements. Be careful, if your accelerometer is mounted under the nozzle, increase it to avoid crashing it on the bed of the machine| |MAX_SPEED|200|maximum speed of the toolhead in mm/s to record for analysis| |SPEED_INCREMENT|2|toolhead speed increments in mm/s between each movement| -|TRAVEL_SPEED|200|speed in mm/s used for all the travels moves| -|ACCEL_CHIP|"adxl345"|accelerometer chip name in the config| -|KEEP_N_RESULTS|3|Total number of results to keep in the result folder after running the test. The older results are automatically cleaned up| -|KEEP_CSV|0|Weither or not to keep the CSV data files alonside the PNG graphs (archived in a tarball)| - - -## Graphs description +|ACCEL|3000|accel in mm/s^2 used for all moves. Try to keep it relatively low to avoid dynamic effects that alter the measurements, but high enough to achieve a constant speed for >~70% of the segments. 3000 is a reasonable default for most printers, unless you want to record at very high speed, in which case you will want to increase SIZE and decrease ACCEL a bit.| +|TRAVEL_SPEED|120|speed in mm/s used for all the travels moves| +|ACCEL_CHIP|None|accelerometer chip name from your Klipper config that you want to force for the test| The `CREATE_VIBRATIONS_PROFILE` macro results are constituted of a set of 6 plots. At the top of the figure you can also see all the detected motor, current and TMC driver parameters. These notes are just for reference in case you want to tinker with them and don't forget what you changed between each run of the macro. diff --git a/docs/macros/excitate_axis_at_freq.md b/docs/macros/excitate_axis_at_freq.md new file mode 100644 index 0000000..0b9ec25 --- /dev/null +++ b/docs/macros/excitate_axis_at_freq.md @@ -0,0 +1,38 @@ +# Diagnosing problematic peaks + +The `EXCITATE_AXIS_AT_FREQ` macro is particularly useful for troubleshooting mechanical vibrations or resonance issues. This macro allows you to maintain a specific excitation frequency for a set duration, enabling hands-on diagnostics. + + +## Usage + +Here are the parameters available: + +| parameters | default value | description | +|-----------:|---------------|-------------| +|CREATE_GRAPH|0|whether or not to record the accelerometer data and create an associated graph during the excitation| +|FREQUENCY|25|excitation frequency (in Hz) that you want to maintain. Usually, it's the frequency of a peak on one of the graphs| +|DURATION|30|duration in second to maintain this excitation| +|ACCEL_PER_HZ|None|accel per Hz value used for the test. If unset, it will use the value from your `[resonance_tester]` config section (75 is the default)| +|AXIS|x|axis you want to excitate. Can be set to either "x", "y", "a", "b"| +|TRAVEL_SPEED|120|speed in mm/s used for all the travel movements (to go to the start position prior to the test)| +|Z_HEIGHT|None|Z height wanted for the test. This value can be used if needed to override the Z value of the probe_point set in your `[resonance_tester]` config section| +|ACCEL_CHIP|None|accelerometer chip name from your Klipper config that you want to force for the test| + +**By default, this macro does not generate a graph**, because by touching the various components of your machine with your fingers, you will dampen the vibrations and be able to easily identify those that are source of problems: touching them will stop the noise. + +However, if you have something that is difficult to diagnose with your ears, or if you want to record your experiments or document the exact consequences and effects of your modifications with a more scientific approach, you can enable the creation of a graph. Just **keep in mind that since the accelerometer is usually mounted on the toolhead, the recording will correspond to the toolhead vibrations and not necessarily reflect another problematic component somewhere on the machine**, unless it's vibrating a lot and its vibrations are being transmitted up to the toolhead. So keep this in mind when looking at the graphs generated by this macro, and you may want to move the accelerometer to other locations to get a full overview. + +![](../images/excitate_at_freq_example.png) + +### Spectrogram and vibrations harmonics + +The time-frequency spectrogram visualizes how the frequency content of the signal changes over time. This plot helps identify dominant frequencies and harmonics of the excitated vibration. Each vertical line is one of them and a piece of the vibrations and noise that you can hear. + +### Energy accumulation plot + +The energy accumulation plot shows the cumulative energy over time, integrated over all frequencies. Basically, this plot is the sum of all the vibrations at a given moment during the test. So it can help you assess the periods of significant vibration and how much things change when you touch this or that part of the machine. In the example above, I vibrated my machine's X-axis at its main resonance frequency (i.e., its main resonance peak on the IS graphs) and touched 3 components: + - From the 4th to the 8th second of the test, I touched the toolhead, which has the most vibration reduction because it's the main component vibrating at that frequency and touching it dampens it a lot. + - From the 14th to the 18th second, I touched the belts and this reduced the vibration a bit, but not as much as touching the toolhead. + - From the 23rd to the 27th second, I touched the left XY joint of my machine and it didn't have any noticeable effect on the vibrations. + +But as mentioned above, **remember that this doesn't mean that the left XY joint doesn't contribute to the vibrations**. It means that its vibrations aren't causing a problem in the recorded toolhead vibrations (because the accelerometer was mounted on the toolhead!!!), but if you find that this actually also reduces the global noise to your ears, you may want to start a new recording by sticking the accelerometer directly on the XY joint (or the problematic component) instead to continue diagnosing. From 6db1d394ae71dfa426d6a8fce6abf7ca8bd18b3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Mon, 10 Jun 2024 23:42:10 +0200 Subject: [PATCH 47/50] Code cleanup before release (#114) --- README.md | 2 + shaketune/commands/__init__.py | 7 + .../accelerometer.py | 0 .../axes_map_calibration.py} | 2 + .../axes_shaper_calibration.py} | 4 +- .../compare_belts_responses.py} | 7 +- .../create_vibrations_profile.py} | 7 +- .../excitate_axis_at_freq.py} | 3 +- shaketune/dummy_macros.cfg | 81 +++-- shaketune/graph_creators/__init__.py | 8 + .../axes_map_graph_creator.py} | 77 ++++- .../belts_graph_creator.py} | 108 +++++- shaketune/graph_creators/graph_creator.py | 74 ++++ .../klippain.png | Bin .../shaper_graph_creator.py} | 81 ++++- .../static_graph_creator.py} | 72 +++- .../vibrations_graph_creator.py} | 147 ++++++-- .../motors_config_parser.py} | 0 .../resonance_test.py | 0 shaketune/measurement/__init__.py | 7 - shaketune/post_processing/__init__.py | 8 - shaketune/post_processing/graph_creator.py | 327 ------------------ shaketune/shaketune.py | 14 +- shaketune/shaketune_config.py | 10 +- 24 files changed, 575 insertions(+), 471 deletions(-) create mode 100644 shaketune/commands/__init__.py rename shaketune/{measurement => commands}/accelerometer.py (100%) rename shaketune/{measurement/axes_map.py => commands/axes_map_calibration.py} (97%) rename shaketune/{measurement/axes_input_shaper.py => commands/axes_shaper_calibration.py} (97%) rename shaketune/{measurement/belts_comparison.py => commands/compare_belts_responses.py} (95%) rename shaketune/{measurement/vibrations_profile.py => commands/create_vibrations_profile.py} (96%) rename shaketune/{measurement/static_freq.py => commands/excitate_axis_at_freq.py} (97%) create mode 100644 shaketune/graph_creators/__init__.py rename shaketune/{post_processing/analyze_axesmap.py => graph_creators/axes_map_graph_creator.py} (83%) rename shaketune/{post_processing/graph_belts.py => graph_creators/belts_graph_creator.py} (84%) create mode 100644 shaketune/graph_creators/graph_creator.py rename shaketune/{post_processing => graph_creators}/klippain.png (100%) rename shaketune/{post_processing/graph_shaper.py => graph_creators/shaper_graph_creator.py} (87%) rename shaketune/{post_processing/graph_static.py => graph_creators/static_graph_creator.py} (69%) rename shaketune/{post_processing/graph_vibrations.py => graph_creators/vibrations_graph_creator.py} (87%) rename shaketune/{measurement/motorsconfigparser.py => helpers/motors_config_parser.py} (100%) rename shaketune/{measurement => helpers}/resonance_test.py (100%) delete mode 100644 shaketune/measurement/__init__.py delete mode 100644 shaketune/post_processing/__init__.py delete mode 100644 shaketune/post_processing/graph_creator.py diff --git a/README.md b/README.md index 644df13..b69f6b1 100644 --- a/README.md +++ b/README.md @@ -32,3 +32,5 @@ Follow these steps to install Shake&Tune on your printer: # timeout: 300 # The maximum time in seconds to let Shake&Tune process the CSV files and generate the graphs. ``` + +Don't forget to check out **[Shake&Tune documentation here](./docs/README.md)**. diff --git a/shaketune/commands/__init__.py b/shaketune/commands/__init__.py new file mode 100644 index 0000000..17c7707 --- /dev/null +++ b/shaketune/commands/__init__.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 + +from .axes_map_calibration import axes_map_calibration as axes_map_calibration +from .axes_shaper_calibration import axes_shaper_calibration as axes_shaper_calibration +from .compare_belts_responses import compare_belts_responses as compare_belts_responses +from .create_vibrations_profile import create_vibrations_profile as create_vibrations_profile +from .excitate_axis_at_freq import excitate_axis_at_freq as excitate_axis_at_freq diff --git a/shaketune/measurement/accelerometer.py b/shaketune/commands/accelerometer.py similarity index 100% rename from shaketune/measurement/accelerometer.py rename to shaketune/commands/accelerometer.py diff --git a/shaketune/measurement/axes_map.py b/shaketune/commands/axes_map_calibration.py similarity index 97% rename from shaketune/measurement/axes_map.py rename to shaketune/commands/axes_map_calibration.py index f43a584..2cf22d3 100644 --- a/shaketune/measurement/axes_map.py +++ b/shaketune/commands/axes_map_calibration.py @@ -86,6 +86,8 @@ def axes_map_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: # Run post-processing ConsoleOutput.print('Analysis of the movements...') + ConsoleOutput.print('This may take some time (1-3min)') creator = st_process.get_graph_creator() creator.configure(accel, SEGMENT_LENGTH) st_process.run() + st_process.wait_for_completion() diff --git a/shaketune/measurement/axes_input_shaper.py b/shaketune/commands/axes_shaper_calibration.py similarity index 97% rename from shaketune/measurement/axes_input_shaper.py rename to shaketune/commands/axes_shaper_calibration.py index a0985b2..26009fa 100644 --- a/shaketune/measurement/axes_input_shaper.py +++ b/shaketune/commands/axes_shaper_calibration.py @@ -3,9 +3,9 @@ from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput +from ..helpers.resonance_test import vibrate_axis from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer -from .resonance_test import vibrate_axis def axes_shaper_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: @@ -100,6 +100,8 @@ def axes_shaper_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: ConsoleOutput.print('This may take some time (1-3min)') st_process.run() st_process.wait_for_completion() + toolhead.dwell(1) + toolhead.wait_moves() # Re-enable the input shaper if it was active if input_shaper is not None: diff --git a/shaketune/measurement/belts_comparison.py b/shaketune/commands/compare_belts_responses.py similarity index 95% rename from shaketune/measurement/belts_comparison.py rename to shaketune/commands/compare_belts_responses.py index 4f5e235..54ac8cb 100644 --- a/shaketune/measurement/belts_comparison.py +++ b/shaketune/commands/compare_belts_responses.py @@ -3,10 +3,10 @@ from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput +from ..helpers.motors_config_parser import MotorsConfigParser +from ..helpers.resonance_test import vibrate_axis from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer -from .motorsconfigparser import MotorsConfigParser -from .resonance_test import vibrate_axis def compare_belts_responses(gcmd, config, st_process: ShakeTuneProcess) -> None: @@ -104,5 +104,6 @@ def compare_belts_responses(gcmd, config, st_process: ShakeTuneProcess) -> None: # Run post-processing ConsoleOutput.print('Belts comparative frequency profile generation...') - ConsoleOutput.print('This may take some time (3-5min)') + ConsoleOutput.print('This may take some time (1-3min)') st_process.run() + st_process.wait_for_completion() diff --git a/shaketune/measurement/vibrations_profile.py b/shaketune/commands/create_vibrations_profile.py similarity index 96% rename from shaketune/measurement/vibrations_profile.py rename to shaketune/commands/create_vibrations_profile.py index d8a0f78..62f1785 100644 --- a/shaketune/measurement/vibrations_profile.py +++ b/shaketune/commands/create_vibrations_profile.py @@ -4,9 +4,9 @@ import math from ..helpers.console_output import ConsoleOutput +from ..helpers.motors_config_parser import MotorsConfigParser from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer -from .motorsconfigparser import MotorsConfigParser MIN_SPEED = 2 # mm/s @@ -24,7 +24,9 @@ def create_vibrations_profile(gcmd, config, st_process: ShakeTuneProcess) -> Non accel_chip = None if (size / (max_speed / 60)) < 0.25: - raise gcmd.error('The size of the movement is too small for the given speed! Increase SIZE or decrease MAX_SPEED!') + raise gcmd.error( + 'The size of the movement is too small for the given speed! Increase SIZE or decrease MAX_SPEED!' + ) printer = config.get_printer() gcode = printer.lookup_object('gcode') @@ -133,3 +135,4 @@ def create_vibrations_profile(gcmd, config, st_process: ShakeTuneProcess) -> Non creator = st_process.get_graph_creator() creator.configure(motors_config_parser.kinematics, accel, motors_config_parser) st_process.run() + st_process.wait_for_completion() diff --git a/shaketune/measurement/static_freq.py b/shaketune/commands/excitate_axis_at_freq.py similarity index 97% rename from shaketune/measurement/static_freq.py rename to shaketune/commands/excitate_axis_at_freq.py index 011e305..0aa0afd 100644 --- a/shaketune/measurement/static_freq.py +++ b/shaketune/commands/excitate_axis_at_freq.py @@ -2,9 +2,9 @@ from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput +from ..helpers.resonance_test import vibrate_axis_at_static_freq from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer -from .resonance_test import vibrate_axis_at_static_freq def excitate_axis_at_freq(gcmd, config, st_process: ShakeTuneProcess) -> None: @@ -96,3 +96,4 @@ def excitate_axis_at_freq(gcmd, config, st_process: ShakeTuneProcess) -> None: creator = st_process.get_graph_creator() creator.configure(freq, duration, accel_per_hz) st_process.run() + st_process.wait_for_completion() diff --git a/shaketune/dummy_macros.cfg b/shaketune/dummy_macros.cfg index 5e7b43d..a8d7f8c 100644 --- a/shaketune/dummy_macros.cfg +++ b/shaketune/dummy_macros.cfg @@ -7,15 +7,25 @@ [gcode_macro EXCITATE_AXIS_AT_FREQ] description: dummy gcode: - {% set dummy = params.CREATE_GRAPH|default(0) %} - {% set dummy = params.FREQUENCY|default(25) %} - {% set dummy = params.DURATION|default(30) %} - {% set dummy = params.ACCEL_PER_HZ %} - {% set dummy = params.AXIS|default('x') %} - {% set dummy = params.TRAVEL_SPEED|default(120) %} - {% set dummy = params.Z_HEIGHT %} - {% set dummy = params.ACCEL_CHIP %} - _EXCITATE_AXIS_AT_FREQ {rawparams} + {% set create_graph = params.CREATE_GRAPH|default(0) %} + {% set frequency = params.FREQUENCY|default(25) %} + {% set duration = params.DURATION|default(30) %} + {% set accel_per_hz = params.ACCEL_PER_HZ %} + {% set axis = params.AXIS|default('x') %} + {% set travel_speed = params.TRAVEL_SPEED|default(120) %} + {% set z_height = params.Z_HEIGHT %} + {% set accel_chip = params.ACCEL_CHIP %} + {% set params_filtered = { + "CREATE_GRAPH": create_graph, + "FREQUENCY": frequency, + "DURATION": duration, + "ACCEL_PER_HZ": accel_per_hz if accel_per_hz is not none else '', + "AXIS": axis, + "TRAVEL_SPEED": travel_speed, + "Z_HEIGHT": z_height if z_height is not none else '', + "ACCEL_CHIP": accel_chip if accel_chip is not none else '' + } %} + _EXCITATE_AXIS_AT_FREQ {% for key, value in params_filtered.items() if value is not none and value != '' %}{key}={value} {% endfor %} [gcode_macro AXES_MAP_CALIBRATION] @@ -31,28 +41,47 @@ gcode: [gcode_macro COMPARE_BELTS_RESPONSES] description: dummy gcode: - {% set dummy = params.FREQ_START|default(5) %} - {% set dummy = params.FREQ_END|default(133.33) %} - {% set dummy = params.HZ_PER_SEC|default(1) %} - {% set dummy = params.ACCEL_PER_HZ %} - {% set dummy = params.TRAVEL_SPEED|default(120) %} - {% set dummy = params.Z_HEIGHT %} - _COMPARE_BELTS_RESPONSES {rawparams} + {% set freq_start = params.FREQ_START|default(5) %} + {% set freq_end = params.FREQ_END|default(133.33) %} + {% set hz_per_sec = params.HZ_PER_SEC|default(1) %} + {% set accel_per_hz = params.ACCEL_PER_HZ %} + {% set travel_speed = params.TRAVEL_SPEED|default(120) %} + {% set z_height = params.Z_HEIGHT %} + {% set params_filtered = { + "FREQ_START": freq_start, + "FREQ_END": freq_end, + "HZ_PER_SEC": hz_per_sec, + "ACCEL_PER_HZ": accel_per_hz if accel_per_hz is not none else '', + "TRAVEL_SPEED": travel_speed, + "Z_HEIGHT": z_height if z_height is not none else '' + } %} + _COMPARE_BELTS_RESPONSES {% for key, value in params_filtered.items() if value is not none and value != '' %}{key}={value} {% endfor %} [gcode_macro AXES_SHAPER_CALIBRATION] description: dummy gcode: - {% set dummy = params.FREQ_START|default(5) %} - {% set dummy = params.FREQ_END|default(133.33) %} - {% set dummy = params.HZ_PER_SEC|default(1) %} - {% set dummy = params.ACCEL_PER_HZ %} - {% set dummy = params.AXIS|default('all') %} - {% set dummy = params.SCV %} - {% set dummy = params.MAX_SMOOTHING %} - {% set dummy = params.TRAVEL_SPEED|default(120) %} - {% set dummy = params.Z_HEIGHT %} - _AXES_SHAPER_CALIBRATION {rawparams} + {% set freq_start = params.FREQ_START|default(5) %} + {% set freq_end = params.FREQ_END|default(133.33) %} + {% set hz_per_sec = params.HZ_PER_SEC|default(1) %} + {% set accel_per_hz = params.ACCEL_PER_HZ %} + {% set axis = params.AXIS|default('all') %} + {% set scv = params.SCV %} + {% set max_smoothing = params.MAX_SMOOTHING %} + {% set travel_speed = params.TRAVEL_SPEED|default(120) %} + {% set z_height = params.Z_HEIGHT %} + {% set params_filtered = { + "FREQ_START": freq_start, + "FREQ_END": freq_end, + "HZ_PER_SEC": hz_per_sec, + "ACCEL_PER_HZ": accel_per_hz if accel_per_hz is not none else '', + "AXIS": axis, + "SCV": scv if scv is not none else '', + "MAX_SMOOTHING": max_smoothing if max_smoothing is not none else '', + "TRAVEL_SPEED": travel_speed, + "Z_HEIGHT": z_height if z_height is not none else '' + } %} + _AXES_SHAPER_CALIBRATION {% for key, value in params_filtered.items() if value is not none and value != '' %}{key}={value} {% endfor %} [gcode_macro CREATE_VIBRATIONS_PROFILE] diff --git a/shaketune/graph_creators/__init__.py b/shaketune/graph_creators/__init__.py new file mode 100644 index 0000000..1b3c530 --- /dev/null +++ b/shaketune/graph_creators/__init__.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python3 + +from .axes_map_graph_creator import AxesMapGraphCreator as AxesMapGraphCreator +from .belts_graph_creator import BeltsGraphCreator as BeltsGraphCreator +from .graph_creator import GraphCreator as GraphCreator +from .shaper_graph_creator import ShaperGraphCreator as ShaperGraphCreator +from .static_graph_creator import StaticGraphCreator as StaticGraphCreator +from .vibrations_graph_creator import VibrationsGraphCreator as VibrationsGraphCreator diff --git a/shaketune/post_processing/analyze_axesmap.py b/shaketune/graph_creators/axes_map_graph_creator.py similarity index 83% rename from shaketune/post_processing/analyze_axesmap.py rename to shaketune/graph_creators/axes_map_graph_creator.py index 4c968eb..10f0ee9 100644 --- a/shaketune/post_processing/analyze_axesmap.py +++ b/shaketune/graph_creators/axes_map_graph_creator.py @@ -8,6 +8,7 @@ import optparse import os from datetime import datetime +from typing import List, Optional, Tuple import matplotlib import matplotlib.colors @@ -22,6 +23,8 @@ matplotlib.use('Agg') from ..helpers.common_func import parse_log from ..helpers.console_output import ConsoleOutput +from ..shaketune_config import ShakeTuneConfig +from .graph_creator import GraphCreator KLIPPAIN_COLORS = { 'purple': '#70088C', @@ -33,12 +36,48 @@ KLIPPAIN_COLORS = { MACHINE_AXES = ['x', 'y', 'z'] +class AxesMapGraphCreator(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config, 'axes map') + self._accel: Optional[int] = None + self._segment_length: Optional[float] = None + + def configure(self, accel: int, segment_length: float) -> None: + self._accel = accel + self._segment_length = segment_length + + def create_graph(self) -> None: + lognames = self._move_and_prepare_files( + glob_pattern='shaketune-axesmap_*.csv', + min_files_required=3, + custom_name_func=lambda f: f.stem.split('_')[1].upper(), + ) + fig = axesmap_calibration( + lognames=[str(path) for path in lognames], + accel=self._accel, + fixed_length=self._segment_length, + st_version=self._version, + ) + self._save_figure_and_cleanup(fig, lognames) + + def clean_old_files(self, keep_results: int = 3) -> None: + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + if len(files) <= keep_results: + return # No need to delete any files + for old_file in files[keep_results:]: + file_date = '_'.join(old_file.stem.split('_')[1:3]) + for suffix in ['X', 'Y', 'Z']: + csv_file = self._folder / f'axesmap_{file_date}_{suffix}.csv' + csv_file.unlink(missing_ok=True) + old_file.unlink() + + ###################################################################### # Computation ###################################################################### -def wavelet_denoise(data, wavelet='db1', level=1): +def wavelet_denoise(data: np.ndarray, wavelet: str = 'db1', level: int = 1) -> Tuple[np.ndarray, np.ndarray]: coeffs = pywt.wavedec(data, wavelet, mode='smooth') threshold = np.median(np.abs(coeffs[-level])) / 0.6745 * np.sqrt(2 * np.log(len(data))) new_coeffs = [pywt.threshold(c, threshold, mode='soft') for c in coeffs] @@ -49,11 +88,13 @@ def wavelet_denoise(data, wavelet='db1', level=1): return denoised_data, noise -def integrate_trapz(accel, time): +def integrate_trapz(accel: np.ndarray, time: np.ndarray) -> np.ndarray: return np.array([np.trapz(accel[:i], time[:i]) for i in range(2, len(time) + 1)]) -def process_acceleration_data(time, accel_x, accel_y, accel_z): +def process_acceleration_data( + time: np.ndarray, accel_x: np.ndarray, accel_y: np.ndarray, accel_z: np.ndarray +) -> Tuple[float, float, float, np.ndarray, np.ndarray, np.ndarray, float]: # Calculate the constant offset (gravity component) offset_x = np.mean(accel_x) offset_y = np.mean(accel_y) @@ -89,7 +130,9 @@ def process_acceleration_data(time, accel_x, accel_y, accel_z): return offset_x, offset_y, offset_z, position_x, position_y, position_z, noise_intensity -def scale_positions_to_fixed_length(position_x, position_y, position_z, fixed_length): +def scale_positions_to_fixed_length( + position_x: np.ndarray, position_y: np.ndarray, position_z: np.ndarray, fixed_length: float +) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: # Calculate the total distance traveled in 3D space total_distance = np.sqrt(np.diff(position_x) ** 2 + np.diff(position_y) ** 2 + np.diff(position_z) ** 2).sum() scale_factor = fixed_length / total_distance @@ -102,7 +145,7 @@ def scale_positions_to_fixed_length(position_x, position_y, position_z, fixed_le return position_x, position_y, position_z -def find_nearest_perfect_vector(average_direction_vector): +def find_nearest_perfect_vector(average_direction_vector: np.ndarray) -> Tuple[np.ndarray, float]: # Define the perfect vectors perfect_vectors = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [-1, 0, 0], [0, -1, 0], [0, 0, -1]]) @@ -117,7 +160,9 @@ def find_nearest_perfect_vector(average_direction_vector): return nearest_vector, angle_error -def linear_regression_direction(position_x, position_y, position_z, trim_length=0.25): +def linear_regression_direction( + position_x: np.ndarray, position_y: np.ndarray, position_z: np.ndarray, trim_length: float = 0.25 +) -> np.ndarray: # Trim the start and end of the position data to keep only the center of the segment # as the start and stop positions are not always perfectly aligned and can be a bit noisy t = len(position_x) @@ -145,7 +190,9 @@ def linear_regression_direction(position_x, position_y, position_z, trim_length= ###################################################################### -def plot_compare_frequency(ax, time, accel_x, accel_y, accel_z, offset, i): +def plot_compare_frequency( + ax: plt.Axes, time: np.ndarray, accel_x: np.ndarray, accel_y: np.ndarray, accel_z: np.ndarray, offset: float, i: int +) -> None: # Plot acceleration data ax.plot( time, @@ -200,7 +247,15 @@ def plot_compare_frequency(ax, time, accel_x, accel_y, accel_z, offset, i): ax2.legend(loc='upper right', prop=fontP) -def plot_3d_path(ax, i, position_x, position_y, position_z, average_direction_vector, angle_error): +def plot_3d_path( + ax: plt.Axes, + i: int, + position_x: np.ndarray, + position_y: np.ndarray, + position_z: np.ndarray, + average_direction_vector: np.ndarray, + angle_error: float, +) -> None: ax.plot(position_x, position_y, position_z, color=KLIPPAIN_COLORS['orange'], linestyle=':', linewidth=2) ax.scatter(position_x[0], position_y[0], position_z[0], color=KLIPPAIN_COLORS['red_pink'], zorder=10) ax.text( @@ -251,7 +306,7 @@ def plot_3d_path(ax, i, position_x, position_y, position_z, average_direction_ve ax.legend(loc='upper left', prop=fontP) -def format_direction_vector(vectors): +def format_direction_vector(vectors: List[np.ndarray]) -> str: formatted_vector = [] for vector in vectors: for i in range(len(vector)): @@ -269,7 +324,9 @@ def format_direction_vector(vectors): ###################################################################### -def axesmap_calibration(lognames, fixed_length, accel=None, st_version='unknown'): +def axesmap_calibration( + lognames: List[str], fixed_length: float, accel: Optional[float] = None, st_version: str = 'unknown' +) -> plt.Figure: # Parse data from the log files while ignoring CSV in the wrong format (sorted by axis name) raw_datas = {} for logname in lognames: diff --git a/shaketune/post_processing/graph_belts.py b/shaketune/graph_creators/belts_graph_creator.py similarity index 84% rename from shaketune/post_processing/graph_belts.py rename to shaketune/graph_creators/belts_graph_creator.py index 17d1204..0ab1411 100644 --- a/shaketune/post_processing/graph_belts.py +++ b/shaketune/graph_creators/belts_graph_creator.py @@ -7,8 +7,8 @@ import optparse import os -from collections import namedtuple from datetime import datetime +from typing import List, NamedTuple, Optional, Tuple import matplotlib import matplotlib.colors @@ -21,6 +21,8 @@ matplotlib.use('Agg') from ..helpers.common_func import detect_peaks, parse_log, setup_klipper_import from ..helpers.console_output import ConsoleOutput +from ..shaketune_config import ShakeTuneConfig +from .graph_creator import GraphCreator ALPHABET = ( 'αβγδεζηθικλμνξοπρστυφχψω' # For paired peak names (using the Greek alphabet to avoid confusion with belt names) @@ -30,9 +32,6 @@ PEAKS_DETECTION_THRESHOLD = 0.1 # Threshold to detect peaks in the PSD signal ( DC_MAX_PEAKS = 2 # Maximum ideal number of peaks DC_MAX_UNPAIRED_PEAKS_ALLOWED = 0 # No unpaired peaks are tolerated -# Define the SignalData namedtuple -SignalData = namedtuple('CalibrationData', ['freqs', 'psd', 'peaks', 'paired_peaks', 'unpaired_peaks']) - KLIPPAIN_COLORS = { 'purple': '#70088C', 'orange': '#FF8D32', @@ -42,6 +41,59 @@ KLIPPAIN_COLORS = { } +# Define the SignalData type to store the data of a signal (PSD, peaks, etc.) +class SignalData(NamedTuple): + freqs: np.ndarray + psd: np.ndarray + peaks: np.ndarray + paired_peaks: Optional[List[Tuple[Tuple[int, float, float], Tuple[int, float, float]]]] = None + unpaired_peaks: Optional[List[int]] = None + + +# Define the PeakPairingResult type to store the result of the peak pairing function +class PeakPairingResult(NamedTuple): + paired_peaks: List[Tuple[Tuple[int, float, float], Tuple[int, float, float]]] + unpaired_peaks1: List[int] + unpaired_peaks2: List[int] + + +class BeltsGraphCreator(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config, 'belts comparison') + self._kinematics: Optional[str] = None + self._accel_per_hz: Optional[float] = None + + def configure(self, kinematics: Optional[str] = None, accel_per_hz: Optional[float] = None) -> None: + self._kinematics = kinematics + self._accel_per_hz = accel_per_hz + + def create_graph(self) -> None: + lognames = self._move_and_prepare_files( + glob_pattern='shaketune-belt_*.csv', + min_files_required=2, + custom_name_func=lambda f: f.stem.split('_')[1].upper(), + ) + fig = belts_calibration( + lognames=[str(path) for path in lognames], + kinematics=self._kinematics, + klipperdir=str(self._config.klipper_folder), + accel_per_hz=self._accel_per_hz, + st_version=self._version, + ) + self._save_figure_and_cleanup(fig, lognames) + + def clean_old_files(self, keep_results: int = 3) -> None: + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + if len(files) <= keep_results: + return # No need to delete any files + for old_file in files[keep_results:]: + file_date = '_'.join(old_file.stem.split('_')[1:3]) + for suffix in ['A', 'B']: + csv_file = self._folder / f'beltscomparison_{file_date}_{suffix}.csv' + csv_file.unlink(missing_ok=True) + old_file.unlink() + + ###################################################################### # Computation of the PSD graph ###################################################################### @@ -49,7 +101,9 @@ KLIPPAIN_COLORS = { # This function create pairs of peaks that are close in frequency on two curves (that are known # to be resonances points and must be similar on both belts on a CoreXY kinematic) -def pair_peaks(peaks1, freqs1, psd1, peaks2, freqs2, psd2): +def pair_peaks( + peaks1: np.ndarray, freqs1: np.ndarray, psd1: np.ndarray, peaks2: np.ndarray, freqs2: np.ndarray, psd2: np.ndarray +) -> PeakPairingResult: # Compute a dynamic detection threshold to filter and pair peaks efficiently # even if the signal is very noisy (this get clipped to a maximum of 10Hz diff) distances = [] @@ -88,7 +142,9 @@ def pair_peaks(peaks1, freqs1, psd1, peaks2, freqs2, psd2): unpaired_peaks1.remove(p1) unpaired_peaks2.remove(p2) - return paired_peaks, unpaired_peaks1, unpaired_peaks2 + return PeakPairingResult( + paired_peaks=paired_peaks, unpaired_peaks1=unpaired_peaks1, unpaired_peaks2=unpaired_peaks2 + ) ###################################################################### @@ -96,7 +152,7 @@ def pair_peaks(peaks1, freqs1, psd1, peaks2, freqs2, psd2): ###################################################################### -def compute_mhi(similarity_factor, signal1, signal2): +def compute_mhi(similarity_factor: float, signal1: SignalData, signal2: SignalData) -> str: num_unpaired_peaks = len(signal1.unpaired_peaks) + len(signal2.unpaired_peaks) num_paired_peaks = len(signal1.paired_peaks) # Combine unpaired peaks from both signals, tagging each peak with its respective signal @@ -126,7 +182,7 @@ def compute_mhi(similarity_factor, signal1, signal2): # LUT to transform the MHI into a textual value easy to understand for the users of the script -def mhi_lut(mhi): +def mhi_lut(mhi: float) -> str: ranges = [ (70, 100, 'Excellent mechanical health'), (55, 70, 'Good mechanical health'), @@ -148,7 +204,9 @@ def mhi_lut(mhi): ###################################################################### -def plot_compare_frequency(ax, signal1, signal2, signal1_belt, signal2_belt, max_freq): +def plot_compare_frequency( + ax: plt.Axes, signal1: SignalData, signal2: SignalData, signal1_belt: str, signal2_belt: str, max_freq: float +) -> None: # Plot the two belts PSD signals ax.plot(signal1.freqs, signal1.psd, label='Belt ' + signal1_belt, color=KLIPPAIN_COLORS['purple']) ax.plot(signal2.freqs, signal2.psd, label='Belt ' + signal2_belt, color=KLIPPAIN_COLORS['orange']) @@ -281,7 +339,16 @@ def plot_compare_frequency(ax, signal1, signal2, signal1_belt, signal2_belt, max # Compute quantile-quantile plot to compare the two belts -def plot_versus_belts(ax, common_freqs, signal1, signal2, interp_psd1, interp_psd2, signal1_belt, signal2_belt): +def plot_versus_belts( + ax: plt.Axes, + common_freqs: np.ndarray, + signal1: SignalData, + signal2: SignalData, + interp_psd1: np.ndarray, + interp_psd2: np.ndarray, + signal1_belt: str, + signal2_belt: str, +) -> None: ax.set_title('Cross-belts comparison plot', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') max_psd = max(np.max(interp_psd1), np.max(interp_psd2)) @@ -410,7 +477,7 @@ def plot_versus_belts(ax, common_freqs, signal1, signal2, interp_psd1, interp_ps # Original Klipper function to get the PSD data of a raw accelerometer signal -def compute_signal_data(data, max_freq): +def compute_signal_data(data: np.ndarray, max_freq: float) -> SignalData: helper = shaper_calibrate.ShaperCalibrate(printer=None) calibration_data = helper.process_accelerometer_data(data) @@ -419,7 +486,7 @@ def compute_signal_data(data, max_freq): _, peaks, _ = detect_peaks(psd, freqs, PEAKS_DETECTION_THRESHOLD * psd.max()) - return SignalData(freqs=freqs, psd=psd, peaks=peaks, paired_peaks=None, unpaired_peaks=None) + return SignalData(freqs=freqs, psd=psd, peaks=peaks) ###################################################################### @@ -428,8 +495,13 @@ def compute_signal_data(data, max_freq): def belts_calibration( - lognames, kinematics, klipperdir='~/klipper', max_freq=200.0, accel_per_hz=None, st_version='unknown' -): + lognames: List[str], + kinematics: Optional[str], + klipperdir: str = '~/klipper', + max_freq: float = 200.0, + accel_per_hz: Optional[float] = None, + st_version: str = 'unknown', +) -> plt.Figure: global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) @@ -451,11 +523,9 @@ def belts_calibration( del datas # Pair the peaks across the two datasets - paired_peaks, unpaired_peaks1, unpaired_peaks2 = pair_peaks( - signal1.peaks, signal1.freqs, signal1.psd, signal2.peaks, signal2.freqs, signal2.psd - ) - signal1 = signal1._replace(paired_peaks=paired_peaks, unpaired_peaks=unpaired_peaks1) - signal2 = signal2._replace(paired_peaks=paired_peaks, unpaired_peaks=unpaired_peaks2) + pairing_result = pair_peaks(signal1.peaks, signal1.freqs, signal1.psd, signal2.peaks, signal2.freqs, signal2.psd) + signal1 = signal1._replace(paired_peaks=pairing_result.paired_peaks, unpaired_peaks=pairing_result.unpaired_peaks1) + signal2 = signal2._replace(paired_peaks=pairing_result.paired_peaks, unpaired_peaks=pairing_result.unpaired_peaks2) # Re-interpolate the PSD signals to a common frequency range to be able to plot them one against the other point by point common_freqs = np.linspace(0, max_freq, 500) diff --git a/shaketune/graph_creators/graph_creator.py b/shaketune/graph_creators/graph_creator.py new file mode 100644 index 0000000..b86c97c --- /dev/null +++ b/shaketune/graph_creators/graph_creator.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 + +import abc +import shutil +from datetime import datetime +from pathlib import Path +from typing import Callable, List, Optional + +from matplotlib.figure import Figure + +from ..shaketune_config import ShakeTuneConfig + + +class GraphCreator(abc.ABC): + def __init__(self, config: ShakeTuneConfig, graph_type: str): + self._config = config + self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') + self._version = ShakeTuneConfig.get_git_version() + self._type = graph_type + self._folder = self._config.get_results_folder(graph_type) + + def _move_and_prepare_files( + self, + glob_pattern: str, + min_files_required: Optional[int] = None, + custom_name_func: Optional[Callable[[Path], str]] = None, + ) -> List[Path]: + tmp_path = Path('/tmp') + globbed_files = list(tmp_path.glob(glob_pattern)) + + # If min_files_required is not set, use the number of globbed files as the minimum + min_files_required = min_files_required or len(globbed_files) + + if not globbed_files: + raise FileNotFoundError(f'no CSV files found in the /tmp folder to create the {self._type} graphs!') + if len(globbed_files) < min_files_required: + raise FileNotFoundError(f'{min_files_required} CSV files are needed to create the {self._type} graphs!') + + lognames = [] + for filename in sorted(globbed_files, key=lambda f: f.stat().st_mtime, reverse=True)[:min_files_required]: + custom_name = custom_name_func(filename) if custom_name_func else filename.name + new_file = self._folder / f"{self._type.replace(' ', '')}_{self._graph_date}_{custom_name}.csv" + # shutil.move() is needed to move the file across filesystems (mainly for BTT CB1 Pi default OS image) + shutil.move(filename, new_file) + lognames.append(new_file) + return lognames + + def _save_figure_and_cleanup(self, fig: Figure, lognames: List[Path], axis_label: Optional[str] = None) -> None: + axis_suffix = f'_{axis_label}' if axis_label else '' + png_filename = self._folder / f"{self._type.replace(' ', '')}_{self._graph_date}{axis_suffix}.png" + fig.savefig(png_filename, dpi=self._config.dpi) + + if self._config.keep_csv: + self._archive_files(lognames) + else: + self._remove_files(lognames) + + def _archive_files(self, lognames: List[Path]) -> None: + return + + def _remove_files(self, lognames: List[Path]) -> None: + for csv in lognames: + csv.unlink(missing_ok=True) + + def get_type(self) -> str: + return self._type + + @abc.abstractmethod + def create_graph(self) -> None: + pass + + @abc.abstractmethod + def clean_old_files(self, keep_results: int) -> None: + pass diff --git a/shaketune/post_processing/klippain.png b/shaketune/graph_creators/klippain.png similarity index 100% rename from shaketune/post_processing/klippain.png rename to shaketune/graph_creators/klippain.png diff --git a/shaketune/post_processing/graph_shaper.py b/shaketune/graph_creators/shaper_graph_creator.py similarity index 87% rename from shaketune/post_processing/graph_shaper.py rename to shaketune/graph_creators/shaper_graph_creator.py index 7f3e276..73a871a 100644 --- a/shaketune/post_processing/graph_shaper.py +++ b/shaketune/graph_creators/shaper_graph_creator.py @@ -11,6 +11,7 @@ import optparse import os from datetime import datetime +from typing import List, Optional import matplotlib import matplotlib.font_manager @@ -28,6 +29,8 @@ from ..helpers.common_func import ( setup_klipper_import, ) from ..helpers.console_output import ConsoleOutput +from ..shaketune_config import ShakeTuneConfig +from .graph_creator import GraphCreator PEAKS_DETECTION_THRESHOLD = 0.05 PEAKS_EFFECT_THRESHOLD = 0.12 @@ -43,6 +46,49 @@ KLIPPAIN_COLORS = { } +class ShaperGraphCreator(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config, 'input shaper') + self._max_smoothing: Optional[float] = None + self._scv: Optional[float] = None + self._accel_per_hz: Optional[float] = None + + def configure( + self, scv: float, max_smoothing: Optional[float] = None, accel_per_hz: Optional[float] = None + ) -> None: + self._scv = scv + self._max_smoothing = max_smoothing + self._accel_per_hz = accel_per_hz + + def create_graph(self) -> None: + if not self._scv: + raise ValueError('scv must be set to create the input shaper graph!') + + lognames = self._move_and_prepare_files( + glob_pattern='shaketune-axis_*.csv', + min_files_required=1, + custom_name_func=lambda f: f.stem.split('_')[1].upper(), + ) + fig = shaper_calibration( + lognames=[str(path) for path in lognames], + klipperdir=str(self._config.klipper_folder), + max_smoothing=self._max_smoothing, + scv=self._scv, + accel_per_hz=self._accel_per_hz, + st_version=self._version, + ) + self._save_figure_and_cleanup(fig, lognames, lognames[0].stem.split('_')[-1]) + + def clean_old_files(self, keep_results: int = 3) -> None: + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + if len(files) <= 2 * keep_results: + return # No need to delete any files + for old_file in files[2 * keep_results :]: + csv_file = old_file.with_suffix('.csv') + csv_file.unlink(missing_ok=True) + old_file.unlink() + + ###################################################################### # Computation ###################################################################### @@ -50,7 +96,7 @@ KLIPPAIN_COLORS = { # Find the best shaper parameters using Klipper's official algorithm selection with # a proper precomputed damping ratio (zeta) and using the configured printer SQV value -def calibrate_shaper(datas, max_smoothing, scv, max_freq): +def calibrate_shaper(datas: List[np.ndarray], max_smoothing: Optional[float], scv: float, max_freq: float): helper = shaper_calibrate.ShaperCalibrate(printer=None) calibration_data = helper.process_accelerometer_data(datas) calibration_data.normalize_to_frequencies() @@ -98,8 +144,17 @@ def calibrate_shaper(datas, max_smoothing, scv, max_freq): def plot_freq_response( - ax, calibration_data, shapers, klipper_shaper_choice, peaks, peaks_freqs, peaks_threshold, fr, zeta, max_freq -): + ax: plt.Axes, + calibration_data, + shapers, + klipper_shaper_choice: str, + peaks: np.ndarray, + peaks_freqs: np.ndarray, + peaks_threshold: List[float], + fr: float, + zeta: float, + max_freq: float, +) -> None: freqs = calibration_data.freqs psd = calibration_data.psd_sum px = calibration_data.psd_x @@ -246,7 +301,9 @@ def plot_freq_response( # Plot a time-frequency spectrogram to see how the system respond over time during the # resonnance test. This can highlight hidden spots from the standard PSD graph from other harmonics -def plot_spectrogram(ax, t, bins, pdata, peaks, max_freq): +def plot_spectrogram( + ax: plt.Axes, t: np.ndarray, bins: np.ndarray, pdata: np.ndarray, peaks: np.ndarray, max_freq: float +) -> None: ax.set_title('Time-Frequency Spectrogram', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') # We need to normalize the data to get a proper signal on the spectrogram @@ -298,14 +355,14 @@ def plot_spectrogram(ax, t, bins, pdata, peaks, max_freq): def shaper_calibration( - lognames, - klipperdir='~/klipper', - max_smoothing=None, - scv=5.0, - max_freq=200.0, - accel_per_hz=None, - st_version='unknown', -): + lognames: List[str], + klipperdir: str = '~/klipper', + max_smoothing: Optional[float] = None, + scv: float = 5.0, + max_freq: float = 200.0, + accel_per_hz: Optional[float] = None, + st_version: str = 'unknown', +) -> plt.Figure: global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) diff --git a/shaketune/post_processing/graph_static.py b/shaketune/graph_creators/static_graph_creator.py similarity index 69% rename from shaketune/post_processing/graph_static.py rename to shaketune/graph_creators/static_graph_creator.py index 54564ca..a02ed61 100644 --- a/shaketune/post_processing/graph_static.py +++ b/shaketune/graph_creators/static_graph_creator.py @@ -3,6 +3,7 @@ import optparse import os from datetime import datetime +from typing import List, Optional import matplotlib import matplotlib.font_manager @@ -12,11 +13,10 @@ import numpy as np matplotlib.use('Agg') -from ..helpers.common_func import ( - compute_spectrogram, - parse_log, -) +from ..helpers.common_func import compute_spectrogram, parse_log from ..helpers.console_output import ConsoleOutput +from ..shaketune_config import ShakeTuneConfig +from .graph_creator import GraphCreator PEAKS_DETECTION_THRESHOLD = 0.05 PEAKS_EFFECT_THRESHOLD = 0.12 @@ -32,12 +32,54 @@ KLIPPAIN_COLORS = { } +class StaticGraphCreator(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config, 'static frequency') + self._freq: Optional[float] = None + self._duration: Optional[float] = None + self._accel_per_hz: Optional[float] = None + + def configure(self, freq: float, duration: float, accel_per_hz: Optional[float] = None) -> None: + self._freq = freq + self._duration = duration + self._accel_per_hz = accel_per_hz + + def create_graph(self) -> None: + if not self._freq or not self._duration or not self._accel_per_hz: + raise ValueError('freq, duration and accel_per_hz must be set to create the static frequency graph!') + + lognames = self._move_and_prepare_files( + glob_pattern='shaketune-staticfreq_*.csv', + min_files_required=1, + custom_name_func=lambda f: f.stem.split('_')[1].upper(), + ) + fig = static_frequency_tool( + lognames=[str(path) for path in lognames], + klipperdir=str(self._config.klipper_folder), + freq=self._freq, + duration=self._duration, + max_freq=200.0, + accel_per_hz=self._accel_per_hz, + st_version=self._version, + ) + self._save_figure_and_cleanup(fig, lognames, lognames[0].stem.split('_')[-1]) + + def clean_old_files(self, keep_results: int = 3) -> None: + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + if len(files) <= keep_results: + return # No need to delete any files + for old_file in files[keep_results:]: + csv_file = old_file.with_suffix('.csv') + csv_file.unlink(missing_ok=True) + old_file.unlink() + + ###################################################################### # Graphing ###################################################################### -def plot_spectrogram(ax, t, bins, pdata, max_freq): +def plot_spectrogram(ax: plt.Axes, t: np.ndarray, bins: np.ndarray, pdata: np.ndarray, max_freq: float) -> None: ax.set_title('Time-Frequency Spectrogram', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') vmin_value = np.percentile(pdata, SPECTROGRAM_LOW_PERCENTILE_FILTER) @@ -61,7 +103,7 @@ def plot_spectrogram(ax, t, bins, pdata, max_freq): return -def plot_energy_accumulation(ax, t, bins, pdata): +def plot_energy_accumulation(ax: plt.Axes, t: np.ndarray, bins: np.ndarray, pdata: np.ndarray) -> None: # Integrate the energy over the frequency bins for each time step and plot this vertically ax.plot(np.trapz(pdata, t, axis=0), bins, color=KLIPPAIN_COLORS['orange']) ax.set_title('Vibrations', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') @@ -83,14 +125,14 @@ def plot_energy_accumulation(ax, t, bins, pdata): def static_frequency_tool( - lognames, - klipperdir='~/klipper', - freq=None, - duration=None, - max_freq=500.0, - accel_per_hz=None, - st_version='unknown', -): + lognames: List[str], + klipperdir: str = '~/klipper', + freq: Optional[float] = None, + duration: Optional[float] = None, + max_freq: float = 500.0, + accel_per_hz: Optional[float] = None, + st_version: str = 'unknown', +) -> plt.Figure: if freq is None or duration is None: raise ValueError('Error: missing frequency or duration parameters!') @@ -127,7 +169,7 @@ def static_frequency_tool( title_line3 = f'| Maintained frequency: {freq}Hz for {duration}s' title_line4 = f'| Accel per Hz used: {accel_per_hz} mm/s²/Hz' if accel_per_hz is not None else '' except Exception: - ConsoleOutput.print('Warning: CSV filename look to be different than expected (%s)' % (lognames[0])) + ConsoleOutput.print(f'Warning: CSV filename look to be different than expected ({lognames[0]})') title_line2 = lognames[0].split('/')[-1] title_line3 = '' title_line4 = '' diff --git a/shaketune/post_processing/graph_vibrations.py b/shaketune/graph_creators/vibrations_graph_creator.py similarity index 87% rename from shaketune/post_processing/graph_vibrations.py rename to shaketune/graph_creators/vibrations_graph_creator.py index 7fbf8e9..49065ff 100644 --- a/shaketune/post_processing/graph_vibrations.py +++ b/shaketune/graph_creators/vibrations_graph_creator.py @@ -9,8 +9,11 @@ import math import optparse import os import re +import tarfile from collections import defaultdict from datetime import datetime +from pathlib import Path +from typing import List, Optional, Tuple import matplotlib import matplotlib.font_manager @@ -29,6 +32,9 @@ from ..helpers.common_func import ( setup_klipper_import, ) from ..helpers.console_output import ConsoleOutput +from ..helpers.motors_config_parser import MotorsConfigParser +from ..shaketune_config import ShakeTuneConfig +from .graph_creator import GraphCreator PEAKS_DETECTION_THRESHOLD = 0.05 PEAKS_RELATIVE_HEIGHT_THRESHOLD = 0.04 @@ -46,20 +52,74 @@ KLIPPAIN_COLORS = { } +class VibrationsGraphCreator(GraphCreator): + def __init__(self, config: ShakeTuneConfig): + super().__init__(config, 'vibrations profile') + self._kinematics: Optional[str] = None + self._accel: Optional[float] = None + self._motors: Optional[List[MotorsConfigParser]] = None + + def configure(self, kinematics: str, accel: float, motor_config_parser: MotorsConfigParser) -> None: + self._kinematics = kinematics + self._accel = accel + self._motors = motor_config_parser.get_motors() + + def _archive_files(self, lognames: List[Path]) -> None: + tar_path = self._folder / f'{self._type}_{self._graph_date}.tar.gz' + with tarfile.open(tar_path, 'w:gz') as tar: + for csv_file in lognames: + tar.add(csv_file, arcname=csv_file.name, recursive=False) + csv_file.unlink() + + def create_graph(self) -> None: + if not self._accel or not self._kinematics: + raise ValueError('accel and kinematics must be set to create the vibrations profile graph!') + + lognames = self._move_and_prepare_files( + glob_pattern='shaketune-vib_*.csv', + min_files_required=None, + custom_name_func=lambda f: re.search(r'shaketune-vib_(.*?)_\d{8}_\d{6}', f.name).group(1), + ) + fig = vibrations_profile( + lognames=[str(path) for path in lognames], + klipperdir=str(self._config.klipper_folder), + kinematics=self._kinematics, + accel=self._accel, + st_version=self._version, + motors=self._motors, + ) + self._save_figure_and_cleanup(fig, lognames) + + def clean_old_files(self, keep_results: int = 3) -> None: + files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) + if len(files) <= keep_results: + return # No need to delete any files + for old_file in files[keep_results:]: + old_file.unlink() + tar_file = old_file.with_suffix('.tar.gz') + tar_file.unlink(missing_ok=True) + + ###################################################################### # Computation ###################################################################### # Call to the official Klipper input shaper object to do the PSD computation -def calc_freq_response(data): +def calc_freq_response(data) -> Tuple[np.ndarray, np.ndarray]: helper = shaper_calibrate.ShaperCalibrate(printer=None) return helper.process_accelerometer_data(data) # Calculate motor frequency profiles based on the measured Power Spectral Density (PSD) measurements for the machine kinematics # main angles and then create a global motor profile as a weighted average (from their own vibrations) of all calculated profiles -def compute_motor_profiles(freqs, psds, all_angles_energy, measured_angles=None, energy_amplification_factor=2): +def compute_motor_profiles( + freqs: np.ndarray, + psds: dict, + all_angles_energy: dict, + measured_angles: Optional[List[int]] = None, + energy_amplification_factor: int = 2, +) -> Tuple[dict, np.ndarray]: if measured_angles is None: measured_angles = [0, 90] @@ -97,7 +157,9 @@ def compute_motor_profiles(freqs, psds, all_angles_energy, measured_angles=None, # the effects of each speeds at each angles, this function simplify it by using only the main motors axes (X/Y for Cartesian # printers and A/B for CoreXY) measurements and project each points on the [0,360] degrees range using trigonometry # to "sum" the vibration impact of each axis at every points of the generated spectrogram. The result is very similar at the end. -def compute_dir_speed_spectrogram(measured_speeds, data, kinematics='cartesian', measured_angles=None): +def compute_dir_speed_spectrogram( + measured_speeds: List[float], data: dict, kinematics: str = 'cartesian', measured_angles: Optional[List[int]] = None +) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: if measured_angles is None: measured_angles = [0, 90] @@ -106,7 +168,7 @@ def compute_dir_speed_spectrogram(measured_speeds, data, kinematics='cartesian', spectrum_speeds = np.linspace(min(measured_speeds), max(measured_speeds), len(measured_speeds) * 6) spectrum_vibrations = np.zeros((len(spectrum_angles), len(spectrum_speeds))) - def get_interpolated_vibrations(data, speed, speeds): + def get_interpolated_vibrations(data: dict, speed: float, speeds: List[float]) -> float: idx = np.clip(np.searchsorted(speeds, speed, side='left'), 1, len(speeds) - 1) lower_speed = speeds[idx - 1] upper_speed = speeds[idx] @@ -139,7 +201,7 @@ def compute_dir_speed_spectrogram(measured_speeds, data, kinematics='cartesian', return spectrum_angles, spectrum_speeds, spectrum_vibrations -def compute_angle_powers(spectrogram_data): +def compute_angle_powers(spectrogram_data: np.ndarray) -> np.ndarray: angles_powers = np.trapz(spectrogram_data, axis=1) # Since we want to plot it on a continuous polar plot later on, we need to append parts of @@ -151,7 +213,7 @@ def compute_angle_powers(spectrogram_data): return convolved_extended[9:-9] -def compute_speed_powers(spectrogram_data, smoothing_window=15): +def compute_speed_powers(spectrogram_data: np.ndarray, smoothing_window: int = 15) -> np.ndarray: min_values = np.amin(spectrogram_data, axis=0) max_values = np.amax(spectrogram_data, axis=0) var_values = np.var(spectrogram_data, axis=0) @@ -167,7 +229,7 @@ def compute_speed_powers(spectrogram_data, smoothing_window=15): conv_filter = np.ones(smoothing_window) / smoothing_window window = int(smoothing_window / 2) - def pad_and_smooth(data): + def pad_and_smooth(data: np.ndarray) -> np.ndarray: data_padded = np.pad(data, (window,), mode='edge') smoothed_data = np.convolve(data_padded, conv_filter, mode='valid') return smoothed_data @@ -182,7 +244,9 @@ def compute_speed_powers(spectrogram_data, smoothing_window=15): # Function that filter and split the good_speed ranges. The goal is to remove some zones around # additional detected small peaks in order to suppress them if there is a peak, even if it's low, # that's probably due to a crossing in the motor resonance pattern that still need to be removed -def filter_and_split_ranges(all_speeds, good_speeds, peak_speed_indices, deletion_range): +def filter_and_split_ranges( + all_speeds: np.ndarray, good_speeds: List[Tuple[int, int, float]], peak_speed_indices: dict, deletion_range: int +) -> List[Tuple[int, int, float]]: # Process each range to filter out and split based on peak indices filtered_good_speeds = [] for start, end, energy in good_speeds: @@ -225,7 +289,9 @@ def filter_and_split_ranges(all_speeds, good_speeds, peak_speed_indices, deletio # This function allow the computation of a symmetry score that reflect the spectrogram apparent symmetry between # measured axes on both the shape of the signal and the energy level consistency across both side of the signal -def compute_symmetry_analysis(all_angles, spectrogram_data, measured_angles=None): +def compute_symmetry_analysis( + all_angles: np.ndarray, spectrogram_data: np.ndarray, measured_angles: Optional[List[int]] = None +) -> float: if measured_angles is None: measured_angles = [0, 90] @@ -256,7 +322,13 @@ def compute_symmetry_analysis(all_angles, spectrogram_data, measured_angles=None ###################################################################### -def plot_angle_profile_polar(ax, angles, angles_powers, low_energy_zones, symmetry_factor): +def plot_angle_profile_polar( + ax: plt.Axes, + angles: np.ndarray, + angles_powers: np.ndarray, + low_energy_zones: List[Tuple[int, int, float]], + symmetry_factor: float, +) -> None: angles_radians = np.deg2rad(angles) ax.set_title('Polar angle energy profile', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') @@ -315,16 +387,16 @@ def plot_angle_profile_polar(ax, angles, angles_powers, low_energy_zones, symmet def plot_global_speed_profile( - ax, - all_speeds, - sp_min_energy, - sp_max_energy, - sp_variance_energy, - vibration_metric, - num_peaks, - peaks, - low_energy_zones, -): + ax: plt.Axes, + all_speeds: np.ndarray, + sp_min_energy: np.ndarray, + sp_max_energy: np.ndarray, + sp_variance_energy: np.ndarray, + vibration_metric: np.ndarray, + num_peaks: int, + peaks: np.ndarray, + low_energy_zones: List[Tuple[int, int, float]], +) -> None: ax.set_title('Global speed energy profile', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') ax.set_xlabel('Speed (mm/s)') ax.set_ylabel('Energy') @@ -389,7 +461,9 @@ def plot_global_speed_profile( return -def plot_angular_speed_profiles(ax, speeds, angles, spectrogram_data, kinematics='cartesian'): +def plot_angular_speed_profiles( + ax: plt.Axes, speeds: np.ndarray, angles: np.ndarray, spectrogram_data: np.ndarray, kinematics: str = 'cartesian' +) -> None: ax.set_title('Angular speed energy profiles', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') ax.set_xlabel('Speed (mm/s)') ax.set_ylabel('Energy') @@ -423,7 +497,14 @@ def plot_angular_speed_profiles(ax, speeds, angles, spectrogram_data, kinematics return -def plot_motor_profiles(ax, freqs, main_angles, motor_profiles, global_motor_profile, max_freq): +def plot_motor_profiles( + ax: plt.Axes, + freqs: np.ndarray, + main_angles: List[int], + motor_profiles: dict, + global_motor_profile: np.ndarray, + max_freq: float, +) -> None: ax.set_title('Motor frequency profile', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') ax.set_ylabel('Energy') ax.set_xlabel('Frequency (Hz)') @@ -501,7 +582,9 @@ def plot_motor_profiles(ax, freqs, main_angles, motor_profiles, global_motor_pro return -def plot_vibration_spectrogram_polar(ax, angles, speeds, spectrogram_data): +def plot_vibration_spectrogram_polar( + ax: plt.Axes, angles: np.ndarray, speeds: np.ndarray, spectrogram_data: np.ndarray +) -> None: angles_radians = np.radians(angles) # Assuming speeds defines the radial distance from the center, we need to create a meshgrid @@ -527,7 +610,9 @@ def plot_vibration_spectrogram_polar(ax, angles, speeds, spectrogram_data): return -def plot_vibration_spectrogram(ax, angles, speeds, spectrogram_data, peaks): +def plot_vibration_spectrogram( + ax: plt.Axes, angles: np.ndarray, speeds: np.ndarray, spectrogram_data: np.ndarray, peaks: np.ndarray +) -> None: ax.set_title('Vibrations heatmap', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold') ax.set_xlabel('Speed (mm/s)') ax.set_ylabel('Angle (deg)') @@ -560,7 +645,7 @@ def plot_vibration_spectrogram(ax, angles, speeds, spectrogram_data, peaks): return -def plot_motor_config_txt(fig, motors, differences): +def plot_motor_config_txt(fig: plt.Figure, motors: List[MotorsConfigParser], differences: Optional[str]) -> None: motor_details = [(motors[0], 'X motor'), (motors[1], 'Y motor')] distance = 0.12 @@ -618,7 +703,7 @@ def plot_motor_config_txt(fig, motors, differences): ###################################################################### -def extract_angle_and_speed(logname): +def extract_angle_and_speed(logname: str) -> Tuple[float, float]: try: match = re.search(r'an(\d+)_\d+sp(\d+)_\d+', os.path.basename(logname)) if match: @@ -634,8 +719,14 @@ def extract_angle_and_speed(logname): def vibrations_profile( - lognames, klipperdir='~/klipper', kinematics='cartesian', accel=None, max_freq=1000.0, st_version=None, motors=None -): + lognames: List[str], + klipperdir: str = '~/klipper', + kinematics: str = 'cartesian', + accel: Optional[float] = None, + max_freq: float = 1000.0, + st_version: Optional[str] = None, + motors: Optional[List[MotorsConfigParser]] = None, +) -> plt.Figure: global shaper_calibrate shaper_calibrate = setup_klipper_import(klipperdir) diff --git a/shaketune/measurement/motorsconfigparser.py b/shaketune/helpers/motors_config_parser.py similarity index 100% rename from shaketune/measurement/motorsconfigparser.py rename to shaketune/helpers/motors_config_parser.py diff --git a/shaketune/measurement/resonance_test.py b/shaketune/helpers/resonance_test.py similarity index 100% rename from shaketune/measurement/resonance_test.py rename to shaketune/helpers/resonance_test.py diff --git a/shaketune/measurement/__init__.py b/shaketune/measurement/__init__.py deleted file mode 100644 index 72d968b..0000000 --- a/shaketune/measurement/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python3 - -from .axes_input_shaper import axes_shaper_calibration as axes_shaper_calibration -from .axes_map import axes_map_calibration as axes_map_calibration -from .belts_comparison import compare_belts_responses as compare_belts_responses -from .static_freq import excitate_axis_at_freq as excitate_axis_at_freq -from .vibrations_profile import create_vibrations_profile as create_vibrations_profile diff --git a/shaketune/post_processing/__init__.py b/shaketune/post_processing/__init__.py deleted file mode 100644 index 247c2ca..0000000 --- a/shaketune/post_processing/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python3 - -from .graph_creator import AxesMapFinder as AxesMapFinder -from .graph_creator import BeltsGraphCreator as BeltsGraphCreator -from .graph_creator import GraphCreator as GraphCreator -from .graph_creator import ShaperGraphCreator as ShaperGraphCreator -from .graph_creator import StaticGraphCreator as StaticGraphCreator -from .graph_creator import VibrationsGraphCreator as VibrationsGraphCreator diff --git a/shaketune/post_processing/graph_creator.py b/shaketune/post_processing/graph_creator.py deleted file mode 100644 index a4c6b35..0000000 --- a/shaketune/post_processing/graph_creator.py +++ /dev/null @@ -1,327 +0,0 @@ -#!/usr/bin/env python3 - -import abc -import re -import shutil -import tarfile -from datetime import datetime -from pathlib import Path -from typing import Callable, Optional - -from matplotlib.figure import Figure - -from ..measurement.motorsconfigparser import MotorsConfigParser -from ..shaketune_config import ShakeTuneConfig -from .analyze_axesmap import axesmap_calibration -from .graph_belts import belts_calibration -from .graph_shaper import shaper_calibration -from .graph_static import static_frequency_tool -from .graph_vibrations import vibrations_profile - - -class GraphCreator(abc.ABC): - def __init__(self, config: ShakeTuneConfig): - self._config = config - - self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') - self._version = ShakeTuneConfig.get_git_version() - - self._type = None - self._folder = None - - def _setup_folder(self, graph_type: str) -> None: - self._type = graph_type - self._folder = self._config.get_results_folder(graph_type) - - def _move_and_prepare_files( - self, - glob_pattern: str, - min_files_required: Optional[int] = None, - custom_name_func: Optional[Callable[[Path], str]] = None, - ) -> list[Path]: - tmp_path = Path('/tmp') - globbed_files = list(tmp_path.glob(glob_pattern)) - - # If min_files_required is not set, use the number of globbed files as the minimum - min_files_required = min_files_required or len(globbed_files) - - if not globbed_files: - raise FileNotFoundError(f'no CSV files found in the /tmp folder to create the {self._type} graphs!') - if len(globbed_files) < min_files_required: - raise FileNotFoundError(f'{min_files_required} CSV files are needed to create the {self._type} graphs!') - - lognames = [] - for filename in sorted(globbed_files, key=lambda f: f.stat().st_mtime, reverse=True)[:min_files_required]: - custom_name = custom_name_func(filename) if custom_name_func else filename.name - new_file = self._folder / f'{self._type}_{self._graph_date}_{custom_name}.csv' - # shutil.move() is needed to move the file across filesystems (mainly for BTT CB1 Pi default OS image) - shutil.move(filename, new_file) - lognames.append(new_file) - return lognames - - def _save_figure_and_cleanup(self, fig: Figure, lognames: list[Path], axis_label: Optional[str] = None) -> None: - axis_suffix = f'_{axis_label}' if axis_label else '' - png_filename = self._folder / f'{self._type}_{self._graph_date}{axis_suffix}.png' - fig.savefig(png_filename, dpi=self._config.dpi) - - if self._config.keep_csv: - self._archive_files(lognames) - else: - self._remove_files(lognames) - - def _archive_files(self, _: list[Path]) -> None: - return - - def _remove_files(self, lognames: list[Path]) -> None: - for csv in lognames: - csv.unlink(missing_ok=True) - - def get_type(self) -> str: - return self._type - - @abc.abstractmethod - def create_graph(self) -> None: - pass - - @abc.abstractmethod - def clean_old_files(self, keep_results: int) -> None: - pass - - -class BeltsGraphCreator(GraphCreator): - def __init__(self, config: ShakeTuneConfig): - super().__init__(config) - - self._kinematics = None - self._accel_per_hz = None - - self._setup_folder('belts') - - def configure(self, kinematics: str = None, accel_per_hz: float = None) -> None: - self._kinematics = kinematics - self._accel_per_hz = accel_per_hz - - def create_graph(self) -> None: - lognames = self._move_and_prepare_files( - glob_pattern='shaketune-belt_*.csv', - min_files_required=2, - custom_name_func=lambda f: f.stem.split('_')[1].upper(), - ) - fig = belts_calibration( - lognames=[str(path) for path in lognames], - kinematics=self._kinematics, - klipperdir=str(self._config.klipper_folder), - accel_per_hz=self._accel_per_hz, - st_version=self._version, - ) - self._save_figure_and_cleanup(fig, lognames) - - def clean_old_files(self, keep_results: int = 3) -> None: - # Get all PNG files in the directory as a list of Path objects - files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) - - if len(files) <= keep_results: - return # No need to delete any files - - # Delete the older files - for old_file in files[keep_results:]: - file_date = '_'.join(old_file.stem.split('_')[1:3]) - for suffix in ['A', 'B']: - csv_file = self._folder / f'belts_{file_date}_{suffix}.csv' - csv_file.unlink(missing_ok=True) - old_file.unlink() - - -class ShaperGraphCreator(GraphCreator): - def __init__(self, config: ShakeTuneConfig): - super().__init__(config) - - self._max_smoothing = None - self._scv = None - - self._setup_folder('shaper') - - def configure(self, scv: float, max_smoothing: float = None, accel_per_hz: float = None) -> None: - self._scv = scv - self._max_smoothing = max_smoothing - self._accel_per_hz = accel_per_hz - - def create_graph(self) -> None: - if not self._scv: - raise ValueError('scv must be set to create the input shaper graph!') - - lognames = self._move_and_prepare_files( - glob_pattern='shaketune-axis_*.csv', - min_files_required=1, - custom_name_func=lambda f: f.stem.split('_')[1].upper(), - ) - fig = shaper_calibration( - lognames=[str(path) for path in lognames], - klipperdir=str(self._config.klipper_folder), - max_smoothing=self._max_smoothing, - scv=self._scv, - accel_per_hz=self._accel_per_hz, - st_version=self._version, - ) - self._save_figure_and_cleanup(fig, lognames, lognames[0].stem.split('_')[-1]) - - def clean_old_files(self, keep_results: int = 3) -> None: - # Get all PNG files in the directory as a list of Path objects - files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) - - if len(files) <= 2 * keep_results: - return # No need to delete any files - - # Delete the older files - for old_file in files[2 * keep_results :]: - csv_file = old_file.with_suffix('.csv') - csv_file.unlink(missing_ok=True) - old_file.unlink() - - -class VibrationsGraphCreator(GraphCreator): - def __init__(self, config: ShakeTuneConfig): - super().__init__(config) - - self._kinematics = None - self._accel = None - self._motors = None - - self._setup_folder('vibrations') - - def configure(self, kinematics: str, accel: float, motor_config_parser: MotorsConfigParser) -> None: - self._kinematics = kinematics - self._accel = accel - self._motors = motor_config_parser.get_motors() - - def _archive_files(self, lognames: list[Path]) -> None: - tar_path = self._folder / f'{self._type}_{self._graph_date}.tar.gz' - with tarfile.open(tar_path, 'w:gz') as tar: - for csv_file in lognames: - tar.add(csv_file, arcname=csv_file.name, recursive=False) - csv_file.unlink() - - def create_graph(self) -> None: - if not self._accel or not self._kinematics: - raise ValueError('accel, chip_name and kinematics must be set to create the vibrations profile graph!') - - lognames = self._move_and_prepare_files( - glob_pattern='shaketune-vib_*.csv', - min_files_required=None, - custom_name_func=lambda f: re.search(r'shaketune-vib_(.*?)_\d{8}_\d{6}', f.name).group(1), - ) - fig = vibrations_profile( - lognames=[str(path) for path in lognames], - klipperdir=str(self._config.klipper_folder), - kinematics=self._kinematics, - accel=self._accel, - st_version=self._version, - motors=self._motors, - ) - self._save_figure_and_cleanup(fig, lognames) - - def clean_old_files(self, keep_results: int = 3) -> None: - # Get all PNG files in the directory as a list of Path objects - files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) - - if len(files) <= keep_results: - return # No need to delete any files - - # Delete the older files - for old_file in files[keep_results:]: - old_file.unlink() - tar_file = old_file.with_suffix('.tar.gz') - tar_file.unlink(missing_ok=True) - - -class AxesMapFinder(GraphCreator): - def __init__(self, config: ShakeTuneConfig): - super().__init__(config) - - self._accel = None - self._segment_length = None - self._graph_date = datetime.now().strftime('%Y%m%d_%H%M%S') - - self._setup_folder('axesmap') - - def configure(self, accel: int, segment_length: float) -> None: - self._accel = accel - self._segment_length = segment_length - - def create_graph(self) -> None: - lognames = self._move_and_prepare_files( - glob_pattern='shaketune-axesmap_*.csv', - min_files_required=3, - custom_name_func=lambda f: f.stem.split('_')[1].upper(), - ) - fig = axesmap_calibration( - lognames=[str(path) for path in lognames], - accel=self._accel, - fixed_length=self._segment_length, - st_version=self._version, - ) - self._save_figure_and_cleanup(fig, lognames) - - def clean_old_files(self, keep_results: int = 3) -> None: - # Get all PNG files in the directory as a list of Path objects - files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) - - if len(files) <= keep_results: - return # No need to delete any files - - # Delete the older files - for old_file in files[keep_results:]: - file_date = '_'.join(old_file.stem.split('_')[1:3]) - for suffix in ['X', 'Y', 'Z']: - csv_file = self._folder / f'axesmap_{file_date}_{suffix}.csv' - csv_file.unlink(missing_ok=True) - old_file.unlink() - - -class StaticGraphCreator(GraphCreator): - def __init__(self, config: ShakeTuneConfig): - super().__init__(config) - - self._freq = None - self._duration = None - self._accel_per_hz = None - - self._setup_folder('staticfreq') - - def configure(self, freq: float, duration: float, accel_per_hz: float = None) -> None: - self._freq = freq - self._duration = duration - self._accel_per_hz = accel_per_hz - - def create_graph(self) -> None: - if not self._freq or not self._duration or not self._accel_per_hz: - raise ValueError('freq, duration and accel_per_hz must be set to create the static frequency graph!') - - lognames = self._move_and_prepare_files( - glob_pattern='shaketune-staticfreq_*.csv', - min_files_required=1, - custom_name_func=lambda f: f.stem.split('_')[1].upper(), - ) - fig = static_frequency_tool( - lognames=[str(path) for path in lognames], - klipperdir=str(self._config.klipper_folder), - freq=self._freq, - duration=self._duration, - max_freq=200.0, - accel_per_hz=self._accel_per_hz, - st_version=self._version, - ) - self._save_figure_and_cleanup(fig, lognames, lognames[0].stem.split('_')[-1]) - - def clean_old_files(self, keep_results: int = 3) -> None: - # Get all PNG files in the directory as a list of Path objects - files = sorted(self._folder.glob('*.png'), key=lambda f: f.stat().st_mtime, reverse=True) - - if len(files) <= keep_results: - return # No need to delete any files - - # Delete the older files - for old_file in files[keep_results:]: - csv_file = old_file.with_suffix('.csv') - csv_file.unlink(missing_ok=True) - old_file.unlink() diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index 266a94f..0d01d1b 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -4,21 +4,21 @@ import os from pathlib import Path -from .helpers.console_output import ConsoleOutput -from .measurement import ( +from .commands import ( axes_map_calibration, axes_shaper_calibration, compare_belts_responses, create_vibrations_profile, excitate_axis_at_freq, ) -from .post_processing import ( - AxesMapFinder, +from .graph_creators import ( + AxesMapGraphCreator, BeltsGraphCreator, ShaperGraphCreator, StaticGraphCreator, VibrationsGraphCreator, ) +from .helpers.console_output import ConsoleOutput from .shaketune_config import ShakeTuneConfig from .shaketune_process import ShakeTuneProcess @@ -29,7 +29,7 @@ class ShakeTune: self._printer = config.get_printer() gcode = self._printer.lookup_object('gcode') - res_tester = self._printer.lookup_object('resonance_tester') + res_tester = self._printer.lookup_object('resonance_tester', None) if res_tester is None: config.error('No [resonance_tester] config section found in printer.cfg! Please add one to use Shake&Tune.') @@ -115,8 +115,8 @@ class ShakeTune: def cmd_AXES_MAP_CALIBRATION(self, gcmd) -> None: ConsoleOutput.print(f'Shake&Tune version: {ShakeTuneConfig.get_git_version()}') - axes_map_finder = AxesMapFinder(self._config) - st_process = ShakeTuneProcess(self._config, axes_map_finder, self.timeout) + axes_map_graph_creator = AxesMapGraphCreator(self._config) + st_process = ShakeTuneProcess(self._config, axes_map_graph_creator, self.timeout) axes_map_calibration(gcmd, self._pconfig, st_process) def cmd_COMPARE_BELTS_RESPONSES(self, gcmd) -> None: diff --git a/shaketune/shaketune_config.py b/shaketune/shaketune_config.py index 7046d0f..ae2e7d1 100644 --- a/shaketune/shaketune_config.py +++ b/shaketune/shaketune_config.py @@ -8,11 +8,11 @@ KLIPPER_FOLDER = Path.home() / 'klipper' KLIPPER_LOG_FOLDER = Path.home() / 'printer_data/logs' RESULTS_BASE_FOLDER = Path.home() / 'printer_data/config/K-ShakeTune_results' RESULTS_SUBFOLDERS = { - 'axesmap': 'axes_map', - 'belts': 'belts', - 'shaper': 'input_shaper', - 'vibrations': 'vibrations', - 'staticfreq': 'static_freq', + 'axes map': 'axes_map', + 'belts comparison': 'belts', + 'input shaper': 'input_shaper', + 'vibrations profile': 'vibrations', + 'static frequency': 'static_freq', } From ecd57ea3dcf7791567cc04830b1755213dc6f54c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Tue, 11 Jun 2024 21:26:15 +0200 Subject: [PATCH 48/50] fixed items from code review --- shaketune/__init__.py | 2 - shaketune/commands/__init__.py | 2 - shaketune/commands/accelerometer.py | 6 +-- shaketune/commands/axes_map_calibration.py | 3 -- shaketune/commands/axes_shaper_calibration.py | 5 +-- shaketune/commands/compare_belts_responses.py | 3 -- .../commands/create_vibrations_profile.py | 5 +-- shaketune/commands/excitate_axis_at_freq.py | 4 +- shaketune/graph_creators/__init__.py | 2 - .../graph_creators/axes_map_graph_creator.py | 7 +--- .../graph_creators/belts_graph_creator.py | 24 ++++-------- shaketune/graph_creators/graph_creator.py | 2 - .../graph_creators/shaper_graph_creator.py | 39 +++++++------------ .../graph_creators/static_graph_creator.py | 4 +- .../vibrations_graph_creator.py | 25 +++++------- shaketune/helpers/common_func.py | 14 +++---- shaketune/helpers/motors_config_parser.py | 14 ++----- shaketune/helpers/resonance_test.py | 2 - shaketune/shaketune.py | 5 +-- shaketune/shaketune_config.py | 2 - shaketune/shaketune_process.py | 4 +- 21 files changed, 52 insertions(+), 122 deletions(-) diff --git a/shaketune/__init__.py b/shaketune/__init__.py index 297f10a..5c97c20 100644 --- a/shaketune/__init__.py +++ b/shaketune/__init__.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - ############################################ ###### INPUT SHAPER KLIPPAIN WORKFLOW ###### ############################################ diff --git a/shaketune/commands/__init__.py b/shaketune/commands/__init__.py index 17c7707..7565318 100644 --- a/shaketune/commands/__init__.py +++ b/shaketune/commands/__init__.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - from .axes_map_calibration import axes_map_calibration as axes_map_calibration from .axes_shaper_calibration import axes_shaper_calibration as axes_shaper_calibration from .compare_belts_responses import compare_belts_responses as compare_belts_responses diff --git a/shaketune/commands/accelerometer.py b/shaketune/commands/accelerometer.py index 1a2e3c3..f8d55a1 100644 --- a/shaketune/commands/accelerometer.py +++ b/shaketune/commands/accelerometer.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - # This file provides a custom and internal Shake&Tune Accelerometer helper that is # an interface to Klipper's own accelerometer classes. It is used to start and # stop accelerometer measurements and write the data to a file in a blocking manner. @@ -18,7 +16,7 @@ class Accelerometer: def find_axis_accelerometer(printer, axis: str = 'xy'): accel_chip_names = printer.lookup_object('resonance_tester').accel_chip_names for chip_axis, chip_name in accel_chip_names: - if axis in ['x', 'y'] and chip_axis == 'xy': + if axis in {'x', 'y'} and chip_axis == 'xy': return chip_name elif chip_axis == axis: return chip_name @@ -57,4 +55,4 @@ class Accelerometer: f.write('#time,accel_x,accel_y,accel_z\n') samples = bg_client.samples or bg_client.get_samples() for t, accel_x, accel_y, accel_z in samples: - f.write('%.6f,%.6f,%.6f,%.6f\n' % (t, accel_x, accel_y, accel_z)) + f.write(f'{t:.6f},{accel_x:.6f},{accel_y:.6f},{accel_z:.6f}\n') diff --git a/shaketune/commands/axes_map_calibration.py b/shaketune/commands/axes_map_calibration.py index 2cf22d3..c55a4fe 100644 --- a/shaketune/commands/axes_map_calibration.py +++ b/shaketune/commands/axes_map_calibration.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 - - from ..helpers.console_output import ConsoleOutput from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer diff --git a/shaketune/commands/axes_shaper_calibration.py b/shaketune/commands/axes_shaper_calibration.py index 26009fa..2579480 100644 --- a/shaketune/commands/axes_shaper_calibration.py +++ b/shaketune/commands/axes_shaper_calibration.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 - - from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput from ..helpers.resonance_test import vibrate_axis @@ -14,7 +11,7 @@ def axes_shaper_calibration(gcmd, config, st_process: ShakeTuneProcess) -> None: hz_per_sec = gcmd.get_float('HZ_PER_SEC', default=1, minval=1) accel_per_hz = gcmd.get_float('ACCEL_PER_HZ', default=None) axis_input = gcmd.get('AXIS', default='all').lower() - if axis_input not in ['x', 'y', 'all']: + if axis_input not in {'x', 'y', 'all'}: raise gcmd.error('AXIS selection invalid. Should be either x, y, or all!') scv = gcmd.get_float('SCV', default=None, minval=0) max_sm = gcmd.get_float('MAX_SMOOTHING', default=None, minval=0) diff --git a/shaketune/commands/compare_belts_responses.py b/shaketune/commands/compare_belts_responses.py index 54ac8cb..fe6eb39 100644 --- a/shaketune/commands/compare_belts_responses.py +++ b/shaketune/commands/compare_belts_responses.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 - - from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput from ..helpers.motors_config_parser import MotorsConfigParser diff --git a/shaketune/commands/create_vibrations_profile.py b/shaketune/commands/create_vibrations_profile.py index 62f1785..47b429b 100644 --- a/shaketune/commands/create_vibrations_profile.py +++ b/shaketune/commands/create_vibrations_profile.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 - - import math from ..helpers.console_output import ConsoleOutput @@ -39,7 +36,7 @@ def create_vibrations_profile(gcmd, config, st_process: ShakeTuneProcess) -> Non raise gcmd.error('Input shaper is not configured! Please run the shaper calibration macro first.') motors_config_parser = MotorsConfigParser(config, motors=['stepper_x', 'stepper_y']) - if motors_config_parser.kinematics == 'cartesian' or motors_config_parser.kinematics == 'corexz': + if motors_config_parser.kinematics in {'cartesian', 'corexz'}: main_angles = [0, 90] # Cartesian motors are on X and Y axis directly, same for CoreXZ elif motors_config_parser.kinematics == 'corexy': main_angles = [45, 135] # CoreXY motors are on A and B axis (45 and 135 degrees) diff --git a/shaketune/commands/excitate_axis_at_freq.py b/shaketune/commands/excitate_axis_at_freq.py index 0aa0afd..fdf9b7c 100644 --- a/shaketune/commands/excitate_axis_at_freq.py +++ b/shaketune/commands/excitate_axis_at_freq.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput from ..helpers.resonance_test import vibrate_axis_at_static_freq @@ -29,7 +27,7 @@ def excitate_axis_at_freq(gcmd, config, st_process: ShakeTuneProcess) -> None: if create_graph: printer = config.get_printer() if accel_chip is None: - accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy' if axis in ['a', 'b'] else axis) + accel_chip = Accelerometer.find_axis_accelerometer(printer, 'xy' if axis in {'a', 'b'} else axis) k_accelerometer = printer.lookup_object(accel_chip, None) if k_accelerometer is None: raise gcmd.error(f'Accelerometer chip [{accel_chip}] was not found!') diff --git a/shaketune/graph_creators/__init__.py b/shaketune/graph_creators/__init__.py index 1b3c530..c433ba0 100644 --- a/shaketune/graph_creators/__init__.py +++ b/shaketune/graph_creators/__init__.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - from .axes_map_graph_creator import AxesMapGraphCreator as AxesMapGraphCreator from .belts_graph_creator import BeltsGraphCreator as BeltsGraphCreator from .graph_creator import GraphCreator as GraphCreator diff --git a/shaketune/graph_creators/axes_map_graph_creator.py b/shaketune/graph_creators/axes_map_graph_creator.py index 10f0ee9..c128c14 100644 --- a/shaketune/graph_creators/axes_map_graph_creator.py +++ b/shaketune/graph_creators/axes_map_graph_creator.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - ###################################### ###### AXE_MAP DETECTION SCRIPT ###### ###################################### @@ -66,7 +64,7 @@ class AxesMapGraphCreator(GraphCreator): return # No need to delete any files for old_file in files[keep_results:]: file_date = '_'.join(old_file.stem.split('_')[1:3]) - for suffix in ['X', 'Y', 'Z']: + for suffix in {'X', 'Y', 'Z'}: csv_file = self._folder / f'axesmap_{file_date}_{suffix}.csv' csv_file.unlink(missing_ok=True) old_file.unlink() @@ -421,8 +419,7 @@ def axesmap_calibration( title_line2 += f' -- at {accel:0.0f} mm/s²' except Exception: ConsoleOutput.print( - 'Warning: CSV filenames look to be different than expected (%s , %s, %s)' - % (lognames[0], lognames[1], lognames[2]) + f'Warning: CSV filenames look to be different than expected ({lognames[0]}, {lognames[1]}, {lognames[2]})' ) title_line2 = lognames[0].split('/')[-1] + ' ...' fig.text(0.060, 0.939, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) diff --git a/shaketune/graph_creators/belts_graph_creator.py b/shaketune/graph_creators/belts_graph_creator.py index 0ab1411..7da6ef3 100644 --- a/shaketune/graph_creators/belts_graph_creator.py +++ b/shaketune/graph_creators/belts_graph_creator.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - ################################################# ######## CoreXY BELTS CALIBRATION SCRIPT ######## ################################################# @@ -88,7 +86,7 @@ class BeltsGraphCreator(GraphCreator): return # No need to delete any files for old_file in files[keep_results:]: file_date = '_'.join(old_file.stem.split('_')[1:3]) - for suffix in ['A', 'B']: + for suffix in {'A', 'B'}: csv_file = self._folder / f'beltscomparison_{file_date}_{suffix}.csv' csv_file.unlink(missing_ok=True) old_file.unlink() @@ -192,11 +190,10 @@ def mhi_lut(mhi: float) -> str: (0, 15, 'Mechanical issue detected'), ] mhi = np.clip(mhi, 1, 100) - for lower, upper, message in ranges: - if lower < mhi <= upper: - return message - - return 'Unknown mechanical health' # Should never happen + return next( + (message for lower, upper, message in ranges if lower < mhi <= upper), + 'Unknown mechanical health', + ) ###################################################################### @@ -220,9 +217,6 @@ def plot_compare_frequency( for _, (peak1, peak2) in enumerate(signal1.paired_peaks): label = ALPHABET[paired_peak_count] - # amplitude_offset = abs( - # ((signal2.psd[peak2[0]] - signal1.psd[peak1[0]]) / max(signal1.psd[peak1[0]], signal2.psd[peak2[0]])) * 100 - # ) amplitude_offset = abs(((signal2.psd[peak2[0]] - signal1.psd[peak1[0]]) / psd_highest_max) * 100) frequency_offset = abs(signal2.freqs[peak2[0]] - signal1.freqs[peak1[0]]) offsets_table_data.append([f'Peaks {label}', f'{frequency_offset:.1f} Hz', f'{amplitude_offset:.1f} %']) @@ -507,7 +501,7 @@ def belts_calibration( # Parse data from the log files while ignoring CSV in the wrong format datas = [data for data in (parse_log(fn) for fn in lognames) if data is not None] - if len(datas) > 2: + if len(datas) != 2: raise ValueError('Incorrect number of .csv files used (this function needs exactly two files to compare them)!') # Get the belts name for the legend to avoid putting the full file name @@ -569,15 +563,13 @@ def belts_calibration( if kinematics is not None: title_line2 += ' -- ' + kinematics.upper() + ' kinematics' except Exception: - ConsoleOutput.print( - 'Warning: CSV filenames look to be different than expected (%s , %s)' % (lognames[0], lognames[1]) - ) + ConsoleOutput.print(f'Warning: Unable to parse the date from the filename ({lognames[0]}, {lognames[1]})') title_line2 = lognames[0].split('/')[-1] + ' / ' + lognames[1].split('/')[-1] fig.text(0.060, 0.939, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) # We add the estimated similarity and the MHI value to the title only if the kinematics is CoreXY # as it make no sense to compute these values for other kinematics that doesn't have paired belts - if kinematics in ['corexy', 'corexz']: + if kinematics in {'corexy', 'corexz'}: title_line3 = f'| Estimated similarity: {similarity_factor:.1f}%' title_line4 = f'| {mhi} (experimental)' fig.text(0.55, 0.985, title_line3, ha='left', va='top', fontsize=14, color=KLIPPAIN_COLORS['dark_purple']) diff --git a/shaketune/graph_creators/graph_creator.py b/shaketune/graph_creators/graph_creator.py index b86c97c..d3ed4f5 100644 --- a/shaketune/graph_creators/graph_creator.py +++ b/shaketune/graph_creators/graph_creator.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - import abc import shutil from datetime import datetime diff --git a/shaketune/graph_creators/shaper_graph_creator.py b/shaketune/graph_creators/shaper_graph_creator.py index 73a871a..8733c8e 100644 --- a/shaketune/graph_creators/shaper_graph_creator.py +++ b/shaketune/graph_creators/shaper_graph_creator.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - ################################################# ######## INPUT SHAPER CALIBRATION SCRIPT ######## ################################################# @@ -131,8 +129,7 @@ def calibrate_shaper(datas: List[np.ndarray], max_smoothing: Optional[float], sc shaper, all_shapers = helper.find_best_shaper(calibration_data, max_smoothing, ConsoleOutput.print) ConsoleOutput.print( - '\n-> Recommended shaper is %s @ %.1f Hz (when using a square corner velocity of %.1f and a damping ratio of %.3f)' - % (shaper.name.upper(), shaper.freq, scv, zeta) + f'\n-> Recommended shaper is {shaper.name.upper()} @ {shaper.freq:.1f} Hz (when using a square corner velocity of {scv:.1f} and a damping ratio of {zeta:.3f})' ) return shaper.name, all_shapers, calibration_data, fr, zeta, compat @@ -190,13 +187,7 @@ def plot_freq_response( perf_shaper_accel = 0 for shaper in shapers: shaper_max_accel = round(shaper.max_accel / 100.0) * 100.0 - label = '%s (%.1f Hz, vibr=%.1f%%, sm~=%.2f, accel<=%.f)' % ( - shaper.name.upper(), - shaper.freq, - shaper.vibrs * 100.0, - shaper.smoothing, - shaper_max_accel, - ) + label = f'{shaper.name.upper()} ({shaper.freq:.1f} Hz, vibr={shaper.vibrs * 100.0:.1f}%, sm~={shaper.smoothing:.2f}, accel<={shaper_max_accel:.0f})' ax2.plot(freqs, shaper.vals, label=label, linestyle='dotted') # Get the Klipper recommended shaper (usually it's a good low vibration compromise) @@ -226,40 +217,37 @@ def plot_freq_response( [], [], ' ', - label='Recommended performance shaper: %s @ %.1f Hz' % (perf_shaper_choice.upper(), perf_shaper_freq), + label=f'Recommended performance shaper: {perf_shaper_choice.upper()} @ {perf_shaper_freq:.1f} Hz', ) ax.plot( freqs, psd * perf_shaper_vals, - label='With %s applied' % (perf_shaper_choice.upper()), + label=f'With {perf_shaper_choice.upper()} applied', color='cyan', ) ax2.plot( [], [], ' ', - label='Recommended low vibrations shaper: %s @ %.1f Hz' - % (klipper_shaper_choice.upper(), klipper_shaper_freq), - ) - ax.plot( - freqs, psd * klipper_shaper_vals, label='With %s applied' % (klipper_shaper_choice.upper()), color='lime' + label=f'Recommended low vibrations shaper: {klipper_shaper_choice.upper()} @ {klipper_shaper_freq:.1f} Hz', ) + ax.plot(freqs, psd * klipper_shaper_vals, label=f'With {klipper_shaper_choice.upper()} applied', color='lime') else: ax2.plot( [], [], ' ', - label='Recommended best shaper: %s @ %.1f Hz' % (klipper_shaper_choice.upper(), klipper_shaper_freq), + label=f'Recommended performance shaper: {klipper_shaper_choice.upper()} @ {klipper_shaper_freq:.1f} Hz', ) ax.plot( freqs, psd * klipper_shaper_vals, - label='With %s applied' % (klipper_shaper_choice.upper()), + label=f'With {klipper_shaper_choice.upper()} applied', color='cyan', ) # And the estimated damping ratio is finally added at the end of the legend - ax2.plot([], [], ' ', label='Estimated damping ratio (ζ): %.3f' % (zeta)) + ax2.plot([], [], ' ', label=f'Estimated damping ratio (ζ): {zeta:.3f}') # Draw the detected peaks and name them # This also draw the detection threshold and warning threshold (aka "effect zone") @@ -288,7 +276,7 @@ def plot_freq_response( # Add the main resonant frequency and damping ratio of the axis to the graph title ax.set_title( - 'Axis Frequency Profile (ω0=%.1fHz, ζ=%.3f)' % (fr, zeta), + f'Axis Frequency Profile (ω0={fr:.1f}Hz, ζ={zeta:.3f})', fontsize=14, color=KLIPPAIN_COLORS['dark_orange'], weight='bold', @@ -368,6 +356,8 @@ def shaper_calibration( # Parse data from the log files while ignoring CSV in the wrong format datas = [data for data in (parse_log(fn) for fn in lognames) if data is not None] + if len(datas) == 0: + raise ValueError('No valid data found in the provided CSV files!') if len(datas) > 1: ConsoleOutput.print('Warning: incorrect number of .csv files detected. Only the first one will be used!') @@ -397,8 +387,7 @@ def shaper_calibration( peak_freqs_formated = ['{:.1f}'.format(f) for f in peaks_freqs] num_peaks_above_effect_threshold = np.sum(calibration_data.psd_sum[peaks] > peaks_threshold[1]) ConsoleOutput.print( - '\nPeaks detected on the graph: %d @ %s Hz (%d above effect threshold)' - % (num_peaks, ', '.join(map(str, peak_freqs_formated)), num_peaks_above_effect_threshold) + f"\nPeaks detected on the graph: {num_peaks} @ {', '.join(map(str, peak_freqs_formated))} Hz ({num_peaks_above_effect_threshold} above effect threshold)" ) # Create graph layout @@ -435,7 +424,7 @@ def shaper_calibration( title_line4 = f'| Max allowed smoothing: {max_smoothing}' title_line5 = f'| Accel per Hz used: {accel_per_hz} mm/s²/Hz' if accel_per_hz is not None else '' except Exception: - ConsoleOutput.print('Warning: CSV filename look to be different than expected (%s)' % (lognames[0])) + ConsoleOutput.print(f'Warning: CSV filename look to be different than expected ({lognames[0]})') title_line2 = lognames[0].split('/')[-1] title_line3 = '' title_line4 = '' diff --git a/shaketune/graph_creators/static_graph_creator.py b/shaketune/graph_creators/static_graph_creator.py index a02ed61..4903f6f 100644 --- a/shaketune/graph_creators/static_graph_creator.py +++ b/shaketune/graph_creators/static_graph_creator.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - import optparse import os from datetime import datetime @@ -137,6 +135,8 @@ def static_frequency_tool( raise ValueError('Error: missing frequency or duration parameters!') datas = [data for data in (parse_log(fn) for fn in lognames) if data is not None] + if len(datas) == 0: + raise ValueError('No valid data found in the provided CSV files!') if len(datas) > 1: ConsoleOutput.print('Warning: incorrect number of .csv files detected. Only the first one will be used!') diff --git a/shaketune/graph_creators/vibrations_graph_creator.py b/shaketune/graph_creators/vibrations_graph_creator.py index 49065ff..39ade9f 100644 --- a/shaketune/graph_creators/vibrations_graph_creator.py +++ b/shaketune/graph_creators/vibrations_graph_creator.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - ################################################## #### DIRECTIONAL VIBRATIONS PLOTTING SCRIPT ###### ################################################## @@ -32,7 +30,7 @@ from ..helpers.common_func import ( setup_klipper_import, ) from ..helpers.console_output import ConsoleOutput -from ..helpers.motors_config_parser import MotorsConfigParser +from ..helpers.motors_config_parser import Motor, MotorsConfigParser from ..shaketune_config import ShakeTuneConfig from .graph_creator import GraphCreator @@ -62,7 +60,7 @@ class VibrationsGraphCreator(GraphCreator): def configure(self, kinematics: str, accel: float, motor_config_parser: MotorsConfigParser) -> None: self._kinematics = kinematics self._accel = accel - self._motors = motor_config_parser.get_motors() + self._motors: List[Motor] = motor_config_parser.get_motors() def _archive_files(self, lognames: List[Path]) -> None: tar_path = self._folder / f'{self._type}_{self._graph_date}.tar.gz' @@ -482,7 +480,7 @@ def plot_angular_speed_profiles( ax.plot(speeds, spectrogram_data[idx], label=label, color=KLIPPAIN_COLORS[color], zorder=zorder) ax.set_xlim([speeds.min(), speeds.max()]) - max_value = max(spectrogram_data[angle].max() for angle in [0, 45, 90, 135]) + max_value = max(spectrogram_data[angle].max() for angle in {0, 45, 90, 135}) ax.set_ylim([0, max_value * 1.1]) ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator()) @@ -542,13 +540,11 @@ def plot_motor_profiles( ) if motor_zeta is not None: ConsoleOutput.print( - 'Motors have a main resonant frequency at %.1fHz with an estimated damping ratio of %.3f' - % (motor_fr, motor_zeta) + f'Motors have a main resonant frequency at {motor_fr:.1f}Hz with an estimated damping ratio of {motor_zeta:.3f}' ) else: ConsoleOutput.print( - 'Motors have a main resonant frequency at %.1fHz but it was impossible to estimate a damping ratio.' - % (motor_fr) + f'Motors have a main resonant frequency at {motor_fr:.1f}Hz but it was impossible to estimate a damping ratio.' ) ax.plot(freqs[motor_res_idx], global_motor_profile[motor_res_idx], 'x', color='black', markersize=10) @@ -563,9 +559,9 @@ def plot_motor_profiles( weight='bold', ) - ax2.plot([], [], ' ', label='Motor resonant frequency (ω0): %.1fHz' % (motor_fr)) + ax2.plot([], [], ' ', label=f'Motor resonant frequency (ω0): {motor_fr:.1f}Hz') if motor_zeta is not None: - ax2.plot([], [], ' ', label='Motor damping ratio (ζ): %.3f' % (motor_zeta)) + ax2.plot([], [], ' ', label=f'Motor damping ratio (ζ): {motor_zeta:.3f}') else: ax2.plot([], [], ' ', label='No damping ratio computed') @@ -792,8 +788,7 @@ def vibrations_profile( ) formated_peaks_speeds = ['{:.1f}'.format(pspeed) for pspeed in peaks_speeds] ConsoleOutput.print( - 'Vibrations peaks detected: %d @ %s mm/s (avoid setting a speed near these values in your slicer print profile)' - % (num_peaks, ', '.join(map(str, formated_peaks_speeds))) + f"Vibrations peaks detected: {num_peaks} @ {', '.join(map(str, formated_peaks_speeds))} mm/s (avoid setting a speed near these values in your slicer print profile)" ) good_speeds = identify_low_energy_zones(vibration_metric, SPEEDS_VALLEY_DETECTION_THRESHOLD) @@ -855,7 +850,7 @@ def vibrations_profile( if accel is not None: title_line2 += ' at ' + str(accel) + ' mm/s² -- ' + kinematics.upper() + ' kinematics' except Exception: - ConsoleOutput.print('Warning: CSV filenames appear to be different than expected (%s)' % (lognames[0])) + ConsoleOutput.print(f'Warning: CSV filenames appear to be different than expected ({lognames[0]})') title_line2 = lognames[0].split('/')[-1] fig.text(0.060, 0.957, title_line2, ha='left', va='top', fontsize=16, color=KLIPPAIN_COLORS['dark_purple']) @@ -923,7 +918,7 @@ def main(): opts.error('No CSV file(s) to analyse') if options.output is None: opts.error('You must specify an output file.png to use the script (option -o)') - if options.kinematics not in ['cartesian', 'corexy', 'corexz']: + if options.kinematics not in {'cartesian', 'corexy', 'corexz'}: opts.error('Only cartesian, corexy and corexz kinematics are supported by this tool at the moment!') fig = vibrations_profile(args, options.klipperdir, options.kinematics, options.accel, options.max_freq) diff --git a/shaketune/helpers/common_func.py b/shaketune/helpers/common_func.py index b56704c..67c9aeb 100644 --- a/shaketune/helpers/common_func.py +++ b/shaketune/helpers/common_func.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - # Common functions for the Shake&Tune package # Written by Frix_x#0161 # @@ -35,9 +33,9 @@ def parse_log(logname): # Check for a PSD file generated by Klipper and raise a warning if cleaned_line.startswith('#freq,psd_x,psd_y,psd_z,psd_xyz'): ConsoleOutput.print( - 'Warning: %s does not contain raw accelerometer data. ' + f'Warning: {logname} does not contain raw accelerometer data. ' 'Please use the official Klipper script to process it instead. ' - 'It will be ignored by Shake&Tune!' % (logname,) + 'It will be ignored by Shake&Tune!' ) return None @@ -48,8 +46,8 @@ def parse_log(logname): if not header: ConsoleOutput.print( - 'Warning: file %s has an incorrect header and will be ignored by Shake&Tune!\n' - "Expected '#time,accel_x,accel_y,accel_z', but got '%s'." % (logname, header.strip()) + f'Warning: file {logname} has an incorrect header and will be ignored by Shake&Tune!\n' + f"Expected '#time,accel_x,accel_y,accel_z', but got '{header.strip()}'." ) return None @@ -57,8 +55,8 @@ def parse_log(logname): data = np.loadtxt(logname, comments='#', delimiter=',', skiprows=1) if data.ndim == 1 or data.shape[1] != 4: ConsoleOutput.print( - 'Warning: %s does not have the correct data format; expected 4 columns. ' - 'It will be ignored by Shake&Tune!' % (logname,) + f'Warning: {logname} does not have the correct data format; expected 4 columns. ' + 'It will be ignored by Shake&Tune!' ) return None diff --git a/shaketune/helpers/motors_config_parser.py b/shaketune/helpers/motors_config_parser.py index 0275438..4b224f4 100644 --- a/shaketune/helpers/motors_config_parser.py +++ b/shaketune/helpers/motors_config_parser.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - # Classes to retrieve a couple of motors infos and extract the relevant information # from the Klipper configuration and the TMC registers # Written by Frix_x#0161 # @@ -41,7 +39,7 @@ class Motor: value_dict = new_value_dict # Then gets merged all the thresholds into the same THRS virtual register - if register in ['TPWMTHRS', 'TCOOLTHRS']: + if register in {'TPWMTHRS', 'TCOOLTHRS'}: existing_thrs = self._registers.get('THRS', {}) merged_values = {**existing_thrs, **value_dict} self._registers['THRS'] = merged_values @@ -97,10 +95,7 @@ class Motor: if not differences['registers']: del differences['registers'] - if not differences: - return None - - return differences + return None if not differences else differences class MotorsConfigParser: @@ -180,10 +175,7 @@ class MotorsConfigParser: # Find and return the motor by its name def get_motor(self, motor_name: str) -> Optional[Motor]: - for motor in self._motors: - if motor.name == motor_name: - return motor - return None + return next((motor for motor in self._motors if motor.name == motor_name), None) # Get all the motor list at once def get_motors(self) -> List[Motor]: diff --git a/shaketune/helpers/resonance_test.py b/shaketune/helpers/resonance_test.py index 9ce31b5..e828f14 100644 --- a/shaketune/helpers/resonance_test.py +++ b/shaketune/helpers/resonance_test.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - # The logic in this file was "extracted" from Klipper's orignal resonance_tester.py file # Courtesy of Dmitry Butyugin for the original implementation diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index 0d01d1b..98d1ca3 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 - - import os from pathlib import Path @@ -84,7 +81,7 @@ class ShakeTune: try: dummy_macros_cfg = pconfig.read_config(filename) except Exception as err: - raise config.error("Cannot load Shake&Tune dummy macro '%s'" % (filename,)) from err + raise config.error(f'Cannot load Shake&Tune dummy macro {filename}') from err for gcode_macro in dummy_macros_cfg.get_prefix_sections('gcode_macro '): gcode_macro_name = gcode_macro.get_name() diff --git a/shaketune/shaketune_config.py b/shaketune/shaketune_config.py index ae2e7d1..e029f51 100644 --- a/shaketune/shaketune_config.py +++ b/shaketune/shaketune_config.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - from pathlib import Path from .helpers.console_output import ConsoleOutput diff --git a/shaketune/shaketune_process.py b/shaketune/shaketune_process.py index ec0b06a..4fc9e6b 100644 --- a/shaketune/shaketune_process.py +++ b/shaketune/shaketune_process.py @@ -1,7 +1,5 @@ -#!/usr/bin/env python3 - -import os import multiprocessing +import os import threading import traceback from typing import Optional From 840815209321e66c4756e39b2be887d81abcdda7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Wed, 12 Jun 2024 13:17:07 +0200 Subject: [PATCH 49/50] added standard header to .py files --- shaketune/__init__.py | 21 +++++++++-------- shaketune/commands/__init__.py | 9 ++++++++ shaketune/commands/accelerometer.py | 13 ++++++++--- shaketune/commands/axes_map_calibration.py | 11 +++++++++ shaketune/commands/axes_shaper_calibration.py | 11 +++++++++ shaketune/commands/compare_belts_responses.py | 11 +++++++++ .../commands/create_vibrations_profile.py | 11 +++++++++ shaketune/commands/excitate_axis_at_freq.py | 10 ++++++++ shaketune/dummy_macros.cfg | 12 ++++++---- shaketune/graph_creators/__init__.py | 9 ++++++++ .../graph_creators/axes_map_graph_creator.py | 13 +++++++---- .../graph_creators/belts_graph_creator.py | 13 +++++++---- shaketune/graph_creators/graph_creator.py | 12 ++++++++++ .../graph_creators/shaper_graph_creator.py | 13 +++++++++++ .../graph_creators/static_graph_creator.py | 10 ++++++++ .../vibrations_graph_creator.py | 13 +++++++---- shaketune/helpers/__init__.py | 6 +++++ shaketune/helpers/common_func.py | 11 +++++++-- shaketune/helpers/console_output.py | 10 ++++++++ shaketune/helpers/motors_config_parser.py | 12 +++++++--- shaketune/helpers/resonance_test.py | 23 +++++++++++++------ shaketune/shaketune.py | 10 ++++++++ shaketune/shaketune_config.py | 10 ++++++++ shaketune/shaketune_process.py | 10 ++++++++ 24 files changed, 244 insertions(+), 40 deletions(-) diff --git a/shaketune/__init__.py b/shaketune/__init__.py index 5c97c20..41bb0e2 100644 --- a/shaketune/__init__.py +++ b/shaketune/__init__.py @@ -1,12 +1,15 @@ -############################################ -###### INPUT SHAPER KLIPPAIN WORKFLOW ###### -############################################ -# Written by Frix_x#0161 # - -# This module functions as a plugin within Klipper, aimed at enhancing printer diagnostics. It serves multiple purposes: -# 1. Diagnosing and pinpointing vibration sources in the printer. -# 2. Conducting standard axis input shaper tests on the XY axes to determine the optimal input shaper filter. -# 3. Executing a specialized half-axis test for CoreXY printers to analyze and compare the frequency profiles of individual belts. +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: __init__.py +# Description: Functions as a plugin within Klipper to enhance printer diagnostics by: +# 1. Diagnosing and pinpointing vibration sources in the printer. +# 2. Conducting standard axis input shaper tests on the machine axes. +# 3. Executing a specialized half-axis test for CoreXY/CoreXZ printers to analyze +# and compare the frequency profiles of individual belts. +# 4. ... from .shaketune import ShakeTune as ShakeTune diff --git a/shaketune/commands/__init__.py b/shaketune/commands/__init__.py index 7565318..33b08bb 100644 --- a/shaketune/commands/__init__.py +++ b/shaketune/commands/__init__.py @@ -1,3 +1,12 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: __init__.py +# Description: Imports various commands function (to run and record the tests) for the Shake&Tune package. + + from .axes_map_calibration import axes_map_calibration as axes_map_calibration from .axes_shaper_calibration import axes_shaper_calibration as axes_shaper_calibration from .compare_belts_responses import compare_belts_responses as compare_belts_responses diff --git a/shaketune/commands/accelerometer.py b/shaketune/commands/accelerometer.py index f8d55a1..a745199 100644 --- a/shaketune/commands/accelerometer.py +++ b/shaketune/commands/accelerometer.py @@ -1,6 +1,13 @@ -# This file provides a custom and internal Shake&Tune Accelerometer helper that is -# an interface to Klipper's own accelerometer classes. It is used to start and -# stop accelerometer measurements and write the data to a file in a blocking manner. +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: accelerometer.py +# Description: Provides a custom and internal Shake&Tune Accelerometer helper that interfaces +# with Klipper's accelerometer classes. It includes functions to start and stop +# accelerometer measurements and write the data to a file in a blocking manner. + import time diff --git a/shaketune/commands/axes_map_calibration.py b/shaketune/commands/axes_map_calibration.py index c55a4fe..f89d60b 100644 --- a/shaketune/commands/axes_map_calibration.py +++ b/shaketune/commands/axes_map_calibration.py @@ -1,3 +1,14 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: axes_map_calibration.py +# Description: Provides a command for calibrating the axes map of a 3D printer using an accelerometer. +# The script moves the printer head along specified axes, starts and stops measurements, +# and performs post-processing to analyze the collected data. + + from ..helpers.console_output import ConsoleOutput from ..shaketune_process import ShakeTuneProcess from .accelerometer import Accelerometer diff --git a/shaketune/commands/axes_shaper_calibration.py b/shaketune/commands/axes_shaper_calibration.py index 2579480..8a2eb3d 100644 --- a/shaketune/commands/axes_shaper_calibration.py +++ b/shaketune/commands/axes_shaper_calibration.py @@ -1,3 +1,14 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: axes_shaper_calibration.py +# Description: Provides a command for calibrating the input shaper of a 3D printer's axes using an accelerometer. +# The script performs resonance tests along specified axes, starts and stops measurements, +# and generates graphs for each axis to analyze the collected data. + + from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput from ..helpers.resonance_test import vibrate_axis diff --git a/shaketune/commands/compare_belts_responses.py b/shaketune/commands/compare_belts_responses.py index fe6eb39..92375c7 100644 --- a/shaketune/commands/compare_belts_responses.py +++ b/shaketune/commands/compare_belts_responses.py @@ -1,3 +1,14 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: compare_belts_responses.py +# Description: Provides a command for comparing the frequency response of belts in CoreXY and CoreXZ kinematics 3D printers. +# The script performs resonance tests along specified axes, starts and stops measurements, and generates graphs +# for each axis to analyze the collected data. + + from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput from ..helpers.motors_config_parser import MotorsConfigParser diff --git a/shaketune/commands/create_vibrations_profile.py b/shaketune/commands/create_vibrations_profile.py index 47b429b..bcac671 100644 --- a/shaketune/commands/create_vibrations_profile.py +++ b/shaketune/commands/create_vibrations_profile.py @@ -1,3 +1,14 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: vibrations_profile.py +# Description: Provides a command to measure the vibrations generated by the kinematics and motors of a 3D printers +# at different speeds and angles increments. The data is collected from the accelerometer and used +# to generate a comprehensive vibration analysis graph. + + import math from ..helpers.console_output import ConsoleOutput diff --git a/shaketune/commands/excitate_axis_at_freq.py b/shaketune/commands/excitate_axis_at_freq.py index fdf9b7c..d1ecd63 100644 --- a/shaketune/commands/excitate_axis_at_freq.py +++ b/shaketune/commands/excitate_axis_at_freq.py @@ -1,3 +1,13 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: excitate_axis_at_freq.py +# Description: Provide a command to excites a specified axis at a given frequency for a duration +# and optionally creates a graph of the vibration data collected by the accelerometer. + + from ..helpers.common_func import AXIS_CONFIG from ..helpers.console_output import ConsoleOutput from ..helpers.resonance_test import vibrate_axis_at_static_freq diff --git a/shaketune/dummy_macros.cfg b/shaketune/dummy_macros.cfg index a8d7f8c..5ee0185 100644 --- a/shaketune/dummy_macros.cfg +++ b/shaketune/dummy_macros.cfg @@ -1,7 +1,11 @@ -# This file contains dummy gcode macros to inject them at Klipper startup -# by the Shake&Tune plugin in order to make them available in the UI. -# Indeed, system macros in Klipper are not available as buttons in Mainsail/Fluidd -# and this is a workaround to have a good and friendly UX when using Shake&Tune. +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: dummy_macros.cfg +# Description: Contains dummy gcode macros to inject at Klipper startup for +# availability in the UI, improving user experience with Shake&Tune. [gcode_macro EXCITATE_AXIS_AT_FREQ] diff --git a/shaketune/graph_creators/__init__.py b/shaketune/graph_creators/__init__.py index c433ba0..ad8b19f 100644 --- a/shaketune/graph_creators/__init__.py +++ b/shaketune/graph_creators/__init__.py @@ -1,3 +1,12 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: __init__.py +# Description: Imports various graph creator classes for the Shake&Tune package. + + from .axes_map_graph_creator import AxesMapGraphCreator as AxesMapGraphCreator from .belts_graph_creator import BeltsGraphCreator as BeltsGraphCreator from .graph_creator import GraphCreator as GraphCreator diff --git a/shaketune/graph_creators/axes_map_graph_creator.py b/shaketune/graph_creators/axes_map_graph_creator.py index c128c14..d2b2542 100644 --- a/shaketune/graph_creators/axes_map_graph_creator.py +++ b/shaketune/graph_creators/axes_map_graph_creator.py @@ -1,7 +1,12 @@ -###################################### -###### AXE_MAP DETECTION SCRIPT ###### -###################################### -# Written by Frix_x#0161 # +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: axes_map_graph_creator.py +# Description: Implements the axes map detection script for Shake&Tune, including +# calibration tools and graph creation for 3D printer vibration analysis. + import optparse import os diff --git a/shaketune/graph_creators/belts_graph_creator.py b/shaketune/graph_creators/belts_graph_creator.py index 7da6ef3..84c1e08 100644 --- a/shaketune/graph_creators/belts_graph_creator.py +++ b/shaketune/graph_creators/belts_graph_creator.py @@ -1,7 +1,12 @@ -################################################# -######## CoreXY BELTS CALIBRATION SCRIPT ######## -################################################# -# Written by Frix_x#0161 # +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2022 - 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: belts_graph_creator.py +# Description: Implements the CoreXY/CoreXZ belts calibration script for Shake&Tune, +# including computation and graphing functions for 3D printer belt paths analysis. + import optparse import os diff --git a/shaketune/graph_creators/graph_creator.py b/shaketune/graph_creators/graph_creator.py index d3ed4f5..f89b9ce 100644 --- a/shaketune/graph_creators/graph_creator.py +++ b/shaketune/graph_creators/graph_creator.py @@ -1,3 +1,15 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: graph_creator.py +# Description: Abstract base class for creating various types of graphs in Shake&Tune, +# including methods for moving, preparing, saving, and cleaning up files. +# This class is inherited by the AxesMapGraphCreator, BeltsGraphCreator, +# ShaperGraphCreator, VibrationsGraphCreator, StaticGraphCreator + + import abc import shutil from datetime import datetime diff --git a/shaketune/graph_creators/shaper_graph_creator.py b/shaketune/graph_creators/shaper_graph_creator.py index 8733c8e..10475c0 100644 --- a/shaketune/graph_creators/shaper_graph_creator.py +++ b/shaketune/graph_creators/shaper_graph_creator.py @@ -1,3 +1,16 @@ +# Shake&Tune: 3D printer analysis tools +# +# Derived from the calibrate_shaper.py official Klipper script +# Copyright (C) 2020 Dmitry Butyugin +# Copyright (C) 2020 Kevin O'Connor +# Copyright (C) 2022 - 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: shaper_graph_creator.py +# Description: Implements the input shaper calibration script for Shake&Tune, +# including computation and graphing functions for 3D printer vibration analysis. + + ################################################# ######## INPUT SHAPER CALIBRATION SCRIPT ######## ################################################# diff --git a/shaketune/graph_creators/static_graph_creator.py b/shaketune/graph_creators/static_graph_creator.py index 4903f6f..e0c9dd0 100644 --- a/shaketune/graph_creators/static_graph_creator.py +++ b/shaketune/graph_creators/static_graph_creator.py @@ -1,3 +1,13 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: static_graph_creator.py +# Description: Implements a static frequency profile measurement script for Shake&Tune to diagnose mechanical +# issues, including computation and graphing functions for 3D printer vibration analysis. + + import optparse import os from datetime import datetime diff --git a/shaketune/graph_creators/vibrations_graph_creator.py b/shaketune/graph_creators/vibrations_graph_creator.py index 39ade9f..3fc0034 100644 --- a/shaketune/graph_creators/vibrations_graph_creator.py +++ b/shaketune/graph_creators/vibrations_graph_creator.py @@ -1,7 +1,12 @@ -################################################## -#### DIRECTIONAL VIBRATIONS PLOTTING SCRIPT ###### -################################################## -# Written by Frix_x#0161 # +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: vibrations_graph_creator.py +# Description: Implements the directional vibrations plotting script for Shake&Tune, +# including computation and graphing functions for analyzing 3D printer vibration profiles. + import math import optparse diff --git a/shaketune/helpers/__init__.py b/shaketune/helpers/__init__.py index e69de29..89ffb56 100644 --- a/shaketune/helpers/__init__.py +++ b/shaketune/helpers/__init__.py @@ -0,0 +1,6 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: __init__.py diff --git a/shaketune/helpers/common_func.py b/shaketune/helpers/common_func.py index 67c9aeb..49df45a 100644 --- a/shaketune/helpers/common_func.py +++ b/shaketune/helpers/common_func.py @@ -1,5 +1,12 @@ -# Common functions for the Shake&Tune package -# Written by Frix_x#0161 # +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: common_func.py +# Description: Contains common functions and constants used across the Shake&Tune +# package for 3D printer vibration analysis and diagnostics. + import math import os diff --git a/shaketune/helpers/console_output.py b/shaketune/helpers/console_output.py index c8c72d7..e4b6a9f 100644 --- a/shaketune/helpers/console_output.py +++ b/shaketune/helpers/console_output.py @@ -1,3 +1,13 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: console_output.py +# Description: Defines the ConsoleOutput class for printing output to stdout or an alternative +# callback function, such as the Klipper console. + + import io from typing import Callable, Optional diff --git a/shaketune/helpers/motors_config_parser.py b/shaketune/helpers/motors_config_parser.py index 4b224f4..a3f4cca 100644 --- a/shaketune/helpers/motors_config_parser.py +++ b/shaketune/helpers/motors_config_parser.py @@ -1,6 +1,12 @@ -# Classes to retrieve a couple of motors infos and extract the relevant information -# from the Klipper configuration and the TMC registers -# Written by Frix_x#0161 # +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: motors_config_parser.py +# Description: Contains classes to retrieve motor information and extract relevant data +# from the Klipper configuration and TMC registers. + from typing import Any, Dict, List, Optional diff --git a/shaketune/helpers/resonance_test.py b/shaketune/helpers/resonance_test.py index e828f14..8b6d703 100644 --- a/shaketune/helpers/resonance_test.py +++ b/shaketune/helpers/resonance_test.py @@ -1,11 +1,20 @@ -# The logic in this file was "extracted" from Klipper's orignal resonance_tester.py file -# Courtesy of Dmitry Butyugin for the original implementation +# Shake&Tune: 3D printer analysis tools +# +# Adapted from Klipper's original resonance_tester.py file by Dmitry Butyugin +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: resonance_test.py +# Description: Contains functions to test the resonance frequency of the printer and its components +# by vibrating the toolhead in specific axis directions. This derive a bit from Klipper's +# implementation as there are two main changes: +# 1. Original code doesn't use euclidean distance with projection for the coordinates calculation. +# The new approach implemented here ensures that the vector's total length remains constant (= L), +# regardless of the direction components. It's especially important when the direction vector +# involves combinations of movements along multiple axes like for the diagonal belt tests. +# 2. Original code doesn't allow Z axis movements that was added in order to test the Z axis resonance +# or CoreXZ belts frequency profiles as well. -# This derive a bit from Klipper's implementation as there are two main changes: -# 1. Original code doesn't use euclidean distance for the moves calculation with projection. The new approach implemented here -# ensures that the vector's total length remains constant (= L), regardless of the direction components. It's especially -# important when the direction vector involves combinations of movements along multiple axes like for the diagonal belt tests. -# 2. Original code doesn't allow Z axis movement that was added here for later use import math diff --git a/shaketune/shaketune.py b/shaketune/shaketune.py index 98d1ca3..c710198 100644 --- a/shaketune/shaketune.py +++ b/shaketune/shaketune.py @@ -1,3 +1,13 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: shaketune.py +# Description: Main class implementation for Shake&Tune, handling Klipper initialization and +# loading of the plugin, and the registration of the tuning commands + + import os from pathlib import Path diff --git a/shaketune/shaketune_config.py b/shaketune/shaketune_config.py index e029f51..57b19a8 100644 --- a/shaketune/shaketune_config.py +++ b/shaketune/shaketune_config.py @@ -1,3 +1,13 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: shaketune_config.py +# Description: Defines the ShakeTuneConfig class for handling configuration settings +# and file paths related to Shake&Tune operations. + + from pathlib import Path from .helpers.console_output import ConsoleOutput diff --git a/shaketune/shaketune_process.py b/shaketune/shaketune_process.py index 4fc9e6b..a6ff401 100644 --- a/shaketune/shaketune_process.py +++ b/shaketune/shaketune_process.py @@ -1,3 +1,13 @@ +# Shake&Tune: 3D printer analysis tools +# +# Copyright (C) 2024 Félix Boisselier (Frix_x on Discord) +# Licensed under the GNU General Public License v3.0 (GPL-3.0) +# +# File: shaketune_process.py +# Description: Implements the ShakeTuneProcess class for managing the execution of +# vibration analysis processes in separate system processes. + + import multiprocessing import os import threading From 0ea659c4ce23ae78e67d18ec4b4ebe46823ece3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Boisselier?= Date: Wed, 12 Jun 2024 22:33:48 +0200 Subject: [PATCH 50/50] fixed undefined jinja variables when calling from the WebUI --- shaketune/dummy_macros.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shaketune/dummy_macros.cfg b/shaketune/dummy_macros.cfg index 5ee0185..99a2501 100644 --- a/shaketune/dummy_macros.cfg +++ b/shaketune/dummy_macros.cfg @@ -29,7 +29,7 @@ gcode: "Z_HEIGHT": z_height if z_height is not none else '', "ACCEL_CHIP": accel_chip if accel_chip is not none else '' } %} - _EXCITATE_AXIS_AT_FREQ {% for key, value in params_filtered.items() if value is not none and value != '' %}{key}={value} {% endfor %} + _EXCITATE_AXIS_AT_FREQ {% for key, value in params_filtered.items() if value is defined and value is not none and value != '' %}{key}={value} {% endfor %} [gcode_macro AXES_MAP_CALIBRATION] @@ -59,7 +59,7 @@ gcode: "TRAVEL_SPEED": travel_speed, "Z_HEIGHT": z_height if z_height is not none else '' } %} - _COMPARE_BELTS_RESPONSES {% for key, value in params_filtered.items() if value is not none and value != '' %}{key}={value} {% endfor %} + _COMPARE_BELTS_RESPONSES {% for key, value in params_filtered.items() if value is defined and value is not none and value != '' %}{key}={value} {% endfor %} [gcode_macro AXES_SHAPER_CALIBRATION] @@ -85,7 +85,7 @@ gcode: "TRAVEL_SPEED": travel_speed, "Z_HEIGHT": z_height if z_height is not none else '' } %} - _AXES_SHAPER_CALIBRATION {% for key, value in params_filtered.items() if value is not none and value != '' %}{key}={value} {% endfor %} + _AXES_SHAPER_CALIBRATION {% for key, value in params_filtered.items() if value is defined and value is not none and value != '' %}{key}={value} {% endfor %} [gcode_macro CREATE_VIBRATIONS_PROFILE]

Wt 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