aerialmap_display.h
Go to the documentation of this file.
1 /* Copyright 2014 Gareth Cross
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7 http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License. */
14 
15 #pragma once
16 
17 #include <string>
18 #include <vector>
19 
20 #include <boost/optional.hpp>
21 
22 #include <geometry_msgs/PoseStamped.h>
23 #include <ros/ros.h>
24 #include <ros/time.h>
25 #include <rviz/display.h>
26 #include <sensor_msgs/NavSatFix.h>
27 #include <tf2_ros/buffer.h>
28 
29 #include <OGRE/OgreMaterial.h>
30 #include <OGRE/OgreVector3.h>
31 
32 #include "coordinates.h"
33 #include "ogre_tile.h"
34 #include "position_reference.h"
35 #include "tile_cache_delay.h"
36 
37 namespace Ogre
38 {
39 class ManualObject;
40 }
41 
42 namespace rviz
43 {
44 class EnumProperty;
45 class FloatProperty;
46 class IntProperty;
47 class PositionReferenceProperty;
48 class Property;
49 class RosTopicProperty;
50 class StringProperty;
51 class TfFrameProperty;
52 
57 enum class MapTransformType
58 {
61 };
62 
66 class AerialMapDisplay : public Display
67 {
68  Q_OBJECT
69 public:
71  ~AerialMapDisplay() override;
72 
73  // Overrides from Display
74  void reset() override;
75  void update(float, float) override;
76 
77 protected Q_SLOTS:
78  void updateAlpha();
79  void updateTopic();
80  void updateDrawUnder();
81  void updateTileUrl();
82  void updateZoom();
83  void updateBlocks();
85  void updateMapFrame();
86  void updateUtmFrame();
87  void updateUtmZone();
88  void updateXYReference();
89  void updateZReference();
90  void updateZOffset();
91 
92 protected:
93  // overrides from Display
94  void onEnable() override;
95  void onDisable() override;
96  void onInitialize() override;
97 
98  virtual void subscribe();
99  virtual void unsubscribe();
100 
104  void navFixCallback(sensor_msgs::NavSatFixConstPtr const& msg);
105 
109  void requestTileTextures();
110 
115  bool updateCenterTile(sensor_msgs::NavSatFixConstPtr const& msg);
116 
120  void assembleScene();
121 
125  void triggerSceneAssembly();
126 
130  void clearAll();
131 
135  void destroyTileObjects();
136 
140  void createTileObjects();
141 
146 
151 
156 
161 
165  void checkRequestErrorRate();
166 
171 
175  struct MapObject
176  {
177  Ogre::ManualObject* object;
178  Ogre::MaterialPtr material;
179 
180  MapObject(Ogre::ManualObject* o, Ogre::MaterialPtr m) : object(o), material(m)
181  {
182  assert(!material.isNull());
183  }
184  };
185 
187  std::vector<MapObject> objects_;
188 
191 
192  // properties
206 
208  float alpha_;
212  std::string tile_url_;
214  int zoom_;
216  int blocks_;
220  std::string map_frame_;
222  std::string utm_frame_;
228  std::string xy_reference_frame_;
232  std::string z_reference_frame_;
234  double z_offset_;
235 
236  // tile management
238  bool dirty_{ false };
240  sensor_msgs::NavSatFixConstPtr ref_fix_{ nullptr };
242  boost::optional<WGSCoordinate> ref_coords_;
246  boost::optional<TileId> center_tile_{ boost::none };
248  geometry_msgs::PoseStamped center_tile_pose_;
249 
251  std::shared_ptr<tf2_ros::Buffer const> tf_buffer_{ nullptr };
252 
257 };
258 
259 } // namespace rviz
coordinates.h
rviz::AerialMapDisplay::updateUtmFrame
void updateUtmFrame()
Definition: aerialmap_display.cpp:446
rviz::AerialMapDisplay::z_reference_type_
PositionReferenceType z_reference_type_
Type of Z position reference.
Definition: aerialmap_display.h:230
rviz::AerialMapDisplay::tf_reference_update_timer_
ros::Timer tf_reference_update_timer_
timer that updates the reference position when using TF_FRAME references
Definition: aerialmap_display.h:256
rviz::AerialMapDisplay::ref_fix_
sensor_msgs::NavSatFixConstPtr ref_fix_
the last NavSatFix message that lead to updating the tiles
Definition: aerialmap_display.h:240
rviz::AerialMapDisplay::map_frame_
std::string map_frame_
the map frame, rigidly attached to the world with ENU convention - see https://www....
Definition: aerialmap_display.h:220
rviz::AerialMapDisplay::tile_url_
std::string tile_url_
the URL of the tile server to use
Definition: aerialmap_display.h:212
rviz::AerialMapDisplay::updateXYReference
void updateXYReference()
Definition: aerialmap_display.cpp:504
rviz::AerialMapDisplay::tf_buffer_
std::shared_ptr< tf2_ros::Buffer const > tf_buffer_
buffer for tf lookups not related to fixed-frame
Definition: aerialmap_display.h:251
rviz::AerialMapDisplay::draw_under_
bool draw_under_
determines which render queue to use
Definition: aerialmap_display.h:210
rviz::AerialMapDisplay::tf_reference_update_duration_
ros::Duration tf_reference_update_duration_
timeout for periodic TF_FRAME reference update
Definition: aerialmap_display.h:254
rviz::AerialMapDisplay::transformMapTileToFixedFrame
void transformMapTileToFixedFrame()
Definition: aerialmap_display.cpp:1206
rviz::AerialMapDisplay::updateTopic
void updateTopic()
Definition: aerialmap_display.cpp:363
rviz::RosTopicProperty
Ogre
rviz::AerialMapDisplay::utm_zone_property_
IntProperty * utm_zone_property_
Definition: aerialmap_display.h:202
rviz::AerialMapDisplay::subscribe
virtual void subscribe()
Definition: aerialmap_display.cpp:188
rviz::AerialMapDisplay::zoom_
int zoom_
the zoom to use (Mercator)
Definition: aerialmap_display.h:214
ros.h
rviz::MapTransformType
MapTransformType
Whether the tiles should be transformed via an intermediate map frame, or directly via a UTM frame.
Definition: aerialmap_display.h:57
time.h
rviz::AerialMapDisplay::xy_reference_frame_
std::string xy_reference_frame_
XY position reference TF frame (if TF_FRAME type is used)
Definition: aerialmap_display.h:228
rviz::AerialMapDisplay::alpha_
float alpha_
the alpha value of the tile's material
Definition: aerialmap_display.h:208
position_reference.h
rviz::AerialMapDisplay::updateZReference
void updateZReference()
Definition: aerialmap_display.cpp:554
rviz::AerialMapDisplay::updateZoom
void updateZoom()
Definition: aerialmap_display.cpp:306
rviz::AerialMapDisplay::objects_
std::vector< MapObject > objects_
the tile scene objects
Definition: aerialmap_display.h:187
rviz::AerialMapDisplay::utm_frame_
std::string utm_frame_
the utm frame, representing a UTM coordinate frame in a chosen zone
Definition: aerialmap_display.h:222
rviz::AerialMapDisplay::MapObject::object
Ogre::ManualObject * object
Definition: aerialmap_display.h:177
buffer.h
rviz::AerialMapDisplay::center_tile_pose_
geometry_msgs::PoseStamped center_tile_pose_
translation of the center-tile w.r.t. the map/utm frame
Definition: aerialmap_display.h:248
rviz::AerialMapDisplay::draw_under_property_
Property * draw_under_property_
Definition: aerialmap_display.h:198
rviz::AerialMapDisplay::navsat_fix_sub_
ros::Subscriber navsat_fix_sub_
the subscriber for the NavSatFix topic
Definition: aerialmap_display.h:190
rviz::AerialMapDisplay::onInitialize
void onInitialize() override
Definition: aerialmap_display.cpp:166
rviz::AerialMapDisplay::transformTileToMapFrame
void transformTileToMapFrame()
Definition: aerialmap_display.cpp:991
display.h
rviz::AerialMapDisplay::updateBlocks
void updateBlocks()
Definition: aerialmap_display.cpp:336
rviz::AerialMapDisplay::utm_zone_
int utm_zone_
UTM zone to work in.
Definition: aerialmap_display.h:224
rviz::AerialMapDisplay::assembleScene
void assembleScene()
Definition: aerialmap_display.cpp:826
rviz::AerialMapDisplay::requestTileTextures
void requestTileTextures()
Definition: aerialmap_display.cpp:769
rviz::AerialMapDisplay::~AerialMapDisplay
~AerialMapDisplay() override
Definition: aerialmap_display.cpp:160
rviz::Display
rviz::EnumProperty
rviz::AerialMapDisplay::ref_coords_
boost::optional< WGSCoordinate > ref_coords_
lat/lon of the reference position that lead to updating the tiles
Definition: aerialmap_display.h:242
rviz::FloatProperty
rviz::Property
rviz::AerialMapDisplay::navFixCallback
void navFixCallback(sensor_msgs::NavSatFixConstPtr const &msg)
Definition: aerialmap_display.cpp:678
rviz::AerialMapDisplay::updateCenterTile
bool updateCenterTile(sensor_msgs::NavSatFixConstPtr const &msg)
Definition: aerialmap_display.cpp:688
rviz::AerialMapDisplay::map_transform_type_property_
EnumProperty * map_transform_type_property_
Definition: aerialmap_display.h:199
TileCacheDelay< OgreTile >
rviz::MapTransformType::VIA_UTM_FRAME
@ VIA_UTM_FRAME
rviz::AerialMapDisplay::unsubscribe
virtual void unsubscribe()
Definition: aerialmap_display.cpp:212
rviz::AerialMapDisplay::clearAll
void clearAll()
Definition: aerialmap_display.cpp:601
rviz::AerialMapDisplay::tfReferencePeriodicUpdate
void tfReferencePeriodicUpdate(const ros::TimerEvent &)
Definition: aerialmap_display.cpp:1150
rviz::AerialMapDisplay::updateMapTransformType
void updateMapTransformType()
Definition: aerialmap_display.cpp:378
ogre_tile.h
rviz
rviz::StringProperty
rviz::AerialMapDisplay::destroyTileObjects
void destroyTileObjects()
Definition: aerialmap_display.cpp:611
rviz::AerialMapDisplay::MapObject::material
Ogre::MaterialPtr material
Definition: aerialmap_display.h:178
rviz::AerialMapDisplay::tile_cache_
TileCacheDelay< OgreTile > tile_cache_
caches tile images, hashed by their fetch URL
Definition: aerialmap_display.h:244
rviz::AerialMapDisplay::center_tile_
boost::optional< TileId > center_tile_
Last request()ed tile id (which is the center tile)
Definition: aerialmap_display.h:246
rviz::AerialMapDisplay::AerialMapDisplay
AerialMapDisplay()
Definition: aerialmap_display.cpp:65
rviz::AerialMapDisplay::xy_reference_type_
PositionReferenceType xy_reference_type_
Type of XY position reference.
Definition: aerialmap_display.h:226
ros::TimerEvent
rviz::AerialMapDisplay::updateDrawUnder
void updateDrawUnder()
Definition: aerialmap_display.cpp:243
rviz::AerialMapDisplay::z_reference_frame_
std::string z_reference_frame_
Z position reference TF frame (if TF_FRAME type is used)
Definition: aerialmap_display.h:232
rviz::AerialMapDisplay::z_offset_
double z_offset_
Offset of the tiles in Z axis (relative to map/utm)
Definition: aerialmap_display.h:234
rviz::AerialMapDisplay::alpha_property_
FloatProperty * alpha_property_
Definition: aerialmap_display.h:197
rviz::AerialMapDisplay::onDisable
void onDisable() override
Definition: aerialmap_display.cpp:182
rviz::AerialMapDisplay::xy_reference_property_
PositionReferenceProperty * xy_reference_property_
Definition: aerialmap_display.h:203
rviz::AerialMapDisplay::transformTileToReferenceFrame
void transformTileToReferenceFrame()
Definition: aerialmap_display.cpp:978
rviz::AerialMapDisplay::MapObject
Definition: aerialmap_display.h:175
rviz::PositionReferenceType
PositionReferenceType
Which reference should be used for determining position.
Definition: position_reference.h:23
rviz::AerialMapDisplay::update
void update(float, float) override
Definition: aerialmap_display.cpp:665
rviz::AerialMapDisplay::checkRequestErrorRate
void checkRequestErrorRate()
Definition: aerialmap_display.cpp:801
rviz::TfFrameProperty
rviz::MapTransformType::VIA_MAP_FRAME
@ VIA_MAP_FRAME
rviz::AerialMapDisplay::createTileObjects
void createTileObjects()
Definition: aerialmap_display.cpp:628
tile_cache_delay.h
rviz::AerialMapDisplay::tile_url_property_
StringProperty * tile_url_property_
Definition: aerialmap_display.h:194
rviz::AerialMapDisplay::map_frame_property_
TfFrameProperty * map_frame_property_
Definition: aerialmap_display.h:200
rviz::AerialMapDisplay::triggerSceneAssembly
void triggerSceneAssembly()
Definition: aerialmap_display.cpp:820
rviz::AerialMapDisplay::updateZOffset
void updateZOffset()
Definition: aerialmap_display.cpp:594
rviz::AerialMapDisplay::z_offset_property_
FloatProperty * z_offset_property_
Definition: aerialmap_display.h:205
rviz::AerialMapDisplay::dirty_
bool dirty_
whether we need to re-query and re-assemble the tiles
Definition: aerialmap_display.h:238
rviz::AerialMapDisplay::updateTileUrl
void updateTileUrl()
Definition: aerialmap_display.cpp:269
rviz::AerialMapDisplay::zoom_property_
IntProperty * zoom_property_
Definition: aerialmap_display.h:195
rviz::AerialMapDisplay::updateUtmZone
void updateUtmZone()
Definition: aerialmap_display.cpp:475
rviz::AerialMapDisplay::blocks_
int blocks_
the number of tiles loaded in each direction around the center tile
Definition: aerialmap_display.h:216
rviz::AerialMapDisplay::updateMapFrame
void updateMapFrame()
Definition: aerialmap_display.cpp:417
rviz::AerialMapDisplay::transformTileToUtmFrame
void transformTileToUtmFrame()
Definition: aerialmap_display.cpp:1061
rviz::AerialMapDisplay
Displays a satellite map along the XY plane.
Definition: aerialmap_display.h:66
rviz::AerialMapDisplay::MapObject::MapObject
MapObject(Ogre::ManualObject *o, Ogre::MaterialPtr m)
Definition: aerialmap_display.h:180
rviz::AerialMapDisplay::updateAlpha
void updateAlpha()
Definition: aerialmap_display.cpp:217
rviz::AerialMapDisplay::topic_property_
RosTopicProperty * topic_property_
Definition: aerialmap_display.h:193
rviz::PositionReferenceProperty
Definition: position_reference_property.h:27
rviz::AerialMapDisplay::blocks_property_
IntProperty * blocks_property_
Definition: aerialmap_display.h:196
rviz::AerialMapDisplay::reset
void reset() override
Definition: aerialmap_display.cpp:1248
rviz::AerialMapDisplay::utm_frame_property_
TfFrameProperty * utm_frame_property_
Definition: aerialmap_display.h:201
ros::Duration
rviz::AerialMapDisplay::z_reference_property_
PositionReferenceProperty * z_reference_property_
Definition: aerialmap_display.h:204
ros::Timer
rviz::AerialMapDisplay::map_transform_type_
MapTransformType map_transform_type_
Whether the tiles should be transformed via an intermediate map frame, or directly via a UTM frame.
Definition: aerialmap_display.h:218
ros::Subscriber
rviz::IntProperty
rviz::AerialMapDisplay::onEnable
void onEnable() override
Definition: aerialmap_display.cpp:176


rviz_satellite
Author(s): Gareth Cross , Andre Schröder
autogenerated on Thu May 4 2023 02:47:22