Package: c4dynamics
Tsipor DynamicsAlgorithms Engineering and DevelopmentC4Dynamics (read Tsipor (bird) Dynamics) is the open-source framework of algorithms development for objects in space and time.Complete Documentation:https://c4dynamics.github.io/C4dynamics/Table of contentsMotivationInstallationQuickstartArchitectureContributors ✨Quickstart for ContributorsGetting StartedExample 1: Objects Detection and TrackingExample 2: Missile Guidance ExampleMotivationC4dynamics provides two basic entities for developing and analyzing algorithms of objects in space and time:datapoint: a class defining a point in space: position, velocity, acceleration, and mass.rigidbody: a class defining a rigid body in space, i.e. an object with length and angular position.You can develop and analyze algorithms by operating on these objects with one of the internal systems or algorithms of C4dynamics:ODE Solver (4th order Runge-Kutta)Kalman FilterExtended Kalman FilterLuenberger ObserverRadar SystemAltitude RadarIMU ModelGPS ModelLine Of Sight SeekerOr one of the 3rd party libraries integrated with C4dynamics:NumPyMatplotlibOpenCVYOLOWhether you're a seasoned algorithm engineer or just getting started, this framework has something to offer. Its modular design allows you to easily pick and choose the components you need, and its active community of contributors is always working to improve and expand its capabilities.So why wait? Start using C4dynamics today and take your algorithms engineering to the next level!InstallationPIPpip install c4dynamicsGitHubTo run the latest GitHub version, download c4dynamics:https://github.com/C4dynamics/C4dynamicsNote:*If you face issues while cloning C4dynamics or using the YOLO detector,it is likely that the yolov3.weights file has not been downloaded correctly.To resolve this, download and installGit LFSand then reinstall C4dynamics.*Install the required packages:pip install -r requirements.txtCondaAlternatively, run the preinstalled conda environment (see conda_installation.md):conda env create -f c4dynamics_env.yamlQuickstartImport the framework:import c4dynamics as c4dDefine a point in space with some initial conditions:pt = c4d.datapoint(x = 1000, vx = 100)Define a body in space with some initial conditions:body = c4d.rigidbody(theta = 15 * 3.14 / 180)Load an object detection module (YOLO):yolodet = c4d.detectors.yolo(height = height, width = width)Define a linear Kalman Filter, perform a prediction and an update:pt.filter = c4d.filters.kalman(np.hstack((z, np.zeros(2))), P, A, H, Q, R)

pt.filter.predict()

pt.filter.correct(measure)Store the current state of the datapoint (at time t):pt.store(t)Store other variables added to the datapoint object:pt.storevar('kalman_state', t)Define errors to a general-purpose seeker with C4dynamics:rdr = c4d.seekers.radar(sf = 0.9, bias = 0, noisestd = 1)ArchitectureFor Architecture & Roadmap, see the Wiki page.Contributors ✨This project follows theall-contributorsspecification. Contributions of any kind welcome!Quickstart for ContributorsSee the page contributing.mdIn any case, it's a good advise to start with the example dof6sim.ipynb and change the missile-target conditions to gain some experience with the framework. This example appears also down here in the READMEGetting StartedSee all the examples at:https://github.com/C4dynamics/C4dynamics/tree/main/examplesComplete explanation at the README in the examples folder.Example 1 - Objects Detection and Trackinghttps://github.com/C4dynamics/C4dynamics/blob/main/examples/detect_track.ipynbDetecting objects using the YOLOv3 model, updating and predicting their trajectories with the Kalman filter employing linear dynamics. Association between tracks is performed using scikit-learn's k-neighbors.Each track is represented as a C4dynamics-datapoint, and the update and prediction are executed with the internal C4dynamics-Kalman-filter.Example 2 - Six Degrees of Freedom Simulationhttps://github.com/C4dynamics/C4dynamics/blob/main/examples/dof6sim.ipynb6 DOF simulation of a missile employing proportional navigation guidance to pursue a target Conducting a 6-degree-of-freedom (6 DOF) simulation of a missile utilizing proportional navigation guidance to pursue a target.The target is represented by a C4Dynamics-datapoint, i.e. an object with translational motion. The missile is modeled as a C4Dynamics-rigidbody object, with variables representing both translational and rotational motion.For this example, additional systems and sensors (not part of C4dynamics but available for download from the examples folder) were developed:Control systemEngineAerodynamics