20 namespace std_ph = std::placeholders;
23 : carma_ros2_utils::CarmaLifecycleNode(options)
44 auto error = update_params<bool>(
51 auto error2 = update_params<std::string>(
58 auto error3 = update_params<uint8_t>(
63 auto error4 = update_params<double>(
68 rcl_interfaces::msg::SetParametersResult result;
70 result.successful = !error && !error2 && !error3 && !error4;
94 external_objects_sub_ = create_subscription<carma_perception_msgs::msg::ExternalObjectList>(
"external_objects", 10,
97 roadway_obstacles_sub_ = create_subscription<carma_perception_msgs::msg::RoadwayObstacleList>(
"roadway_obstacles", 10,
105 return CallbackReturn::SUCCESS;
109 const std_msgs::msg::Header& header,
110 const geometry_msgs::msg::Pose& pose,
112 const std::string& ns,
113 const geometry_msgs::msg::Vector3& size)
115 marker.header = header;
122 marker.type = visualization_msgs::msg::Marker::MESH_RESOURCE;
124 marker.mesh_use_embedded_materials =
true;
132 marker.color.r = 1.0;
133 marker.color.g = 1.0;
134 marker.color.b = 1.0;
135 marker.color.a = 1.0;
138 marker.type = visualization_msgs::msg::Marker::CYLINDER;
141 marker.scale.x = std::max(0.5, size.x * 2.0);
142 marker.scale.y = std::max(0.5, size.y * 2.0);
143 marker.scale.z = std::max(1.7, size.z * 2.0);
146 marker.color.r = 1.0;
147 marker.color.g = 0.0;
148 marker.color.b = 0.0;
149 marker.color.a = 1.0;
152 marker.action = visualization_msgs::msg::Marker::ADD;
157 RCLCPP_DEBUG_STREAM(get_logger(),
"external_objects_callback called");
160 RCLCPP_DEBUG_STREAM(get_logger(),
"external_objects_callback called, but visualization is not enabled.");
164 visualization_msgs::msg::MarkerArray viz_msg;
166 visualization_msgs::msg::Marker marker;
167 viz_msg.markers.reserve(msg->objects.size() + 1);
169 marker.action = visualization_msgs::msg::Marker::DELETEALL;
170 viz_msg.markers.push_back(marker);
175 for (
auto obj : msg->objects) {
176 visualization_msgs::msg::Marker marker;
179 if (obj.object_type == carma_perception_msgs::msg::ExternalObject::PEDESTRIAN) {
183 marker.pose.position.z = std::max(1.0, obj.size.z);
187 marker.header = msg->header;
189 marker.color.r = 0.0;
190 marker.color.g = 0.0;
191 marker.color.b = 1.0;
192 marker.color.a = 1.0;
194 marker.pose = obj.pose.pose;
195 marker.pose.position.z = std::max(1.0, obj.size.z);
200 throw std::invalid_argument(
"Marker shape is not valid: " +
std::to_string(
static_cast<int>(
config_.
marker_shape)) +
". Please choose from 1: CUBE, 2: SPHERE, 3: CYLINDER");
203 marker.action = visualization_msgs::msg::Marker::ADD;
207 marker.scale.x = std::max(1.0, obj.size.x) * 2;
208 marker.scale.y = std::max(1.0, obj.size.y) * 2;
209 marker.scale.z = std::max(1.0, obj.size.z) * 2;
212 viz_msg.markers.push_back(marker);
222 size_t size_swap = viz_msg.markers.size();
225 if (viz_msg.markers.size() < old_size) {
226 for (
size_t i = viz_msg.markers.size();
i < old_size; ++
i) {
227 visualization_msgs::msg::Marker marker;
229 marker.action = visualization_msgs::msg::Marker::DELETE;
230 viz_msg.markers.push_back(marker);
234 old_size = size_swap;
239 RCLCPP_DEBUG_STREAM(get_logger(),
"roadway_obstacles_callback called");
242 RCLCPP_DEBUG_STREAM(get_logger(),
"roadway_obstacles_callback called, but visualization is not enabled.");
246 visualization_msgs::msg::MarkerArray viz_msg;
248 visualization_msgs::msg::Marker marker;
249 viz_msg.markers.reserve(msg->roadway_obstacles.size() + 1);
251 marker.action = visualization_msgs::msg::Marker::DELETEALL;
252 viz_msg.markers.push_back(marker);
255 for (
auto obj : msg->roadway_obstacles) {
256 visualization_msgs::msg::Marker marker;
259 if (obj.object.object_type == carma_perception_msgs::msg::ExternalObject::PEDESTRIAN) {
264 else if (obj.connected_vehicle_type.type != carma_perception_msgs::msg::ConnectedVehicleType::NOT_CONNECTED) {
265 marker.header = obj.object.header;
267 marker.color.r = 0.0;
268 marker.color.g = 1.0;
269 marker.color.b = 0.0;
270 marker.color.a = 1.0;
273 marker.type = visualization_msgs::msg::Marker::CUBE;
274 marker.action = visualization_msgs::msg::Marker::ADD;
275 marker.pose = obj.object.pose.pose;
276 marker.scale.x = obj.object.size.x * 2.0;
277 marker.scale.y = obj.object.size.y * 2.0;
278 marker.scale.z = obj.object.size.z * 2.0;
282 marker.header = obj.object.header;
284 marker.color.r = 0.0;
285 marker.color.g = 0.0;
286 marker.color.b = 1.0;
287 marker.color.a = 1.0;
290 marker.type = visualization_msgs::msg::Marker::CUBE;
291 marker.action = visualization_msgs::msg::Marker::ADD;
292 marker.pose = obj.object.pose.pose;
293 marker.scale.x = obj.object.size.x * 2.0;
294 marker.scale.y = obj.object.size.y * 2.0;
295 marker.scale.z = obj.object.size.z * 2.0;
298 viz_msg.markers.push_back(marker);
308#include "rclcpp_components/register_node_macro.hpp"
This node provides RViz visualization messages for recieved ExternalObject and RoadwayObstacle messag...
void roadway_obstacles_callback(carma_perception_msgs::msg::RoadwayObstacleList::UniquePtr msg)
Roadway obstacles callback. Converts the message to a visualization message to republish.
void createPedestrianMarker(visualization_msgs::msg::Marker &marker, const std_msgs::msg::Header &header, const geometry_msgs::msg::Pose &pose, size_t id, const std::string &ns, const geometry_msgs::msg::Vector3 &size)
Creates a pedestrian marker with specialized visualization.
rcl_interfaces::msg::SetParametersResult parameter_update_callback(const std::vector< rclcpp::Parameter > ¶meters)
Example callback for dynamic parameter updates.
carma_ros2_utils::CallbackReturn handle_on_configure(const rclcpp_lifecycle::State &)
carma_ros2_utils::PubPtr< visualization_msgs::msg::MarkerArray > roadway_obstacles_viz_pub_
void clear_and_update_old_objects(visualization_msgs::msg::MarkerArray &viz_msg, size_t &old_size)
Adds a marker deletion for a number of markers which is the delta between the new marker count and th...
carma_ros2_utils::SubPtr< carma_perception_msgs::msg::ExternalObjectList > external_objects_sub_
size_t prev_roadway_obstacles_size_
size_t prev_external_objects_size_
Node(const rclcpp::NodeOptions &)
Node constructor.
carma_ros2_utils::SubPtr< carma_perception_msgs::msg::RoadwayObstacleList > roadway_obstacles_sub_
carma_ros2_utils::PubPtr< visualization_msgs::msg::MarkerArray > external_objects_viz_pub_
void external_objects_callback(carma_perception_msgs::msg::ExternalObjectList::UniquePtr msg)
External objects callback. Converts the message to a visualization message to republish.
auto to_string(const UtmZone &zone) -> std::string
Stuct containing the algorithm configuration values for object_visualizer.
std::string pedestrian_icon_path
Path to the model file for pedestrian visualization.
double pedestrian_icon_scale
Scale factor to apply to the pedestrian icon model.
std::string external_objects_viz_ns
External Objects marker rviz namespace.
bool enable_roadway_objects_viz
If true then RViz markers will be forwarded for received carma_perception_msgs/RoadwayObstacleList me...
bool enable_external_objects_viz
If true then RViz markers will be forwarded for received carma_perception_msgs/ExternalObjectList mes...
bool use_pedestrian_icon
If true, pedestrians will be visualized using specialized icons/models instead of basic markers.
std::string roadway_obstacles_viz_ns
Roadway Obstacles marker rviz namespace.