visualization_utils.hpp
Go to the documentation of this file.
1 /*
2  * visualization_utils
3  * Copyright (c) 2019, Samsung Research America
4  *
5  * THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
6  * COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
7  * COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
8  * AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
9  *
10  * BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO
11  * BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS
12  * CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
13  * CONDITIONS.
14  *
15  */
16 
17 /* Author: Steven Macenski */
18 
19 #ifndef SLAM_TOOLBOX_VISUALIZATION_UTILS_H_
20 #define SLAM_TOOLBOX_VISUALIZATION_UTILS_H_
21 
22 namespace vis_utils
23 {
24 
25 inline visualization_msgs::Marker toMarker(
26  const std::string& frame,
27  const std::string& ns,
28  const double& scale)
29 {
30  visualization_msgs::Marker marker;
31 
32  marker.header.frame_id = frame;
33  marker.header.stamp = ros::Time::now();
34  marker.ns = ns;
35  marker.type = visualization_msgs::Marker::SPHERE;
36  marker.pose.position.z = 0.0;
37  marker.pose.orientation.w = 1.;
38  marker.scale.x = scale;
39  marker.scale.y = scale;
40  marker.scale.z = scale;
41  marker.color.r = 1.0;
42  marker.color.g = 0;
43  marker.color.b = 0.0;
44  marker.color.a = 1.;
45  marker.action = visualization_msgs::Marker::ADD;
46  marker.lifetime = ros::Duration(0.);
47 
48  return marker;
49 }
50 
51 inline visualization_msgs::InteractiveMarker toInteractiveMarker(
52  visualization_msgs::Marker& marker,
53  const double& scale)
54 {
55  // marker basics
56  visualization_msgs::InteractiveMarker int_marker;
57  int_marker.header.frame_id = marker.header.frame_id;
58  int_marker.header.stamp = ros::Time::now();
59  int_marker.name = std::to_string(marker.id);
60  int_marker.pose.orientation.w = 1.;
61  int_marker.pose.position.x = marker.pose.position.x;
62  int_marker.pose.position.y = marker.pose.position.y;
63  int_marker.scale = scale;
64 
65  // translate control
66  visualization_msgs::InteractiveMarkerControl control;
67  control.orientation_mode =
68  visualization_msgs::InteractiveMarkerControl::FIXED;
69  control.always_visible = true;
70  control.orientation.w = 0;
71  control.orientation.x = 0.7071;
72  control.orientation.y = 0;
73  control.orientation.z = 0.7071;
74  control.interaction_mode =
75  visualization_msgs::InteractiveMarkerControl::MOVE_PLANE;
76  control.markers.push_back( marker );
77  int_marker.controls.push_back( control );
78 
79  // rotate control
80  visualization_msgs::InteractiveMarkerControl control_rot;
81  control_rot.orientation_mode =
82  visualization_msgs::InteractiveMarkerControl::FIXED;
83  control_rot.always_visible = true;
84  control_rot.orientation.w = 0;
85  control_rot.orientation.x = 0.7071;
86  control_rot.orientation.y = 0;
87  control_rot.orientation.z = 0.7071;
88  control_rot.interaction_mode =
89  visualization_msgs::InteractiveMarkerControl::ROTATE_AXIS;
90  int_marker.controls.push_back( control_rot );
91 
92  return int_marker;
93 }
94 
95 inline void toNavMap(
96  const karto::OccupancyGrid* occ_grid,
97  nav_msgs::OccupancyGrid& map)
98 {
99  // Translate to ROS format
100  kt_int32s width = occ_grid->GetWidth();
101  kt_int32s height = occ_grid->GetHeight();
103  occ_grid->GetCoordinateConverter()->GetOffset();
104 
105  if(map.info.width != (unsigned int) width ||
106  map.info.height != (unsigned int) height ||
107  map.info.origin.position.x != offset.GetX() ||
108  map.info.origin.position.y != offset.GetY())
109  {
110  map.info.origin.position.x = offset.GetX();
111  map.info.origin.position.y = offset.GetY();
112  map.info.width = width;
113  map.info.height = height;
114  map.data.resize(map.info.width * map.info.height);
115  }
116 
117  for (kt_int32s y = 0; y < height; y++)
118  {
119  for (kt_int32s x = 0; x < width; x++)
120  {
121  kt_int8u value = occ_grid->GetValue(karto::Vector2<kt_int32s>(x, y));
122  switch (value)
123  {
125  map.data[MAP_IDX(map.info.width, x, y)] = -1;
126  break;
128  map.data[MAP_IDX(map.info.width, x, y)] = 100;
129  break;
131  map.data[MAP_IDX(map.info.width, x, y)] = 0;
132  break;
133  default:
134  ROS_WARN("Encountered unknown cell value at %d, %d", x, y);
135  break;
136  }
137  }
138  }
139  return;
140 }
141 
142 } // end namespace
143 
144 #endif //SLAM_TOOLBOX_VISUALIZATION_UTILS_H_
int32_t kt_int32s
Definition: Types.h:51
const Vector2< kt_double > & GetOffset() const
Definition: Karto.h:4548
kt_int32s GetWidth() const
Definition: Karto.h:4841
uint8_t kt_int8u
Definition: Types.h:46
void toNavMap(const karto::OccupancyGrid *occ_grid, nav_msgs::OccupancyGrid &map)
#define ROS_WARN(...)
kt_int32s GetHeight() const
Definition: Karto.h:4850
const T & GetX() const
Definition: Karto.h:1026
CoordinateConverter * GetCoordinateConverter() const
Definition: Karto.h:4915
T GetValue(const Vector2< kt_int32s > &rGrid) const
Definition: Karto.h:4905
visualization_msgs::Marker toMarker(const std::string &frame, const std::string &ns, const double &scale)
visualization_msgs::InteractiveMarker toInteractiveMarker(visualization_msgs::Marker &marker, const double &scale)
static Time now()
const T & GetY() const
Definition: Karto.h:1044
#define MAP_IDX(sx, i, j)


slam_toolbox
Author(s): Steve Macenski
autogenerated on Mon Feb 28 2022 23:46:49