jrPhD / jrPhD/OpenLoopBalanceControl
Suggestion for easier problems to solve
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Description
You are trying to apply this method for the first time ever (as far as I know) to a bicycle rider model and you are trying with a dataset that is hard to use because it misses some measurements that could be helpful. If you want to try this on some datasets that would likely be easier to solve, here are two options.
Option 1
In this paper A. L. Schwab et al. "Rider control identification in bicycling using lateral force perturbation tests". In: Proceedings of the Institution of Mechanical Engineers, Part K: Journal of Multi-body Dynamics 227(4), December 2013, doi: 10.1177/1464419313492317. we used the rigid rider experimental data from my phd work. The data is here: Moore, Jason; Lange, P.D.L de (2013): Bicycle Rider Control Identification. figshare. http://dx.doi.org/10.6084/m9.figshare.659465 which is already processed into roll, yaw, steer, steer torque, etc.
You could find the open loop steer torque of the rigid rider nonlinear Carvollo-Whipple model that makes the model track the data.
I think you will find that the steer torque used by the model will be less than the steer torque measured (probably by a constant factor).
Option 2
In this paper, which you were reading today: Moore, J. K., Kooijman, J. D. G., Schwab, A. L. & Hubbard, M., Rider motion identification during normal bicycling by means of principal component analysis. Multibody System Dynamics, Springer Netherlands, 2011, 25, 225-244. We have kinematic data which is found here: Moore, Jason; Kooijman, J. D. G.; Schwab, A. L. (2014): Motion Capture of Bicycling on a Treadmill. figshare. http://dx.doi.org/10.6084/m9.figshare.1082512
There is a lot of no hands data there that has never been analyzed:
$ grep "nohands" ~/Downloads/runInfo.txt
1043,Jodi,stratos,nohands,30,6
1044,Jodi,stratos,nohands,25,4
1045,Jodi,stratos,nohands,20,3
1046,Jodi,stratos,nohands,18,2
1047,Jodi,stratos,nohands,16,1
1048,Jodi,stratos,nohands,15,1
1049,Jodi,stratos,nohands,14,1
1050,Jodi,stratos,nohands,12,1
1082,Jodi,browser,nohands,30,3
1083,Jodi,browser,nohands,25,2
1084,Jodi,browser,nohands,20,2
1085,Jodi,browser,nohands,18,2
1086,Jodi,browser,nohands,16,2
1087,Jodi,browser,nohands,15,1
1088,Jodi,browser,nohands,14,1
1089,Jodi,browser,nohands,12,1
2043,Victor,stratos,nohands,30,6
2044,Victor,stratos,nohands,25,4
2045,Victor,stratos,nohands,20,3
2046,Victor,stratos,nohands,18.1,2
2047,Victor,stratos,nohands,16,1
2048,Victor,stratos,nohands,15,1
2049,Victor,stratos,nohands,14,1
2050,Victor,stratos,nohands,12,1
2083,Victor,browser,nohands,25,2
2084,Victor,browser,nohands,20,2
2085,Victor,browser,nohands,18.1,2
2086,Victor,browser,nohands,16,2
2087,Victor,browser,nohands,15,1
2088,Victor,browser,nohands,14,1
3043,Jason,stratos,nohands,30,6
3044,Jason,stratos,nohands,25,4
3045,Jason,stratos,nohands,20,3
3046,Jason,stratos,nohands,18.1,2
3047,Jason,stratos,nohands,16,1
3048,Jason,stratos,nohands,15,1
3049,Jason,stratos,nohands,14,1
3050,Jason,stratos,nohands,12,1
3082,Jason,browser,nohands,30,3
3083,Jason,browser,nohands,25,2
3084,Jason,browser,nohands,20,2
3085,Jason,browser,nohands,18.1,2
3086,Jason,browser,nohands,16,2
3087,Jason,browser,nohands,15,1
3088,Jason,browser,nohands,14,1
3089,Jason,browser,nohands,12,1
3101,Jason,stratos,nohands,10,1
3102,Jason,stratos,nohands,16,2
3103,Jason,stratos,nohands,16,5
3104,Jason,browser,towing + nohands,15,0
3105,Jason,browser,towing + nohands,20,0
Don't use the Jodi data as it is probably all corrupted and would take a long time to repair. These bikes rider have inertia models and I have the Yeadon values for Jason, not Victor. The vehicle states are already calculated here:
In [8]: from scipy.io import loadmat
In [9]: d = loadmat('/home/moorepants/Downloads/3086.mat')
In [10]: d.keys()
Out[10]: dict_keys(['__header__', '__version__', '__globals__', 'x', 'y', 'z', 't', 'xori', 'yori', 'zori', 'bike', 'V', 'condition', 'gearing', 'q', 'd', 'rr', 'rf', 'xn', 'yn', 'zn', 'xb', 'yb', 'zb', 'gBikeRider', 'vBikeRider', 'ABikeRider', 'gBike', 'vBike', 'ABike', 'tBikeRider', 'tBike', 'gRider', 'vRider', 'ARider', 'tRider', 'uBikeRider', 'uBike', 'uRider'])
In [11]: d['q']
Out[11]:
array([[-0.20026255, -1.49095977, 0.0248329 , ..., 0.4058 ,
-0.04503635, 0. ],
[-0.20034173, -1.48891465, 0.02614229, ..., 0.4058 ,
-0.04423794, 0. ],
[-0.20042868, -1.48701208, 0.02727459, ..., 0.4058 ,
-0.0434081 , 0. ],
...,
[-0.13394217, -1.4246443 , -0.04844153, ..., 0.4058 ,
-0.03205204, 0. ],
[-0.13387513, -1.42624646, -0.04708246, ..., 0.4058 ,
-0.03656738, 0. ],
[-0.13380416, -1.42773105, -0.04582875, ..., 0.4058 ,
-0.04068886, 0. ]], shape=(6000, 8))
This data has more complete kinematics for no hand riding and you can fit a variety of models to it. The "towing" nohands even has no pedaling.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the Python scipy.io.loadmat example and the 3086.mat vehicle-state data, while checking runInfo.txt for the available nohands trials. Compare the provided datasets and determine whether a model can be fitted to track the measured motion; done means documenting a reproducible analysis and its results.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100