GithubHelp home page GithubHelp logo

deeprele / space Goto Github PK

View Code? Open in Web Editor NEW

This project forked from briancohn/space

0.0 3.0 0.0 281.28 MB

Visualizing multidimensional solution spaces through stochastic and analytical techniques.

Scala 10.66% R 1.71% Shell 0.01% TeX 74.48% Makefile 0.06% CSS 0.72% JavaScript 9.84% XSLT 2.49% Python 0.03%

space's Introduction

space

Build Status Build Status
Codacy Badge

PDF Status ####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. ####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? ###Visualization with a Feasible Activation Set (FAS) What does the 'solution space' look like?

Every point within the Feasible Activation Set will produce the desired force output. The dimensionality of the FAS is highly dependent on the number of muscles and whether there are any other constraints on the system (to be discussed in another post). ##Example If you had 4 muscles in your system, the feasible activation space could look like this:

#Where do most of the solutions lie? TODO: add a figure describing how projections of density onto one dimension can work with volume, use a triangle or a pyramid for 2d and 3d examples.

#What are the connections between the muscle activations? TODO: look at how solution vectors change when one muscle is constrained. Are there patterns? Are there inverse relationships? #Prediction Can I predict how much muscle 0 will be activated, if I know muscles 1 through n? TODO: look into Linear and Nonlinear prediction schemes TODO: Look into research on prosthetic muscle control systems (e.g. can we build a model to predict muscle activation via the other muscles?)

#Probabalistic Heat Maps TODO: develop figures

#Talk about assumptions Muscles insertions, strengths, joint movement planes, Output XYZ dimensions, Nonlinearities

#Implementation Make a program to extract uniformly-distributed points within the n dimensional feasible activation space. TODO: mathematical formula for this recursive function Multiple cores will contribute their random points to a unified database with all solutions thus far. We will generate queries with constraints upon one or more muscles, to identify how other muscle compensate for constraints (i.e. loss of a muscle's function, weakening of a muscle, or strengthening of a muscle.) Query example: "How does muscle 1 activate when muscle 0's activation is limited to 50%?" SELECT m1 FROM POINTS_TABLE WHERE m0 < 0.5

#Installation of Scala and SBT

sudo apt-get update
sudo apt-get install scala
wget https://dl.bintray.com/sbt/debian/sbt-0.13.7.deb
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}\\
k=\text{DOF}\\
n=\text{Muscles}\\

https://docs.google.com/presentation/d/1arXzTLhYD5tdzfiQYsthWoewsP36PEL5ODuatkBJMGc/edit#slide=id.gbcc608561_0_0

space's People

Contributors

briancohn avatar mayszedlak avatar valerolab avatar ktaegyum avatar

Watchers

Séb Arnold avatar James Cloos avatar John Pugliesi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.