moorepants / BicycleParameters

Calculates the geometry, masses, centers of mass, and the moments of inertia of the bicycle rider system.
https://bicycleparameters.readthedocs.io
Other
38 stars 20 forks source link

Update calculating periods from mat files to work with Python 3 and other dependency changes. #109

Closed moorepants closed 2 months ago

moorepants commented 2 months ago

Fixes #13

moorepants commented 2 months ago

This now builds the Browser data from scratch seemingly correctly.

moorepants commented 2 months ago

I've tested this with the new balance assist bike measurements and several of the original bike measurements and everything seems to work. I used this test script for the balance assist and manually checked other bikes:

import pprint
import numpy as np
import matplotlib.pyplot as plt
import bicycleparameters as bp
from bicycleparameters.parameter_sets import Meijaard2007ParameterSet
from bicycleparameters.models import Meijaard2007Model

data_dir = "/home/moorepants/Data/bicycle-parameters"
v = np.linspace(0.0, 10.0, num=401)

bicycle = bp.Bicycle("Balanceassistv1", pathToData=data_dir,
                     forcePeriodCalc=True, forceRawCalc=True)

print('Bicycle short name:', bicycle.bicycleName)
print('Directory:', bicycle.directory)
pprint.pprint(bicycle.extras)
M, C1, K0, K2 = bicycle.canonical()
print('M:', M)
print('C1:', C1)
print('K0:', K0)
print('k2:', K2)
A, B = bicycle.state_space(3.2)
print('A:', A)
print('B:', B)
print(*bicycle.eig([1.0, 2.0]))

bicycle.plot_bicycle_geometry(show=False)
bicycle.plot_eigenvalues_vs_speed(v)
par = bp.io.remove_uncertainties(bicycle.parameters['Benchmark'])
par['v'] = 1.0
par_set = Meijaard2007ParameterSet(par, False)
par_set.plot_all()
model = Meijaard2007Model(par_set)
model.plot_eigenvalue_parts(v=v)

bicycle.add_rider('Jason')
bicycle.plot_bicycle_geometry(show=False)
par = bp.io.remove_uncertainties(bicycle.parameters['Benchmark'])
par['v'] = 1.0
par_set = Meijaard2007ParameterSet(par, True)
par_set.plot_all()
model = Meijaard2007Model(par_set)
model.plot_eigenvalue_parts(v=v)

plt.show()
moorepants commented 2 months ago

Results from script: image

moorepants commented 2 months ago
In [1]: run calc_balance_assist.py
We have foundeth a directory named: /home/moorepants/Data/bicycle-parameters/bicycles/Balanceassistv1.
Found the RawData directory: /home/moorepants/Data/bicycle-parameters/bicycles/Balanceassistv1/RawData
Recalcuting the parameters.
Calculating the period for: Balanceassistv1ForkCompoundFirst1.mat
The period is: 1.62270+/-0.00004 

Calculating the period for: Balanceassistv1ForkCompoundFirst2.mat
The period is: 1.62128+/-0.00008 

Calculating the period for: Balanceassistv1ForkCompoundFirst3.mat
The period is: 1.62073+/-0.00008 

Calculating the period for: Balanceassistv1ForkCompoundFirst4.mat
The period is: 1.62014+/-0.00006 

Calculating the period for: Balanceassistv1ForkTorsionalFirst1.mat
The period is: 1.51347+/-0.00017 

Calculating the period for: Balanceassistv1ForkTorsionalFirst2.mat
The period is: 1.51608+/-0.00029 

Calculating the period for: Balanceassistv1ForkTorsionalFirst3.mat
The period is: 1.50943+/-0.00020 

Calculating the period for: Balanceassistv1ForkTorsionalSecond1.mat
The period is: 1.2406+/-0.0004 

Calculating the period for: Balanceassistv1ForkTorsionalSecond2.mat
The period is: 1.24048+/-0.00018 

Calculating the period for: Balanceassistv1ForkTorsionalSecond3.mat
The period is: 1.24008+/-0.00016 

Calculating the period for: Balanceassistv1ForkTorsionalThird1.mat
The period is: 0.73596+/-0.00010 

Calculating the period for: Balanceassistv1ForkTorsionalThird2.mat
The period is: 0.73716+/-0.00009 

Calculating the period for: Balanceassistv1ForkTorsionalThird3.mat
The period is: 0.73708+/-0.00009 

