{"id":50136937,"url":"https://github.com/viccuad/avian_fdm","last_synced_at":"2026-05-23T22:30:49.910Z","repository":{"id":356895474,"uuid":"1234494818","full_name":"viccuad/avian_fdm","owner":"viccuad","description":"6-DoF Flight Dynamics Model plugin for Bevy and Avian","archived":false,"fork":false,"pushed_at":"2026-05-10T10:28:22.000Z","size":637,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-10T11:25:19.402Z","etag":null,"topics":["3d","bevy","flight-simulation","gamedev","physics","rust","simulation"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/viccuad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-10T08:58:21.000Z","updated_at":"2026-05-10T11:18:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/viccuad/avian_fdm","commit_stats":null,"previous_names":["viccuad/avian_fdm"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/viccuad/avian_fdm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viccuad%2Favian_fdm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viccuad%2Favian_fdm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viccuad%2Favian_fdm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viccuad%2Favian_fdm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/viccuad","download_url":"https://codeload.github.com/viccuad/avian_fdm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viccuad%2Favian_fdm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33415020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"ssl_error","status_checked_at":"2026-05-23T22:14:43.778Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","bevy","flight-simulation","gamedev","physics","rust","simulation"],"created_at":"2026-05-23T22:30:49.259Z","updated_at":"2026-05-23T22:30:49.903Z","avatar_url":"https://github.com/viccuad.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License: LGPL-3.0+](https://img.shields.io/badge/license-LGPL--3+-blue.svg)](LICENSE)\n[![ci](https://github.com/viccuad/avian_fdm/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/viccuad/avian_fdm/actions/workflows/ci.yml)\n\n# avian_fdm\n\n**Avian FDM** is 6-DoF Flight Dynamics Model plugin for\n[Bevy](https://bevyengine.org/) + [Avian](https://crates.io/crates/avian3d).\n\n---\n\n## Example\n\nSmall recording of the provided J-3 Cub visual example.\nFirst a controlled turn to starboard, then a harsh climb into a high AoA stall,\ndeparting, diving, and recovering.\n\nhttps://github.com/user-attachments/assets/529451a4-5d66-4297-af42-f22bafc50001\n\n## Design\n\n`avian_fdm` turns an Avian rigid-body hierarchy into a physically plausible\naircraft. You build your aircraft by assembling `AeroZone` entities around\nan `AircraftCoreBundle` root.\n\nEach physics step, the `avian_fdm` plugin evaluates aerodynamic and propulsive\nforces for every `AeroZone` and accumulates them into Avian's\n`ConstantForce`/`ConstantTorque` on the root body. Avian's integrator then\nadvances the state forward, `avian_fdm` never writes to position, velocity, or\norientation directly.\n\nMass, centre of gravity, and the full inertia tensor are computed automatically\nby Avian from `ColliderDensity` on each child collider. In addition, several\nemergent behaviors appear when computing the AeroZones together.\n\n## Features\n\n- ISA atmosphere (0-20 km) with density, pressure, temperature, viscosity\n- Per-zone lift, drag, and side-force from tabulated coefficients (1D or 2D)\n  - Reynolds-number-dependent coefficient lookup\n  - Post-stall aerodynamics via Viterna-Corrigan extrapolation\n- Pitch, roll, and yaw damping (per-zone or whole-aircraft LOD fallback)\n- Induced drag (Oswald span efficiency)\n- Zone-based damage/failure model with graceful degradation\n- Automatic mass, CG, and inertia tensor from collider geometry\n- Debug gizmo overlays for forces, moments, zones, and colliders\n- Supports both avian3d f32 and f64 backends\n\n### Emergent behavior\n\nThe zone-based architecture produces physically correct behaviors without\nexplicit global coefficients. Forces and moment arms are computed at each\nzone's position, and Avian recomputes mass/CG/inertia from colliders. \nThe following appear naturally: Stall, wing drop, snap roll, Spin autorotation,\nDutch roll, phugoid, short-period, spiral mode, Adverse yaw, Control authority,\nDamage effects, and others.\n\nSee the lib.rs documentation for the complete list of emergent behaviors.\n\n## Quick start\n\nAdd dependencies to `Cargo.toml`:\n\n```toml\n[dependencies]\navian_fdm              = \"0.1\"\navian_fdm_j3cub_jsbsim = \"0.1\"\navian3d                = \"0.6\"\nbevy                   = \"0.18\"\n```\n\nSpawn the reference J-3 Cub aircraft:\n\n```rust,ignore\nuse avian_fdm::prelude::*;\nuse avian_fdm_j3cub_jsbsim::presets::j3cub;\nuse avian3d::prelude::{LinearVelocity, PhysicsPlugins};\nuse bevy::prelude::*;\n\nfn main() {\n    App::new()\n        .add_plugins(DefaultPlugins)\n        .add_plugins(PhysicsPlugins::default())\n        .add_plugins(AircraftFdmPlugin::default())\n        .add_systems(Startup, spawn)\n        .run();\n}\n\nfn spawn(mut commands: Commands) {\n    let root = j3cub::spawn(\n        \u0026mut commands,\n        Transform::from_xyz(0.0, 300.0, 0.0),\n    );\n    commands.entity(root).insert(LinearVelocity(Vec3::new(27.0, 0.0, 0.0)));\n}\n```\n\n\n## Feature flags\n\n| Feature | Default | Description |\n|---|---|---|\n| `f32` | yes | Avian3d f32 physics backend (standard Bevy precision) |\n| `f64` | -- | Avian3d f64 physics backend (mutually exclusive with f32) |\n| `debug-plugin` | yes | Bevy Gizmo overlays for forces, moments, and zones |\n\nExactly one of `f32` or `f64` must be enabled. They are mutually exclusive.\nFor f64, use `default-features = false, features = [\"f64\"]`.\n\nThe JSBSim-derived J-3 Cub reference aircraft is in the separate\n`avian_fdm_j3cub_jsbsim` crate (GPL-3.0-only, due to JSBSim data provenance).\n\n## Version compatibility\n\n| avian_fdm | Bevy | avian3d |\n|---|---|---|\n| 0.1 | 0.18 | 0.6 |\n\n## License\n\n`avian_fdm` is licensed under [LGPL-3.0-or-later](LICENSE).\n\n`avian_fdm_j3cub_jsbsim` is licensed under GPL-3.0-only (JSBSim-derived data).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviccuad%2Favian_fdm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fviccuad%2Favian_fdm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviccuad%2Favian_fdm/lists"}