-
Notifications
You must be signed in to change notification settings - Fork 9
/
MinMaxSphereCalibrator.h
74 lines (48 loc) · 2.17 KB
/
MinMaxSphereCalibrator.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
/*
# copyright 2012 by Rolfe Schmidt
This file is part of muCSense.
muCSense is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
muCSense is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with muCSense. If not, see <http://www.gnu.org/licenses/>.
*/
/*
MinMaxSphereCalibrator.h
This class implements a simple algorithm to quickly calibrate a sensor that measures a 3-D
constant magnitude vector by tracking the minimum and maximum observations in each component.
It is designed to calibrate magnetometers and accelerometers, or other sensors
that should take measurements of some constant vector at different orientations.
*/
#ifndef __MINMAX_SPHERE_CALIBRATOR_H
#define __MINMAX_SPHERE_CALIBRATOR_H
#include <stddef.h> //for size_t
#include <stdint.h>
#include "Calibrator.h"
class Sensor;
class MinMaxSphereCalibrator : public Calibrator {
public:
MinMaxSphereCalibrator(const Sensor* pS) : _pSensor(pS) {
clearObservationMatrices();
}
virtual ~MinMaxSphereCalibrator() {}
//implements the DataListener interface
virtual void update(const DataCollector* pSubject);
virtual void transform(const int16_t* rawInput, float* output) const;
virtual void calibrate();
//print the calibration parameters so we can see what is going on inside
void printBeta() const;
private:
const Sensor* _pSensor;
int16_t _obsMin[3]; // Keep track of min and max observation in each dimension to guess parameters
int16_t _obsMax[3]; // Keep track of min and max observation in each dimension to guess parameters
//Final calibration parameters
float _beta[6];
void clearObservationMatrices();
};
#endif // __MINMAX_SPHERE_CALIBRATOR_H