All notable changes to this project will be documented in this file.
This changelog is to adhere to the format given at keepachangelog and should maintain semantic versioning.
All text added must be human-readable.
Copy and pasting the git commit messages is NOT enough.
- Restored deprecated
debug_log
to benchmark runner.
- Added a utility method
SMARTS.prepare_observe_from()
which allows safely adding sensors to vehicles. - The following methods now exist explicitly
Vehicle.{add_sensor|detach_sensor|subscribed_to|sensor_property|}
. - Resources loaded with
load_yaml_config_with_substitution()
now substitute in SMARTS configuration with single squiggle bracket${}
syntax. This is currently restricted to environment variable names prefixed with"SMARTS_"
. This extends to benchmark configuration and vehicle configuration. - Default vehicle definitions can be now modified using
assets:default_vehicle_definitions_list
/SMARTS_ASSSETS_DEFAULT_VEHICLE_DEFINITIONS_LIST
or by providing avehicle_definitions_list.yaml
in the scenario. These vehicle types are related to theAgentInterface.vehicle_type
attribute. - New
CustomRender
agent interface option added. This allows usingglsl
fragment scripts to generate images from camera textures and simulation buffers. - New
ObfuscationMap
agent interface option added. This uses theOccupancyGridMap
to help generate an image of ground viewable area from the ego vehicle's perspective. - There is now a centralized
TraCI
server mananger that can be used to prevent port collisions. It can be run usingpython smarts.core.utils.sumo_server
and the use of the server can be enabled withSMARTS_SUMO_TRACI_SERVE_MODE="central"
.
VehicleIndex.build_agent_vehicle()
no longer hasfilename
andsurface_patches
parameters.- The following modules have been renamed:
envision.types
->envision.etypes
,smarts.core.utils.logging
->smarts.core.utils.core_logging
,smarts.core.utils.math
->smarts.core.utils.core_math
,smarts.sstudio.types
->smarts.sstudio.sstypes
. For compatibility reasons they can still be imported by their original module name. - Exposed
traffic:traci_retries
/SMARTS_TRAFFIC_TRACI_RETRIES
to control how many times theSumoTrafficSimulation
will try to restart when using default configuration. rllib
is now constrained as<=2.9,>2.4
.- The
examples/e12_rllib
training examples{pg_example|pg_pbt_example}.py
have been changed to{ppo_example|ppo_pbt_example}.py
.Policy Gradients (PG)
has been dropped in favor of the more well documentedProximal Policy Optimization (PPO)
. - Vehicles can now have sensors added to, overwritten, or replaced outright.
- Logging is now improved to give information about sensor changes in the sensor manager.
-
- Renamed
vehicle.urdf
tosedan.urdf
.
- Renamed
- Environment prefix is now configurable for custom
smarts.core.config()
calls. Vehicle.build_agent_vehicle()
argumentvehicle_filepath
now renamed tovehicle_dynamics_filepath
.- Renamed
MACOS
pybullet
gui utility fromsmarts.core.utils.bullet.BulletClient
tosmarts.core.utils.pybullet.BulletClientMACOS
. Vehicle.build_agent_vehicle()
andVehicle.build_social_vehicle()
moved toVehicleIndex
.smarts.core.configuration.Configuration.get_settings()
now uses thePyYAML
default instead of forcefully casting tostr
.- Added
AgentInterface.vehicle_class
which allows selection of a dynamics vehicle from the vehicle definitions list file. - Waypoints now have a
position
property (which will eventually replacepos
). - You must now implement
act()
for any agent inheriting fromsmarts.core.agent.Agent
. FunctionAgent
is now no longer dynamically defined.Vias.hit_via_points
is now a property.ViaPoint
now has an attributehit
which determines if the point has been "collected".- Dependencies switched back to using
-
instead of_
(e.g. "camera-obs").
- Module
smarts.core.models
is now deprecated in favour ofsmarts.assets
. - Deprecated a few things related to vehicles in the
Scenario
class, including thevehicle_filepath
,tire_parameters_filepath
, andcontroller_parameters_filepath
. The functionality is now handled through the vehicle definitions. AgentInterface.vehicle_type
is now deprecated with potential to be restored.
- The performance of SUMO roadmap queries using
SumoRoadNetwork.{nearest_lanes|nearest_lane|offset_along_lane}()
have been greatly improved for long lanes. SumoTrafficSimulation
gives clearer reasons as to why it failed to connect to the TraCI server.- Suppressed an issue where
pybullet_utils.pybullet.BulletClient
would cause an error because it was catching a nonBaseException
type. - Fixed a bug where
smarts.core.vehicle_index.VehicleIndex.attach_sensors_to_vehicle()
would pass a method instead of aPlanFrame
to the generated vehicleSensorState
. - Fixed an issue where
AgentInterface.vehicle_type
would not affect agent vehicles when attempting to take over an existing vehicle. - Fixed a case where newly created agent vehicles would have a constant
"sedan"
size instead of the size ofAgentInterface.vehicle_type
. - Fixed a case where if vehicles are replaced they would not respect controller and vehicle parameters.
- Fixed an issue where
RandomRoute
would always give the same route across traffic groups in scenario studio. - Fixed an issue where
SMARTS
might not be explicitly destroyed in theros_driver
. - Fixed issue where
SumoTrafficSimulation
could get locked up on reset if a scenario had only 1 map but multiple scenario variations. - Fixed an issue where an out-of-scope method reference caused a pickling error.
- Fixed an issue where the
EnvisionDataFormatterArgs
default would use a locally defined lambda and cause a serialization failure. - Fixed an issue where user configuration was being overridden.
- Fixed a
pkg_resources
deprecation warning inpython3.10
and up. - Fixed the envision camera to center on the map which was broken due to a change in the
gltf
metadata hierarchy. - Fixed an issue where you would need to install
waymo
in order to use any kind of dataset histories. - Fixed an issue where Pycharm would load
smarts/sstudio/types
as the integratedtypes
module. See #2125. - Fixed an issue where the
e12_rllib
examples would use the wrong path for the default loop scenario. - Fixed an issue where the sensor state could be
None
when callingSMARTS.observe_from()
on a non-ego vehicle. See #2133. - The via sensor and trip meter sensor now work without a mission.
- Fixed a bug with
VehicleIndex.attach_sensors_to_vehicle()
that would generate an invalid plan. - Fixed a bug where vehicle sensor meta attributes would reference the wrong vehicle.
- Resolved issue with road waypoints not showing waypoints if the horizon was larger than the start of the lane.
- Fixed an issue where
SMARTS.reset()
would be unable to render cameras. - Squashed TraCI "retrying" stdout messages.
- SMARTS option
smarts[examples]
added for running SMARTS examples.
- The following dependencies have been loosened:
numpy
,opencv
,torch
. - Clarified engine configuration location under
logging.info
instead ofprint
. ScenarioOrder
enumeration values are now lower-case (e.g.scrambled
instead ofScrambled
).EnvReturnMode
,ScenarioOrder
, andSumoOptions
have been moved tosmarts.env.configs.hiway_env_configs
.trimesh
version has been loosened totrimesh>=3.9.29
.
- The
smarts
package now works withpython3.10
andpython3.11
. - Fixed an issue where default
AgentInterface.events
shared a reference. - Episode log now lists current value out of maximum rather than index.
- Episode log now correctly shows all agent scores.
- Added
scipy
back to dependencies to fix scenario building. - Fixed
gymnasium
floating type cast warnings in action conversion.
- Removed previously deprecated
SMARTS.timestep_sec
attribute.
- Added
rllib/pg_example.py
to demonstrate a simple integration withRLlib
andtensorflow
for policy training. - Added
rllib/pg_pbt_example.py
to demonstrate integration withray.RLlib
,tensorflow
, andray.tune
for scheduled policy training. - Added engine configuration
ray:num_cpus
/SMARTS_RAY_NUM_CPUS
which controls ray cpu usage (this overridescore:observation_workers
when usingcore:sensor_parallelization=ray
). - Added engine configuration
ray:num_gpus
/SMARTS_RAY_NUM_GPUS
which controls ray gpu usage.
- Updated
smarts[ray]
(ray==2.2
) andsmarts[rllib]
(ray[rllib]==1.4
) to useray~=2.5
. - Introduced
tensorflow-probability
tosmarts[rllib]
. - Updated
RLlibHiWayEnv
to use thegymnasium
interface. - Renamed
rllib/rllib.py
torllib/pg_pbt_example.py
. - Loosened constraint of
gymnasium
from==0.27.0
to>=0.26.3
. - Engine configuration of
ray
now affects the parallel benchmark runner. - Driving SMARTS benchmarks (
scl benchmark run <benchmark_id>=driving_smarts_*
) requirementray<=2.2.0
bumped toray<2.6.0
. LaneFollowingController
now uses a different pole placement method to compute lateral/heading gains. Numerical behaviour is unchanged. Performance is slightly faster.- Upgraded Stable Baselines3 from v1.7.0 to v2.0.0, and switched to Gymnasium backend, in Drive and VehicleFollowing RL examples.
- Changed all uses of
gym
to usegymnasium
. - Changed
gymnasium
to be an optional dependency. Usepip install -e .[gymnasium]
to install it. - Renamed the
[gym]
optional install to[gif_recorder]
. - Optimized events calculation to avoid redundant roadmap calls.
- Missing neighborhood vehicle state
'lane_id'
is now added to thehiway-v1
formatted observations. - Fixed a regression where
pybullet
build time messages returned. make format
no longer complains about a broken./baselines
path.
- Removed
scl benchmark run --debug-log
. The same setting can be configured withray:log_to_driver
orSMARTS_RAY_LOG_TO_DRIVER
. - Removed
TruncatedDistribution
from scenario studio. - Removed
scipy
as a core package dependency. - Removed
gym
as a core package dependency. - Removed
hiway-v0
env. - Removed
Api021Reversion
gym wrapper class.
visdom
can now be configured through the engine.ini configuration filevisdom:enabled
,visdom:hostname
, andvisdom:port
(environment variablesSMARTS_VISDOM_ENABLED
,SMARTS_VISDOM_HOSTNAME
,SMARTS_VISDOM_PORT
.)- Added an install extra that installs the requirements for all optional modules. Use
pip install .[all]
. - Added
Condition
,ConditionRequires
,ConditionState
and various condition implementations to enable logical operations in scenarios. - Traffic lights are now rendered in Envision.
- Traffic lights are now rendered in camera observations.
- Interest vehicles now show up in Envision.
- Seed of
hiway-v1
env can be retrieved through a new propertyseed
. - Added
TrafficEngineActor
to describe a scenario studio defined actor that is controlled by a traffic engine. - Docker images from now on out base from
ubuntu:focal
. - A new Docker image has been added for software rendering for use cases where there is no display and GPU.
- Changed waypoints in sumo maps to use more incoming lanes into junctions.
- Increased the cutoff radius for filtering out waypoints that are too far away in junctions in sumo maps.
- Made SUMO dependencies optional. Use
pip install -e .[sumo]
to install them. - Made Envision dependencies optional. Use
pip install -e .[envision]
to install them. - Made Waymo dependencies optional. Use
pip install -e .[waymo]
to install them. SumoTrafficSimulator
now uses the last vehicle subscription update to backroute_for_vehicle()
. This means that the routes of vehicles can still be determined even ifSumoTrafficSimulation
disconnects.- Reward function in platoon RL example retrieves actor-of-interest from marked neighborhood vehicles.
dist_to_destination
metric cost function computes the route distance and end point for vehicle of interest contained in social agents, SMARTS traffic provider, SUMO traffic provider, and traffic history provider.sstudio
generated scenario vehicle traffic IDs are now shortened.TrapEntryTactic.wait_to_hijack_limit_s
field now defaults to0
.EntryTactic
derived classes now containcondition
to provide extra filtering of candidate actors.EntryTactic
derived classes now containstart_time
.info
returned byhiway-v1
inreset()
andstep()
methods are unified.- Changed instances of
hiway-v0
andgym
to usehiway-v1
andgymnasium
, respectively. RoadMap.Route
now optionally stores the start and end lanes of the route.hiway-v1
can now be configured for per-agent or environment reward(s), truncation(s), termination(s), and info(s) throughenvironment_return_mode
.hiway-v1
'sobservation_options
no longer has an effect on the environment rewards, truncations, and terminationsagent|environment
style return mode.DistToDestination
metric is now computed by summing the (i) off-route distance driven by the vehicle from its last on-route position, and (ii) the distance to goal from the vehicle's last on-route position.Steps
metric is capped by scenario duration set in the scenario metadata.- Overall metric score is weighted by each agent's task difficulty.
visdom
is set to be removed from the SMARTS object parameters.- Deprecated
start_time
on missions.
- Fixed implementations of
RoadMap.waypoint_paths()
to ensure that the result is never empty. - The routes of
SumoTrafficSimulation
traffic vehicles are now preserved to be passed over to other traffic simulators when theSumoTrafficSimulation
disconnects. SumoTrafficSimulation
no longer reports that it manages vehicles when it is disconnected.- Fixed waypoints so that they will always be the length of the
lookahead
parameter, even in junctions. - Fixed an issue where a single waypoint would appear in off-route lanes for missions with a goal.
- Fixed an issue where the
off_route
event would be incorrectly triggered when driving on overlapping lanes. - Fixed an underlying issue with the sensor manager where the sensors were not removed immediately.
- Fixed an issue where warnings could be generated when an agent takes over an existing vehicle if the vehicle previously had sensors on it.
- Fixed vehicle gap metric to consume ragged waypoints matrix.
- Fixed an issue where making a deep copy of the vehicle index would cause the pybullet client to crash the simulation.
- Removed the following dependencies from smarts:
pandas
,rich
,twisted
,sh
. - Moved
baselines/marl_benchmark
from this repository tosmarts-project/smarts-project.rl
repository. - Removed
intersection-v0
env andexamples/rl/intersection
as they are superseded bydriving-smarts-v2023
env andexamples/rl/drive
, respectively. - Removed
examples/rl/racing
as base repositorydanijar/dreamerv2
is not updated anymore and this example will be superseded byexamples/rl/drive
. - Removed
FrameStack
environment wrapper. - Removed
SMARTS.traffic_sim
property. - Removed remote agent modules.
- Removed
protobuf
as a core package dependency.
- Added an actor capture manager interface,
ActorCaptureManager
, which describes a manager that handles the change of control of actors. Operations in an actor manager step should not cause conflict in the simulation. - Added a new entry tactic,
IdEntryTactic
, which provides the scenario the ability to select a specific actor for an agent to take over. - Registered a new
chase-via-points-agent-v0
agent in agent zoo, which can effectively chase via points across different road sections by using the waypoints. - Added new driving-smarts-v2023 benchmark consisting of new (i) driving-smarts-v2023 env and (ii) platoon-v0 env.
- Added baseline example, consisting of training, inference, and zoo agent registration, for the platooning task in Driving SMARTS 2023.3 benchmark.
- Documented the challenge objective, desired inference code structure, and use of baseline example, for Driving SMARTS 2023.3 benchmark, i.e., platooning task.
- Added a new scenario consisting of merge-exit map, sumo lead vehicle, and traffic, for the vehicle-following task.
- Added a
SensorManager
which manages placing sensors on actors in the simulations. - The
VehicleState
now has thebounding_box_points
property to get the vehicle minimum bounding box as a set of points. - Added engine configuration options for
core:debug
,core:observation_workers
, andcore:reset_retries
. - Explained in the docs that agents may spawn at different times in multiagent scenarios.
- Added
RaySensorResolver
as an alternative parallel resolver. - Added
[ray]
option forsmarts
package. This currently conflicts with[rllib]
. - Added engine
observation_workers
configuration which can be used to configure the number of parallel sensor workers: 0 runs the sensors on the local thread, >=1 runs using the multiprocessing backing. - Added engine
sensor_parallelization
configuration of sensor parallelization backing, options ("mp"|"ray"): "mp" python multiprocessing, "ray" ray worker backing. - Added engine
reset_retries
configuration engine retries before the simulator will raise an error on reset. - Introduced new comfort cost function in metric module.
- Introduced new gap-between-vehicles cost function in metric module.
- Added baseline example, consisting of training, inference, and zoo agent registration, for the driving and turning tasks in Driving SMARTS 2023.1 and 2023.2 benchmarks, respectively. It uses RelativeTargetPose action space.
- Documented the challenge objective, desired inference code structure, and use of baseline example, for Driving SMARTS 2023.1 (i.e., basic motion planning) and 2023.2 (i.e, turns) benchmarks.
- Added an env wrapper for constraining the relative target pose action range.
- Added a specialised metric formula module for Driving SMARTS 2023.1 and 2023.2 benchmark.
- The trap manager,
TrapManager
, is now a subclass ofActorCaptureManager
. - Considering lane-change time ranges between 3s and 6s, assuming a speed of 13.89m/s, the via sensor lane acquisition range was increased from 40m to 80m, for better driving ability.
- The
AgentType.Full
now includesroad_waypoints
,accelerometer
, andlane_positions
. ActionSpaceType
has been moved fromcontroller
to its own file.VehicleState
has been moved to its own file.- Sensors are no longer added and configured in the
agent_manager
. They are instead managed in thesensor_manager
. - Renamed all terminology relating to actor to owner in
VehicleIndex
. - Renamed all terminology relating to shadow actor to shadower in
VehicleIndex
. Collision
has been moved fromsmarts.core.observations
tosmarts.core.vehicle_state
.- The trap manager,
TrapManager
, is now a subclass ofActorCaptureManager
. - Considering lane-change time ranges between 3s and 6s, assuming a speed of 13.89m/s, the via sensor lane acquisition range was increased from 40m to 80m, for better driving ability.
- Modified naming of benchmark used in NeurIPS 2022 from driving-smarts-competition-env to driving-smarts-v2022.
- Social agent actor vehicles are now exactly named the same as the
name
of the actor. - Sstudio generated scenario vehicle traffic ids are now shortened.
- ChaseViaPoints zoo agent uses unconstrained path change command, instead of being constrained to [-1, 0, +1] path change commands used previously.
- Made the metrics module configurable by supplying parameters through a
Params
class. - Neighborhood vehicles which should be excluded from the
dist_to_obstacles
cost function can be specified throughParams
. This would be useful in certain tasks, like the vehicle-following task where the distance to the lead vehicle should not be included in the computation of thedist_to_obstacles
cost function. - Unified the computation of
dist_to_destination
(previously known ascompletion
) andsteps
(i.e., time taken) as functions inside the cost functions module, instead of computing them separately in a different module. - In the metrics module, the records which is the raw metrics data and the scoring which is the formula to compute the final results are now separated to provided greater flexibility for applying metrics to different environments.
- Benchmark listing may specify specialised metric formula for each benchmark.
- Changed
benchmark_runner_v0.py
to only average records across scenarios that share the same environment. Records are not averaged across different environments, because the scoring formula may differ in different environments. - Renamed GapBetweenVehicles cost to VehicleGap cost in metric module.
- Camera metadata now uses radians instead of degrees.
- The
Panda3d
implementation ofRenderer
has been extracted from the interface and moved tosmarts.p3d
. - Made all metrics as functions to be minimised, except the overall score which is to be maximised.
- Driving SMARTS 2023.3 benchmark and the metrics module now uses
actor_of_interest_re_filter
from scenario metadata to identify the lead vehicle. - Included
RelativeTargetPose
action space to the set of allowed action spaces inplatoon-v0
env. Collision.collidee_id
now gives the vehicle id rather than the name of the owner of the vehicle (usually the agent id.)Collision.collidee_owner_id
now provides the id of the controllingagent
(or other controlling entity in the future.) This is because 1)collidee_id
should refer to the body and 2) in most cases the owner name would beNone
.- Entry tactics now use conditions to determine when they should capture an actor.
- Fixed issues related to waypoints in junctions on Argoverse maps. Waypoints will now be generated for all paths leading through the lane(s) the vehicle is on.
- Fixed an issue where Argoverse scenarios with a
Mission
would not run properly. Trip.actor
field is now effective. Previouslyactor
had no effect.- Fixed an issue where building sumo scenarios would sometimes stall.
VehicleIndex
no longer segfaults when attempting torepr()
it.- Fixed issues related to waypoints in SUMO maps. Waypoints in junctions should now return all possible paths through the junction.
- Fixed CI tests for metrics.
- Fixed
traffic_histories_to_observations
script. - Fixed an issue where the actor states and vehicle states were not synchronized after simulation vehicle updates resulting in different values from the simulation frame.
- Minor fix in regular expression compilation of
actor_of_interest_re_filter
from scenario metadata. - Fixed acceleration and jerk computation in comfort metric, by ignoring vehicle position jitters smaller than a threshold.
- Fixed an issue in Envision where vehicle debug info would not update correctly.
- Removed the deprecated
waymo_browser
utility. - Removed camera observation
created_at
attribute from metadata to make observation completely reproducible. - Removed
cached_property
as a dependency.
- Moved benchmark scenarios into SMARTS/scenarios folder.
- Simplified the scenario loading code in driving_smarts benchmark.
- The
"hiway-v1"
environment now usesScenarioOrder
configuration rather than a boolean.
- Fix case where heading source attribute could be undefined.
- Updated interaction aware motion prediciton zoo agent to work with smarts.
- Edge dividers no longer flow through intersections in Argoverse 2 maps.
- Added vehicle of interest coloring through scenario studio. This lets the scenario color vehicles that match a certain pattern of vehicle id.
- SMARTS now provides
remove_provider
to remove a provider from the simulation. Use carefully.
- Fixed "rl/racing"
numpy
incompatibility. - Fixed an issue with SUMO maps where waypoints in junctions would not return all possible paths.
- Fixed an issue in Argoverse maps where adjacent lanes would sometimes not be grouped in the same road.
- Added support for the Argoverse 2 Motion Forecasting Dataset (see
scenarios/argoverse
) - Added
waymo_open_dataset
as a module at the SMARTS repo level, to be able to load waymo scenarios without any external packages
- Changed the
lanepoint_spacing
setting inMapSpec
to be non-optional. Lanepoints are now generated lazily when waypoints are used.
- Removed
waymo-open-dataset-tf-2-4-0
package as a dependency
- Agent manager now has
add_and_emit_social_agent
to generate a new social agent that is immediately in control of a vehicle.
- Changed the minimum supported Python version from 3.7 to 3.8
- Fixed
hiway-v1
environment to use"render_modes"
instead of"render.modes"
. - Fixed an issue with SMARTS where the social vehicles started instantly regardless of what mission start time they were given.
- Missing waypoint paths
'lane_id'
is now added to thehiway-v1
formatted observations. - Engine config utility now properly evaluates
[Ff]alse
asFalse
when using abool
cast.
- Added objective, scenario description, and trained agent performance, to the Driving Smarts 2022 benchmark documentation.
- Unique id suffix is removed from vehicle name while building agent vehicle in
VehicleIndex.build_agent_vehicle()
function.
- Missing neighborhood vehicle ids are now added to the
highway-v1
formatted observations. - Stopped agent providers from removing social agents when they have no actor.
- Using
trip
in sstudio traffic generation no longer causes a durouter error. - Chassis collision AABB first pass now has an additional
0.05m
tolerance to identify axis aligned collisions that would previously be missed. - Agent to mission padding warning now occurs when there are less missions than agents rather than when there are the same number of agents as missions.
- Agent manager should no longer de-synchronize vehicle ids with the vehicle index.
- Added a math utility for generating combination groups out of two sequences with unique index use per group. This is intended for use to generate the combinations needed to give a unique agent-mission set per reset.
- Added basic tests for
hiway-v1
resetting and unformatted observations and actions. - Added
"steps_completed"
to observation formatter.
- Ensured that
hiwayenv.reset
provides unique agent-mission sets per reset. - Fixed an issue where
sstudio.types.Via
was not hashable.
- Added a zoo agent, named Control-and-Supervised-Learning, from NeurIPS 2022 submission. This zoo agent runs in benchmark
driving_smarts==0.0
. - Added a zoo agent, named Discrete Soft Actor Critic, from NeurIPS 2022 submission. This zoo agent runs in benchmark
driving_smarts==0.0
. - Added basic tests for
hiway-v1
resetting and unformatted observations and actions. - Added
actor_ids
as a provider interface to check the actors that the provider is currently in charge of.
HiWayEnvV1
derived environments now allow an explicit scenario throughreset(options["scenario"])
.HiWayEnvV1
derived environments now allow an explicit simulation start time throughreset(options["start_time"])
.- Exposed
smarts
as a property onHiWayEnvV1
. - Made the heading input relative to the current heading in
RelativeTargetPose
action space.
- Issue where a 0 length lane caused
envision
to crash. - Fixed an issue where
Feature.type_specific_info
was calling a non-existant method.
- Engine configuration utility that uses the following locations to allow configuration of the SMARTS engine. The engine consumes the configuration files from the following locations in the following priority:
./engine.ini
,~/.smarts/engine.ini
,$GLOBAL_USER/smarts/engine.ini
, and${PYTHON_ENV}/lib/${PYTHON_VERSION}/site-packages/smarts/engine.ini
. - Added map source uri as
map_source
inside ofhiway-v1
reset info to indicate what the current map is on reset. - Added NGSIM documentation.
- Added a zoo agent, named Interaction-Aware Motion Prediction, from NeurIPS2022 submission. This zoo agent runs in benchmark
driving_smarts==0.0
. - Added Agent Zoo documentation in ReadTheDocs.
- Made changes in the docs to reflect
master
branch as the main development branch. - Enabled supplying agent locator directly to benchmark runner and removed the need for an intermediary config file. Updated benchmark docs to reflect this.
- Individualised the agent instances in the
benchmark_runner_v0.py
. - Made driving_smarts_competition_v0 env configurable through supply of
AgentInterface
. - Observation of driving_smarts_competition_v0 env was fixed to be of type
ObservationOptions.unformatted
.
- Fixed an exit error that occurs when envision attempts to close down.
- Clarified the actions for
ActionSpaceType.Continuous
andActionSpaceType.ActuatorDynamic
in their respective docstrings. - Excluded from wheel any scenario build files in pattern
smarts/**/build/**/*.xml
. - Fixed an unintended regression in the metrics.
- Removed duplicated
smarts.env.gymnasium.action_conversion
module.
- Added action formatting option to
hiway-v0
. - Introduced
debug: serial: bool
option to driving smarts benchmark config.
- Moved action and observation conversions from
smarts.env.gymnasium.utils
tosmarts.env.utils
.
- Fixed an issue where termination while envision is enabled but not connected would cause a flurry of broken pipe errors.
- Fixed an issue where activating visdom would cause errors.
- Fixed an issue where metrics break down with unformatted observations.
- Fixed an issue where
hiway-v1
would cause an exception when using "unformatted" observations. - Unformatted actions and observations in
hiway-v0
provideNone
rather than an incorrect space.
- The
hiway-v1
environment can now be configured to provide an "unformatted" observation.
- Scenario paths is no longer manually supplied to Envision server while setup. Scenario paths are automatically sent to Envision server from SMARTS during simulation startup phase.
- Updated "hiway-v1" with
gymnasium
action spaces using newActionsSpaceFormatter
utility.
- Fixed an issue where a sensor detach call when a bubble vehicle exits a bubble could cause a program crash.
- Fixed issue with "hiway-v0" where "agent_interfaces" was not populated.
- Add missing
distance_travelled
to thehiway-v1
observations.
- Fixed issue where Driving SMARTS benchmark only did 2 evaluations per scenario instead of 50.
- Removed unclosed file warnings from benchmark output.
- Exposed
.glb
file metadata through the scenarioScenario.map_glb_metadata
attribute. - Added single vehicle
Trip
into type. - Added new video record ultility using moviepy.
- Added distance check between bubble and vehicle to avoid generating unnecessary cursors.
- Added
ConfigurableZone
forZone
object to types which enable users to build bubble by providing coordinates of the polygon. - Added "SMARTS Performance Diagnostic" development tool for evaluating the simulation performance.
- Added a "All Simulation" button on the header of Envision and made small-windowed simulation(s) in the "All Simulations" page clickable to maximize.
- An env wrapper
Metrics
is introduced to compute agents' performance metrics. - Extracted
TraciConn
to the SMARTS utilities as a simplified utility to help with connecting toTraCI
. - Added
HiWayV1
gymansium
environment to smarts. This can be referenced through gymnasium assmarts.env:hiway-v1
. - Added
scl benchmark run
andscl benchmark list
for running and listing benchmarks. - Added the "driving_smarts" benchmark as a feature of the new
scl benchmark
suite. - Added
smarts.benchmark
module which deals with running benchmarks.- Added
smarts.core.entrypoints.benchmark_runner_v0
which is the initial benchmark fully integrated intosmarts
.
- Added
- Added documentation with benchmark information.
- Minimum
SUMO
version allowed bySumoTrafficSimulation
is now1.10.0
. - The
ProviderManager
interface now uses a string id for removal of an actor instead of an actor state. - Renamed many fields of the
smarts.core.agent_interface.AgentInterface
dataclass:lidar
->lidar_point_cloud
,waypoints
->waypoint_paths
,rgb
->top_down_rgb
,neighborhood_vehicles
->neighborhood_vehicle_states
, andogm
->occupancy_grid_map
. - Renamed
smarts.core.provider.Provider
'saction_spaces
toactions
. - Moved
VehicleObservation
,EgoVehicleObservation
,Observation
,RoadWaypoints
,GridMapMetadata
,TopDownRGB
,OccupancyGridMap
,DrivableAreaGridMap
,ViaPoint
,Vias
,SignalObservation
, andCollision
fromsmarts.core.sensors
tosmarts.core.observations
. They are now all typedNamedTuples
. - Renamed
GridMapMetadata
fieldcamera_pos
tocamera_position
.
- Removed all of PyMarl contents, including related interface adapter, environments, and tests.
- Removed ray usage example.
- Moved ULTRA from
huawei-noah/SMARTS
tosmarts-project/smarts-project.rl
repository. - Removed observation_adapter, reward_adapter, and info_adapter, from
hiway_env
. - Removed
action_space
field from thesmarts.core.agent_interface.AgentInterface
dataclass.
- Updated the RL example
racing
to usesmarts[camera_obs]==0.7.0rc0
and continuous flowing traffic scenario. Simplified theracing
RL example folder structure. - Envision "near realtime" mode bugfix
- Corrected an issue where traffic lights in SUMO traffic simulation could be empty and cause a termination of the simulation.
- Fixed an issue where vehicles could cause SMARTS to terminate from being in multiple providers.
- Fixed an issue where
sumo_traffic_simulation
would disconnect on a non-terminal exception. - SMARTS now aggressively attempts to connect to a SUMO process as long as the SUMO process remains alive.
- SUMO traffic simulation
route_for_vehicle
had semantic errors and now works again. - SUMO is now supported up to version
1.15.0
. Versions of SUMO1.13.0
and onward are forced to reset rather than reload because of errors with hot resetting versions starting with1.13.0
.
- Added a basic background traffic ("social vehicle") provider as an alternative to the SUMO traffic simulator. This can be selected using the new
"engine"
argument toTraffic
in Scenario Studio. - Added a
multi-scenario-v0
environment which can build any of the following scenario, namely,1_to_2lane_left_turn_c
,1_to_2lane_left_turn_t
,3lane_merge_multi_agent
,3lane_merge_single_agent
,3lane_cruise_multi_agent
,3lane_cruise_single_agent
,3lane_cut_in
, and3lane_overtake
. Additional scenarios can also be built by supplying the paths to the scenario directories. - Added ego's mission details into the
FormatObs
wrapper. - Added
SmartsLaneChangingModel
andSmartsJunctionModel
to types available for use with the new smarts traffic engine within Scenario Studio. - Added option to
AgentInterface
to include traffic signals (lights) inEgoVehicleObservation
objects. - Added the ability to hover over vehicles and roadmap elements in Envision to see debug info.
- Deprecated a few things related to traffic in the
Scenario
class, including theroute
argument to theScenario
initializer, theroute
,route_filepath
androute_files_enabled
properties, and thediscover_routes()
static method. In general, the notion of "route" (singular) here is being replaced with "traffic_specs
" (plural) that allow for specifying traffic controlled by the SMARTS engine as well as Sumo. waymo_browser.py
has been deprecated in favour of the scl waymo command line tools.
- Add
lane_offset
toWaypoint
class andlane_postion
to bothEgoVehicleObservation
andVehicleObservation
classes to expose the reference-line (a.k.a. Frenet) coordinate system. - Traffic history vehicles can now be hijacked within a bubble. They will be relinquished to the SMARTS background traffic provider upon exiting the bubble.
- Changed the name of the
Imitation
action space toDirect
. - Removed
endless_traffic
option fromSumoTrafficSimulator
and instead addedrepeat_route
toFlow
type in Scenario Studio. - Renamed
examples/observation_collection_for_imitation_learning.py
toexamples/traffic_histories_to_observations.py
. - Renamed
examples/history_vehicles_replacement_for_imitation_learning.py
toexamples/traffic_histories_vehicle_replacement.py
. SumoTrafficSimulation
will now try to hand-off the vehicles it controls to the new SMARTS background traffic provider by default if the Sumo provider crashes.- SMARTS now gives an error about a suspected lack of junction edges in sumo maps on loading of them.
- Scenario build artifacts are now cached and built incrementally, meaning that subsequent builds (without the
clean
option) will only build the artifacts that depend on the changed DSL objects - All build artifacts are now in a local
build/
directory in each scenario's directory - The
allow_offset_map
option has been removed. This must now be set in aMapSpec
object in the scenario.py if this option is needed - All scenarios must have a
scenario.py
, and must callgen_scenario()
, rather than the individualgen_
functions, which are now private
- Removed support for deprecated json-based and YAML formats for traffic histories.
- Removed time and distance to collision values from
FormatObs
wrapper as the current implementation's correctness was in doubt.
- Fixed bug where
yaw_rate
was always reported as 0.0 (Issue #1481). - Modified
FrameStack
wrapper to support agents which start at a later time in the simulation. - Truncated all waypoint paths returned by
FormatObs
wrapper to be of the same length. Previously, variable waypoint-path lengths caused inhomogenous shape error in numpy array. - Fixed a bug where traffic providers would leak across instances due to the
(awful design decision of python)reference types defaults in arguments sharing across instances. - Fixed minor bugs causing some Waymo maps not to load properly.
- Fixed a bug where
Vehicle.bounding_box
was mirrored over Y causing on shoulder events to fire inappropriately. - Fixed an issue where the ego and neighbour vehicle observation was returning
None
for the nearbylane_id
,lane_index
, androad_id
. These now default to constantsoff_lane
,-1
, andoff_road
respectively. - Fixed a bug where bubble agents would stick around and to try to get observations even after being disassociated from a vehicle.
- Fixed a bug with the
TripMeterSensor
that was not using a unit direction vector to calculate trip distance against current route. - Fixed issues with Envision. The playback bar and realtime mode now work as expected.
- Fixed a bug where traffic history vehicles would not get traffic signal observations
- Fixed a bug where envision would not work in some versions of python due to nuances of
importlib.resource.path()
. - Fixed an issue with incorrect vehicle sizes in Envision.
- Added standard intersection environment,
intersection-v0
, for reinforcement learning where agents have to make an unprotected left turn in the presence of traffic. - Added an online RL example for solving the
intersection-v0
environment, using PPO algorithm from Stable Baselines3 library. An accompanying Colab example is also provided.
- Updated license to 2022 version.
- SMARTS reset now has a start time option which will skip simulation.
- Since
gym.Space
does not support dataclass,StdObs
type is changed from a dataclass to a dictionary.
- Old Stable Baselines3 based example is removed in favour of the new online RL example developed using Stable Baselines3 library.
- Additional case added for avoiding off-route if merging early into a lane.
- Unpack utility now unpacks dataclass attributes.
- Trap manager now uses elapsed sim time rather than step delta to associate with time.
- Added example scenario for importing the NGSIM
peachtree
dataset. - Added example scenario for importing the INTERACTION
merging
dataset
- Using
.yml
files to specify traffic history datasets have been deprecated in favor of usingsstudio.types.TrafficHistoryDataset
objects.
- Gracefully handle
EndlessGoal
missions in the MaRL benchmark. Relative goal distance withEndlessGoal
will be now always be 0. - Restore
rl-agent
to working order. Version incremented to1.1.0
. - Update
rl-agent
wheel. - Do not auto-shift maps for a scenario that has traffic history.
- Fixed Issue #1321 such that numpy's
sliding_window_view()
is no longer needed for NGSIM traffic histories. - Fixed NGSIM traffic history import bugs (see Issues #1354 and #1402).
- Added
smarts/waymo/waymo_browser.py
, a text-based utility to explore and export scenarios from the Waymo Motion dataset to SMARTS scenarios. - Added
get_vehicle_start_time()
method for scenarios with traffic history data. See Issue #1210. - Added
sb3
reinforcement-learning example. An ego agent is trained using PPO algorithm from Stable Baselines3 library, to drive as far and as fast as possible in heavy traffic, without colliding or going off-road. - Added
FormatObs
wrapper which converts SMARTS observations to gym-compliant RL-friendly vectorized observations and returnsStdObs
. - Added
Pose.as_position2d()
method which converts the pose to an [x,y] position array. - Added
EventConfiguration
dataclass in the agent interface to allow users to configure the conditions in which events are triggered - Extended the
RoadMap
API to supportWaymo
map format insmarts/core/waymo_map.py
. - Added scenarios for "importing" the i80 and us101 NGSIM trajectory history datasets
- Added an observation adapter that makes the observation ego-centric:
smarts.core.utils.ego_centric_observation_adapter
. - Added math utility
world_position_from_ego_frame
which allows converting from an ego frame to world frame. - Added math utility
wrap_value
which constrains a float between amin
andmax
by wrapping around every time the value exceedsmax
or falls belowmin
. - Added ego-centric adapter utility
smarts.core.utils.adapters.ego_centric_adapters.get_egocentric_adapters(action_space)
which provides an ego-centric pair of observation and action adapters that are used together to provide an ego-centric interface.
- If more than one qualifying map file exists in a the
map_spec.source
folder,get_road_map()
indefault_map_builder.py
will prefer to return the default files (map.net.xml
ormap.xodr
) if they exist. - Moved the
smarts_ros
ROS node from theexamples
area into thesmarts.ros
module so that it can be distributed with SMARTS packages. - Use
Process
to replaceThread
to speed up thescl scenario build-all --clean <scenario_dir>
runtime. - Modified the repository's front page to be more informative and better organised.
- Added an option to
Scenario.scenario_variations()
to make the iterator not yield a cycle.
- Moved the
AgentSpec
class out ofsmarts.core.agent
tosmarts.zoo.agent_spec
.
- Fixed a secondary exception that the
SumoTrafficSimulation
will throw when attempting to close a TraCI connection that is closed by an error. - Ensure that
smarts.core.coordinates.Pose
attributeposition
is an [x, y, z] numpy array, and attributeorientation
is a quaternion length 4 numpy array. - Update social vehicle pose in Bullet when no active agents are present.
- Fix suppression of
stderr
andstdout
onipython
platforms viasuppress_output(..)
.
- Removed the unconditional import of
Renderer
fromsmarts/core/vehicle.py
to makePanda3D
optional dependency regression. See Issue #1310.
- Added
get_vehicle_start_time()
method for scenarios with traffic history data. See Issue #1210. - Added
sb3
reinforcement-learning example. An ego agent is trained using PPO algorithm from Stable Baselines3 library, to drive as far and as fast as possible in heavy traffic, without colliding or going off-road. - Added
FormatObs
wrapper which converts SMARTS observations to gym-compliant RL-friendly vectorized observations and returnsStdObs
. - Added
Pose.as_position2d()
method which converts the pose to an [x,y] position array. - Added
EventConfiguration
dataclass in the agent interface to allow users to configure the conditions in which events are triggered - Added scenarios for "importing" the i80 and us101 NGSIM trajectory history datasets
- If more than one qualifying map file exists in a the
map_spec.source
folder,get_road_map()
indefault_map_builder.py
will prefer to return the default files (map.net.xml
ormap.xodr
) if they exist. - Moved the
smarts_ros
ROS node from theexamples
area into thesmarts.ros
module so that it can be distributed with SMARTS packages. - Use
Process
to replaceThread
to speed up thescl scenario build-all --clean <scenario_dir>
runtime. - Modified the repository's front page to be more informative and better organised.
- Moved the
AgentSpec
class out ofsmarts.core.agent
tosmarts.zoo.agent_spec
.
- Fixed a secondary exception that the
SumoTrafficSimulation
will throw when attempting to close a TraCI connection that is closed by an error. - Ensure that
smarts.core.coordinates.Pose
attributeposition
is an [x, y, z] numpy array, and attributeorientation
is a quaternion length 4 numpy array. - Update social vehicle pose in Bullet when no active agents are present.
- Document missing action space type
ActionSpaceType.TargetPose
.
- Removed the unconditional import of
Renderer
fromsmarts/core/vehicle.py
to makePanda3D
optional dependency regression. See Issue #1310.
- Fixed an issue involving relative imports in
examples/rllib/rllib.py
. - Fixed an issue with uncapped
opencv
causing an error withinray.rllib
. - Fixed a longstanding issue that did not allow camera observations unless you had windowing.
- Added
get_vehicle_start_time()
method for scenarios with traffic history data. See Issue #1210.
- If more than one qualifying map file exists in a the
map_spec.source
folder,get_road_map()
indefault_map_builder.py
will prefer to return the default files (map.net.xml
ormap.xodr
) if they exist. - Moved the
smarts_ros
ROS node from theexamples
area into thesmarts.ros
module so that it can be distributed with SMARTS packages. - Use
Process
to replaceThread
to speed up thescl scenario build-all --clean <scenario_dir>
runtime.
- Fixed a secondary exception that the
SumoTrafficSimulation
will throw when attempting to close a TraCI connection that is closed by an error.
- Added Minimum FrameRate tests to measure the fps for
smart.step()
method. See Issue #455. - Added a ROS wrapper/driver example to wrap SMARTS in a ROS (v1) node.
- Added the ability to pass an optional
time_delta_since_last_step
to SMARTS'step()
function to support variable timesteps for co-simulation. - Added
step_count
andelapsed_sim_time
to theObservation
class. See PR #974 and Issues #884 and #918. - Added
dt
toObservation
class to inform users of the observations of the variable timestep. - Added the ability to externally update SMARTS state via a new privileged-access
ExternalProvider
. - Allow specifying "-latest" as a version suffix for zoo locator strings.
- Added Base CI and dependencies requirement tests for the "darwin" platform (MacOS).
- Extended Imitation Learning codebase to allow importing traffic histories from the Waymo motion dataset and replay in a SMARTS simulation. See PR #1060.
- Added options for dealing with noise when inferring headings while importing traffic history data. See PR #1219.
- Added
ros
extension rule tosetup.py
. - Added a script to allow users to hijack history vehicles dynamically through a trigger event. See PR #1088.
- Added a
-y
option toutils/setup/install_deps.sh
to accept installation by default. See issue #1081. - Added
ParallelEnv
class and a corresponding example to simulate multiple SMARTS environments in parallel, with synchronous or asynchronous episodes. - Added
smarts.core.utils.import_utils
to help with the dynamic import of modules. - Added
single_agent
env wrapper and unit test. The wrapper converts a single-agent SMARTS environment's step and reset output to be compliant with gym spaces. - Added
rgb_image
env wrapper and unit test. The wrapper filters SMARTS environment observation and returns only top-down RGB image as observation. - Extended the
RoadMap
API to supportOpenDRIVE
map format insmarts/core/opendrive_road_network.py
. Added 3 new scenarios withOpenDRIVE
maps. See PR #1186. - Added a "ReplayAgent" wrapper to allow users to rerun an agent previously run by saving its configurations and inputs. See Issue #971.
- Added
smarts.core.provider.ProviderRecoveryFlags
as flags to determine howSMARTS
should handle failures in providers. They are as follows:NOT_REQUIRED
: Not needed for the current step. Error causes skip of provider if it should recover but cannot or should not recover.EPISODE_REQUIRED
: Needed for the current episode. Results in episode ending if it should recover but cannot or should not recover.EXPERIMENT_REQUIRED
: Needed for the experiment. Results in exception if it should recover but cannot or should not recover.ATTEMPT_RECOVERY
: Provider should attempt to recover from the exception or disconnection.
- Added recovery options for providers in
smarts.core.provider.Provider
. These include:- Add
recover()
method to providers to attempt to recover from errors and disconnection. - Add
connected
property to providers to check if the provider is still connected.
- Add
- Added recovery options to
smarts.core.smarts.SMARTS.add_provider()
- Add
recovery_flags
argument to configure the recovery options if the provider disconnects or throws an exception.
- Add
- Added
driving_in_traffic
reinforcement learning example. An ego agent is trained using DreamerV2 to drive as far and as fast as possible in heavy traffic, without colliding or going off-road. - Added
smarts.core.smarts.SMARTSDestroyedError
which describes use of a destroyedSMARTS
instance.
test-requirements
github action job renamed tocheck-requirements-change
and only checks for requirements changes without failing.- Moved examples tests to
examples
and used relative imports to fix a module collision withaiohttp
'sexamples
module. - Made changes to log sections of the scenario step in
smarts.py
to help evaluate smarts performance problems. See Issue #661. - Introducted
RoadMap
class to abstract away fromSumoRoadNetwork
and allow for (eventually) supporting other map formats. See Issue #830 and PR #1048. This had multiple cascading ripple effects (especially on Waypoint generation and caching, Missions/Plans/Routes and road/lane-related sensors). These include:- Removed the
AgentBehavior
class and theagent_behavior
parameter toAgentInterface
. - Moved the definition of
Waypoint
fromsmarts.core.mission_planner
tosmarts.core.road_map
. - Moved the definition of
Mission
andGoal
classes fromsmarts.core.scenario
tosmarts.core.plan
. - Added
MapSpec
to the SStudio DSL types and introduced a simple builder pattern for creatingRoadMap
objects.
- Removed the
- Changed the type hint for
EgoVehicleObservation
: it returns a numpy array (and always has). - Raised a warning message for building scenarios without
map.net.xml
file. See PR #1161. - Updated
smarts/env/hiway_env.py
to supportOpenDRIVE
maps so that theSMARTS
object is instantiated without theSUMO
traffic provider and social agents. See PR #1215. - Public
SMARTS
methods will throwsmarts.core.smarts.SMARTSDestroyedError
ifSMARTS.destroy()
has previously been called on theSMARTS
instance.
- Fix lane vector for the unique cases of lane offset >= lane's length. See PR #1173.
- Logic fixes to the
_snap_internal_holes
and_snap_external_holes
methods insmarts.core.sumo_road_network.py
for crude geometry holes of sumo road map. Re-adjusted the entry position of vehicles insmarts.sstudio.genhistories.py
to avoid false positive events. See PR #992. - Prevent
test_notebook.ipynb
cells from timing out by increasing time to unlimited using/metadata/execution/timeout=65536
within the notebook for regular uses, andpytest
call with--nb-exec-timeout 65536
option for tests. See for more details: "https://jupyterbook.org/content/execute.html#setting-execution-timeout" and "https://pytest-notebook.readthedocs.io/en/latest/user_guide/tutorial_intro.html#pytest-fixture". - Stop
multiprocessing.queues.Queue
from throwing an error by importingmultiprocessing.queues
inenvision/utils/multiprocessing_queue.py
. - Prevent vehicle insertion on top of ignored social vehicles when the
TrapManager
defaults to emitting a vehicle for the ego to control. See PR #1043 - Prevent
TrapManager
from trapping vehicles in Bubble airlocks. See Issue #1064. - Social-agent-buffer is instantiated only if the scenario requires social agents
- Mapped Polygon object output of Route.geometry() to sequence of coordinates.
- Updated deprecated Shapely functionality.
- Fixed the type of
position
(pose) fields emitted to envision to match the existing type hints oftuple
. - Properly detect whether waypoint is present in mission route, while computing distance travelled by agents with missions in TripMeterSensor.
- Fixed
test_notebook
timeout by settingpytest --nb-exec-timeout 65536
.
- The
timestep_sec
property of SMARTS is being deprecated in favor offixed_timesep_sec
for clarity since we are adding the ability to have variable time steps.
- Remove
ray_multi_instance
example when runningmake sanity-test
- Removed deprecated fields from
AgentSpec
:policy_builder
,policy_params
, andperform_self_test
. - Removed deprecated class
AgentPolicy
fromagent.py
. - Removed
route_waypoints
attribute fromsmarts.core.sensors.RoadWaypoints
.
- Dockerfile for headless machines.
- Singularity definition file and instructions to build/run singularity containers.
- Support multiple outgoing edges from SUMO maps.
- Added a Cross RL Social Agent in
zoo/policies
as a concrete training examples. See PR #700. - Made
Ray
and its moduleRay[rllib]
optional as a requirement/dependency to setup SMARTS. See Issue #917.
- Suppress messages in docker containers from missing
/dev/input
folder. - When code runs on headless machine, panda3d will fallback to using
p3headlessgl
option to render images without requiring X11. - Fix the case where mapping a blank repository to the docker container
/src
directory via-v $SMARTS_REPO/src
as directed in theREADME
will causescl
and other commands to not work. - Fix case where multiple outgoing edges could cause non-determinism.
- Added
ActionSpace.Imitation
and a controller to support it. See Issue #844. - Added a
TraverseGoal
goal for imitation learning agents. See Issue #848. - Added
README_pypi.md
to update to the general user installation PyPI instructions. See Issue #828. - Added a new utility experiment file
cli/run.py
to replace the context given bysupervisord.conf
. See PR #911. - Added
scl zoo install
command to install zoo policy agents at the specified paths. See Issue #603. - Added a
FrameStack
wrapper which returns stacked observations for each agent.
history_vehicles_replacement_for_imitation_learning.py
now uses new Imitation action space. See Issue #844.- Updated and removed some package versions to ensure that Python3.8 is supported by SMARTS. See issue #266.
- Refactored
Waypoints
intoLanePoints
(static, map-based) andWaypoints
(dynamic). See Issue #829. - Vehicles with a
BoxChassis
can now use anAccelerometerSensor
too. - When importing NGSIM history data, vehicle speeds are recomputed.
- Allow custom sizes for agent vehicles in history traffic missions.
- Refactored the top level of the SMARTS module to make it easier to navigate the project and understand its structure. See issue #776.
- Made Panda3D and its modules optional as a requirement/dependencies to setup SMARTS. See Issue #883.
- Updated the
Tensorflow
version to2.2.1
for rl-agent and bump up its version to1.0
. See Issue #211. - Made
Ray
and its moduleRay[rllib]
optional as a requirement/dependency to setup SMARTS. See Issue #917. - Added an error if a
SMARTS
instance reaches program exit without a manualdel
of the instance or a call toSMARTS.destroy()
.
- Allow for non-dynamic action spaces to have action controllers. See PR #854.
- Fix a minor bug in
sensors.py
which triggeredwrong_way
event when the vehicle goes into an intersection. See Issue #846. - Limited the number of workers SMARTS will use to establish remote agents so as to lower memory footprint.
- Patched a restart of SUMO every 50 resets to avoid rampant memory growth.
- Fix bugs in
AccelerometerSensor
. See PR #878. - Ensure that
yaw_rate
is always a scalar inEgoVehicleObservation
. - Fix the internal holes created at sharp turns due to crude map geometry. See issue #900.
- Fixed an args count error caused by
websocket.on_close()
sending a variable number of args. - Fixed the multi-instance display of
envision
. See Issue #784. - Caught abrupt terminate signals, in order to shutdown zoo manager and zoo workers.
- Include tire model in package by moving
tire_parameters.yaml
from./examples/tools
to./smarts/core/models
. See Issue #1140 - Fixed an issue where
SMARTS.destroy()
would still causeSMARTS.__del__()
to throw an error at program exit.
- Removed
pview
frommake
as it refers to.egg
file artifacts that we no longer keep around. - Removed
supervisord.conf
andsupervisor
from dependencies and requirements. See Issue #802.
- Added
sanity-test
script and asked new users to runsanity-test
instead ofmake test
to ease the setup process - Added
on_shoulder
as part of events in observation returned from each step of simulation - Added description of map creation and how to modify the map to allow users to create their own traffic routes in docs
- Added reference to SMARTS paper in front page of docs
- Only create
Renderer
on demand if vehicles are using camera-based sensors. See issue #725. - Added glb models for pedestrians and motorcycles
- Added
near realtime
mode anduncapped
mode in Envision - Added
--allow-offset-map
option forscl scenario build
to prevent auto-shifting of Sumo road networks - Added options in
DoneCriteria
to trigger ego agent to be done based on other agent's done situation
- Refactored SMARTS class to not inherit from Panda3D's ShowBase; it's aggregated instead. See issue #597.
- Updated imitation learning examples.
- Fixed the bug of events such as off_road not registering in observation when off_road is set to false in DoneCriteria
- Fixed Sumo road network offset bug for shifted maps. See issue #716.
- Fixed traffic generation offset bug for shifted maps. See issue #790.
- Fixed bugs in traffic history and changed interface to it. See issue #732.
- Update
ego_open_agent
to use the package instead of the zoo directory version. - Quieted error logs generated by failed Envision connections as well as noisy pybullet log messages. See issue #819.
- Removed all coverage files created during make test. See issue #826.
- Removed scenarios and examples modules from pip installation. See issue #833.
- This CHANGELOG as a change log to help keep track of changes in the SMARTS project that can get easily lost.
- Hosted Documentation on
readthedocs
and pointed to the smarts paper and useful parts of the documentation in the README. - Running imitation learning will now create a cached
history_mission.pkl
file in scenario folder that stores the missions for all agents. - Added ijson as a dependency.
- Added
cached-property
as a dependency.
- Lowered CPU cost of waypoint generation. This will result in a small increase in memory usage.
- Set the number of processes used in
make test
to ignore 2 CPUs if possible. - Use the dummy OpEn agent (open-agent version 0.0.0) for all examples.
- Improved performance by removing unused traffic light functionality.
- Limit the memory use of traffic histories by incrementally loading the traffic history file with a worker process.
- In order to avoid precision issues in our coordinates with big floating point numbers, we now initially shift road networks (maps) that are offset back to the origin using netconvert. We adapt Sumo vehicle positions to take this into account to allow Sumo to continue using the original coordinate system. See Issue #325. This fix will require all scenarios to be rebuilt (
scl scenario build-all --clean ./scenarios
). - Cleanly close down the traffic history provider thread. See PR #665.
- Improved the disposal of a SMARTS instance. See issue #378.
- Envision now resumes from current frame after un-pausing.
- Skipped generation of cut-in waypoints if they are further off-road than SMARTS currently supports to avoid process crash.
- Fix envision error 15 by cleanly shutting down the envision worker process.
– Describe any new features that have been added since the last version was released.
– Note any changes to the software’s existing functionality.
– Note any features that were once stable but are no longer and have thus been scheduled for removal.
– List any bugs or errors that have been fixed in a change.
– Note any features that have been deleted and removed from the software.
– Invite users to upgrade and avoid fixed software vulnerabilities.