When asked to execute on an issue or new high-level feature request, ask the user if this should be completed on the current branch or to create a new branch. This project is still in pre-1.0 development, so breaking changes may be introduced at any time and backwards compatibility need not be maintained.
This is a Cargo workspace with three primary crates plus supporting data/scripts.
core/:strapdown-corelibrary (INS algorithms, filters, simulation utilities).sim/:strapdown-simCLI for open/closed-loop runs and GNSS degradation.geonav/: experimental geophysical navigation module.data/: sample datasets and scenarios (e.g.,data/input/*.csv).docs/,papers/,spec.md: design notes and research docs.scripts/,examples/: helper workflows and usage examples.
Use Pixi when available; Cargo works directly too.
pixi run build/cargo build --workspace --release: build all crates.cargo test --workspace: run all tests.cargo test --package strapdown-core: test a single crate.pixi run lint: run Rust clippy and Python ruff.pixi run fmt: run rustfmt and Python formatting.pixi run coverage/cargo tarpaulin --workspace --timeout 600: coverage.- Example run:
./target/release/strapdown-sim -i data/input/input.csv -o output.csv open-loop.
- Rust formatting via rustfmt (4-space indentation); keep functions focused and small.
- Naming:
snake_casefor functions/vars,CamelCasefor types,SCREAMING_SNAKE_CASEfor constants. - Prefer descriptive names over symbols; add Rust doc comments (
///) and cite Groves equations when relevant. - Use
assert_approx_eqfor floating-point comparisons in tests.
- Unit tests live alongside modules; integration tests live in
core/tests/integration_tests.rs. - Tests should be deterministic; seed RNGs when applicable.
- Name test functions in
snake_caseand keep fixtures minimal.
- Commit subjects are short, imperative, and plain (e.g., "Update RBPF documentation..."). Use
Fixes #123when closing issues. - PRs should include a concise description, linked issue(s), and any new flags/configs or dataset notes. Add tests when behavior changes.
- Pixi manages Python/Rust deps (
pixi.toml); Rust >=1.91 and Python >=3.12 are expected. HDF5 is required forgeonav. - Scenarios use YAML/JSON configs; CSV inputs follow Sensor Logger-style IMU/GNSS columns.