Page 1 of 1
Visualising OpenSim 4.0 results
Posted: Wed Oct 25, 2017 9:55 pm
by adrianlai88
Hi all,
I was wondering if anyone has tried visualising results obtained using OpenSim 4.0?
I have control and state files computed using my own optimal control approach in conjunction with OpenSim 4.0.
I have tried to use StatesTrajectory to load the states storage file but I'm unsure how to convert it into a time-varying state variable and then run the visualiser to view the motion of the model (as well as the activity of the model). Currently, I've resorted to plot my positions and activations using MATLAB and exporting it as an .avi, which suits my purpose but having a function that takes in either both a control and/or state file would be handy in the future.
Note, I'm running most of my simulations using the MATLAB API.
Thanks in advance!
Adrian
Re: Visualising OpenSim 4.0 results
Posted: Wed Oct 25, 2017 10:16 pm
by chrisdembia
You might be able to create the StatesTrajectory using `StatesTrajectory.createFromStatesStorage()`, and then you can visualize individual states with `model.getVisualizer().show(statesTraj.get(i))`.
Re: Visualising OpenSim 4.0 results
Posted: Wed Oct 25, 2017 11:16 pm
by adrianlai88
Hi Chris,
Thanks for the reply.
I was able to create the StateTrajectory using createFromStatesStorage() but when I tried to visualise the individual states, I get the following error. I tried different values but I get the same error. Any ideas?
Code: Select all
osimModel.getVisualizer().show(stateSimulate.get(0))
Java exception occurred:
java.lang.RuntimeException: min = 0 max = 4294967295 index = 0
In file
c:\users\adriannew\dropbox\opensim\my_repositories\opensim_4.0_source_code\opensim\simulation\StatesTrajectory.h:174
In function 'get'
at org.opensim.modeling.opensimSimulationJNI.StatesTrajectory_get(Native
Method)
at org.opensim.modeling.StatesTrajectory.get(StatesTrajectory.java:47)
Re: Visualising OpenSim 4.0 results
Posted: Wed Oct 25, 2017 11:31 pm
by tkuchida
The message indicates that the exception is thrown on line 174 of StatesTrajectory.h (
https://github.com/opensim-org/opensim- ... ory.h#L174):
Code: Select all
OPENSIM_THROW(IndexOutOfRange, index, 0,
static_cast<unsigned>(m_states.size() - 1));
The error message states "min = 0 max = 4294967295", but I think the size of the StatesTrajectory is actually zero (subtracting 1 and converting to an unsigned would give 2^32 - 1 = 4294967296). Does stateSimulate.size() return 0?
Re: Visualising OpenSim 4.0 results
Posted: Wed Oct 25, 2017 11:59 pm
by adrianlai88
Does stateSimulate.size() return 0?
Yes, it returns 0. Am I creating the StateTrajectory incorrectly?
Code: Select all
stateStorage = Storage('tugOfWar_states.sto');
stateSimulate = StatesTrajectory();
stateSimulate.createFromStatesStorage(osimModel,stateStorage);
Alternatively, I tried
Code: Select all
stateSimulate.createFromStatesStorage(osimModel,'tugOfWar_states.sto');
but it gives me the same result.
Re: Visualising OpenSim 4.0 results
Posted: Thu Oct 26, 2017 12:33 am
by tkuchida
Hm, not sure about this; your code looks okay to me. Based on the doxygen (
http://myosin.sourceforge.net/1987/clas ... 0b662882f3), the
allowMissingColumns argument will be false so it should throw an exception "if there are continuous state variables in the Model for which there is no column in the Storage". If no exception is thrown when calling
createFromStatesStorage(), then it seems like there can't be any missing columns (and, unless your model has zero states, you should get a non-empty trajectory). Perhaps there's an issue with the MATLAB bindings? I see there's a Python test for StatesTrajectory (
https://github.com/opensim-org/opensim- ... jectory.py) but no analogous test for MATLAB.