#FormaK also accepts bug reports or suggestions for improving the library as well outside of the roadmap/enhancement process. I’d love to get feedback from you on use cases you’re considering, features that’d be useful to you, missing tests, bugs you’ve found, you name it

If you’re interested in contributing, more information can be found at https://github.com/buckbaskin/formak/blob/main/CONTRIBUTING.md

formak/CONTRIBUTING.md at main · buckbaskin/formak

Contribute to buckbaskin/formak development by creating an account on GitHub.

GitHub

The #FormaK project now has a publicly available roadmap via GitHub Issues.

Issues tagged enhancement are under consideration and welcome feedback on if they’d provide value for your use case or tests that’d be required to support your use case
https://github.com/buckbaskin/formak/labels/enhancement

@formak I wrote up a post about developing the latest feature for #FormaK and the ups and downs along the way

In the middle there was a nice visual of the sensor bias, but only by way of a long detour into unnecessary work that was removed before the PR merged

https://buckbaskin.com/blog/strapdown-imu-reference-model-new-formak-feature.html

Strapdown IMU Reference Model - New FormaK Feature - Building and Breaking

<p>A new feature for FormaK has landed: the Strapdown IMU Reference model. The model is now available for inclusion into new models and use as a reference for implementing future models.</p>

The latest feature for #FormaK: a reference implementation of a #strapdown #IMU!

Goals for the reference model:

1. Provide an example for what a more complicated model looks like in FormaK
2. Provide a composable implementation of a strapdown IMU that can be built into other models

The learnings from this model will also inspire some new work coming soon!

As always, the reference model can be compiled into #Python and #Cpp

Github: https://github.com/buckbaskin/formak/pull/19

Reference Model: Strapdown IMU by buckbaskin · Pull Request #19 · buckbaskin/formak

FormaK aims to combine symbolic modeling for fast, efficient system modelling with code generation to create performant code that is easy to use. The Five Key Elements the library provides to achie...

GitHub

The latest feature for #FormaK: innovation filtering!

The previous implementation provided the math for the EKF process update and sensor update; however, that leaves the models open to spurious readings. This can make the filter hard to use (correctly).

Innovation filtering removes updates that are out of distribution to reject the spurious reading and maintain a robust state estimate

As always, the #KalmanFilter comes in #Python and #Cpp

Github: https://github.com/buckbaskin/formak/pull/18

Innovation Filtering by buckbaskin · Pull Request #18 · buckbaskin/formak

Overview FormaK aims to combine symbolic modeling for fast, efficient system modelling with code generation to create performant code that is easy to use. The Five Key Elements the library provides...

GitHub

The latest feature for #FormaK: a managed #KalmanFilter runtime!

I'd been stuck trying to simplify the complexity of managing a process and multiple sensor models since I introduced calibration (which added more complexity... not helping...). In the end I landed on a single tick function call with a dose of #SFINAE that handles sensors of any type and takes care of the rest under the hood.

As always, it comes in #Python and #Cpp

Github: https://github.com/buckbaskin/formak/pull/17

FormaK Runtime: "ManagedFilter" by buckbaskin · Pull Request #17 · buckbaskin/formak

FormaK aims to combine symbolic modeling for fast, efficient system modelling with code generation to create performant code that is easy to use. The Five Key Elements the library provides to achie...

GitHub

New feature launch for #FormaK: a managed #KalmanFilter runtime!

I'd been stuck trying to simplify the complexity of managing a process and multiple sensor models since I introduced calibration (which added more complexity... not helping...). In the end I landed on a single tick function call with a dose of #SFINAE that handles sensors of any type and takes care of the rest under the hood.

As always, it comes in #Python and #Cpp

Blog: https://buckbaskin.com/blog/formak-runtime-new-formak-feature.html
Github: https://github.com/buckbaskin/formak/pull/17

FormaK Runtime - New FormaK Feature - Building and Breaking

<p>A new feature for FormaK has landed: The FormaK runtime. The first tool in the runtime is a Managed Filter that handles coordinating process and sensor updates.</p>

New feature launch for #FormaK: Calibration!

This feature started with a straightforward idea: use FormaK to model a #rocket launch based on #NASA data. Unfortunately, FormaK was missing support for orienting the IMU in the rocket's frame. To fix this, I added calibration support for sensor and process models with the same syntax that supports states and control inputs.

New features coming soon!

NASA data: https://data.nasa.gov/Aerospace/Deorbit-Descent-and-Landing-Flight-1-DDL-F1-/vicw-ivgd
Blog: https://buckbaskin.com/blog/calibration-new-formak-feature.html
Github: https://github.com/buckbaskin/formak/pull/12

Deorbit Descent and Landing Flight 1 (DDL-F1) | NASA Open Data Portal

There’s also the persnickety thing about the build time that I’d missed in the first version. The existing Sympy tooling slowed way down for a larger model, but it wasn’t clear where the slow down was coming from and I assumed it was in the compile stage. In the end after much debugging it turned out that calling simplify on a large expression didn’t scale well and took 100s of seconds.

Is there a #Python tool to profile function calls as the program is running?
#FormaK #OpenSource

One important thing I learned while implementing the calibration feature: the templating approach that I picked for code generation doesn’t necessarily scale well. The template that used to look like a nice C++ function written with comments is now a mess of formatting pragmas and conditional blocks. More to come on this soon
#FormaK #OpenSource #cpp #CodeGeneration