dependencies on linux
sudo apt-get install libcgal-dev libglu1-mesa-dev libglu1-mesa-dev
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "README-"
)
pre-installation
install(dependencies=TRUE) # this should get them all
install.packages(c("lpSolve",
"hitandrun",
"ggpubr",
"reshape2",
"plyr",
"RColorBrewer",
"plotly",
"pracma",'xtable','caTools','GGally','plotrix','scatterplot3d','microbenchmark','pbmcapply','pbapply','geometry','rgl'))
load_all()

The goal of stfeasibility is to evaluate, for a given force trajectory, for a static tendon-driven limb, the feasible combinations of time-varying muscle activation patterns.
make TODO: cal invite
Spatiotemporal Feasibility Theory
full task is 2 seconds
A matrix doesn’t change
Evaluations:
- [ ] compute: linsolve for the optimal l2 activation trajectory
- [ ] compute: linsolve for the minimum change in activation
- [ ] compute: generate 10k activation trajectories
- [ ] for each activation trajectory, calculate the maximum velocity incurred
- [ ] make cumulative distribution. x axis is max velocity for activation trajectory
- [ ] show distribution of bottom 1% l2 activation trajectory from
comparisons:
- [ ] compare 10k from degenerate vs velocity-constrained to get the % remaining solutions.
Hongchul Sohn / Nichols/Birckholder - Cat hindlimb
Matt Tresch - Rat hindlimb model
Largest 30 degree cone (go around those parts)
0 torques
nice to haves but definitely put in discussion
You can install stfeasibility from github with:
# install.packages("devtools")
devtools::install_github("bc/stfeasibility")
har per task for 100 tasks in force_cos_ramp in Fx distal direction, 1 Hz task frequency, 100Hz sampling frequency. constraint = 0.1/10ms == 0.1 allowable per transition. .15 for increasing.
har per task for 100 tasks in
This is a basic example which shows you how to solve a common problem:
## basic example code
timing: s.t. constr
Unit: seconds
expr min lq mean median uq
3 task_v_constr 3.185497 3.185497 3.185497 3.185497 3.185497
4 task_v_constr 9.601908 9.601908 9.601908 9.601908 9.601908
5 task_v_constr 22.970029 22.970029 22.970029 22.970029 22.970029
6 task_v_constr 54.821506 54.821506 54.821506 54.821506 54.821506
7 task_v_constr 100.976341 100.976341 100.976341 100.976341 100.976341
12 task_v_constr 1365.549 1365.549 1365.549 1365.549 1365.549 1365.549
13 task_v_constr 1971.198 1971.198 1971.198 1971.198 1971.198 1971.198
14 task_v_constr 2565.451 2565.451 2565.451 2565.451 2565.451 2565.451
15 task_v_constr 4164.274 4164.274 4164.274 4164.274 4164.274 4164.274
benchmarks <- cbind(num_tasks =c(3,4,5,6,7,12,13,14,15), minutes =c(3.185497,
9.601908,
22.970029,
54.821506,
100.976341,
1365.549 ,
1971.198 ,
2565.451,
4164.274))
timing:
100k trajectories from 49 dimensional space = 5 minutes of point picking
10k trajectories from 49 dimensional space = 2 minutes of point picking