Simbios Dissemination Wiki Contents
- Software Tools and Development Ideas (Google Summer of Code Ideas)
We are excited to be applying for the Google 2014 Summer of Code (SoC), under the umbrella organization Open Source Robotics Foundation (OSRF). We encourage participants to explore individual software offerings before submitting a proposal. The software projects all have extensive documentation, active discussion forums, and lists of bugs and feature requests that can provide a more in-depth understanding of the software and its users needs. SoC participants can propose project ideas based on those listed below or come up with their own ideas.
To submit a proposal for a Simbios project, please do so through OSRF and follow their guidelines for proposals. See http://wiki.osrfoundation.org/gsoc14.
Software Overview
Simbios develops software to simulate biological structures and how they move. These simulations help researchers answer questions about how these structures work, why the structures sometimes fail to work, and what treatments could successfully restore their function. Two of our software projects are focused on biomechanical applications and are related to the mission of OSRF:
Software |
Description |
Language(s) |
License |
OpenSim |
User extensible software system to develop and visualize models of human and animal musculoskeletal structures and create dynamic simulations of movement. OpenSim has been used by researchers to study humanoid robotics. |
API: ANSI C++; GUI: Java |
API: Apache 2.0 |
Simbody |
Open source physics engine for high performance, high accuracy simulation of articulated multibody systems with special attention to the needs of biomedical simulation and robotics. Simbody has been integrated with OSRF's Gazebo software. |
C++ |
Apache 2.0 |
Project Ideas
OPENSIM IDEAS (http://simtk.org/home/opensim and http://opensim.stanford.edu)
1. Tool to import Solidworks models into OpenSim
Description: OpenSim is a flexible framework for modeling human and animal structures, as well as external objects like prosthetics, exercise equipment, exoskeletons, and more. Designers can use OpenSim to understand how devices interact with humans. A current barrier to using OpenSim for design is importing mechanisms from CAD packages like Solidworks.
Expected results:
- 1) Analyze the problem and propose an approach (working with mentor). This includes exploring Collada or other open source formats
- 2) Analyze formats exported by solidworks sketchup blender
- 3) Select subset of abstractions to support, including at least geometry and free joints for connectivity
- 4) Implement an Importer and Exporter leveraging open source libraries as much as possible
- 5) Develop test cases showing
6) Create examples and doucmentaiton for users
Knowledge prerequisites: C++, Solidworks, Multi-body modeling experience
Skill level: Medium
For more information: http://opensim.stanford.edu and https://collada.org/mediawiki/index.php/COLLADA_-_Digital_Asset_and_FX_Exchange_Schema[[BR]]
Mentor: Ayman Habib (ahabib at stanford dot edu)
2. Create a database to package OpenSim simulation results
Description: OpenSim simulations need model(s) and configuration file(s) and produce tons of data. The massive amount of data that results from a simulation makes it hard to package a simulation/analysis with all of the necessary inputs. This is a barrier to sharing simulations/analyses between users. It also makes it challenging to archive and search for specific simulations and/or analyses (i.e. in a database). The focus of this project is creating a database to store simulation models and data in a sharable and easily searchable package.
Expected results:
- 1) Analyze the problem and propose an approach (working with mentor).
- 2) Propose a database layout and interface (e.g. using SQL) to extract outputs
- 3) Reimplement current tools to allow for either user specification of inputs or for extracting inputs from database
- 4) Reimplement current tools to allow for output to files or for check-in to database
- 5) Develop test cases showing behavior
6) Compare performance between existing and new methods and improve where possible
Knowledge prerequisites: C++, Databases (e.g. SQL)
Skill level: High
For more information: http://opensim.stanford.edu
Mentor: Ayman Habib (ahabib at stanford dot edu)
3. Tool to compile and display comprehensive authorship and reference data
Description: The OpenSim project relies on a wide range of contributors who have developed models and algorithms that are integral to the software package. Authorship and reference information is included in model xml files, as well as in the code for various model components. All of this authorship and reference information should be compiled and displayed directly to users.
Expected results:
- 1) Analyze the problem and propose an approach (working with mentor).
- 2) Develop an API tool to extract from models and tools all authorship and reference information and display
- 3) Improve handling of authorship and reference information in model files such that formatting is preserved on load/save
4) Implement a GUI feature to cleanly and clearly display all authorship information for models and tools to users of the software
Knowledge prerequisites: C++, Java, Netbeans
Skill level: Medium
For more information: http://opensim.stanford.edu
Mentor: Kevin Xu (xukevin at stanford dot edu)
4. Convert OpenSim API to new properties system
Description: The OpenSim API is compromised of model components that represent all the elements of a model (e.g. bodies, joints, muscles). The information in the model components are stored as properties. We recently implemented a new property system in the OpenSim API to make it easier for developers to create new model components and set/get properties of interest from existing model components. The API has not yet been fully converted to this new property system. leading to confusion for developers and some compatibility issues.
Expected results:
- 1) Analyze the current properties system to understand its implementation and differences with old properties system (with guidance from mentor)
2) Propose an approach to converting the remaining OpenSim classes that use the old property system
- 3) Implement the conversion
- 4) Design/implement test cases for the new property system
5) Generate more detailed Doxygen pages for individual properties of the model components
Knowledge prerequisites: C++ (templates programming), O-O design, data structures and algorithms, XML, CMake, API design, testing and documentation tools.
Skill level: Medium
For more information: http://opensim.stanford.edu
Mentor: Kevin Xu (xukevin at stanford dot edu)
5. Unified data Storage interface for the OpenSim API
Description: OpenSim relies on an internal data representation of motion data, which is its Storage class. Currently, OpenSim reads data from three specific file formats into a single Storage type. We would like to develop: 1) a simple yet powerful Storage interface to represent data in general (not just motion data) and make it possible for 3rd parties to provide access to their data representations in memory by satisfying the interface; 2) revamp our internal data storage implementation to satisfy this interface and provide much faster data access times, and 3) implement the interface for MATLAB .mat files to provide the same access and performance.
Expected results:
- 1) Analyze the problem and propose an approach (working with mentor)
2) Propose the Storage interface to the OpenSim development team for review
- 3) Make the current Storage object a concrete implementation of the new interface
- 4) Refine the interface (if necessary) and document it
- 5) Optimize data read/write access of the default storage implementation
6) Create another concrete implementation of the storage interface to wrap matlab (.mat) data files
Knowledge prerequisites: C++, interface design; filesystem I/O. Database, port and wireless I/O protocols a plus.
Skill level: Medium
For more information: http://opensim.stanford.edu and https://simtk.org/api_docs/opensim/api_docs/classOpenSim_1_1Storage.html[[BR]]
Mentor: Ajay Seth (aseth at stanford dot edu)
SIMBODY IDEAS (http://simtk.org/home/simbody)
1. Convert Simbody to Eigen
Description: Simbody currently uses an extensive custom matrix/vector library with numerical linear algebra performed using the Lapack/Blas libraries. For performance and portability we would like to replace both of these dependencies with Eigen. There are several difficult subprojects and it is likely that not all of them would be completed; we will consider this a success if you make substantial progress.
Expected results:
- 1) Analyze the problem and propose an approach (working with mentor).
- 2) Modify the Simbody build system to incorporate Eigen.
- 3) Replace Lapack/Blas use with equivalent Eigen methods. This may require implementing a complete orthogonal (QTZ) factorization which is currently missing from Eigen.
- 4) Reimplement the matrix/vector interface in Eigen, or replace existing uses with direct Eigen classes.
- 5) Develop test cases showing equivalent behavior.
6) Compare performance between existing and new methods and improve where possible.
Knowledge prerequisites: C++, especially template programming; numerical linear algebra; CMake helpful
Skill level: High
For more information: Eigen: http://eigen.tuxfamily.org, Lapack/Blas: http://www.netlib.org/lapack, design spec for Simbody's matrix/vector facility: https://simtk.org/docman/view.php/47/1700/Simmatrix.pdf.
Mentor: Michael Sherman (msherman at stanford dot edu)
'