FeaturesCHRONO::ENGINE is a multibody dynamics engine, aimed at providing high-performance simulation features in C++ projects.
CHRONO::ENGINE can perform dynamical, kinematic and static analyses for virtual mechanisms built of parts such as actuators, motors, constraints between parts, spring, dampers, etc.
Thank to the CHRONO::ENGINE library, your application will be able to simulate a wide set of mechanisms: cars, robots, trucks, trains, car suspensions, earth-moving machines, motorscrapers, backhoe loaders, human skeletons, aereospatial devices, landing gears, robotic manipulators, engines, torque converters, prosthetic devices, artificial arms, miniaturized mechanisms for tape recorders, camcorders, and so on.
Programmers can easily take advantage of the advanced algorithms contained in the CHRONO::ENGINE library, in order to build applications featuring realistic simulation of contacts, collisions, constraints, motors. articulated mechanisms, mechanical devices and so on.
Following is a list of the main features of the CHRONO::ENGINE library.
- Fully ANSI-compliant C++ syntax.
- Optimized custom classes for vectors, quaternions, matrices. All math classes implement operator overloading and type templates.
- Optimized custom classes for coordinate systems and coordinate transformations, featuring a custom compact algebra via operator overloading.
- All operations on points/speeds/acceleratios are based on quaternion algebra and have been profiled for fastest execution.
- Custom sparse matrix class.
- Linear algebra functions for LU decomposition, products, Choleski, Von Kauffmann, LDLt and SVD decompositions, etc.
- 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.
- Nonintrusive memory debugger, to track memory leaks.
- 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) files easily.
- Rigid bodies, markers, forces, torques
- Bodies can be activated/deactivated, and can selectively partecipate to collision detection.
- If markers or bodies are moved by external routines, a BDF method will update kinematic data.
- Speed and angular speed of rigid bodies can be clamped in order to increase stability (for VR simulations).
- Resting rigid bodies can automatically enter the 'frozen' mode, to allow real-time simulations of complex scenarios.
- Exact Coloumb friction model, for precise stick-slip of bodies.
- Parts can collide and rebounce, depending on restitution coefficients.
- Springs and dampers, even with non-linear features
- Wide set of joints (spherical, revolute joint, prismatic, universal joint, glyph, etc.)
- Unilateral constraints.
- Constraints to impose trajectories, or to force motion on splines, curves, surfaces, etc.
- Special joints for modeling screws.
- Constraints for bevel or spur gears.
- Constraints can have limits (ex. elbow) and can be rheonomic, motorized
- Custom constraint for linear motors.
- Custom constraint for pneumatic cylinders.
- Custom constraint for motors, with reducers, learning mode, etc.
- All joints can report the reaction force.
- Constraints can be activated/deactivated.
- Brakes and clutches, with precise stick-slip effect.
- Lot of non-linear properties of items (ex. time-dependant force) can be set with modular 'function' objects, with GUI.
- Polymorphic interface to solver, to include particles, SPH and FEM (bricks, tetrahedrons, etc.).
- Monodimensional dynamic items (ex.for powertrains, with clutches, brakes, torques, torsional stiffness, etc.)
- Constraints for pulleys.
- Rolling friction and spinning friction.
- Custom HyperOCTANT technology for efficient real-time solution of large LCP problems, even with critical cases of friction, collision and stacking.
- Custom direct solver, with sparse matrix for large systems.
- A special iterative solver can handle real-time massive simulations, with more than one thousand of constraints.
- Handling of redundant/ill posed constraints.
- Classical integration schemes: Euler, Heun, Kutta Merson, etc.
- Modern 'real-time' integration exploiting differential inclusions, with speed-impulse LCP.
- Various stabilization methods (Baumgarte, Blajer, etc.)
- Static solution, even with strong geometric nonlinearities.
- Inverse kinematics and interactive manipulation.
- Custom EdgeTEMPEST technology, supporting compounds of spheres, cubes, convex geometries, triangle meshes, etc.
- Advanced collision methods are available thank to the Bullet collision detection engine, which is wrapped inside Chrono::Engine. cubes, convex geometries, triangle meshes, etc.
- 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 depht, distance, etc.
- Supports compounds of spheres, cubes, convex geometries, triangle meshes, etc.
- Conveyor belts.
- Modular libraries, based on 'units' (for optional interfacing with MPI, Matlab, etc.).
- Classes for genetic & local optimization.
- Classes for Newton-Raphson solution of non-linear equations.
- Classes for interfacing foreign geometric data (NURBS, splines).
- Multibody engine is also embedded in a plugin for a modeling software, with complete GUI, undo, file archiving, etc.
- 'Probes' and 'controls' for man-in-the-loop simulations.
- Makefile system based on CMake (cross-platform, on Windows 32/64 bit, Linux,etc.).