# Changelog

- Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
- NOTE:
  - I am still learning how to make sensible versioning.
    According to Semantic Versioning, any incompatible API changes should trigger a bump to the MAJOR version.
    However, since `navitools` is still in its early stages and frequent breaking changes are expected,
    I will continue using the `0.x.y` versioning scheme for now.
  - For adding/removing functions or modules, I will increase the MINOR version number.
  - For changing interfaces of functions, I will increase only the PATCH version number.

## [0.7.3] - 2026-05-16
### Changed
- Change the update mechanism in `ImuConfig`:
  - Use `update_params_user()` for human-friendly units (identical to the config toml files).
    This function will call `unit_conv()`.
  - Use `update_params_algo()` for SI units; this function won't do the `unit_conv()`.

## [0.7.2] - 2026-05-16
### Added
- Add `update_parameters()` in `ImuConfig` for the user to safely update the primary parameters.

## [0.7.1] - 2026-05-15
### Changed
- Change `r < RE_AVG_M` from error to warning.

## [0.7.0] - 2026-05-09
### Added
- Add `frame_transformers` to provide `ecef2eci/eci2ecef` and `ecef2ned/ned2ecef` functions.

## [0.6.1] - 2026-05-03
### Added
- Add `Serialize` trait to `ImuData`.

## [0.6.0] - 2026-05-01
### Changed
- Change `sp_rate` to `data_rate` to avoid the confusion with `sp_force`.
- Change the content of IMU config (toml).
### Added
- Add two kinds of IMU error models (additive and multicative).
- Add `imu_compensator()` to compensate the IMU measurement using the parameters given by the IMU config.

## [0.5.2] - 2026-04-22
### Fixed
- Change `gen_randn` to `gen_randn_vec3` in `imu_model` so that each axis will have different random values.
- Change the algorithm in `ia_cfg` to account different errors of roll and pitch.
  NOTE: The algorithm still has problems and should not be trusted in this version.

## [0.5.1] - 2026-03-11
### Added
- Add `Clone` to `ImuConfig`.

## [0.5.0] - 2026-02-01
### Added
- Add `IaConfig`.
- Add `utils::msg_func`.

## [0.4.0] - 2026-01-31
### Added
- Add `misc_convert::{geod2geoc, geoc2geod}` for the conversion between geodetic and geocentric latitudes.
- Add `constants::{FLAT, OMEGA_E}`.

### Fixed
- Correct the unit of micro-g to milli-g in `user_space/usr_cfg/imu_cfg_dummy.toml`.

## [0.3.6] - 2026-01-25
### Changed
- Add an error message in `ImuConfig::load_imu_cfg()` to report the problematic input filename.

## [0.3.5] - 2026-01-25
### (Yanked)

## [0.3.4] - 2025-11-12
### Fixed
- Transpose matrices in `ImuConfig` (nalgebra's Matrix is column-major,
  while what we set in the toml file is row-major.)

## [0.3.3] - 2025-11-12
### Changed
- Expose `ijk2keplerian` and `OrbitalElements` to crate root.

## [0.3.2] - 2025-11-12
### Changed
- Change the arguments in `src/coord_converters/attitude_convert.rs` and `src/sensors/imu_func.rs`
  to passing references for nalgebra types (e.g., Vector3, Matrix3, Quaternion, etc.)

## [0.3.1] - 2025-10-16
### Changed
- Swap the order of fields in struct ImuData. (angular rate first, then the specific force.)
- Rename `omgibb` and `fibb` to `ang_rate` and `sp_force`, respectively.

## [0.3.0] - 2025-10-12
### Added
- Implement `imu_model()` to simulate the IMU measurement controlled by user's IMU config.
- An exemplary IMU config in `user_space/usr_cfg/imu_cfg_dummy.toml`.

### Changed
- Rename `IMUConfig` to `ImuConfig`.

## [0.2.1] - 2025-10-11
Because the previous version number should be 0.2.0, this version is 0.2.1.
### Added
- Implement functions to generate RNG and random numbers (see `src/utils/rand_func.rs`).
  These functions will be helpful to generate noises for sensors.

### Fixed
- Move the examples in `main()` to the doc comments of corresponding functions.
- Update `README.md` with better information.

## [0.1.1] - 2025-10-08
The version number should be 0.2.0 but I failed to assign it correctly...
### Added
- Implement `skew_symmetric()` to convert a 3x1 vector to its skew symmetric matrix.

## [0.1.0] - 2025-09-29
Initial version.

