* New town: Town03
- Created with Vector Zero's RoadRunner (including OpenDrive information of the road layout)
- Bigger and more diverse
- More road variety: multiple lanes and lane markings, curves at different angles, roundabout, elevation, tunnel
* Lots of improvements to the Python API
- Support for Python 3
- Support for retrieving and changing lighting and weather conditions
- Migrated Lidar sensor
- Migrated image converter methods: Depth, LogarithmicDepth, and CityScapesPalette
- Migrated IO methods for sensor data, "save_to_disk" available for PNG, JPEG, TIFF, and PLY
- Added support for requesting the list of all the actors alive in the current world, `world.get_actors()`
- `world.get_actors()` returns an `ActorList` object with `filter` functionality and lazy initialization of actors
- Added collision event sensor, "sensor.other.collision", that triggers a callback on each collision to the actor it is attached to
- Added lane detector sensor, "sensor.other.lane_detector", that detects lane invasion events
- Added `carla.Map` and `carla.Waypoint` classes for querying info about the road layout
- Added methods for converting and saving the map as OpenDrive format
- Added `map.get_spawn_points()` to retrieve the recommended spawn points for vehicles
- Added `map.get_waypoint(location)` to query the nearest waypoint
- Added `map.generate_waypoints(distance)` to generate waypoints all over the map at an approximated distance
- Added `map.get_topology()` for getting a list the tuples of waypoints that define the edges of the road graph
- Added `waypoint.next(distance)` to retrieve the list of the waypoints at a distance that can be driven from this waypoint
- Added `parent` attributes to actors, not None if the actor is attached to another actor
- Added `semantic_tags` to actors containing the list of tags of all of its components
- Added methods for retrieving velocity and acceleration of actors
- Added function to enable/disable simulating physics on an actor, `actor.set_simulate_physics(enabled=True)`
- Added bounding boxes to vehicles, `vehicle.bounding_box` property
- Exposed last control applied to vehicles, `vehicle.get_vehicle_control()`
- Added a "tick" message containing info of all the actors in the scene
- Executed in the background and cached
- Added `world.wait_for_tick()` for blocking the current thread until a "tick" message is received
- Added `world.on_tick(callback)` for executing a callback asynchronously each time a "tick" message is received
- These methods return/pass a `carla.Timestamp` object containing, frame count, delta time of last tick, global simulation time, and OS timestamp
- Methods retrieving actor's info, e.g. `actor.get_transform()`, don't need to connect with the simulator, which makes these calls quite cheap
- Allow drawing debug shapes from Python: points, lines, arrows, boxes, and strings (`world.debug.draw_*`)
- Added id (id of current episode) and map name to `carla.World`
- Exposed traffic lights and signs as actors. Traffic lights have a specialized actor class that has the traffic light state (red, green, yellow) as property
- Added methods for accessing and modifying individual items in `carla.Image` (pixels) and `carla.LidarMeasurement` (locations)
- Added `carla.Vector3D` for (x, y, z) objects that are not a `carla.Location`
- Removed `client.ping()`, `client.get_server_version()` accomplishes the same
- Renamed `contains_X()` methods to `has_X()`
- Changed `client.set_timeout(seconds)` to use seconds (float) instead of milliseconds
- Allow iterating attributes of an Actor's Blueprint
- Fixed wildcard filtering issues, now "vehicle.*" or "*bmw*" patterns work too
- Fixed `actor.set_transform()` broken for attached actors
* More Python example scripts and improved the present ones
- Now all the scripts use the list of recommended spawn points for each map
- Renamed "example.py" to "tutorial.py", and updated it with latest changes in API
- Added timeout to the examples
- "manual_control.py" performance has been improved while having more measurements
- "manual_control.py" now has options to change camera type and position
- "manual_control.py" now has options to iterate weather presets
- "manual_control.py" now has a fancier HUD with lots of info, and F1 key binding to remove it
- Added "dynamic_weather.py" to change the weather in real-time (the one used in the video)
- Added "spawn_npc.py" to quickly add a lot of NPC vehicles to the simulator
- Added "spawn_npc.py --safe" to only add non-problematic vehicles
- "vehicle_gallery.py" also got some small fixes
* Asset and content improvements
- New vehicle: Lincoln MKZ 2017
- Refactored weather system, parametrized to make it easier to use
- Improved control of bikes and motorbikes, still not perfect but causes less accidents
- Added building block generator system
- Misc city assets: New building, tunnel columns, rail-road bridges, new textures, new urban props
- Adjusted vehicle physics and center of mass
- Adjusted the maximum distance culling for foliage
- Adjusted pedestrian animations and scale issues (not yet available with new API though)
- Improved map building blueprints, spline based asset repeaters, and wall building tools
- Replaced uses of Unreal's Foliage system with standard static meshes to work around a visual bug in Linux systems
- Fixed filenames too long when packing the project on Windows
- Fixed "SplineMeshRepeater" loses its collider mesh from time to time
- Standardized asset nomenclature
* New system for road information based on OpenDrive format
- Added new map classes for querying info about the road layout and topology
- Added methods for finding closest point on the road
- Added methods for generating and iterating waypoints based on the road layout
- Added OpenDrive parser to convert OpenDrive files to our map data structures
* Other miscellaneous improvements and fixes
- Fixed single channel Lidar crash (by cwecht)
- Fixed command-line argument `-carla-settings` fails to load absolute paths (by harlowja)
- Added an option to command-line to change quality level when launching the simulator, `-quality-level=Low`
- Added ROS bridge odometry message (by ShepelIlya)
- New lens distortion shader, sadly not yet integrated with our cameras :(
- New Docker tutorial
- Disabled texture streaming to avoid issue of textures not loading in scene captures
- Adjusted scene capture camera gamma to 2.4
- Fixed leaking objects in simulation when despawning a vehicle. Now Pawn's controller is destroyed too if necessary when destroying an Actor
- Fixed overflow on platform time-stamp, now it uses `double`
- Upgraded rpclib to fix crash when client exits too fast (rpclib/PR167)
- Moved "PythonClient" inside deprecated folder to avoid confusion
- Refactored sensor related code
- New plugin system for sensors that simplifies adding sensors, mini-tutorial at 830
- Compile-time dispatcher for sensors and serializers
* Improvements to the streaming library
- Added multi-streams for streaming simultaneously to multiple clients (used by the "tick" message)
- Messages re-use allocated memory when possible
- Allows unsubscribing from a stream
- Fixed client receives interleaved sensor messages, some messages can be discarded if connection is too slow though
- Fixed streaming client fails to connect in Windows
- Fixed streaming client keeps trying to reconnect after destroying a sensor
* Refactored client C++ API
- Python GIL is released whenever possible to avoid blocking
- Fixed deadlock when closing the simulator while a client is connected
- Fixed crash on simulator shutdown if a client has connected at some point
- Set methods are now sent async which greatly improves performance in the client-side
- Vehicle control is cached and not sent if haven't changed
- Suppressed exceptions in destructors
* Other development improvements
- Improved Linux Makefile, fine-grained targets to reduce compilation times in development
- Workaround for "setup.py" to link against "libcarla_client.a" again (Linux only)
- Added support for ".gtest" file, each line of this file is passed to GTest executables as arguments when running `make check` targets
- Python eggs are also archived on Jenkins to easily get them without downloading the full package
- Added uncrustify config file for formatting UE4 C++ code