Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
W
wolf_ros_node
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
mobile_robotics
wolf_projects
wolf_ros
wolf_ros_node
Commits
efefebed
Commit
efefebed
authored
5 years ago
by
Joan Vallvé Navarro
Browse files
Options
Downloads
Patches
Plain Diff
optionally (default) avoids drawing equal markers (rviz speed up)
parent
2ba50445
No related branches found
Branches containing commit
No related tags found
Tags containing commit
2 merge requests
!11
new release
,
!10
new release
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
include/visualizer.h
+4
-1
4 additions, 1 deletion
include/visualizer.h
src/visualizer.cpp
+67
-21
67 additions, 21 deletions
src/visualizer.cpp
with
71 additions
and
22 deletions
include/visualizer.h
+
4
−
1
View file @
efefebed
...
@@ -47,6 +47,8 @@ class Visualizer
...
@@ -47,6 +47,8 @@ class Visualizer
visualization_msgs
::
Marker
&
frm_marker
,
visualization_msgs
::
Marker
&
frm_marker
,
visualization_msgs
::
Marker
&
frm_text_marker
);
visualization_msgs
::
Marker
&
frm_text_marker
);
std
::
string
factorString
(
FactorBaseConstPtr
fac
)
const
;
// publishers
// publishers
ros
::
Publisher
landmarks_publisher_
;
ros
::
Publisher
landmarks_publisher_
;
ros
::
Publisher
trajectory_publisher_
;
ros
::
Publisher
trajectory_publisher_
;
...
@@ -64,7 +66,7 @@ class Visualizer
...
@@ -64,7 +66,7 @@ class Visualizer
// Options
// Options
std
::
string
map_frame_id_
;
std
::
string
map_frame_id_
;
bool
viz_factors_
,
viz_landmarks_
,
viz_trajectory_
;
bool
viz_factors_
,
viz_landmarks_
,
viz_trajectory_
,
viz_overlapped_factors_
;
double
viz_scale_
,
factors_width_
,
factors_absolute_height_
,
landmark_text_z_offset_
,
landmark_width_
,
landmark_length_
,
frame_width_
,
frame_length_
;
double
viz_scale_
,
factors_width_
,
factors_absolute_height_
,
landmark_text_z_offset_
,
landmark_width_
,
landmark_length_
,
frame_width_
,
frame_length_
;
std_msgs
::
ColorRGBA
frame_color_
,
factor_abs_color_
,
factor_motion_color_
,
factor_loop_color_
,
factor_lmk_color_
,
factor_geom_color_
;
std_msgs
::
ColorRGBA
frame_color_
,
factor_abs_color_
,
factor_motion_color_
,
factor_loop_color_
,
factor_lmk_color_
,
factor_geom_color_
;
...
@@ -72,5 +74,6 @@ class Visualizer
...
@@ -72,5 +74,6 @@ class Visualizer
unsigned
int
landmark_max_hits_
;
unsigned
int
landmark_max_hits_
;
double
viz_period_
;
double
viz_period_
;
ros
::
Time
last_markers_publish_
;
ros
::
Time
last_markers_publish_
;
std
::
set
<
std
::
string
>
factors_drawn_
;
};
};
}
// namespace wolf
}
// namespace wolf
This diff is collapsed.
Click to expand it.
src/visualizer.cpp
+
67
−
21
View file @
efefebed
...
@@ -17,6 +17,7 @@ void Visualizer::initialize(ros::NodeHandle& nh)
...
@@ -17,6 +17,7 @@ void Visualizer::initialize(ros::NodeHandle& nh)
// Load options ---------------------------------------------------
// Load options ---------------------------------------------------
nh
.
param
<
bool
>
(
"viz_factors"
,
viz_factors_
,
true
);
nh
.
param
<
bool
>
(
"viz_factors"
,
viz_factors_
,
true
);
nh
.
param
<
bool
>
(
"viz_overlapped_factors"
,
viz_overlapped_factors_
,
false
);
nh
.
param
<
bool
>
(
"viz_landmarks"
,
viz_landmarks_
,
true
);
nh
.
param
<
bool
>
(
"viz_landmarks"
,
viz_landmarks_
,
true
);
nh
.
param
<
bool
>
(
"viz_trajectory"
,
viz_trajectory_
,
true
);
nh
.
param
<
bool
>
(
"viz_trajectory"
,
viz_trajectory_
,
true
);
// viz parameters
// viz parameters
...
@@ -62,16 +63,17 @@ void Visualizer::initialize(ros::NodeHandle& nh)
...
@@ -62,16 +63,17 @@ void Visualizer::initialize(ros::NodeHandle& nh)
// init markers ---------------------------------------------------
// init markers ---------------------------------------------------
// factor markers message
// factor markers message
factor_marker_
.
type
=
visualization_msgs
::
Marker
::
LINE_LIST
;
factor_marker_
.
type
=
visualization_msgs
::
Marker
::
LINE_LIST
;
factor_marker_
.
action
=
visualization_msgs
::
Marker
::
ADD
;
factor_marker_
.
header
.
frame_id
=
map_frame_id_
;
factor_marker_
.
header
.
frame_id
=
map_frame_id_
;
factor_marker_
.
ns
=
"
/
factors"
;
factor_marker_
.
ns
=
"factors"
;
factor_marker_
.
scale
.
x
=
viz_scale_
*
factors_width_
;
factor_marker_
.
scale
.
x
=
viz_scale_
*
factors_width_
;
factor_text_marker_
=
factor_marker_
;
factor_text_marker_
=
factor_marker_
;
factor_text_marker_
.
type
=
visualization_msgs
::
Marker
::
TEXT_VIEW_FACING
;
factor_text_marker_
.
type
=
visualization_msgs
::
Marker
::
TEXT_VIEW_FACING
;
factor_text_marker_
.
ns
=
"
/
factors_text"
;
factor_text_marker_
.
ns
=
"factors_text"
;
factor_text_marker_
.
color
.
r
=
1
;
factor_text_marker_
.
color
.
r
=
1
;
factor_text_marker_
.
color
.
g
=
1
;
factor_text_marker_
.
color
.
g
=
1
;
factor_text_marker_
.
color
.
b
=
1
;
factor_text_marker_
.
color
.
b
=
1
;
factor_text_marker_
.
color
.
a
=
0.5
;
factor_text_marker_
.
color
.
a
=
1
;
factor_text_marker_
.
scale
.
x
=
viz_scale_
*
0.3
;
factor_text_marker_
.
scale
.
x
=
viz_scale_
*
0.3
;
factor_text_marker_
.
scale
.
y
=
viz_scale_
*
0.3
;
factor_text_marker_
.
scale
.
y
=
viz_scale_
*
0.3
;
factor_text_marker_
.
scale
.
z
=
viz_scale_
*
0.3
;
factor_text_marker_
.
scale
.
z
=
viz_scale_
*
0.3
;
...
@@ -79,18 +81,18 @@ void Visualizer::initialize(ros::NodeHandle& nh)
...
@@ -79,18 +81,18 @@ void Visualizer::initialize(ros::NodeHandle& nh)
// frame markers
// frame markers
frame_marker_
.
type
=
visualization_msgs
::
Marker
::
ARROW
;
frame_marker_
.
type
=
visualization_msgs
::
Marker
::
ARROW
;
frame_marker_
.
header
.
frame_id
=
map_frame_id_
;
frame_marker_
.
header
.
frame_id
=
map_frame_id_
;
frame_marker_
.
ns
=
"
/
frames"
;
frame_marker_
.
ns
=
"frames"
;
frame_marker_
.
scale
.
x
=
viz_scale_
*
frame_length_
;
frame_marker_
.
scale
.
x
=
viz_scale_
*
frame_length_
;
frame_marker_
.
scale
.
y
=
viz_scale_
*
frame_width_
;
frame_marker_
.
scale
.
y
=
viz_scale_
*
frame_width_
;
frame_marker_
.
scale
.
z
=
viz_scale_
*
frame_width_
;
frame_marker_
.
scale
.
z
=
viz_scale_
*
frame_width_
;
frame_marker_
.
color
=
frame_color_
;
frame_marker_
.
color
=
frame_color_
;
frame_text_marker_
=
frame_marker_
;
frame_text_marker_
=
frame_marker_
;
frame_text_marker_
.
type
=
visualization_msgs
::
Marker
::
TEXT_VIEW_FACING
;
frame_text_marker_
.
type
=
visualization_msgs
::
Marker
::
TEXT_VIEW_FACING
;
frame_text_marker_
.
ns
=
"
/
frames_text"
;
frame_text_marker_
.
ns
=
"frames_text"
;
frame_text_marker_
.
color
.
r
=
1
;
frame_text_marker_
.
color
.
r
=
1
;
frame_text_marker_
.
color
.
g
=
1
;
frame_text_marker_
.
color
.
g
=
1
;
frame_text_marker_
.
color
.
b
=
1
;
frame_text_marker_
.
color
.
b
=
1
;
frame_text_marker_
.
color
.
a
=
0.5
;
frame_text_marker_
.
color
.
a
=
1
;
frame_text_marker_
.
scale
.
x
=
viz_scale_
*
0.3
;
frame_text_marker_
.
scale
.
x
=
viz_scale_
*
0.3
;
frame_text_marker_
.
scale
.
y
=
viz_scale_
*
0.3
;
frame_text_marker_
.
scale
.
y
=
viz_scale_
*
0.3
;
frame_text_marker_
.
scale
.
z
=
viz_scale_
*
0.3
;
frame_text_marker_
.
scale
.
z
=
viz_scale_
*
0.3
;
...
@@ -98,18 +100,18 @@ void Visualizer::initialize(ros::NodeHandle& nh)
...
@@ -98,18 +100,18 @@ void Visualizer::initialize(ros::NodeHandle& nh)
// landmark markers
// landmark markers
landmark_marker_
.
type
=
visualization_msgs
::
Marker
::
ARROW
;
landmark_marker_
.
type
=
visualization_msgs
::
Marker
::
ARROW
;
landmark_marker_
.
header
.
frame_id
=
map_frame_id_
;
landmark_marker_
.
header
.
frame_id
=
map_frame_id_
;
landmark_marker_
.
ns
=
"
/
landmarks"
;
landmark_marker_
.
ns
=
"landmarks"
;
landmark_marker_
.
scale
.
x
=
viz_scale_
*
landmark_length_
;
landmark_marker_
.
scale
.
x
=
viz_scale_
*
landmark_length_
;
landmark_marker_
.
scale
.
y
=
viz_scale_
*
landmark_width_
;
landmark_marker_
.
scale
.
y
=
viz_scale_
*
landmark_width_
;
landmark_marker_
.
scale
.
z
=
viz_scale_
*
landmark_width_
;
landmark_marker_
.
scale
.
z
=
viz_scale_
*
landmark_width_
;
landmark_marker_
.
color
.
a
=
0.5
;
landmark_marker_
.
color
.
a
=
0.5
;
landmark_text_marker_
=
landmark_marker_
;
landmark_text_marker_
=
landmark_marker_
;
landmark_text_marker_
.
type
=
visualization_msgs
::
Marker
::
TEXT_VIEW_FACING
;
landmark_text_marker_
.
type
=
visualization_msgs
::
Marker
::
TEXT_VIEW_FACING
;
landmark_text_marker_
.
ns
=
"
/
landmarks_text"
;
landmark_text_marker_
.
ns
=
"landmarks_text"
;
landmark_text_marker_
.
color
.
r
=
1
;
landmark_text_marker_
.
color
.
r
=
1
;
landmark_text_marker_
.
color
.
g
=
1
;
landmark_text_marker_
.
color
.
g
=
1
;
landmark_text_marker_
.
color
.
b
=
1
;
landmark_text_marker_
.
color
.
b
=
1
;
landmark_text_marker_
.
color
.
a
=
0.5
;
landmark_text_marker_
.
color
.
a
=
1
;
landmark_text_marker_
.
scale
.
z
=
viz_scale_
*
3
;
landmark_text_marker_
.
scale
.
z
=
viz_scale_
*
3
;
}
}
...
@@ -178,6 +180,10 @@ void Visualizer::publishLandmarks(const ProblemPtr problem)
...
@@ -178,6 +180,10 @@ void Visualizer::publishLandmarks(const ProblemPtr problem)
void
Visualizer
::
publishFactors
(
const
ProblemPtr
problem
)
void
Visualizer
::
publishFactors
(
const
ProblemPtr
problem
)
{
{
// update stamps of generic messages
factor_marker_
.
header
.
stamp
=
ros
::
Time
::
now
();
factor_text_marker_
.
header
.
stamp
=
ros
::
Time
::
now
();
// first marker: DELETEALL
// first marker: DELETEALL
factors_marker_array_
.
markers
.
clear
();
factors_marker_array_
.
markers
.
clear
();
factors_marker_array_
.
markers
.
push_back
(
factor_marker_
);
factors_marker_array_
.
markers
.
push_back
(
factor_marker_
);
...
@@ -187,26 +193,38 @@ void Visualizer::publishFactors(const ProblemPtr problem)
...
@@ -187,26 +193,38 @@ void Visualizer::publishFactors(const ProblemPtr problem)
FactorBasePtrList
fac_list
;
FactorBasePtrList
fac_list
;
problem
->
getTrajectory
()
->
getFactorList
(
fac_list
);
problem
->
getTrajectory
()
->
getFactorList
(
fac_list
);
// reset previously drawn factors
factors_drawn_
.
clear
();
// Iterate over the list of factors
// Iterate over the list of factors
for
(
auto
fac
:
fac_list
)
for
(
auto
fac
:
fac_list
)
{
{
auto
factor_marker
=
factor_marker_
;
auto
factor_marker
=
factor_marker_
;
auto
factor_text_marker
=
factor_text_marker_
;
auto
factor_text_marker
=
factor_text_marker_
;
// fill marker
// fill marker
fillFactorMarker
(
fac
,
factor_marker
,
factor_text_marker
);
fillFactorMarker
(
fac
,
factor_marker
,
factor_text_marker
);
//
Store
marker i
n marker array
// marker
s
i
d
factor_marker
.
id
=
factors_marker_array_
.
markers
.
size
();
factor_marker
.
id
=
factors_marker_array_
.
markers
.
size
();
factor_marker
.
header
.
stamp
=
ros
::
Time
::
now
();
factor_text_marker
.
id
=
factors_marker_array_
.
markers
.
size
()
+
1
;
factor_marker
.
action
=
visualization_msgs
::
Marker
::
ADD
;
factors_marker_array_
.
markers
.
push_back
(
factor_marker
);
// Store markers in marker array
// Store text marker in marker array
factor_text_marker
.
id
=
factor_marker
.
id
;
factor_text_marker
.
header
.
stamp
=
ros
::
Time
::
now
();
factor_text_marker
.
action
=
visualization_msgs
::
Marker
::
ADD
;
factors_marker_array_
.
markers
.
push_back
(
factor_text_marker
);
factors_marker_array_
.
markers
.
push_back
(
factor_text_marker
);
// avoid drawing overlapped factors markers
if
(
not
viz_overlapped_factors_
)
{
std
::
string
fac_str
=
factorString
(
fac
);
if
(
factors_drawn_
.
count
(
fac_str
)
==
0
)
{
factors_marker_array_
.
markers
.
push_back
(
factor_marker
);
factors_drawn_
.
emplace
(
fac_str
);
}
}
else
factors_marker_array_
.
markers
.
push_back
(
factor_marker
);
}
}
// publish marker array
// publish marker array
...
@@ -300,7 +318,6 @@ void Visualizer::fillLandmarkMarkers(LandmarkBaseConstPtr lmk,
...
@@ -300,7 +318,6 @@ void Visualizer::fillLandmarkMarkers(LandmarkBaseConstPtr lmk,
lmk_marker
.
color
.
r
=
(
double
)
lmk
->
getHits
()
/
landmark_max_hits_
;
lmk_marker
.
color
.
r
=
(
double
)
lmk
->
getHits
()
/
landmark_max_hits_
;
lmk_marker
.
color
.
g
=
0
;
lmk_marker
.
color
.
g
=
0
;
lmk_marker
.
color
.
b
=
1
-
(
double
)
lmk
->
getHits
()
/
landmark_max_hits_
;
lmk_marker
.
color
.
b
=
1
-
(
double
)
lmk
->
getHits
()
/
landmark_max_hits_
;
lmk_marker
.
color
.
a
=
0.5
;
// POSITION & ORIENTATION ------------------------------------------------------
// POSITION & ORIENTATION ------------------------------------------------------
// position
// position
...
@@ -332,6 +349,35 @@ void Visualizer::fillLandmarkMarkers(LandmarkBaseConstPtr lmk,
...
@@ -332,6 +349,35 @@ void Visualizer::fillLandmarkMarkers(LandmarkBaseConstPtr lmk,
lmk_text_marker
.
pose
.
position
.
z
=
lmk_marker
.
pose
.
position
.
z
+
viz_scale_
*
landmark_text_z_offset_
;
lmk_text_marker
.
pose
.
position
.
z
=
lmk_marker
.
pose
.
position
.
z
+
viz_scale_
*
landmark_text_z_offset_
;
}
}
std
::
string
Visualizer
::
factorString
(
FactorBaseConstPtr
fac
)
const
{
std
::
string
factor_string
;
factor_string
=
"F"
+
fac
->
getCapture
()
->
getFrame
()
->
id
();
// FRAME
if
(
fac
->
getFrameOther
()
!=
nullptr
)
factor_string
+=
"_F"
+
fac
->
getFrameOther
()
->
id
();
// CAPTURE (with Frame)
else
if
(
fac
->
getCaptureOther
()
!=
nullptr
&&
fac
->
getCaptureOther
()
->
getFrame
()
!=
nullptr
)
factor_string
+=
"_C"
+
fac
->
getCaptureOther
()
->
id
();
// FEATURE (with Frame)
else
if
(
fac
->
getFeatureOther
()
!=
nullptr
&&
fac
->
getFeatureOther
()
->
getCapture
()
!=
nullptr
&&
fac
->
getFeatureOther
()
->
getCapture
()
->
getFrame
()
!=
nullptr
)
factor_string
+=
"_f"
+
fac
->
getFeatureOther
()
->
id
();
// LANDMARK
else
if
(
fac
->
getLandmarkOther
()
!=
nullptr
)
factor_string
+=
"_L"
+
fac
->
getLandmarkOther
()
->
id
();
// ABSOLUTE (nothing
// Topology
factor_string
+=
fac
->
getTopology
();
return
factor_string
;
}
void
Visualizer
::
fillFactorMarker
(
FactorBaseConstPtr
fac
,
void
Visualizer
::
fillFactorMarker
(
FactorBaseConstPtr
fac
,
visualization_msgs
::
Marker
&
fac_marker
,
visualization_msgs
::
Marker
&
fac_marker
,
visualization_msgs
::
Marker
&
fac_text_marker
)
visualization_msgs
::
Marker
&
fac_text_marker
)
...
@@ -414,12 +460,12 @@ void Visualizer::fillFactorMarker(FactorBaseConstPtr fac,
...
@@ -414,12 +460,12 @@ void Visualizer::fillFactorMarker(FactorBaseConstPtr fac,
color
=
factor_geom_color_
;
color
=
factor_geom_color_
;
// more transparent if inactive
// more transparent if inactive
if
(
fac
->
getStatus
()
==
FAC_ACTIVE
)
if
(
fac
->
getStatus
()
==
FAC_
IN
ACTIVE
)
color
.
a
*=
0.5
;
color
.
a
*=
0.5
;
fac_marker
.
colors
.
push_back
(
color
);
fac_marker
.
colors
.
push_back
(
color
);
fac_marker
.
colors
.
push_back
(
color
);
// 2 times because of 2 points
fac_marker
.
colors
.
push_back
(
color
);
// 2 times because of 2 points
fac_marker
.
ns
=
std
::
string
(
"factor_"
+
fac
->
getTopology
());
fac_marker
.
ns
=
std
::
string
(
"factor
s
_"
+
fac
->
getTopology
());
// TEXT MARKER --------------------------------------------------------
// TEXT MARKER --------------------------------------------------------
fac_text_marker
.
text
=
std
::
to_string
(
fac
->
id
());
fac_text_marker
.
text
=
std
::
to_string
(
fac
->
id
());
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment