Child pages
  • z_*OBSOLETE* Calculate Rigid Body Motion in Matlab


This page was moved to


https://app.gitbook.com/@brown-university/s/xromm/







Click in the link above if you are not automatically redirected in 10 seconds.


Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 17 Next »

what you need:
1. a markercoordinates.csv file 3 columns for each marker (xyz coordinates)
2. an *xyzpts.csv file from digitized data (may need to be smoothed before calculating rigid body motion)

Note: The number of columns must be a perfect match between the two files.
if you have 10 markers - you must have 30 columns in both files.

1. type rigidBodyMotionFromMarkers at the matlab prompt
2. select *xyzpts.csv file
3. select markercoords.csv file
4. type the number of bones in the input box
5. select the markers associated with each bone (omit any points with all NaNs)
6. save the file output.
7. To use this file in maya, you will

    • select the bones in the same order used above.
    • type impMatrix at the command prompt
    • select the file saved in step6

Note: After you run through steps 1-6 in matlab, the variables markerIdx and ct are stored in the workspace. If you need to do subsequent reconstructions, simply type rigidBodyMotionFromMarkers(markerIdx,ct) at the matlab prompt. This will elimate steps 3-5.

In Matlab:

  • import your [prefix]xyzpointsBones.csv bones file

  • you will have 3 variables, colheaders, data, and textdata
  • type: plot(data)
  • click the Insert Legend button
  • pick a data column with some cyclic curves (the legend will allow you to match the column number with the color of the line)
  • type: plot(data(:,4)) %the number 4 being an example of the data column chosen)
  • There is probably still a bit of high frequency noise on the curve - we'll use a butterworth filter to smooth it out a touch more
  • use the following function: dataSmooth = tybutter(data,f,g) %f =  cutoff frequency and g = recording frequency
    • example: dataSmooth = tybutter(data(:,4),50,250)
  • type: hold on
  • type: plot(dataSmooth,'r-')
  • look at figure1. It should have a red curve showing the effect of the chosen filter cutoff against the original data
  • generally the filter cutoff ranges between 10 and 80, you just have to try several cutoff frequencies until you find the one that appears to get rid of the high frequency jitters without changing the general shape of the curve
  • Once you have a filter that you like, apply it to all of the data
  • example: dataSmooth = tybutter(data,50,250)
  • dataSmooth should have the same dimensions as data
  • Save your new data using csvWithHeaders
    • csvWithHeaders('fileName.csv', dataSmooth, colheaders)
  • No labels