Giter Site home page Giter Site logo

evds's Introduction

Status

This is a pre-release repository. It's not yet fully ready for use in real applications, but it can already be used for familiarization.

The build files for platforms other than VS2008 may be inconsistent/invalid. Please refer to compilation guide on how to generate new ones.

Quick Reference

Links:

Community:

  • IRC: #x-plane @ irc.x-plane.org
  • IRC: #foxworks @ irc.freenode.org
  • IRC: ##aerospace @ irc.freenode.org

Information

EVDS is an open-source aerospace physics simulation library (flight dynamics library, FDM) written in C. It's designed for realtime and non-realtime, multithreaded simulation of vessel dynamics. In the context of this library, "vessel" means any object to be simulated, for example:

  • Autonomous spacecraft (satellites)
  • Manned spacecraft
  • Aircraft
  • Trains, vehicles

Conceptually, EVDS allows user to construct a set of equations for the entire system from small basic equations (e.g. equations for numerical integration, equations for aerodynamic forces). The equations are constructed from hierarchy of objects, as defined by user.

Every object in EVDS has a coordinate system attached, and any vectors may be specified in the objects coordinate system. Runtime conversion is performed between vector coordinate systems.

A procedural approach to defining models is used: "it looks how it behaves". The vessels are constructed from small pieces, each of which provides a contribution to the total forces and torques or vessel behavior.

Every object contains a set of variables (floating-point, string, vector, quaternion variables, or custom data with a pointer to arbitrary data structure). Custom data variables may also contain nested attributes and variables (used for storing complex structures in data files). A set of modifiers may be specified, which create patterns/copies of objects according to given rules.

Vessel configuration can be defined in runtime by the program, or loaded from an XML file.

EVDS does not contain a rendering engine, but provides facilities to generate 3D meshes and model data for rendering. The physics engine is designed for high-perfomance multi-threaded environment with support for asynchronous rendering in mind.

EVDS contains a powerful vector math library which provides consistency checks across different coordinate frames and allows correct transformation of vectors between non-inertial coordinate frames.

Target Use

EVDS was designed to be used in a realtime aerospace flight simulator, but it can also be used for:

  • Quick first-order vessel parameter & motion estimation
  • Flight simulation
  • Physics calculations in embedded systems
  • Non-realtime simulation
  • Tessellation of 3D vessel models

The main version of EVDS is 64-bit, but it is also available in a 32-bit version. EVDS supports the following platforms at the moment:

  • Windows (32-bit and 64-bit)
  • Linux (32-bit and 64-bit)

Compiling

All the EVDS dependencies (SIMC, TinyXML) should be downloaded automatically with the Git repository, otherwise use the following command to include submodules:

git clone --recursive https://github.com/FoxWorks/EVDS.git

The EVDS library contains build files for various platforms in the support folder:

  • vs2008 - Visual Studio 2008
  • vs2010 - Visual Studio 2010
  • gmake - Makefiles

If build files must be generated from scratch or a local copy of documentation is needed, Premake4 must be used:

cd support
premake4 vs2008
premake4 vs2010
premake4 gmake
premake4 evdsdoc

Use the generated sln files under Windows. They will include all required dependencies (which are present as submodules in repository).

Use makefiles under Linux or other platforms:

cd support/gmake
make

Documentation and Example

Documentation for the EVDS library is available here.

The EVDS library is hopefully easy to use, but requires at least basic knowledge of aerospace topics. Here's a sample code for a small simulator:

void main() {
	EVDS_SYSTEM* system;
	EVDS_OBJECT* inertial_system;
	EVDS_OBJECT* earth;
	EVDS_OBJECT* satellite;

	EVDS_System_Create(&system);
	EVDS_Common_Register(system);

	//Create inertial system/propagator
	EVDS_Object_Create(system,0,&inertial_system);
	EVDS_Object_SetType(inertial_system,"propagator_rk4");
	EVDS_Object_Initialize(inertial_system,1);

	//Create planet Earth
	EVDS_Object_Create(system,inertial_system,&earth);
	EVDS_Object_SetType(earth,"planet");
	EVDS_Object_SetName(earth,"Earth");
	EVDS_Object_AddFloatVariable(earth,"mu",3.9860044e14,0);    //m3 sec-2
	EVDS_Object_AddFloatVariable(earth,"radius",6378.145e3,0);  //m
	EVDS_Object_AddFloatVariable(earth,"period",86164.10,0);    //sec
	EVDS_Object_SetPosition(earth,inertial_system,0,0,0);
	EVDS_Object_Initialize(earth,1);

	//Load satellite
	EVDS_Object_LoadFromFile(inertial_system,"satellite.evds",&satellite);
	EVDS_Object_SetPosition(satellite,inertial_system,6728e3,0,0);
	EVDS_Object_SetVelocity(satellite,inertial_system,0,7700,0);
	EVDS_Object_Initialize(satellite,1);

	//Main simulation loop
	while (1) {
		//Propagate state
		EVDS_Object_Solve(inertial_system,1.0);

		//Add a small delay
		SIMC_Thread_Sleep(0.02);
	}

	EVDS_System_Destroy(system);
}

Development Plans

These are the features that are yet to be implemented in the core EVDS library or addons:

  • Find some interesting people to discuss various function names and variable names with to finalize the API before first release.
  • Support for interpolation of data tables based on interpolation equation. This should make it much easier to specify things like material parameters as a function of many variables.
  • Support for piecewise interpolation for interpolation equations.
  • Support for 2D tables for use with linear interpolation.
  • A way to specify explicitly which variables are interpolated by.
  • If variable already exists with wrong type, many functions will silently fail without any way to find out exact reason
  • Add additional debug asserts in various code points to avoid common errors.
  • Modifiers that are actually EVDS objects. Support for saving and loading runtime objects
  • Unique identifiers must be made truly unique
  • Add more unit tests
  • Work more on predefined coordinate frames
  • Add proper support for geodetic datums

evds's People

Contributors

phoenixblack avatar

Stargazers

Cybernetic Engineering avatar

Watchers

James Cloos avatar  avatar

Forkers

zaretto cescjf

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.