HeightmapShape.hh
Go to the documentation of this file.
1/*
2 * Copyright (C) 2012 Open Source Robotics Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16*/
17#ifndef GAZEBO_PHYSICS_HEIGHTMAPSHAPE_HH_
18#define GAZEBO_PHYSICS_HEIGHTMAPSHAPE_HH_
19
20#include <string>
21#include <vector>
22#include <ignition/transport/Node.hh>
23
24#include <ignition/math/Vector2.hh>
25
28#include "gazebo/common/Dem.hh"
32#include "gazebo/util/system.hh"
33
34namespace gazebo
35{
36 namespace physics
37 {
40
45 class GZ_PHYSICS_VISIBLE HeightmapShape : public Shape
46 {
48 public: typedef float HeightType;
49
52 public: explicit HeightmapShape(CollisionPtr _parent);
53
55 public: virtual ~HeightmapShape();
56
59 public: virtual void Load(sdf::ElementPtr _sdf);
60
62 public: virtual void Init();
63
66 public: virtual void SetScale(const ignition::math::Vector3d &_scale);
67
70 public: std::string GetURI() const;
71
74 public: ignition::math::Vector3d Size() const;
75
78 public: ignition::math::Vector3d Pos() const;
79
84 public: ignition::math::Vector2i VertexCount() const;
85
90 public: HeightType GetHeight(int _x, int _y) const;
91
96 public: void FillMsg(msgs::Geometry &_msg);
97
100 public: void FillHeights(msgs::Geometry &_msg) const;
101
104 public: virtual void ProcessMsg(const msgs::Geometry &_msg);
105
107 public: virtual double ComputeVolume() const;
108
111 public: HeightType GetMaxHeight() const;
112
115 public: HeightType GetMinHeight() const;
116
119 public: int GetSubSampling() const;
120
124 public: common::Image GetImage() const;
125
132 private: int LoadTerrainFile(const std::string &_filename);
133
136 private: void OnRequest(ConstRequestPtr &_msg);
137
141 public: void FillHeightfield(std::vector<float>& heights);
142
144 public: void FillHeightfield(std::vector<double>& heights);
145
147 protected: std::vector<HeightType> heights;
148
151
154
156 protected: unsigned int vertSize;
157
159 protected: bool flipY;
160
162 protected: int subSampling;
163
165 private: transport::NodePtr node;
166
168 private: transport::SubscriberPtr requestSub;
169
171 private: transport::PublisherPtr responsePub;
172
174 private: std::string fileFormat;
175
177 private: ignition::math::Vector3d heightmapSize;
178
179 #ifdef HAVE_GDAL
181 private: common::Dem dem;
182 #endif
183
184 // Place ignition::transport objects at the end of this file to
185 // guarantee they are destructed first.
186
188 private: ignition::transport::Node nodeIgn;
189
191 private: ignition::transport::Node::Publisher responsePubIgn;
192 };
194 }
195}
196#endif
default namespace for gazebo
Forward declarations for transport.
Definition Dem.hh:45
Encapsulates a generic heightmap data file.
Definition HeightmapData.hh:40
Encapsulates an image that will be interpreted as a heightmap.
Definition ImageHeightmap.hh:40
Encapsulates an image.
Definition Image.hh:66
HeightmapShape collision shape builds a heightmap from an image.
Definition HeightmapShape.hh:46
std::string GetURI() const
Get the URI of the heightmap image.
std::vector< HeightType > heights
Lookup table of heights.
Definition HeightmapShape.hh:147
virtual void SetScale(const ignition::math::Vector3d &_scale)
Set the scale of the heightmap shape.
unsigned int vertSize
Size of the height lookup table.
Definition HeightmapShape.hh:156
int subSampling
The amount of subsampling. Default is 2.
Definition HeightmapShape.hh:162
virtual double ComputeVolume() const
Documentation inherited.
virtual void Init()
Initialize the heightmap.
float HeightType
height field type, float or double
Definition HeightmapShape.hh:48
HeightType GetMaxHeight() const
Get the maximum height.
common::Image GetImage() const
Return an image representation of the heightmap.
bool flipY
True to flip the heights along the y direction.
Definition HeightmapShape.hh:159
int GetSubSampling() const
Get the amount of subsampling.
ignition::math::Vector3d Size() const
Get the size in meters.
ignition::math::Vector2i VertexCount() const
Return the number of vertices, which equals the size of the image used to load the heightmap.
void FillHeightfield(std::vector< double > &heights)
Version of FillHeightfield() for double vectors.
common::HeightmapData * heightmapData
HeightmapData used to generate the heights.
Definition HeightmapShape.hh:153
HeightType GetMinHeight() const
Get the minimum height.
HeightType GetHeight(int _x, int _y) const
Get a height at a position.
virtual ~HeightmapShape()
Destructor.
ignition::math::Vector3d Pos() const
Get the origin in world coordinate frame.
virtual void Load(sdf::ElementPtr _sdf)
Load the heightmap.
void FillHeightfield(std::vector< float > &heights)
Fills the heightmap data (float) into the vector by calling HeightmapData::FillHeightMap with heights...
void FillHeights(msgs::Geometry &_msg) const
Fill a geometry message with this shape's height data.
virtual void ProcessMsg(const msgs::Geometry &_msg)
Update the heightmap from a message.
void FillMsg(msgs::Geometry &_msg)
Fill a geometry message with this shape's data.
common::ImageHeightmap img
Image used to generate the heights.
Definition HeightmapShape.hh:150
HeightmapShape(CollisionPtr _parent)
Constructor.
Base class for all shapes.
Definition Shape.hh:40
boost::shared_ptr< Collision > CollisionPtr
Definition PhysicsTypes.hh:113
boost::shared_ptr< Subscriber > SubscriberPtr
Definition TransportTypes.hh:53
boost::shared_ptr< Publisher > PublisherPtr
Definition TransportTypes.hh:49
boost::shared_ptr< Node > NodePtr
Definition TransportTypes.hh:57
Forward declarations for the common classes.
Definition Animation.hh:27