In [1]:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import seaborn as sns
sns.set_style('whitegrid')
%matplotlib inline

In [ ]:
# run cell for interactive plots
import mpld3
mpld3.enable_notebook()

In [2]:
from limtoc import (load_log, plot_log, display_log_plot, plot_fft,
                    calculate_stiffness, calculate_fit, plot_fit)

In [3]:
data = load_log('torque_oscillation.log.gz')
fig, axes = plot_log(data, show_roi=False)


running limtoc 626a9c2, k =    3.140

In [4]:
print('x = (a + bt)*exp(c*t)*sin(2*pi*e*t + d)')

# use subset of data when oscillating
d1 = data[4300:6000]
d2 = data[9800:12400]
params = []
for di in [d1, d2]:
    print('data time range [{}:{}]'.format(di.time[0], di.time[-1]))
    fit = calculate_fit(di)
    a, b, c, d, e = fit[1][2]
    
    k_c, k_m = calculate_stiffness(di)
    print('desired stiffness is {} N-m/rad'.format(k_c))
    print('measured stiffness is {} N-m/rad'.format(k_m))
    
    # I = k / (2*pi*f_n)^2
    I = k_m/(2*np.pi*e)**2
    print('')
    print('moment of inertia is {} kg-m^2'.format(I))
    
    print('')
    print('assuming coulomb friction dominates')
    # b = ±2*F_d*2*pi*f_n/(pi*k)
    print('friction torque is {} N-m'.format(np.abs(b * k_m/(4*e))))
    f = {}
    f['inertia'] = I
    f['k'] = k_m
    params.append(f)


x = (a + bt)*exp(c*t)*sin(2*pi*e*t + d)
data time range [4.299983904761905:5.9989839047619045]
desired stiffness is 3.1400629194771628 N-m/rad
measured stiffness is 3.0747205736119034 N-m/rad

moment of inertia is 0.030439090086468737 kg-m^2

assuming coulomb friction dominates
friction torque is 0.08350591168095853 N-m
data time range [9.799983857142857:12.398983857142857]
desired stiffness is 3.140041054924147 N-m/rad
measured stiffness is 3.1182677963264136 N-m/rad

moment of inertia is 0.030558605017486883 kg-m^2

assuming coulomb friction dominates
friction torque is 0.08604231881497668 N-m
/Users/oliver/repos/phobos/projects/limtoc/limtoc.py:158: RuntimeWarning: overflow encountered in exp
  f = lambda a, b, c, d, e: lambda t: a*np.exp(c*t)*np.sin(2*np.pi*e*t + d)
/Users/oliver/repos/phobos/projects/limtoc/limtoc.py:158: RuntimeWarning: overflow encountered in multiply
  f = lambda a, b, c, d, e: lambda t: a*np.exp(c*t)*np.sin(2*np.pi*e*t + d)

In [5]:
params[0]
f = 15
k = (2*np.pi*f)**2 * params[0]['inertia']
print('for f = {}, desired k = {}'.format(f, k))


for f = 15, desired k = 270.3795997343105

In [6]:
data = load_log('k270m_.log.gz')
fig, axes, roi = plot_log(data)
i0, i1 = roi
fit = calculate_fit(data[i0:i1])
fig, ax = plot_fit(data[i0:i1], fit)

k_c, k_m = calculate_stiffness(data[i0:i1])
print('desired stiffness is {} N-m/rad'.format(k_c))
print('measured stiffness is {} N-m/rad'.format(k_m))


running limtoc 84cde46, k =  270.399, m =    0.082
desired stiffness is 270.40350281341176 N-m/rad
measured stiffness is 24.48197639451949 N-m/rad

In [7]:
data = load_log('k10m_.log.gz')
fig, axes, roi = plot_log(data)
i0, i1 = roi
fit = calculate_fit(data[i0:i1])
fig, ax = plot_fit(data[i0:i1], fit)

k_c, k_m = calculate_stiffness(data[i0:i1])
print('desired stiffness is {} N-m/rad'.format(k_c))
print('measured stiffness is {} N-m/rad'.format(k_m))


running limtoc 84cde46, k =   10.000, m =    0.082
desired stiffness is 10.000189913770154 N-m/rad
measured stiffness is 9.820795133186579 N-m/rad

In [8]:
data = load_log('k8m_.log.gz')
fig, axes, roi = plot_log(data)
i0, i1 = roi
fit = calculate_fit(data[i0:i1])
fig, ax = plot_fit(data[i0:i1], fit)

k_c, k_m = calculate_stiffness(data[i0:i1])
print('desired stiffness is {} N-m/rad'.format(k_c))
print('measured stiffness is {} N-m/rad'.format(k_m))


running limtoc 84cde46, k =    8.000, m =    0.082
desired stiffness is 8.000168090814466 N-m/rad
measured stiffness is 7.867116613939423 N-m/rad