src
VoronoiGraphDisplay.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012, Willow Garage, Inc.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
*
8
* * Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* * Neither the name of the Willow Garage, Inc. nor the names of its
14
* contributors may be used to endorse or promote products derived from
15
* this software without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
* POSSIBILITY OF SUCH DAMAGE.
28
*/
29
30
#include <OGRE/OgreSceneNode.h>
31
#include <OGRE/OgreSceneManager.h>
32
33
#include <
tf/transform_listener.h
>
34
35
#include <
rviz/visualization_manager.h
>
36
#include <
rviz/properties/color_property.h
>
37
#include <
rviz/properties/float_property.h
>
38
#include <
rviz/properties/int_property.h
>
39
#include <
rviz/frame_manager.h
>
40
41
42
#include <
tuw_multi_robot_rviz/VoronoiGraphDisplay.h
>
43
#include <
tuw_multi_robot_rviz/VoronoiGraphVisual.h
>
44
45
namespace
tuw_multi_robot_rviz
46
{
47
48
49
// The constructor must have no arguments, so we can't give the
50
// constructor the parameters it needs to fully initialize.
51
VoronoiGraphDisplay::VoronoiGraphDisplay
() {
52
color_path_property_
=
new
rviz::ColorProperty
(
"Path Color"
, QColor ( 50, 51, 204 ),
53
"Color to draw the path."
,
54
this
, SLOT (
updatePathColor
() ) );
55
56
scale_point_property_
=
new
rviz::FloatProperty
(
"Path Points Scale"
, 0.1,
57
"Scale of the path points."
,
58
this
, SLOT (
updatePointScale
() ) );
59
scale_point_property_
->
setMin
( 0 );
60
scale_point_property_
->
setMax
( 1 );
61
62
63
history_length_property_
=
new
rviz::IntProperty
(
"History Length"
, 1,
64
"Number of prior measurements to display."
,
65
this
, SLOT (
updateHistoryLength
() ) );
66
history_length_property_
->
setMin
( 1 );
67
history_length_property_
->
setMax
( 100000 );
68
}
69
70
// After the top-level rviz::Display::initialize() does its own setup,
71
// it calls the subclass's onInitialize() function. This is where we
72
// instantiate all the workings of the class. We make sure to also
73
// call our immediate super-class's onInitialize() function, since it
74
// does important stuff setting up the message filter.
75
//
76
// Note that "MFDClass" is a typedef of
77
// ``MessageFilterDisplay<message type>``, to save typing that long
78
// templated class name every time you need to refer to the
79
// superclass.
80
void
VoronoiGraphDisplay::onInitialize
() {
81
MFDClass::onInitialize
();
82
updateHistoryLength
();
83
}
84
85
VoronoiGraphDisplay::~VoronoiGraphDisplay
() {
86
}
87
88
// Clear the visuals by deleting their objects.
89
void
VoronoiGraphDisplay::reset
() {
90
MFDClass::reset
();
91
visuals_
.clear();
92
}
93
94
// Set the current color values for each visual.
95
void
VoronoiGraphDisplay::updatePathColor
() {
96
Ogre::ColourValue color =
color_path_property_
->
getOgreColor
();
97
for
(
auto
& visualsI:
visuals_
) { visualsI->setPathColor ( color ); }
98
}
99
100
// Set the number of past visuals to show.
101
void
VoronoiGraphDisplay::updateHistoryLength
() {
102
visuals_
.rset_capacity (
history_length_property_
->
getInt
() );
103
}
104
105
void
VoronoiGraphDisplay::updatePointScale
()
106
{
107
float
scale =
scale_point_property_
->
getFloat
();
108
for
(
auto
& visualsI:
visuals_
) { visualsI->setPointScale ( scale ); }
109
}
110
111
void
VoronoiGraphDisplay::updatePathScale
()
112
{
113
float
scale =
scale_path_property_
->
getFloat
();
114
for
(
auto
& visualsI:
visuals_
) { visualsI->setPathScale ( scale ); }
115
}
116
117
// This is our callback to handle an incoming message.
118
void
VoronoiGraphDisplay::processMessage
(
const
tuw_multi_robot_msgs::Graph::ConstPtr& msg ) {
119
// Here we call the rviz::FrameManager to get the transform from the
120
// fixed frame to the frame in the header of this Imu message. If
121
// it fails, we can't do anything else so we return.
122
Ogre::Quaternion orientation;
123
Ogre::Vector3 position;
124
if
( !
context_
->
getFrameManager
()->
getTransform
( msg->header.frame_id,
125
msg->header.stamp,
126
position, orientation ) ) {
127
ROS_DEBUG
(
"Error transforming from frame '%s' to frame '%s'"
,
128
msg->header.frame_id.c_str(), qPrintable (
fixed_frame_
) );
129
return
;
130
}
131
132
// We are keeping a circular buffer of visual pointers. This gets
133
// the next one, or creates and stores it if the buffer is not full
134
boost::shared_ptr<VoronoiGraphVisual>
visual;
135
if
(
visuals_
.full() ) {
136
visual =
visuals_
.front();
137
}
else
{
138
visual.reset (
new
VoronoiGraphVisual
(
context_
->
getSceneManager
(),
scene_node_
) );
139
}
140
141
// Now set or update the contents of the chosen visual.
142
visual->setMessage ( msg );
143
visual->setFramePosition ( position );
144
visual->setFrameOrientation ( orientation );
145
146
visual->setPathColor (
color_path_property_
->
getOgreColor
() );
147
148
// And send it to the end of the circular buffer
149
visuals_
.push_back ( visual );
150
}
151
152
153
}
// end namespace rviz_plugin_tutorials
154
155
// Tell pluginlib about this class. It is important to do this in
156
// global scope, outside our package's namespace.
157
#include <
pluginlib/class_list_macros.h
>
158
PLUGINLIB_EXPORT_CLASS
(
tuw_multi_robot_rviz::VoronoiGraphDisplay
,
rviz::Display
)
159
// END_TUTORIAL
rviz::IntProperty::setMin
void setMin(int min)
tuw_multi_robot_rviz::VoronoiGraphDisplay::visuals_
boost::circular_buffer< boost::shared_ptr< VoronoiGraphVisual > > visuals_
Definition:
VoronoiGraphDisplay.h:121
rviz::MessageFilterDisplay::reset
void reset() override
boost::shared_ptr
tuw_multi_robot_rviz::VoronoiGraphDisplay::onInitialize
virtual void onInitialize()
Definition:
VoronoiGraphDisplay.cpp:80
rviz::FloatProperty::setMax
void setMax(float max)
int_property.h
frame_manager.h
tuw_multi_robot_rviz::VoronoiGraphDisplay::VoronoiGraphDisplay
VoronoiGraphDisplay()
Definition:
VoronoiGraphDisplay.cpp:51
tuw_multi_robot_rviz
Definition:
MultiRobotGoalSelector.h:61
tuw_multi_robot_rviz::VoronoiGraphDisplay::updatePathScale
void updatePathScale()
Definition:
VoronoiGraphDisplay.cpp:111
tuw_multi_robot_rviz::VoronoiGraphVisual
Definition:
VoronoiGraphVisual.h:62
rviz::Display::fixed_frame_
QString fixed_frame_
tuw_multi_robot_rviz::VoronoiGraphDisplay::reset
virtual void reset()
Definition:
VoronoiGraphDisplay.cpp:89
rviz::FloatProperty::setMin
void setMin(float min)
rviz::DisplayContext::getSceneManager
virtual Ogre::SceneManager * getSceneManager() const=0
float_property.h
tuw_multi_robot_rviz::VoronoiGraphDisplay::scale_point_property_
rviz::FloatProperty * scale_point_property_
Definition:
VoronoiGraphDisplay.h:126
rviz::ColorProperty
tuw_multi_robot_rviz::VoronoiGraphDisplay::history_length_property_
rviz::IntProperty * history_length_property_
Definition:
VoronoiGraphDisplay.h:128
visualization_manager.h
rviz::Display
rviz::FloatProperty
VoronoiGraphDisplay.h
class_list_macros.h
tuw_multi_robot_rviz::VoronoiGraphDisplay::processMessage
void processMessage(const tuw_multi_robot_msgs::Graph::ConstPtr &msg)
Definition:
VoronoiGraphDisplay.cpp:118
PLUGINLIB_EXPORT_CLASS
#define PLUGINLIB_EXPORT_CLASS(class_type, base_class_type)
rviz::FloatProperty::getFloat
virtual float getFloat() const
tuw_multi_robot_rviz::VoronoiGraphDisplay
Definition:
VoronoiGraphDisplay.h:87
tuw_multi_robot_rviz::VoronoiGraphDisplay::updateHistoryLength
void updateHistoryLength()
Definition:
VoronoiGraphDisplay.cpp:101
ROS_DEBUG
#define ROS_DEBUG(...)
rviz::Display::scene_node_
Ogre::SceneNode * scene_node_
rviz::IntProperty::setMax
void setMax(int max)
tuw_multi_robot_rviz::VoronoiGraphDisplay::updatePathColor
void updatePathColor()
Definition:
VoronoiGraphDisplay.cpp:95
tuw_multi_robot_rviz::VoronoiGraphDisplay::~VoronoiGraphDisplay
virtual ~VoronoiGraphDisplay()
Definition:
VoronoiGraphDisplay.cpp:85
VoronoiGraphVisual.h
rviz::DisplayContext::getFrameManager
virtual FrameManager * getFrameManager() const=0
tuw_multi_robot_rviz::VoronoiGraphDisplay::updatePointScale
void updatePointScale()
Definition:
VoronoiGraphDisplay.cpp:105
transform_listener.h
rviz::MessageFilterDisplay::onInitialize
void onInitialize() override
rviz::FrameManager::getTransform
bool getTransform(const Header &header, Ogre::Vector3 &position, Ogre::Quaternion &orientation)
rviz::Display::context_
DisplayContext * context_
rviz::IntProperty::getInt
virtual int getInt() const
tuw_multi_robot_rviz::VoronoiGraphDisplay::color_path_property_
rviz::ColorProperty * color_path_property_
Definition:
VoronoiGraphDisplay.h:125
color_property.h
rviz::ColorProperty::getOgreColor
Ogre::ColourValue getOgreColor() const
tuw_multi_robot_rviz::VoronoiGraphDisplay::scale_path_property_
rviz::FloatProperty * scale_path_property_
Definition:
VoronoiGraphDisplay.h:127
rviz::IntProperty
tuw_multi_robot_rviz
Author(s): Benjamin Binder
autogenerated on Wed Mar 2 2022 01:10:08