The OpenSim 4.1 release enables users to read in inertial measurement unit (IMU) data and compute inverse kinematics based on IMU orientations. This workflow is called OpenSense. This is an exciting initial step towards supporting biomechanical analyses with IMUs in OpenSim. For this release, the user is primarily responsible for ensuring proper calibration and registration of the sensors to an appropriate OpenSim model. In the future, we plan to add more advanced algorithms for calibration, registration, and drift correction. You can read more about these new capabilities and try an example: OpenSense - Kinematics with IMU Data.
We have also fixed several bugs and improved the user experience. A few highlights include the following:
- We fixed a bug in InverseKinematics and Scaling in which markers not included the MarkerWeightSet were still tracked.
- Disabled muscles are removed during static optimization, and disabled muscles are shown in grey in the graphical user interface.
- Based on user feedback, we changed the default time for a forward simulation via the GUI simulate button to 5 seconds.
- We streamlined the interface to read data files into tables. In Matlab, Python, or C++ this now requires one line instead of three and avoids downcasting. Read more on the Common Scripting Commands page.
- We improved Matlab utilities for C3D reading. You can find these utilities in your distribution where you saved the OpenSim resources. See the folder "Code/Matlab".
We added utilities to trim TimeSeriesTables, including trim(startTime, endTime), trimTo(newEndTime), and trimFrom(newStartTime).
- Vector operations in Matlab are faster (3-4X) by exposing API commands for addition, subtraction, etc. with vectors. To see usage, see "Code/Matlab/Utilities/osimC3D.m".
- The dynamic walker examples have been upgraded and converted to Matlab code. They show users how to build a simple model and run a forward simulation with varying model components and parameters. The examples include Building a Dynamic Walker in Matlab and Dynamic Walking Challenge: Go the Distance!.
- We updated to Python 3.7, since the previous version 2.7 will be deprecated soon. Users can still create bindings for Python 2 if building from source.
- We fixed a bug where wrap geometry with multiple via points over wrap objects was not displayed correctly when wrap objects went from engaged to disengaged. Note that in 4.0 the display of muscles may be incorrect, but computations are still correct.
How to Upgrade
Upgrade to version 4.1 should be seamless. A few things to note:
- If you have code that reads data files into tables, you will need to update to use the new methods.
- Static Optimization results may be different from version 4.0 if you ran the analysis with disabled muscles.
- Your inverse kinematics and scaling results could change based on bug fixes described above (e.g., if you have set-up files where markers were omitted from the MarkerWeightSet).