Skip to content


Repository files navigation


Build Status Build Status
Codacy Badge

Code and Supplementary Material for computing and visualizing the feasible activation space—the way that muscles combine to create forces at the end of a limb.

Problem statement:

We don't know how the brain picks the optimal strategy to coordinate its muscles and limbs to generate motion.

Why we are researching this:

If we understand the constraints of force generation, we can see how many solutions the brain can choose from. Prosthetic and robotic designs are dependent upon robust control algorithms; we have the opportunity to unveil how the brain optimizes its coordination strategy, and build the next generation of biologically-inspired robot arms, prosthetic designs, and orthopaedic treatments.

How do we approach this topic:

Take in data about a musculoskeletal arm or leg, and visualize how the brain optimizes the limb's force production. With many different muscles, there is an infinite number of control strategies. In this project, we look to constrain those possibilties as much as possible, until we uncover physical limitations to the solution space itself.

How are we doing this?

An N-Dimensional system of joints and muscles can get complex quickly. We look to approximate the volume of the solution subspace using custom random number generation and an analysis of the solutions we find.

Parallel Coordinates Visualization:


What tools will help us solve this problem:

This project can get computationally complex, very quickly. We have a cat-leg model that's got 31 muscles, 7 Degrees of freedom (at the joints), and 6 output dimensions (x,y,z,tx,ty,tz).

Imagine you're holding a brick in your palm that weighs 2kg, and you can't move your elbow or shoulder. You have to push up with 20N force or the brick will move. It will require a direct upward force, and you can't create any torque on the brick (you're not allowed to spin it). picture of a brick

The brick isn't heavy for you, and because it's not your 'maximal', there are many ways to create that force directly up. Your arm has many different muscles which can support the brick. Some muscles are absolutely necessary, while others you could inject with botox, and still maintain effective control of the brick (albeit it might be more difficult). Every muscle you have can be tensed from 0 to 100%, where 100% is as hard as you can possibly contract that muscle. Your nervous system controls the 'activations' of these muscles, thereby producing forces and controlling motion for your body. Every moment of your life, your arm muscles have a level of activation. When sleeping, you might have very low muscle tension, but when holding the brick, some of the muscles are more highly activated.

##a Think of your muscle activations as a list of percentages:

muscle activation
m 0 30%
m 1 20%
m 2 100%
... ...
m n an %

We represent this as a set of these activations, where activation is between 0 (0%) and 1 (100%). a = (a0 ,a1 ,a2 , ... , an )

###Example if you had 3 muscles controlling the 20N force upon the brick, your activation set could be any of these combinations: a = (0.1, 0.5, 0) a = (0.5, 0.8, 0) a = (0.6, 0.9, 0.1) These are all feasible solutions, in that they can all generate the exact same output force in the same direction.

The big questions:

When you have n muscles controlling the force at an endpoint, and you want to generate an exact force of 10N directly up, what are all of the possible activation sets?

Installation of Scala and SBT

sudo apt-get update
sudo apt-get install scala
sudo apt-get update
sudo dpkg -i sbt-0.13.7.deb

Running the project

 cd ~/your/path/to/space
 mkdir output
 sbt run 100

This will generate 100 uniformly distributed points within a 7-muscle index finger model, and put the results CSVs in the output folder.

Mapping Code

J^{-T} \in \mathbb{R}^{m\times k} ,
R \in \mathbb{R}^{k\times n} ,
F_O \in \mathbb{R}^{n\times n} ,
\textbf{a} \in \mathbb{R}^n\\

m=\text{Output Dimensions}\\


Visualizing multidimensional solution spaces through stochastic and analytical techniques.







No releases published


No packages published