model_visualizer_rviz.cpp
Go to the documentation of this file.
1 
17 //Local include
19 
20 //ISM includes
21 #include <ISM/utility/GeometryHelper.hpp>
22 
23 //#define USE_LINES
24 //#define VOTE_DIFFERENCE
25 
26 namespace VIZ
27 {
28 void ModelVisualizerRVIZ::addVisualization(const std::string pattern_name, const ISM::TracksPtr tracks, const ISM::TracksPtr ism_object_tracks,
29  const std::map<int, std::vector<ISM::VoteSpecifierPtr>> track_index_to_votes)
30 {
31  initObjectToColorMap(tracks, ism_object_tracks);
32  ISM::TracksPtr overall_tracks = ISM::TracksPtr(new ISM::Tracks(tracks->tracks));
33  overall_tracks->tracks.insert(overall_tracks->tracks.end(), ism_object_tracks->tracks.begin(), ism_object_tracks->tracks.end());
34 
35 
36  visualization_msgs::MarkerArray current_marker_array = generateModelMarkers(pattern_name, overall_tracks, track_index_to_votes);
37 
38  addMarker(current_marker_array);
40 }
41 
42 visualization_msgs::MarkerArray ModelVisualizerRVIZ::generateModelMarkers(std::string pattern_name, const ISM::TracksPtr tracks, const std::map<int, std::vector<ISM::VoteSpecifierPtr>> track_index_to_votes)
43 {
44  visualization_msgs::MarkerArray return_markers;
45 
46  for (const std::pair<int, std::vector<ISM::VoteSpecifierPtr>>& votes : track_index_to_votes)
47  {
48  int index = votes.first;
49  if (index < 0)
50  {
51  continue;
52  }
53 
54  /* find reference */
55  ISM::ObjectPtr ref;
56  for (ISM::VoteSpecifierPtr vote : votes.second)
57  {
58  if (ISM::GeometryHelper::isSelfVote(vote))
59  {
60  ISM::TrackPtr track = tracks->getTrackByTypeAndId(vote->objectType, vote->observedId);
61  if (track != nullptr)
62  {
63  if(static_cast<size_t>(index) >= track->objects.size())
64  {
65  std::cout << "Index: " << index << "exceeds objects size" << std::endl;
66  continue;
67  }
68  ref = track->objects[index];
69  }
70 
71  break;
72  }
73  }
74 
75  if (ref == nullptr)
76  {
77  std::cout << "no reference for " << pattern_name
78  << " at the track-index " << votes.first << "\n";
79  continue;
80  }
81 
82  /* find corresponding vote/object pair and generate marker */
83  for (const ISM::VoteSpecifierPtr& vote : votes.second)
84  {
85  ISM::ObjectPtr obj;
86  ISM::TrackPtr track = tracks->getTrackByTypeAndId(vote->objectType, vote->observedId);
87  if (track == nullptr)
88  {
89  continue;
90  }
91 
92  if(static_cast<size_t>(index) >= track->objects.size())
93  {
94  std::cout << "Index: " << index << "exceeds objects size" << std::endl;
95  continue;
96  }
97 
98  obj = track->objects[index];
99  if (ref == nullptr)
100  {
101  continue;
102  }
103 
104  ISM::PosePtr expected_object_pose = ISM::GeometryHelper::getSourcePose(ref->pose, ISM::GeometryHelper::getSourcePoint(ref->pose, vote->refToObjectQuat, vote->radius), vote->refToObjectPoseQuat);
105 
106  if (ISM::GeometryHelper::poseEqual(expected_object_pose, obj->pose))
107  {
108  #ifdef USE_LINES
109  return_markers.markers.push_back(VizHelperRVIZ::createLine(obj->pose->point, ref->pose->point, 0.002, index, base_frame_, prefix_ + pattern_name + "_vote_from_" + obj->type + "_" + obj->observedId,
110  object_to_color_map_[obj->type][obj->observedId], marker_lifetime_));
111  #else
112  return_markers.markers.push_back(VizHelperRVIZ::createArrowMarkerToPoint(obj->pose->point, ref->pose->point, base_frame_, prefix_ + pattern_name + "_vote_from_" + obj->type + "_" + obj->observedId,
113  index, 0.002, 0.007, 0.015, object_to_color_map_[obj->type][obj->observedId], marker_lifetime_));
114  #endif
115 
116  }
117  else
118  {
119  std::cout << "Vote from: " << vote->objectType << " with ID: " << vote->observedId
120  << " at track-index: " << index << " couldn't be drawn!\n";
121 
122  #ifdef VOTE_DIFFERENCE
123  double position_difference = ISM::GeometryHelper::getDistanceBetweenPoints(expected_object_pose->point, obj->pose->point);
124  double orientation_difference = ISM::GeometryHelper::getAngleBetweenQuats(expected_object_pose->quat, obj->pose->quat);
125  std::cout << "VOTE_DEBUG_INFO -position deviation: " << position_difference
126  << " -angle deviation: " << orientation_difference << std::endl << std::endl;
127 
128  #endif
129  }
130  }
131  }
132 
133  return return_markers;
134 }
135 
136 void ModelVisualizerRVIZ::initObjectToColorMap(ISM::TracksPtr tracks, ISM::TracksPtr ism_object_tracks)
137 {
138  double value = 0.6;
139  double color_step_size = 240.0 / (tracks->tracks.size() + 1);
140  for (size_t i = 0; i < tracks->tracks.size(); i++)
141  {
142  object_to_color_map_[tracks->tracks[i]->type][tracks->tracks[i]->observedId] = VizHelperRVIZ::hsvToRGBA(color_step_size * (i + 1), 1.0, value);
143  }
144 
145  color_step_size = 120.0 / (ism_object_tracks->tracks.size());
146  for (size_t i = 0; i < ism_object_tracks->tracks.size(); i++)
147  {
148  object_to_color_map_[ism_object_tracks->tracks[i]->type][ism_object_tracks->tracks[i]->observedId] = VizHelperRVIZ::hsvToRGBA((color_step_size * i) + 240, 1.0, value);
149  }
150 }
151 }
void addVisualization(const std::string pattern_name, const ISM::TracksPtr tracks, const ISM::TracksPtr ism_object_tracks, const std::map< int, std::vector< ISM::VoteSpecifierPtr >> track_index_to_votes)
static ColorRGBA hsvToRGBA(double hue, double saturation, double value)
void initObjectToColorMap(ISM::TracksPtr tracks, ISM::TracksPtr ism_object_tracks)
std::map< std::string, std::map< std::string, std_msgs::ColorRGBA > > object_to_color_map_
visualization_msgs::MarkerArray MarkerArray
static Marker createArrowMarkerToPoint(ISM::PointPtr fromPoint, ISM::PointPtr to, std::string baseFrame, std::string markerNamespace, int id, float xScale, float yScale, float zScale, ColorRGBA color, double markerLifetime)
void addMarker(visualization_msgs::Marker marker)
visualization_msgs::MarkerArray generateModelMarkers(std::string pattern_name, const ISM::TracksPtr tracks, const std::map< int, std::vector< ISM::VoteSpecifierPtr >> track_index_to_votes)
static Marker createLine(ISM::PointPtr fromPoint, ISM::PointPtr toPoint, float width, int id, std::string baseFrame, std::string markerNamespace, std_msgs::ColorRGBA color, double markerLifetime)


asr_ism_visualizations
Author(s): Hanselmann Fabian, Heller Florian, Heizmann Heinrich, Kübler Marcel, Meißner Pascal, Reckling Reno, Stöckle Patrick, Trautmann Jeremias
autogenerated on Fri Nov 8 2019 03:28:47