Quad-SDK
Loading...
Searching...
No Matches
fast_terrain_map.h
1#ifndef FAST_TERRAIN_MAP_H
2#define FAST_TERRAIN_MAP_H
3
4#include <quad_utils/function_timer.h>
5#include <ros/ros.h>
6
7#include <chrono>
8#include <eigen3/Eigen/Eigen>
9#include <grid_map_core/grid_map_core.hpp>
10
12
17 public:
23
40 void loadData(int x_size, int y_size, std::vector<double> x_data,
41 std::vector<double> y_data,
42 std::vector<std::vector<double>> z_data,
43 std::vector<std::vector<double>> nx_data,
44 std::vector<std::vector<double>> ny_data,
45 std::vector<std::vector<double>> nz_data,
46 std::vector<std::vector<double>> z_data_filt,
47 std::vector<std::vector<double>> nx_data_filt,
48 std::vector<std::vector<double>> ny_data_filt,
49 std::vector<std::vector<double>> nz_data_filt);
50
54 void loadFlat();
55
61 void loadFlatElevated(double height);
62
68 void loadSlope(double grade);
69
74 void loadStep(double height);
75
81 void loadDataFromGridMap(const grid_map::GridMap map);
82
89 bool isInRange(const double x, const double y) const;
90
97 double getGroundHeight(const double x, const double y) const;
98
105 std::array<double, 3> getSurfaceNormal(const double x, const double y) const;
106
113 double getGroundHeightFiltered(const double x, const double y) const;
114
121 std::array<double, 3> getSurfaceNormalFiltered(const double x,
122 const double y) const;
123
130 Eigen::Vector3d getSurfaceNormalFilteredEigen(const double x,
131 const double y) const;
132
140 Eigen::Vector3d projectToMap(const Eigen::Vector3d point,
141 const Eigen::Vector3d direction);
142
147 std::vector<double> getXData() const;
148
153 std::vector<double> getYData() const;
154
159 bool isEmpty() const;
160
161 private:
167 inline int getXIndex(const double x) const {
168 return std::max(
169 std::min((int)floor((x - x_data_[0]) / x_diff_), x_size_ - 2), 0);
170 }
171
177 inline int getYIndex(const double y) const {
178 return std::max(
179 std::min((int)floor((y - y_data_[0]) / y_diff_), y_size_ - 2), 0);
180 }
181
183 int x_size_ = 0;
184
186 int y_size_ = 0;
187
189 double x_diff_;
190
192 double y_diff_;
193
195 std::vector<double> x_data_;
196
198 std::vector<double> y_data_;
199
201 std::vector<std::vector<double>> z_data_;
202
205 std::vector<std::vector<double>> nx_data_;
206
209 std::vector<std::vector<double>> ny_data_;
210
213 std::vector<std::vector<double>> nz_data_;
214
216 std::vector<std::vector<double>> z_data_filt_;
217
220 std::vector<std::vector<double>> nx_data_filt_;
221
224 std::vector<std::vector<double>> ny_data_filt_;
225
228 std::vector<std::vector<double>> nz_data_filt_;
229};
230
231#endif // FAST_TERRAIN_MAP_H
A terrain map class built for fast and efficient sampling.
Definition fast_terrain_map.h:16
double y_diff_
Distance between nodes in y.
Definition fast_terrain_map.h:192
std::vector< std::vector< double > > z_data_
The nested vector of z data at each [x,y] location.
Definition fast_terrain_map.h:201
void loadFlatElevated(double height)
Load in a default terrain map 10x10m, four corners with elevated terrain.
Definition fast_terrain_map.cpp:60
bool isEmpty() const
Determine if the map is empty.
Definition fast_terrain_map.cpp:468
int getYIndex(const double y) const
Return the y index.
Definition fast_terrain_map.h:177
double getGroundHeightFiltered(const double x, const double y) const
Return the filtered ground height at a requested location.
Definition fast_terrain_map.cpp:278
std::vector< double > getXData() const
Return the vector of x_data of the map.
Definition fast_terrain_map.cpp:464
std::array< double, 3 > getSurfaceNormal(const double x, const double y) const
Return the surface normal at a requested location.
Definition fast_terrain_map.cpp:302
void loadStep(double height)
Load in a terrain map with a step at x = 0.
Definition fast_terrain_map.cpp:108
std::vector< std::vector< double > > nz_data_
Definition fast_terrain_map.h:213
void loadData(int x_size, int y_size, std::vector< double > x_data, std::vector< double > y_data, std::vector< std::vector< double > > z_data, std::vector< std::vector< double > > nx_data, std::vector< std::vector< double > > ny_data, std::vector< std::vector< double > > nz_data, std::vector< std::vector< double > > z_data_filt, std::vector< std::vector< double > > nx_data_filt, std::vector< std::vector< double > > ny_data_filt, std::vector< std::vector< double > > nz_data_filt)
Load data from a grid_map::GridMap object into a FastTerrainMap object.
Definition fast_terrain_map.cpp:8
int y_size_
The number of elements in the y direction.
Definition fast_terrain_map.h:186
Eigen::Vector3d projectToMap(const Eigen::Vector3d point, const Eigen::Vector3d direction)
Return the (approximate) intersection of the height map and a vector. Returned point lies exactly on ...
Definition fast_terrain_map.cpp:431
std::array< double, 3 > getSurfaceNormalFiltered(const double x, const double y) const
Return the filtered surface normal at a requested location.
Definition fast_terrain_map.cpp:345
void loadSlope(double grade)
Load in a default terrain map 10x10m, four corners with sloped terrain.
Definition fast_terrain_map.cpp:82
std::vector< std::vector< double > > nx_data_filt_
Definition fast_terrain_map.h:220
double getGroundHeight(const double x, const double y) const
Return the ground height at a requested location.
Definition fast_terrain_map.cpp:255
std::vector< std::vector< double > > ny_data_
Definition fast_terrain_map.h:209
std::vector< double > x_data_
The vector of x data.
Definition fast_terrain_map.h:195
bool isInRange(const double x, const double y) const
Check if map data is defined at a requested location.
Definition fast_terrain_map.cpp:245
int x_size_
The number of elements in the x direction.
Definition fast_terrain_map.h:183
FastTerrainMap()
Constructor for FastTerrainMap Class.
Definition fast_terrain_map.cpp:6
double x_diff_
Distance between nodes in x.
Definition fast_terrain_map.h:189
void loadFlat()
Load in a default terrain map 10x10m, four corners with flat terrain.
Definition fast_terrain_map.cpp:39
std::vector< double > y_data_
The vector of y data.
Definition fast_terrain_map.h:198
std::vector< std::vector< double > > nx_data_
Definition fast_terrain_map.h:205
std::vector< double > getYData() const
Return the vector of y_data of the map.
Definition fast_terrain_map.cpp:466
std::vector< std::vector< double > > z_data_filt_
The nested vector of filtered z data at each [x,y] location.
Definition fast_terrain_map.h:216
std::vector< std::vector< double > > ny_data_filt_
Definition fast_terrain_map.h:224
Eigen::Vector3d getSurfaceNormalFilteredEigen(const double x, const double y) const
Return the filtered surface normal at a requested location.
Definition fast_terrain_map.cpp:388
std::vector< std::vector< double > > nz_data_filt_
Definition fast_terrain_map.h:228
int getXIndex(const double x) const
Return the x index.
Definition fast_terrain_map.h:167
void loadDataFromGridMap(const grid_map::GridMap map)
Load data from a grid_map::GridMap object into a FastTerrainMap object.
Definition fast_terrain_map.cpp:158