GTSAM magFactor3
MAGYC - Benchmark Methods - magfactor3
This module contains the magfactor3 method. This method is a factor graph implementation of the full-magnetometer calibration least-squares problems.
Functions:
Name | Description |
---|---|
magfactor3 |
Factor graph based approach to full-magnetometer calibration. |
magfactor3(magnetic_field, rph, magnetic_declination, reference_magnetic_field, optimizer='dogleg', relative_error_tol=1e-12, absolute_error_tol=1e-12, max_iter=1000)
The full-magnetometer calibration least-squares problems can also be modeled as a factor graph. This can be implemented using the GTSAM python wrapper with the magFactor3 factor. This approach allows the user to get the soft-iron (SI) as the identity scaled by a constant and the hard-iron (HI) from the magnetometer bias.
This method assumes that the rotation from the body frame with respect to the world frame and the local magnetic field are known.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
magnetic_field |
Union[ndarray, list]
|
Magnetic field raw data |
required |
rph |
Union[ndarray, list]
|
Roll, pitch and heading data |
required |
magnetic_declination |
float
|
Magnetic declination in degrees |
required |
reference_magnetic_field |
Union[ndarray, list]
|
Reference magnetic field |
required |
optimizer |
str
|
Optimization algorithm to use. Options are "dogleg" or "lm" for the Dogleg and Levenberg-Marquardt optimizers respectively. |
'dogleg'
|
relative_error_tol |
float
|
Relative error tolerance for the optimizer. Default is 1.00e-12 |
1e-12
|
absolute_error_tol |
float
|
Absolute error tolerance for the optimizer. Default is 1.00e-12 |
1e-12
|
max_iter |
int
|
Maximum number of iterations for the optimizer. Default is 1000 |
1000
|
Returns:
Name | Type | Description |
---|---|---|
hard_iron |
ndarray
|
Hard-iron offset in G |
soft_iron |
ndarray
|
Soft-iron scaling matrix |
corrected_magnetic_field |
ndarray
|
Corrected magnetic field data |
optimization_errors |
list
|
List of optimization errors in each iteration |
Raises:
Type | Description |
---|---|
TypeError
|
If the magnetic field input is not a numpy array or a list |
TypeError
|
If the reference magnetic field input is not a numpy array or a list |
TypeError
|
If the rph input is not a numpy array or a list |
ValueError
|
If the magnetic field input is not a 3xN or Nx3 numpy array |
ValueError
|
If the reference magnetic field input is not a 3, numpy array |
ValueError
|
If the rph input is not a 3xN or Nx3 numpy array |
TypeError
|
If the magnetic declination is not a float |
ValueError
|
If the optimizer is not a string or not "dogleg" or "lm" |
TypeError
|
If the relative error tolerance is not a float |
TypeError
|
If the absolute error tolerance is not a float |
ValueError
|
If the maximum number of iterations is not a positive integer |
Source code in magyc/benchmark_methods/magfactor.py
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
|