mrkeyoor.com_
Thu 01 Oct 08:13 UTC
Dataevaluationupdated 01 Oct 2026

INSLIB review

INSLIB is a portable C11 library for estimating 3D position, velocity, and attitude from IMU data plus GNSS, barometer, magnetometer, and other motion inputs. It targets embedded navigation systems and also includes Python bindings, replay tools, calibration utilities, GUIs, and recorded datasets for desktop analysis.

Verdict

Our INSLIB run installed 63 packages and built in 4 seconds, but pytest ended with 81 passes, 11 failures, 7 skips, and 5 errors; the tail named missing firmware headers and an absent libINSLIB shared library. The C core is worth evaluating for teams that can validate sensor timing, calibration, numerical behavior, and target hardware themselves. Do not mistake strong engineering artifacts for a certified drop-in navigation unit.

We ran it

Lab card: what happened when we ran INSLIBScreenshot of INSLIB (github.com/jnz/INSLIB)
Install✓ · 34s63 packages · 551 MB
Build✓ · 4s
Tests✗ · 15s81 passed · 11 failed · 7 skipped · 5 errors of 97 (pytest)
Known vulns0(pip-audit)
Repo366 files~98,003 lines of source · 226.6 MB · 1 CI workflows · tests dir

Answers from our run

Does INSLIB build from source?

Dependencies installed in 34 seconds (63 packages), and the build succeeded in 4 seconds. We cloned commit 4d13deb into a clean Debian container with 3 CPUs and no project-specific setup.

Do INSLIB's tests pass?

Not all of them: 81 of 97 passed and 11 failed when we ran the project's own test command (pytest), with 5 collection errors. Some failures need services or credentials a bare container does not have.

Does INSLIB have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use INSLIB?

Teams requiring a clean fresh-checkout Python suite: our run ended with 11 failures and 5 errors, including missing firmware headers and an unbuilt shared library.

What are the alternatives to INSLIB?

KF-GINS, pyins, PX4 ECL. Our INSLIB run installed 63 packages and built in 4 seconds, but pytest ended with 81 passes, 11 failures, 7 skips, and 5 errors; the tail named missing firmware headers and an absent libINSLIB shared library.

Setup2/5Build passed, but native bindings and firmware-coupled tests failed
Docs5/5Manual, tutorials, datasets, architecture, and pitfalls are unusually specific
Community3/5584 stars and a recent release, with no open issue or PR queue
Maturity4/5v1.1.1 and deep verification assets, offset by our failed Python suite

Who it’s for

Embedded navigation engineers who need a C11 sensor-fusion core without heap or operating-system dependencies.
Robotics, drone, vehicle, and aerospace research teams with calibrated IMU and GNSS data.
Developers who value requirements traceability, MC/DC tracking, static stack analysis, and recorded datasets.
Analysts who want Python replay and plotting around the same core used on a microcontroller.

Who it’s NOT for

Teams requiring a clean fresh-checkout Python suite: our run ended with 11 failures and 5 errors, including missing firmware headers and an unbuilt shared library.
Closed-source products unable to meet AGPL-3.0 obligations.
Buyers looking for a certified flight component: the README discusses aerospace-style methods and standards, but it does not claim product certification.
Projects without disciplined timestamping, calibration, axis mapping, and latency measurement: the README says mistakes in any of these can break the estimate.
Users expecting the reference board firmware to be public: the README says it is not public and asks interested groups to contact the university institute.

Setup reality

Our sandbox installed the Python project at commit 4d13deb in 34 seconds, pulling 63 packages and occupying 551 MB. The build succeeded in 4 seconds. Pytest failed after 15 seconds: 81 passed, 11 failed, 7 skipped, and 5 collection/setup errors were reported out of 97.

The core library needs a C11 compiler, make, and the recursively cloned KFCore submodule. Python setup lives in ./python/ and runs make pylib for the native binding. Post-processing also needs dataset CSV files plus YAML configuration; the full check target asks for several C analysis and documentation tools.

The failure tail named missing headers under embedded/stm32f429 for protocol checks and said libINSLIB was absent for two runner tests. It instructed the user to run make pylib. The log does not establish why the firmware paths were absent, so we do not assign a cause beyond the files the suite could not find.

The C11 core is built for constrained navigation hardware

INSLIB combines inertial measurements with GNSS, barometer, magnetometer, local position, ground speed, and zero-motion observations. Its C11 core avoids heap allocation and operating-system dependencies, which makes it suitable for a microcontroller as well as a desktop replay. Separate entry points cover attitude, inertial navigation, barometric altitude, and a combined navigation suite.

The repository is much larger than a filter library. Our checkout held 366 files, about 98,003 lines of source, and 226.6 MB before the Python environment was installed. It includes real and simulated datasets, plotting tools, calibration software, a UDP receiver, a requirements database, and a PDF manual. That breadth is useful for evaluation, though it creates more integration edges than the compact C API suggests.

Traceability and bounded execution are first-class concerns

