diff --git a/LibCarla/source/carla/opendrive/parser/ObjectParser.cpp b/LibCarla/source/carla/opendrive/parser/ObjectParser.cpp index c5cbfbe1c0..8331bef0f6 100644 --- a/LibCarla/source/carla/opendrive/parser/ObjectParser.cpp +++ b/LibCarla/source/carla/opendrive/parser/ObjectParser.cpp @@ -10,6 +10,7 @@ #include "carla/road/element/RoadInfoCrosswalk.h" #include "carla/road/Road.h" + #include namespace carla { @@ -21,7 +22,6 @@ namespace parser { carla::road::MapBuilder &map_builder) { std::vector points; - for (pugi::xml_node node_road : xml.child("OpenDRIVE").children("road")) { // parse all objects @@ -33,8 +33,11 @@ namespace parser { // type Crosswalk std::string type = node_object.attribute("type").as_string(); std::string name = node_object.attribute("name").as_string(); - if (type == "crosswalk") { - + std::string name_lower = name; + std::transform(name_lower.begin(), name_lower.end(), name_lower.begin(), + [](unsigned char c){ return std::tolower(c); }); + bool bIsCrosswalk = (type == "crosswalk" || (name_lower.find("crosswalk") != std::string::npos)); + if (bIsCrosswalk) { // read all points pugi::xml_node node_outline = node_object.child("outline"); if (node_outline) { @@ -119,6 +122,8 @@ namespace parser { } } } + + } } // namespace parser } // namespace opendrive diff --git a/LibCarla/source/carla/road/Map.cpp b/LibCarla/source/carla/road/Map.cpp index c0d56df608..67f0c46325 100644 --- a/LibCarla/source/carla/road/Map.cpp +++ b/LibCarla/source/carla/road/Map.cpp @@ -509,6 +509,7 @@ namespace road { } } } + return result; } diff --git a/PythonAPI/test/smoke/test_map.py b/PythonAPI/test/smoke/test_map.py index bddeb85789..3ae9cec6cc 100644 --- a/PythonAPI/test/smoke/test_map.py +++ b/PythonAPI/test/smoke/test_map.py @@ -48,3 +48,12 @@ def _check_map(self, m): waypoint = random.choice(next_waypoints) _ = m.transform_to_geolocation(carla.Location()) self.assertTrue(str(m.to_opendrive())) + + maps_withoutcrosswalks = ['Town01', 'Town01_Opt', 'Town02', 'Town02_Opt'] + if not any(map_name in m.name for map_name in maps_withoutcrosswalks): + # --- Check for crosswalks using get_crosswalks() --- + crosswalks = m.get_crosswalks() + self.assertGreater( + len(crosswalks), 0, + msg=f"Map {m.name} has no crosswalks." + ) diff --git a/PythonAPI/util/check_map.py b/PythonAPI/util/check_map.py new file mode 100644 index 0000000000..0eb013171d --- /dev/null +++ b/PythonAPI/util/check_map.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +# Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma de +# Barcelona (UAB). +# +# This work is licensed under the terms of the MIT license. +# For a copy, see . + +""" + +Quick check script to get map stuff +""" + +import glob +import os +import sys +import numpy as np +from queue import Queue +from queue import Empty + +try: + sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % ( + sys.version_info.major, + sys.version_info.minor, + 'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0]) +except IndexError: + pass + +import carla + + +def main(): + # We start creating the client + client = carla.Client('localhost', 2000) + client.set_timeout(30.0) + world = client.get_world() + crosswalks = world.get_map().get_crosswalks() + print(f"Crosswalks found: {len(crosswalks)}") + for crosswalk in crosswalks: + world.debug.draw_point(crosswalk, size=0.5, color=carla.Color(255, 0, 0), life_time=5000.0) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + print(' - Exited by user.')