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 
37 {
38  this->noiseSamples.push_back(data);
39 }
40 
42 {
43  if (data.maxCoeff() <= noiseThreshold)
44  {
45  this->maximumValues = this->maximumValues.cwiseMax(data);
46  return true;
47  }
48  else
49  {
50  return false;
51  }
52 }
53 
54 CalibrationInfo CalibrationHelper::getCalibrationInfo(float calibratedMinimum, float calibratedMaximum)
55 {
56  return CalibrationInfo(getMatrixAverage(noiseSamples), maximumValues, calibratedMinimum, calibratedMaximum);
57 }
58 
60 {
61  return this->maximumValues.minCoeff() >= threshold;
62 }
63 
65 {
66  return this->maximumValues;
67 }
68 
70 {
71  return this->noiseSamples.size();
72 }
73 
74 Eigen::MatrixXf CalibrationHelper::getMatrixAverage(std::vector<Eigen::MatrixXf> samples)
75 {
76  if (samples.size() == 0)
77  {
78  throw std::runtime_error("Average of zero samples not possible");
79  }
80 
81  Eigen::MatrixXf sum = samples.at(0);
82 
83  for (std::vector<Eigen::MatrixXf>::iterator it = samples.begin() + 1; it != samples.end(); ++it)
84  {
85  sum += *it;
86  }
87 
88  return sum / (float)samples.size();
89 }
armarx::CalibrationHelper::addMaxValueSample
bool addMaxValueSample(Eigen::MatrixXf data)
Definition: CalibrationHelper.cpp:41
armarx::CalibrationHelper::addNoiseSample
void addNoiseSample(Eigen::MatrixXf data)
Definition: CalibrationHelper.cpp:36
CalibrationHelper.h
armarx::CalibrationInfo
Definition: CalibrationInfo.h:29
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:59
armarx::CalibrationHelper::getMaximumValues
Eigen::MatrixXf getMaximumValues()
Definition: CalibrationHelper.cpp:64
armarx::CalibrationHelper::getNoiseSampleCount
int getNoiseSampleCount()
Definition: CalibrationHelper.cpp:69
float
#define float
Definition: 16_Level.h:22
armarx::CalibrationHelper::getCalibrationInfo
CalibrationInfo getCalibrationInfo(float calibratedMinimum, float calibratedMaximum)
Definition: CalibrationHelper.cpp:54
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28