Calculating the period for: Balanceassistv1FrameCompoundFirst1.mat
The period is: 1.79750+/-0.00011 

Calculating the period for: Balanceassistv1FrameCompoundFirst2.mat
The period is: 1.79909+/-0.00008 

Calculating the period for: Balanceassistv1FrameCompoundFirst3.mat
The period is: 1.80003+/-0.00005 

Calculating the period for: Balanceassistv1FrameTorsionalFirst1.mat
The period is: 3.2877+/-0.0004 

Calculating the period for: Balanceassistv1FrameTorsionalFirst2.mat
The period is: 3.29309+/-0.00034 

Calculating the period for: Balanceassistv1FrameTorsionalFirst3.mat
The period is: 3.30595+/-0.00028 

Calculating the period for: Balanceassistv1FrameTorsionalSecond1.mat
The period is: 3.7128+/-0.0004 

Calculating the period for: Balanceassistv1FrameTorsionalSecond2.mat
The period is: 3.71415+/-0.00030 

Calculating the period for: Balanceassistv1FrameTorsionalSecond3.mat
The period is: 3.71615+/-0.00030 

Calculating the period for: Balanceassistv1FrameTorsionalThird1.mat
The period is: 3.09983+/-0.00029 

Calculating the period for: Balanceassistv1FrameTorsionalThird2.mat
The period is: 3.09881+/-0.00027 

Calculating the period for: Balanceassistv1FrameTorsionalThird3.mat
The period is: 3.09933+/-0.00022 

Calculating the period for: Balanceassistv1FwheelCompoundFirst1.mat
The period is: 1.533589+/-0.000020 

Calculating the period for: Balanceassistv1FwheelCompoundFirst2.mat
The period is: 1.53278+/-0.00004 

Calculating the period for: Balanceassistv1FwheelCompoundFirst3.mat
The period is: 1.531369+/-0.000020 

Calculating the period for: Balanceassistv1FwheelCompoundFirst4.mat
The period is: 1.53265+/-0.00007 

Calculating the period for: Balanceassistv1FwheelTorsionalFirst1.mat
The period is: 0.88159+/-0.00004 

Calculating the period for: Balanceassistv1FwheelTorsionalFirst2.mat
The period is: 0.882016+/-0.000024 

Calculating the period for: Balanceassistv1FwheelTorsionalFirst3.mat
The period is: 0.881827+/-0.000022 

Calculating the period for: Balanceassistv1RwheelCompoundFirst1.mat
The period is: 1.347828+/-0.000024 

Calculating the period for: Balanceassistv1RwheelCompoundFirst2.mat
The period is: 1.348834+/-0.000016 

Calculating the period for: Balanceassistv1RwheelCompoundFirst3.mat
The period is: 1.348391+/-0.000012 

Calculating the period for: Balanceassistv1RwheelCompoundFirst4.mat
The period is: 1.347953+/-0.000034 

Calculating the period for: Balanceassistv1RwheelTorsionalFirst1.mat
The period is: 0.89414+/-0.00004 

Calculating the period for: Balanceassistv1RwheelTorsionalFirst2.mat
The period is: 0.89384+/-0.00004 

Calculating the period for: Balanceassistv1RwheelTorsionalFirst3.mat
The period is: 0.893628+/-0.000033 

Calculating the period for: RodRodTorsionalFirst1.mat
The period is: 0.964128+/-0.000019 

Calculating the period for: RodRodTorsionalFirst2.mat
The period is: 0.96481+/-0.00008 

Calculating the period for: RodRodTorsionalFirst3.mat
The period is: 0.96553+/-0.00006 

