# 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 mxs; Eigen::Array mys; Eigen::Array mzs; Eigen::Array rolls; Eigen::Array 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