Skip to content

Commit 69f0e5e

Browse files
authored
feat(lanelet2_extension): add util/visualization of BusStopArea (#28)
Signed-off-by: Mamoru Sobue <mamoru.sobue@tier4.jp>
1 parent 4561f4e commit 69f0e5e

File tree

4 files changed

+100
-0
lines changed

4 files changed

+100
-0
lines changed

autoware_lanelet2_extension/include/autoware_lanelet2_extension/utility/query.hpp

+7
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,13 @@ std::vector<lanelet::NoStoppingAreaConstPtr> noStoppingAreas(
103103
*/
104104
std::vector<lanelet::NoParkingAreaConstPtr> noParkingAreas(const lanelet::ConstLanelets & lanelets);
105105

106+
/**
107+
* [busStopArea extracts BusStop Area regulatory elements from lanelets]
108+
* @param lanelets [input lanelets]
109+
* @return [bus stop areas that are associated with input lanelets]
110+
*/
111+
std::vector<lanelet::BusStopAreaConstPtr> busStopAreas(const lanelet::ConstLanelets & lanelets);
112+
106113
/**
107114
* [speedBumps extracts Speed Bump regulatory elements from lanelets]
108115
* @param lanelets [input lanelets]

autoware_lanelet2_extension/include/autoware_lanelet2_extension/visualization/visualization.hpp

+11
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
// NOLINTBEGIN(readability-identifier-naming)
2121

2222
#include "autoware_lanelet2_extension/regulatory_elements/autoware_traffic_light.hpp"
23+
#include "autoware_lanelet2_extension/regulatory_elements/bus_stop_area.hpp"
2324
#include "autoware_lanelet2_extension/regulatory_elements/no_parking_area.hpp"
2425
#include "autoware_lanelet2_extension/regulatory_elements/no_stopping_area.hpp"
2526
#include "autoware_lanelet2_extension/utility/query.hpp"
@@ -111,6 +112,16 @@ visualization_msgs::msg::MarkerArray noParkingAreasAsMarkerArray(
111112
const std::vector<lanelet::NoParkingAreaConstPtr> & no_reg_elems,
112113
const std_msgs::msg::ColorRGBA & c, const rclcpp::Duration & duration = rclcpp::Duration(0, 0));
113114

115+
/**
116+
* [busStopAreasAsMarkerArray creates marker array to visualize bus stop areas]
117+
* @param no_reg_elems [bus stop area regulatory elements]
118+
* @param c [color of the marker]
119+
* @param duration [lifetime of the marker]
120+
*/
121+
visualization_msgs::msg::MarkerArray busStopAreasAsMarkerArray(
122+
const std::vector<lanelet::BusStopAreaConstPtr> & no_reg_elems,
123+
const std_msgs::msg::ColorRGBA & c, const rclcpp::Duration & duration = rclcpp::Duration(0, 0));
124+
114125
/**
115126
* [noStoppingAreasAsMarkerArray creates marker array to visualize detection areas]
116127
* @param no_reg_elems [mp stopping area regulatory elements]

autoware_lanelet2_extension/lib/query.cpp

+20
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "autoware_lanelet2_extension/utility/query.hpp"
2020

2121
#include "autoware_lanelet2_extension/regulatory_elements/autoware_traffic_light.hpp"
22+
#include "autoware_lanelet2_extension/regulatory_elements/bus_stop_area.hpp"
2223
#include "autoware_lanelet2_extension/regulatory_elements/crosswalk.hpp"
2324
#include "autoware_lanelet2_extension/regulatory_elements/detection_area.hpp"
2425
#include "autoware_lanelet2_extension/regulatory_elements/no_parking_area.hpp"
@@ -217,6 +218,25 @@ std::vector<lanelet::NoParkingAreaConstPtr> noParkingAreas(const lanelet::ConstL
217218
return no_pa_reg_elems;
218219
}
219220

221+
std::vector<lanelet::BusStopAreaConstPtr> busStopAreas(const lanelet::ConstLanelets & lanelets)
222+
{
223+
std::vector<lanelet::BusStopAreaConstPtr> bus_stop_area_reg_elems;
224+
std::set<lanelet::Id> found_ids;
225+
226+
for (const auto & ll : lanelets) {
227+
std::vector<lanelet::BusStopAreaConstPtr> reg_elems =
228+
ll.regulatoryElementsAs<lanelet::autoware::BusStopArea>();
229+
for (const auto & reg_elem : reg_elems) {
230+
const auto id = reg_elem->id();
231+
if (found_ids.find(id) == found_ids.end()) {
232+
found_ids.insert(id);
233+
bus_stop_area_reg_elems.push_back(reg_elem);
234+
}
235+
}
236+
}
237+
return bus_stop_area_reg_elems;
238+
}
239+
220240
std::vector<lanelet::SpeedBumpConstPtr> speedBumps(const lanelet::ConstLanelets & lanelets)
221241
{
222242
std::vector<lanelet::SpeedBumpConstPtr> sb_reg_elems;

autoware_lanelet2_extension/lib/visualization.cpp

+62
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,68 @@ visualization_msgs::msg::MarkerArray noParkingAreasAsMarkerArray(
651651
return marker_array;
652652
}
653653

654+
visualization_msgs::msg::MarkerArray busStopAreasAsMarkerArray(
655+
const std::vector<lanelet::BusStopAreaConstPtr> & bus_stop_reg_elems,
656+
const std_msgs::msg::ColorRGBA & c, const rclcpp::Duration & duration)
657+
{
658+
visualization_msgs::msg::MarkerArray marker_array;
659+
visualization_msgs::msg::Marker marker;
660+
661+
if (bus_stop_reg_elems.empty()) {
662+
return marker_array;
663+
}
664+
665+
marker.header.frame_id = "map";
666+
marker.header.stamp = rclcpp::Time();
667+
marker.frame_locked = false;
668+
marker.ns = "bus_stop_area";
669+
marker.id = 0;
670+
marker.type = visualization_msgs::msg::Marker::TRIANGLE_LIST;
671+
marker.lifetime = duration;
672+
marker.pose.position.x = 0.0; // p.x();
673+
marker.pose.position.y = 0.0; // p.y();
674+
marker.pose.position.z = 0.0; // p.z();
675+
marker.pose.orientation.x = 0.0;
676+
marker.pose.orientation.y = 0.0;
677+
marker.pose.orientation.z = 0.0;
678+
marker.pose.orientation.w = 1.0;
679+
marker.scale.x = 1.0;
680+
marker.scale.y = 1.0;
681+
marker.scale.z = 1.0;
682+
marker.color.r = 1.0f;
683+
marker.color.g = 1.0f;
684+
marker.color.b = 1.0f;
685+
marker.color.a = 0.999;
686+
687+
for (const auto & bus_stop_reg_elem : bus_stop_reg_elems) {
688+
marker.points.clear();
689+
marker.colors.clear();
690+
marker.id = static_cast<int32_t>(bus_stop_reg_elem->id());
691+
692+
// area visualization
693+
const auto bus_stop_areas = bus_stop_reg_elem->busStopAreas();
694+
for (const auto & bus_stop_area : bus_stop_areas) {
695+
geometry_msgs::msg::Polygon geom_poly;
696+
utils::conversion::toGeomMsgPoly(bus_stop_area, &geom_poly);
697+
698+
std::vector<geometry_msgs::msg::Polygon> triangles;
699+
polygon2Triangle(geom_poly, &triangles);
700+
701+
for (const auto & tri : triangles) {
702+
geometry_msgs::msg::Point tri0[3];
703+
704+
for (int i = 0; i < 3; i++) {
705+
utils::conversion::toGeomMsgPt(tri.points[i], &tri0[i]);
706+
marker.points.push_back(tri0[i]);
707+
marker.colors.push_back(c);
708+
}
709+
} // for triangles0
710+
} // for bus_stop_area
711+
marker_array.markers.push_back(marker);
712+
} // for regulatory elements
713+
return marker_array;
714+
}
715+
654716
visualization_msgs::msg::MarkerArray noStoppingAreasAsMarkerArray(
655717
const std::vector<lanelet::NoStoppingAreaConstPtr> & no_reg_elems,
656718
const std_msgs::msg::ColorRGBA & c, const rclcpp::Duration & duration)

0 commit comments

Comments
 (0)