The glory of the Balanceassistv1 parameters are upon you!
Bicycle short name: Balanceassistv1
Directory: /home/moorepants/Data/bicycle-parameters/bicycles/Balanceassistv1
{'betas': {'B': [-5.6883121758109+/-0.027688544632344214,
                 -0.8869114035744998+/-0.027688544632344214,
                 -2.7544137032084324+/-0.027688544632344214],
           'H': [-2.775357654232365+/-0.027688544632344214,
                 -0.5552988456955772+/-0.027688544632344214,
                 -1.1417294743656718+/-0.027688544632344214]},
 'intercepts': {'B': [-0.1617987808277105+/-0.003710977527879129,
                      -1.1086703853269324+/-0.025856069984397746,
                      -0.3165490315996673+/-0.0011488504490626953],
                'H': [-0.5358131793589308+/-0.029016809884671143,
                      -1.4137057446586518+/-0.04935910583134944,
                      -2.917937765619192+/-0.1870702072638602]},
 'pendulumInertias': {'B': [1.3902007491332655+/-0.0033993520318617446,
                            1.765979579999164+/-0.004316462936817831,
                            1.229564442351413+/-0.0030051631739689048],
                      'H': [0.2930164951250737+/-0.0007173878735482011,
                            0.19693536282436983+/-0.000483224835435766,
                            0.06947637471905611+/-0.00016996943023044883]},
 'slopes': {'B': [-0.676636585016892+/-0.04036538672907974,
                  1.226832704636709+/-0.06936308498583547,
                  -0.4077610145494889+/-0.032292292505428186],
            'H': [-0.38353805801273044+/-0.03176156947309774,
                  0.6204197159449089+/-0.03834643650802733,
                  2.1858301573111802+/-0.15998035386628937]}}
M: [[11.688942525993475+/-0.31574109405775974
  0.4406131920896975+/-0.09313074600925858]
 [0.4406131920896975+/-0.09313074600925858
  0.19410189902471633+/-0.012528339174387606]]
C1: [[0.0 10.225105813876123+/-0.24076876958954888]
 [-0.5615672307821129+/-0.0064467652819582555
  0.6877300951088847+/-0.10856276279423908]]
K0: [[-17.639329159626296+/-0.3207567189033697
  -0.7225780895249696+/-0.14676266542251712]
 [-0.7225780895249696+/-0.14676266542251712
  -0.18194110186637624+/-0.05477447173282242]]
k2: [[0.0 16.273256477906656+/-0.21941157753886148]
 [0.0 0.7462886916588964+/-0.135262198266855]]
A: [[0.0 0.0 1.0 0.0]
 [0.0 0.0 0.0 1.0]
 [14.678735393679776+/-0.16958538022236266
  -13.683072997301307+/-0.2778234417273669
  -0.3816389372179702+/-0.06327106564952367
  -2.5938164365370975+/-0.08073967915213698]
 [3.1860891990140985+/-0.7867921014859718
  0.8819026286099074+/-1.6735963080014773
  10.124425874915588+/-0.24833309553833918
  -5.450057778241475+/-0.3623241344014487]]
B: [[0.0 0.0]
 [0.0 0.0]
 [0.0935563415068749+/-0.0013859765541739102
  -0.21237380200143693+/-0.03301808462548941]
 [-0.21237380200143693+/-0.03301808462548941
  5.6340236974024975+/-0.19248665262474718]]
[[-3.73879106+0.62776527j -3.73879106-0.62776527j  2.82758845+0.45733248j
   2.82758845-0.45733248j]
 [-3.83787261+0.83559703j -3.83787261-0.83559703j  2.01546738+1.51314516j
   2.01546738-1.51314516j]] [[[-0.02252645+0.09492353j -0.02252645-0.09492353j
   -0.13483573-0.04650224j -0.13483573+0.04650224j]
  [ 0.23240054+0.03902143j  0.23240054-0.03902143j
   -0.29334183+0.04744493j -0.29334183-0.04744493j]
  [ 0.024632  -0.36904055j  0.024632  +0.36904055j
   -0.35999296-0.19315396j -0.35999296+0.19315396j]
  [-0.89339338+0.j         -0.89339338-0.j
   -0.85114807+0.j         -0.85114807-0.j        ]]

 [[ 0.02776644+0.05737999j  0.02776644-0.05737999j
   -0.19467024-0.02314574j -0.19467024+0.02314574j]
  [ 0.23289269+0.05070633j  0.23289269-0.05070633j
   -0.24982379+0.1875593j  -0.24982379-0.1875593j ]
  [-0.15451061-0.19701553j -0.15451061+0.19701553j
   -0.35732867-0.34121381j -0.35732867+0.34121381j]
  [-0.93618255+0.j         -0.93618255-0.j
   -0.78731615+0.j         -0.78731615-0.j        ]]]
There is no rider on the bicycle, now adding Jason.
No parameter files found, calculating the human configuration.
moorepants commented 2 months ago

Merging, can tweak more in other PRs but all seems to work.