EarlyVisionConverters.cpp
Go to the documentation of this file.
1/*
2* This file is part of ArmarX.
3*
4* ArmarX is free software; you can redistribute it and/or modify
5* it under the terms of the GNU General Public License version 2 as
6* published by the Free Software Foundation.
7*
8* ArmarX is distributed in the hope that it will be useful, but
9* WITHOUT ANY WARRANTY; without even the implied warranty of
10* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11* GNU General Public License for more details.
12*
13* You should have received a copy of the GNU General Public License
14* along with this program. If not, see <http://www.gnu.org/licenses/>.
15*
16* @package MemoryX::Helpers
17* @author Kai Welke ( welke at kit dot edu)
18* @date 2012
19* @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20* GNU General Public License
21*/
22
24
26
27namespace memoryx
28{
29 Gaussian
30 EarlyVisionConverters::convertToGaussian(const NormalDistributionBasePtr& normalDistribution)
31 {
32 if (!normalDistribution)
33 {
34 ARMARX_WARNING_S << "normalDistribution is NULL";
35 return Gaussian();
36 }
37
38 int dimensions = normalDistribution->getDimensions();
39 Gaussian result(dimensions);
40
41 Eigen::MatrixXd cov(dimensions, dimensions);
42 Eigen::VectorXd mean(dimensions);
43
44 for (int r = 0; r < dimensions; r++)
45 {
46 mean(r) = normalDistribution->getMean()[r];
47
48 for (int c = 0; c < dimensions; c++)
49 {
50 cov(r, c) = normalDistribution->getCovariance(r, c);
51 }
52 }
53
54 result.setCovariance(cov);
55 result.setMean(mean);
56
57 return result;
58 }
59
62 {
63 int dimensions = gaussian.getDimensions();
65
66 FloatVector mean;
67
68 for (int r = 0; r < dimensions; r++)
69 {
70 Eigen::VectorXd meanV = gaussian.getMean();
71 mean.push_back(meanV(r));
72
73 for (int c = 0; c < dimensions; c++)
74 {
75 Eigen::MatrixXd covV = gaussian.getCovariance();
76 result->setCovariance(r, c, covV(r, c));
77 }
78 }
79
80 result->setMean(mean);
81
82 return result;
83 }
84
87 {
88 int dimensions = gaussian.getDimensions();
90
91 FloatVector mean;
92
93 for (int d = 0; d < dimensions; d++)
94 {
95 mean.push_back(gaussian.getMean()(d));
96 result->setVariance(d, gaussian.getCovariance()(d, d));
97 }
98
99 result->setMean(mean);
100
101 return result;
102 }
103
106 {
108 new UnivariateNormalDistribution(gaussian.getMean()(0), gaussian.getCovariance()(0, 0));
109
110 return result;
111 }
112} // namespace memoryx
constexpr T c
const covariance_type & getCovariance() const
Definition Gaussian.h:82
int getDimensions() const
Definition Gaussian.h:94
void setCovariance(const covariance_type &cov)
Definition Gaussian.cpp:272
void setMean(const value_type &mean)
Definition Gaussian.cpp:255
const value_type & getMean() const
Definition Gaussian.h:88
The IsotropicNormalDistribution class.
The MultivariateNormalDistribution class.
The UnivariateNormalDistribution class.
#define ARMARX_WARNING_S
The logging level for unexpected behaviour, but not a serious problem.
Definition Logging.h:213
IsotropicNormalDistributionPtr convertToMemoryX_ISO(const Gaussian &gaussian)
Gaussian convertToGaussian(const NormalDistributionBasePtr &normalDistribution)
UnivariateNormalDistributionPtr convertToMemoryX_UNI(const Gaussian &gaussian)
MultivariateNormalDistributionPtr convertToMemoryX_MULTI(const Gaussian &gaussian)
VirtualRobot headers.
IceInternal::Handle< UnivariateNormalDistribution > UnivariateNormalDistributionPtr
IceInternal::Handle< IsotropicNormalDistribution > IsotropicNormalDistributionPtr
IceInternal::Handle< MultivariateNormalDistribution > MultivariateNormalDistributionPtr