diff --git a/src/ground_segmentation_alg.cpp b/src/ground_segmentation_alg.cpp index 8f56c3200874cc541014b84780f8cf9e3a2c3a43..e8edffc24ac36e95786ef03d121d00b3cd58befc 100644 --- a/src/ground_segmentation_alg.cpp +++ b/src/ground_segmentation_alg.cpp @@ -48,8 +48,10 @@ void GroundSegmentationAlgorithm::segmentGround(pcl::PointCloud<pcl::PointXYZRGB //std::cout << "Number of edge vectors = " << edges.size(); int vertex_id = 0; + int discarded_vertex_id = 0; int edge_id = 0; int discarded_edge_id = 0; + for (pcl::PointCloud<pcl::PointXYZRGBNormal>::iterator i = ground_references_pcl_cloud.begin(); i != ground_references_pcl_cloud.end(); ++i) { @@ -69,8 +71,18 @@ void GroundSegmentationAlgorithm::segmentGround(pcl::PointCloud<pcl::PointXYZRGB visualization_msgs::Marker vertex; vertex.action = visualization_msgs::Marker::ADD; vertex.header = common_header; - vertex.ns = "vertices"; - vertex.id = vertex_id++; + + if (ground_ref.data_n[GRND_REF_DATA_N_2_VERTEX_CLASS] < VERTEX_NOT_CONNECTED_TO_ROOT) + { + vertex.ns = "vertices_connected_to_root"; + vertex.id = vertex_id++; + } + else + { + vertex.ns = "vertices_NOT_connected_to_root"; + vertex.id = discarded_vertex_id++; + } + vertex.type = visualization_msgs::Marker::CUBE; vertex.pose.position.x = ground_ref.x; @@ -87,10 +99,18 @@ void GroundSegmentationAlgorithm::segmentGround(pcl::PointCloud<pcl::PointXYZRGB vertex.scale.z = 0.30; vertex.color.a = 1.0; // Don't forget to set the alpha! - vertex.color.r = 1.0; - vertex.color.g = 0.66; - vertex.color.b = 0.0; - + if (ground_ref.data_n[GRND_REF_DATA_N_2_VERTEX_CLASS] < VERTEX_NOT_CONNECTED_TO_ROOT) + { + vertex.color.r = 1.0; + vertex.color.g = 0.66; + vertex.color.b = 0.0; + } + else + { + vertex.color.r = 1.0; + vertex.color.g = 0.0; + vertex.color.b = 0.0; + } vertex.lifetime = ros::Duration(0.1); //vertex.frame_locked = true; @@ -105,8 +125,18 @@ void GroundSegmentationAlgorithm::segmentGround(pcl::PointCloud<pcl::PointXYZRGB visualization_msgs::Marker edge; edge.action = visualization_msgs::Marker::ADD; edge.header = common_header; - edge.ns = "edges"; - edge.id = edge_id++; + + if (ground_ref.data_n[GRND_REF_DATA_N_2_VERTEX_CLASS] < VERTEX_NOT_CONNECTED_TO_ROOT) + { + edge.ns = "edges"; + edge.id = edge_id++; + } + else + { + edge.ns = "discarded_edges"; + edge.id = discarded_edge_id++; + } + edge.type = visualization_msgs::Marker::LINE_LIST; geometry_msgs::Point p; @@ -130,10 +160,18 @@ void GroundSegmentationAlgorithm::segmentGround(pcl::PointCloud<pcl::PointXYZRGB edge.pose.orientation.w = 1.0; edge.color.a = 0.7; // Don't forget to set the alpha! - edge.color.r = 0.8; - edge.color.g = 0.53; - edge.color.b = 0.0; - + if (ground_ref.data_n[GRND_REF_DATA_N_2_VERTEX_CLASS] < VERTEX_NOT_CONNECTED_TO_ROOT) + { + edge.color.r = 0.8; + edge.color.g = 0.53; + edge.color.b = 0.0; + } + else + { + edge.color.r = R_CLASS_VIRTUAL_OBSTACLE_NOT_CONNECTED_TO_ROOT / 255.0; + edge.color.g = G_CLASS_VIRTUAL_OBSTACLE_NOT_CONNECTED_TO_ROOT / 255.0; + edge.color.b = B_CLASS_VIRTUAL_OBSTACLE_NOT_CONNECTED_TO_ROOT / 255.0; + } edge.lifetime = ros::Duration(0.1); //edge.frame_locked = true; @@ -178,25 +216,29 @@ void GroundSegmentationAlgorithm::segmentGround(pcl::PointCloud<pcl::PointXYZRGB switch (discarded_edge_index_and_class.edge_class) { case CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_UNCERTAINTY: - std::cout << "Coloring edge too much uncertainty! class = " << discarded_edge_index_and_class.edge_class << std::endl; - discarded_edge.color.r = (float) R_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_UNCERTAINTY / 255.0; - discarded_edge.color.g = (float) G_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_UNCERTAINTY / 255.0; - discarded_edge.color.b = (float) B_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_UNCERTAINTY / 255.0; + //std::cout << "Coloring edge too much uncertainty! class = " << discarded_edge_index_and_class.edge_class + // << std::endl; + discarded_edge.color.r = (float)R_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_UNCERTAINTY / 255.0; + discarded_edge.color.g = (float)G_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_UNCERTAINTY / 255.0; + discarded_edge.color.b = (float)B_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_UNCERTAINTY / 255.0; break; case CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_MAHALANOBIS_DISTANCE: - std::cout << "Coloring edge too much Mahalanobis distance! class = " << discarded_edge_index_and_class.edge_class << std::endl; - discarded_edge.color.r = (float) R_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_MAHALANOBIS_DISTANCE / 255.0; - discarded_edge.color.g = (float) G_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_MAHALANOBIS_DISTANCE / 255.0; - discarded_edge.color.b = (float) B_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_MAHALANOBIS_DISTANCE / 255.0; + //std::cout << "Coloring edge too much Mahalanobis distance! class = " + // << discarded_edge_index_and_class.edge_class << std::endl; + discarded_edge.color.r = (float)R_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_MAHALANOBIS_DISTANCE / 255.0; + discarded_edge.color.g = (float)G_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_MAHALANOBIS_DISTANCE / 255.0; + discarded_edge.color.b = (float)B_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_MAHALANOBIS_DISTANCE / 255.0; break; case CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_SLOPE: - std::cout << "Coloring edge too much slope! class = " << discarded_edge_index_and_class.edge_class << std::endl; - discarded_edge.color.r = (float) R_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_SLOPE / 255.0; - discarded_edge.color.g = (float) G_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_SLOPE / 255.0; - discarded_edge.color.b = (float) B_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_SLOPE / 255.0; + //std::cout << "Coloring edge too much slope! class = " << discarded_edge_index_and_class.edge_class + // << std::endl; + discarded_edge.color.r = (float)R_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_SLOPE / 255.0; + discarded_edge.color.g = (float)G_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_SLOPE / 255.0; + discarded_edge.color.b = (float)B_CLASS_VIRTUAL_OBSTACLE_TOO_MUCH_SLOPE / 255.0; break; default: - std::cout << "WARNING! Discarded edge class not known!! class = " << discarded_edge_index_and_class.edge_class << std::endl; + //std::cout << "WARNING! Discarded edge class not known!! class = " << discarded_edge_index_and_class.edge_class + // << std::endl; discarded_edge.color.r = 1.0; discarded_edge.color.g = 1.0; discarded_edge.color.b = 1.0;