CalibrationHelper.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2011-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5  *
6  * ArmarX is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * ArmarX is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * @package
19  * @author
20  * @date
21  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22  * GNU General Public License
23  */
24 #include "CalibrationHelper.h"
25 
26 #include <stdexcept>
27 
28 using namespace armarx;
29 
30 CalibrationHelper::CalibrationHelper(int rows, int cols, float noiseThreshold)
31 {
32  this->maximumValues = Eigen::MatrixXf::Zero(rows, cols);
33  this->noiseThreshold = noiseThreshold;
34 }
35 
36 void
38 {
39  this->noiseSamples.push_back(data);
40 }
41 
42 bool
44 {
45  if (data.maxCoeff() <= noiseThreshold)
46  {
47  this->maximumValues = this->maximumValues.cwiseMax(data);
48  return true;
49  }
50  else
51  {
52  return false;
53  }
54 }
55 
57 CalibrationHelper::getCalibrationInfo(float calibratedMinimum, float calibratedMaximum)
58 {
59  return CalibrationInfo(
60  getMatrixAverage(noiseSamples), maximumValues, calibratedMinimum, calibratedMaximum);
61 }
62 
63 bool
65 {
66  return this->maximumValues.minCoeff() >= threshold;
67 }
68 
69 Eigen::MatrixXf
71 {
72  return this->maximumValues;
73 }
74 
75 int
77 {
78  return this->noiseSamples.size();
79 }
80 
81 Eigen::MatrixXf
82 CalibrationHelper::getMatrixAverage(std::vector<Eigen::MatrixXf> samples)
83 {
84  if (samples.size() == 0)
85  {
86  throw std::runtime_error("Average of zero samples not possible");
87  }
88 
89  Eigen::MatrixXf sum = samples.at(0);
90 
91  for (std::vector<Eigen::MatrixXf>::iterator it = samples.begin() + 1; it != samples.end(); ++it)
92  {
93  sum += *it;
94  }
95 
96  return sum / (float)samples.size();
97 }
armarx::CalibrationHelper::addMaxValueSample
bool addMaxValueSample(Eigen::MatrixXf data)
Definition: CalibrationHelper.cpp:43
armarx::CalibrationHelper::addNoiseSample
void addNoiseSample(Eigen::MatrixXf data)
Definition: CalibrationHelper.cpp:37
CalibrationHelper.h
armarx::CalibrationInfo
Definition: CalibrationInfo.h:30
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::CalibrationHelper::CalibrationHelper
CalibrationHelper(int rows, int cols, float noiseThreshold)
Definition: CalibrationHelper.cpp:30
armarx::CalibrationHelper::checkMaximumValueThreshold
bool checkMaximumValueThreshold(float threshold)
Definition: CalibrationHelper.cpp:64
armarx::CalibrationHelper::getMaximumValues
Eigen::MatrixXf getMaximumValues()
Definition: CalibrationHelper.cpp:70
armarx::CalibrationHelper::getNoiseSampleCount
int getNoiseSampleCount()
Definition: CalibrationHelper.cpp:76
float
#define float
Definition: 16_Level.h:22
armarx::CalibrationHelper::getCalibrationInfo
CalibrationInfo getCalibrationInfo(float calibratedMinimum, float calibratedMaximum)
Definition: CalibrationHelper.cpp:57
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27