67 lines
No EOL
2.3 KiB
Markdown
67 lines
No EOL
2.3 KiB
Markdown
# Magnetometer_Calibration
|
|
This repository contains a platformio library and an explanatory jupyter notebook for calculating the hard and soft iron offsets of an magnetometer as descriped in [Calibrating an eCompass in the Presence of Hard- and Soft-Iron Interference](https://www.nxp.com/docs/en/application-note/AN4246.pdf) by NXP.
|
|
|
|
## Jupyter notebook
|
|
|
|
Simply run `jupyter notebook` int his folder to start jupyter. Then open the mag_calibration notebook. There you find all informations needed.
|
|
|
|
## C++ implementation
|
|
|
|
This implementation depends on Eigen. For platform.io projects you can use [Eigen_Platformio_Header](https://github.com/hobbeshunter/Eigen_Platformio_Header).
|
|
|
|
Usage:
|
|
```C++
|
|
#define NO_CALIBRATION_MEASUREMENTS 5000
|
|
Eigen::Array<float, NO_CALIBRATION_MEASUREMENTS, 1> mxs;
|
|
Eigen::Array<float, NO_CALIBRATION_MEASUREMENTS, 1> mys;
|
|
Eigen::Array<float, NO_CALIBRATION_MEASUREMENTS, 1> mzs;
|
|
Eigen::Array<float, NO_CALIBRATION_MEASUREMENTS, 1> rolls;
|
|
Eigen::Array<float, NO_CALIBRATION_MEASUREMENTS, 1> pitchs;
|
|
|
|
// Fill measurement arrays
|
|
|
|
Magnetometer_Calibration mag_cal;
|
|
mag_cal.calibrate(mxs, mys, mzs, rolls, pitchs);
|
|
Winv = mag_cal.getWinv();
|
|
W = mag_cal.getW();
|
|
V = mag_cal.getV();
|
|
B = mag_cal.getB();
|
|
incl = mag_cal.getInclination();
|
|
```
|
|
## Installing Jupyter
|
|
### Setting up Jupyer
|
|
|
|
# upgrade packaging tools
|
|
python -m pip install --upgrade pip setuptools wheel
|
|
|
|
# install JupyterLab and classic notebook support
|
|
python -m pip install jupyterlab notebook ipykernel
|
|
|
|
# Register this environment as a Jupyter kernel
|
|
# you need to use your Python environment, e.g. "pioenv" or "rnsenv"
|
|
python -m ipykernel install \
|
|
--user \
|
|
--name pioenv \
|
|
--display-name "Python ~/rnsenv"
|
|
|
|
#### Example:
|
|
|
|
(rnsenv) jlpoole@jp /usr/local/src/Magnetometer_Calibration $ python -m ipykernel install \
|
|
--user \
|
|
--name pioenv \
|
|
--display-name "Python ~/rnsenv"
|
|
Installed kernelspec pioenv in /home/jlpoole/.local/share/jupyter/kernels/pioenv
|
|
(rnsenv) jlpoole@jp /usr/local/src/Magnetometer_Calibration $
|
|
|
|
|
|
### Modules:
|
|
|
|
pip install numpy pandas matplotlib pyserial cobs msgpack
|
|
pip install --upgrade ipywidgets jupyterlab_widgets widgetsnbextension ipympl
|
|
|
|
### Restart Jupyter if already running
|
|
|
|
### Start the Jupyter lab:
|
|
|
|
jupyter lab
|
|
# The above will open a tab in your current browser |