The README links logic to machine-checked requirements and publishes core coverage plus MC/DC tracking. It also describes static stack analysis, checks for recursion and variable-length arrays, sanitizer runs, and bounded loops. These are relevant controls for embedded work because memory use and execution paths must be inspectable before code reaches a controller.

They are evidence of engineering discipline, not a certification certificate. The README references methods used in DO-178 DAL-A and ISO 26262 ASIL-D work without saying INSLIB itself has been certified. A flight or automotive program still needs its own requirements baseline, compiler qualification decisions, hardware tests, safety analysis, and change control. AGPL-3.0 obligations also need review before the core enters a closed product.

What happened when we ran it

Our sandbox installed commit 4d13deb in 34 seconds with Python 3.12 on Debian, 3 CPUs, and 8 GB of RAM. The Python environment pulled 63 packages and used 551 MB. The build completed successfully in 4 seconds, and pip-audit reported 0 known vulnerabilities. The repository had one CI workflow, no Dockerfile, and a tests directory.

Pytest failed after 15 seconds. Its summary reported 81 passed, 11 failed, 7 skipped, and 5 collection or setup errors out of 97. Nine named protocol failures attempted to read firmware headers such as cfg_keys.h, ubx.h, cfg_ubx.h, and an IMU saturation header from paths under /work/repo/embedded/stm32f429, but those files were not found.

Two runner tests failed because the INSLIB Python package could not find the libINSLIB shared library. Their error explicitly said to build it with make pylib. The final log does not explain the 5 collection/setup errors or why the embedded header tree was missing. We can report the absent paths and native library, but assigning them to a bad clone, packaging defect, or undocumented prerequisite would go beyond the evidence.

Python setup still depends on the native build

The README's quick start runs python/setup_venv.sh, which also invokes make pylib, then activates env.sh. Replay takes a dataset directory containing sensor CSV files and a YAML configuration. The GUI uses the same inputs. The core itself only needs a C11 compiler and make, but the full repository checks add formatters, static analyzers, coverage tools, and documentation generation.

The KFCore dependency is a git submodule, so the documented clone uses --recursive. That detail matters on build systems that fetch source archives or disable submodules. Exact formatting-tool versions matter too, according to the README. INSLIB provides a script to obtain the CI clang-format version when the host does not match Ubuntu 22.04. Reproducibility requires more than installing the 63 Python packages we measured.

Sensor preparation will decide whether the filter helps

The common-pitfalls section is one of the best parts of the project. Every sensor needs a shared monotonic clock and a consistent forward-right-down body frame. Magnetometers need hard-iron and soft-iron calibration. The configuration must account for the antenna lever arm, GNSS processing delay, vibration filtering, sensor noise, and temperature drift. A mathematically sound filter cannot recover information damaged before it arrives.

INSLIB includes tools for IMU and magnetometer calibration, GNSS delay estimation, replay, and board configuration. It also provides datasets with tunnel outages, pedestrian runs, UAV ground truth, and simulated references. These assets help a team ask whether its own sensor chain resembles the examples. They do not replace tests on the final antenna placement, enclosure, vibration spectrum, clock source, or motion profile.

The public code stops before the reference-board firmware

The repository documents an open UBX-based protocol and provides desktop tools for its reference board. The README says the board firmware itself is not public, with collaboration available through the author's university institute. You can build another sensor suite, but you then own its firmware, timestamp discipline, calibration storage, packet production, and electrical integration.

Release v1.1.1 arrived on September 28, 2026, the same date as the last recorded push. It added dual-antenna heading post-processing and range aiding, then fixed several lever-arm behaviors. GitHub showed 584 stars and no open issues or pull requests. The release and push show current maintenance; an empty issue queue alone cannot tell us how many outside deployments exist.

INSLIB is compelling when you need inspectable embedded navigation code and have the expertise to test the whole sensor chain. Its documentation is frank about the parts most likely to ruin an estimate. Our failed Python suite means the repository's desktop integration needs investigation at commit 4d13deb before adoption. Start by reproducing make pylib, locating the expected firmware headers, and running the complete suite on the exact source tree you plan to ship.

Alternatives

ProjectWhat it isPick it when
KF-GINSA C++ extended Kalman filter system for GNSS and inertial navigation.pick this instead when a desktop-oriented C++ GNSS/INS workflow matches your data and licensing needs better.
pyinsA Python package for inertial-navigation modeling and analysis.pick this instead when research and offline analysis in Python matter more than a bare-metal C core.
PX4 ECLPX4's archived C++ estimation and control library for navigation applications.pick this instead when maintaining an existing PX4 ECL integration and an archived dependency is acceptable.

What people are saying

  1. [velocity-scout] jnz/INSLIB

Sources

  1. INSLIB README
  2. INSLIB repository
  3. INSLIB v1.1.1 release
  4. INSLIB AGPL-3.0 license

More data reviews

HowToLiveBetter · TradeGenuis-box · awesome-submitlist · ccf-deadlines · instagram-private-graph · OpenBB · the whole board →