https://github.com/projectchrono/chrono
Raw File
Tip revision: 6b409b7796ec172b41c392e9597bda547fa7071f authored by Radu Serban on 08 July 2017, 18:41:39 UTC
Merge branch 'release/3.0.0'
Tip revision: 6b409b7
README.md
Project CHRONO
==============

Project Chrono represents a community effort aimed at producing a physics-based modelling and simulation infrastructure based on a platform-independent, open-source design. The name of this software infrastructure is Chrono. Some of its features are listed below. More information is available at the [project website](http://www.projectchrono.org/). The applications areas in which Chrono is most often used are **vehicle dynamics**, **robotics**, and **machine design**. In vehicle dynamics, Chrono has mature support for tire/terrain interaction modeling and simulation.

### Physics modeling

-   Rigid body support
-   Flexible body support via Chrono::FEA module - both for ANCF and co-rotational nonlinear finite element analysis
-   Support for fluid-solid interaction problems, via Chrono::FSI module
-   Coulomb friction model capturing stick-slip phenomena.
-   Support for rolling friction and spinning friction.
-   Support for handling frictional contact via two approaches: a complementarity approach and a penalty approach.
-   Springs and dampers with non-linear response. Can be user defined.
-   Large collection of joints and constraints: spherical, revolute, prismatic, universal, glyph, screw, bevel and spur gears, pulleys, etc.
-   Unilateral constraints.
-   Constraints to impose trajectories, or to force motion on splines, curves, surfaces, etc.
-   Constraints can have limits (ex. elbow). 
-   Constraints can be rheonomic or holonomic
-   Custom constraint for linear motors.
-   Custom constraint for pneumatic cylinders.
-   Custom constraint for motors, with reducers, learning mode, etc.
-   On the fly constraint activation/deactivation.
-   Simplified 1D dynamic models. Examples: powertrain, clutches, brakes, etc. For more sophisticated models see companion Chrono::Vehicle module.
-   All physical items can have an arbitrary number of 'assets' used for defining visualization shapes, custom properties, etc.

### Solver
-   HHT solver for index 3 differential algebraic equations.
-   Symplectic first order half-implicit Euler solver for large frictional contact problems.
-   Speed-impulse level solver for handling large frictional contact problems.
-   Handling of redundant/ill posed constraints.
-   Stabilization or projection methods to avoid constraint drifting.
-   Static analysis solver.
-   Inverse kinematics and interactive manipulation.

### Collision detection features

-   Supports compounds of spheres, cubes, convex geometries, triangle meshes, etc.
-   Additional collision support provided by the Bullet collision detection engine, which is wrapped inside Chrono::Engine.
-   Broad phase collision detection: sweep-and-prune SAT.
-   Narrow phase collision detection: AABB and/or OBB binary volume trees, to handle geometries with thousands of details.
-   Detail phase with custom primitive-to-primitive fallbacks.
-   Safety 'envelope' around objects.
-   Report penetration depth, distance, etc.
-   Bodies can be activated/deactivated, and can selectively enter collision detection.

### Implementation details

-   ANSI-compliant C++ syntax.
-   Optimized custom classes for vectors, quaternions, matrices.
-   Optimized custom classes for coordinate systems and coordinate transformations, featuring a custom compact algebra via operator overloading.
-   All operations on points/speeds/accelerations are based on quaternion algebra and have been profiled for fastest execution.
-   Custom sparse matrix class.
-   Custom redirectable stream classes, featuring platform independent file archiving and modern syntax.
-   Special archive engine, with easy and reliable persistent/transient serialization. Includes versioning and deep pointers storage.
-   Expandable run-time class factory.
-   Custom pseudo-'run-time-type-information', to allow persistence even in case of name-mangling with different C++ compilers.
-   High resolution timer, platform independent.
-   Class to create PostScript(tm) output.


### Other

- Interface with MATLAB
- Cosimulation with Simulink
- Import STEP cad files to define complex geometries
- Online/offline visualization with Irrlicht and POV-Ray, respectively.
- Classes for genetic & classical optimization.
- Classes for interfacing external geometric data (NURBS, splines).
- Scripting via Python.
- Makefile system based on CMake (cross-platform, on Windows 32/64 bit, Linux, OSX).


back to top