This release adds many important features and improvements to CARLA. Let’s take a detailed look at what’s new!
Overhauled Waypoints API
Since we had a limited OpenDrive parser, there was a need to expand it.
Now the whole OpenDrive file is parsed and we extract and store all the data.
Our new data structures are now similar to OpenDrive, so the parser is more expandable and queries are easy.
Python API Changes
We always try to avoid changing the Python API where possible but in this case, it was necessary.
carla.Waypoint.id: Unique identifier for a Waypoint based on the hash of it’s road_id, section_id, lane_id, and s.
carla.Waypoint.section_id: Refers to OpenDrive’s laneSection number used as an id.
carla.Waypoint.s: The s parameter of OpenDrive, it defines the position along the reference line, measured in meters from the beginning of the track, calculated in the XY-plane.~~ (already in master)
carla.LaneType: Define the type of lane. The most common are, NONE, Driving, Shoulder, Sidewalk, Bidirectional, and Parking although OpenDrive use more of them. These enums can be used as flags for queries.
lane_change contains the lane change information of a single road mark, indicating from which side of it you are allowed to cross.
width: Width of the road mark.
carla.Waypoint.right_lane_marking / carla.Waypoint.left_lane_marking: Returns a carla.LaneMarking for the right or left Waypoint’s lane marking.
carla.LaneMarking is not an enum anymore, but an object. The enum is now carla.LaneMarking.type.
carla.Waypoint.lane_type doesn’t work with strings anymore, now uses an enum carla.LaneType.
carla.Map.get_waypoint(location, project_to_road=True, lane_type=carla.LaneType.Driving): you can use it like before and will work as expected, but now accepts a carla.LaneType that can be used as a flag to filter lane types, for instance:
carla.Map.get_waypoint(location, project_to_road=True, lane_type=(carla.LaneType.Driving | carla.LaneType.Sidewalk) will search for the nearest waypoint on the center of a Driving or Sidewalk lane.
Enhanced Global Route Planner
The GlobalRoutePlanner class can be used to dynamically compute trajectories from an origin to target waypoints, as shown below:
Where route would be a list of tuples, containing waypoints and topological commands. These topological commands serve to indicate the high-level actions that an actor should take in order to get to the next location, such as TURN_LEFT or TURN_RIGHT.
In this release, the global route planner has received the following updates:
Lane change connections for routing with lane changes
Basic agents can now perform lane changes in accordance with the planned route
Fully revamped to work with the updated Waypoint API
A Rural Town: Town07
It’s time to take a bucholic trip to the countryside! We have listened carefully to our users and we are proud to unveil Town07, the first rural setting for CARLA!
This town brings new challenges to test your negotiation skills such as narrow roads, fewer traffic lights and lots of non-signalized crossings.
Open Source Assets
We all love assets, especially when they are FREE!! This is why we want to emphasize that all our assets are open source and freely available (under Creative Commons Atribution 4.0 International license). This empowers our users, enabling them to create their own environments and situations. And yes we want everyone to be aware of this so please spread the word! In this release we have added many new high-quality assets to our large growing library. We always continue to add new ones while polishing old ones.
Below are some of the new assets we’ve added in this release:
Figure 1. Bus Stop
Figure 2. New York Block LODs
Figure 3. Hay Bale
Content Migration to AWS
Our content has a new home! All our assets have been moved from Google Drive to AWS and our build scripts have been updated to address this change. Our assets are now a lot more accessible. Instead of depending on the scripts to download the assets programmatically, they can now be accessed manually with the AWS link. The link to the assets for each release can be found in the ContentVersions.txt file in the carla/Util folder.
No-rendering Mode Improvements
We have made a few significant additions to the no-rendering mode feature. Maps will now more accurately reflect the data from OpenDrive and there is now more information available to the user for debugging.
Here are the main updates:
Improved lane markings ( double Solids lane markings, solid and broken lane markings, etc.)
The map can now be changed using the option (–map map_name)
View the trigger boxes of traffic signs by using the flag (–show-triggers)
Shoulders, yield signs and parking lanes are now visible
In the previous release, we introduced a new GUI application for updating OpenDrive files with traffic sign information. This tool serves an important role in our process for creating a map outside of the Unreal Editor. Once the user has exported the FBX and XODR files from RoadRunner, they can load the map into this application, place the traffic signs and export the changes to the XODR file. They can then run our Python script to produce an Unreal Engine umap asset from the FBX and updated XODR (See here). This map is then ready for use with CARLA. We have plans to update this application in the future to do a lot more!