MCPcopy Create free account
hub / github.com/ANYbotics/grid_map / createGaussianWorld

Function createGaussianWorld

grid_map_demos/src/InterpolationDemo.cpp:111–156  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

109}
110
111AnalyticalFunctions createGaussianWorld(grid_map::GridMap *map)
112{
113
114 struct Gaussian
115 {
116 double x0, y0;
117 double varX, varY;
118 double s;
119 };
120
121 AnalyticalFunctions func;
122 constexpr int numGaussians = 7;
123 std::array<std::pair<double, double>, numGaussians> vars = { { { 1.0, 0.3 }, { 0.25, 0.25 }, {
124 0.1, 0.1 }, { 0.1, 0.1 }, { 0.1, 0.1 }, { 0.1, 0.05 }, { 0.05, 0.05 } } };
125 std::array<std::pair<double, double>, numGaussians> means = { { { 1, -1 }, { 1, 1.7 },
126 { -1, 1.6 }, { -1.8, -1.8 }, { -1, 1.8 }, { 0, 0 }, { -1.2, 0 } } };
127 std::array<double, numGaussians> scales = { -2.0, -1.0, 2.0, 1.0, 3.0, 4.0, 1.0 };
128
129 std::array<Gaussian, numGaussians> g;
130
131 for (int i = 0; i < numGaussians; ++i) {
132 g.at(i).x0 = means.at(i).first;
133 g.at(i).y0 = means.at(i).second;
134 g.at(i).varX = vars.at(i).first;
135 g.at(i).varY = vars.at(i).second;
136 g.at(i).s = scales.at(i);
137 }
138
139 func.f_ = [g](double x,double y) {
140 double value = 0.0;
141 for (int i = 0; i < g.size(); ++i) {
142 const double x0 = g.at(i).x0;
143 const double y0 = g.at(i).y0;
144 const double varX = g.at(i).varX;
145 const double varY = g.at(i).varY;
146 const double s = g.at(i).s;
147 value += s * std::exp(-(x-x0)*(x-x0) / (2.0*varX) - (y-y0)*(y-y0) / (2.0 * varY));
148 }
149
150 return value;
151 };
152
153 fillGridMap(map, func);
154
155 return func;
156}
157
158void fillGridMap(grid_map::GridMap *map, const AnalyticalFunctions &functions)
159{

Callers 1

createWorldFunction · 0.70

Calls 2

atMethod · 0.80
fillGridMapFunction · 0.70

Tested by

no test coverage detected