Improvements and fixes:
- Bugfix: Restore segment interpolation mode after ghost restart
Improvements and fixes:
- Support InRoutePosition/FromRoadCoordinates
- Support
pi
ande
constants in expressions - Add support for trajectory coordinate system distance measurement
- Add Vector NCAP scenarios to CI smoke test suite (issue #595)
- Add option to align lateral sign of route positions
--align_routepositions
- consider route direction when evaluating sign of
laneId
andt
- use with NCAP scenarios to get it right
- Change synchronize default distance tolerance from 1.0 to 0.0
- Fix crash due to empty wheel data vector
- affecting e.g. ad_hoc_traffic code example
- Fix crash due to swarm traffic inherit controllers (issue #601)
- when no vehicle catalog available, central object is used for swarm
- issue was that controller reference was reused and eventually deleted
- now controller will be unassigned for the swarm copy vehicle
- Bugfix: Restore heading interpolation
- interpolate heading along segments in object trails
- unintentionally disabled in v2.38.0
- Bugfix: Avoid route being disabled when position is reported via lib
- Bugfix: Resolve variable value from parameters, not variables
- Bugfix: Resolve position dependencies at synchronize start
Build improvements:
- Add symbols to sanitizer build for increased readability
Improvements and fixes:
- Consider trailers for freespace distance calc (issue #594)
- Add lib function (SE_GetObjectGhostId()) to get ghost ID
- Support UserDefinedAction in Init section
- previously only supported in storyboard
- Adjust order of Init action execution according to OSC xsd sequence
- Fix parsing bug causing wrong bounding box settings
- bug was introduced in v2.38.2 (previous version)
Improvements and fixes:
- Add further wheel info, not only friction
- Add timestamp to ghost trail info
- as return argument to SE_GetRoadInfoAlongGhostTrail() function
- Improve route handling
- always map position to closest point on route
- fix missing route position update, e.g. for externally reported positions
- refactor and simplify code
- add visuals for followRouteController waypoints (dim colored)
- indicate start and end waypoints by larger scaled visuals
- Add a few functions for route info
- Fix elevation mapping bug
- could cause entity to drop to lowest road, e.g. from bridge
- bug was introduced in v2.37.0 (Feb 2024)
Build improvements:
- Establish nightly sanitizer job
- Add manual CI and sanitizer job triggers
- Fix download issue for build dependent packages
- Fix cmake version deprecation
Improvements and fixes:
- Accept negative values for deceleration parameters in ALKS controller
- i.e. consider only absolute values of DriverDeceleration and AEBDeceleration
- Increase test coverage by enabling all relevant tests also for non OSG builds in CI
Updated behaviors:
-
Polyline trajectory heading interpolation now purely depends on followingMode
- "position" -> interpolate only around corner
- "follow" -> interpolate along whole linear segment
- not considering whether heading was specified or not
- see updated table in User guide - Trajectory interpolation and alignment
- new option,
--disable_pline_interpolation
, to skip interpolation altogether
-
Adapt Trailer implementation to OpenSCENARIO 1.3
- changes from previous prototype implementation:
- rename EntityRef element to TrailerRef
- Add Trailer parent element for inline and catalog trailers
- changes from previous prototype implementation:
-
VehicleCatalog updated to match OpenSCENARIO 1.3
- trailer configurations updated accordingly
Improvements and fixes:
- Refactor Position implementation and handling
- simplify and clarify relative/absolute mode handling in code
- reduce memory leaks
NOTE: Unexpected side effects may have been introduced by the refactorization. Please raise issue if encountered.
Updated behaviors:
- Update target speed for relative speed action continuously
- previously target speed was sampled only once (at start of action)
Improvements and fixes:
- Fix relative target speed not reset for repeated actions (issue #589)
- Fix bug in condition group logging (PR #587)
- Add ref_point.xosc demonstrating effect of various ref points (issue #590)
- For injected actions, create unique name and replace ongoing similar action
- compose name of action type and action counter
- abort any ongoing action of same type and object
- Fix SUMO controller elevation bug
- use SUMO z value as is (absolute, not relative)
Fixes of bugs introduced in v2.37.15:
- Fix wrong positioning of waypoint and trajectory visualization
- Fix intermittent coloring issue in viewer (due to scenegraph misconfig)
Improvements and fixes:
- Support (partly) string IDs for roads and junctions
- integer ID is generated and assigned for internal use
- the integer ID is the one being logged and reported
- Add arguments to ignore z, pitch and roll inputs (PR #583)
- aligning the vehicle to the road instead
- Improve support for distant road networks
- very high coordinates (>1+E6) previously resulted in shaky graphics
- now fixed by coordinate transformation
- Fix outdated C# RMLib wrapper functions (issue #584)
- Make road alignment on Controller activation optional
- previously heading was always aligned at activation/deactivation
- now behavior is set by each controller
- Fix range for lane Id randomizer in odrviewer
- Fix bug in junction Id check
- junction ID 0 mistaken for no junction
- Accept and adjust lane section s-value beyond road length
Improvements and fixes:
- Fix ALKS ref driver wrong TimeHeadway edge case calculation
- was wrongly set to inf (along with ttc) when relative speed < 0
- Add a few parameters to ALKS ref driver
- Driver brake rate
- AEB brake rate
- AEB available (or not)
- Bump CI to macos-12
- Add GetAcceleration components functions
- Respect road rule for LH or RH traffic (issue #581)
Improvements and fixes:
- Embed execution search paths for dynamic libraries on Linux
- $origin (location of exe file) and expected lib location
- applies to esmini-dyn and dynamically linked protobuf
- Relax (totally remove) replayer dependency to OSI and protobuf
- Bump OSI lib to Visual Studio toolset v142 and add missing protobuf DLLs
- remove externals/osi folder and re-run cmake command to get latest
- Fix wrong filename reference for dynamic protobuf lib on Windows
- Add minimalistic build example to User guide
Improvements and fixes:
- Make the swarm traffic direction based on RHT or LHT (PR #575)
- Add lib function to get type of lane object is within
- ignoring any lane type snap settings
- add to both esmini and esminiRM libs
- Try any specified scenario file full path first, avoiding wrong file being loaded
- Ensure normalized normals in scaled 3D models
- previously lighting could be strange for non-uniform scaled objects
- Bugfix: Prevent adding duplicate trailers causing segmentation fault at exit
- Fix FollowRouteController first waypoint to include current position
- getting rid of "Entity moved out of route" message
- Restore odrviewer even lane distribution for initial spawning
Improvements and fixes:
- Support empty roads, i.e. without geometries and lanes
- useful for infinite open space with additional properties, e.g. speed limit
- clarification: esmini also supports skipping OpenDRIVE file altogether
- Fix TTC calculation issue (issue #569)
- Consider direction of motion
- Relative distance based on entity heading instead of lane direction
- Fix trajectory issues
- Skip speed update for zero timestep
- Skip update of non ghost objects during ghost headstart
Improvements and fixes:
- Add brief info on custom camera API to User guide - Custom camera positions
- Apply VisbilityAction to connected tow and trailer vehicles (PR #565)
- Add missing print camera pose key command ('K') to help
- Bump jinja2 from 3.1.3 to 3.1.4 (PR #567)
- Add slight Z offset to road markings, avoiding flickering in exported models
- Fix bug causing generated objects end up at origin (skip destructive optimization)
- Add option to skip textures in generated model (--generate_without_textures)
Improvements and fixes:
- Add missing esminiLib interface for OSC variables
- odrviewer bugfix, avoid crash when respawning left hand traffic (issue #563)
- consider RHT/LFT rule when finding available driving lanes
- odrviewer bugfix, avoid crash for no driving lane road networks (issue #562)
- prevent feeding bad range to randomizer
- Add script for multiple comparison runs (run_repeat_compare.sh).
Improvements and fixes:
- Add missing GetObjectAcceleration() declaration to C# wrapper
- Resolve controller domain conflicts
- when activating a controller, disable any active one on conflicting domains
Improvements and fixes:
- Add missing bounding box to SUMO vehicles
- Fix broken link to osi2read.py script in User guide - Save OSI data
New content:
- Add script, dat2xosc.py, to convert selected dat content to xosc
- fixates trajectory for one or several actors
- brief info in file header comment
Improvements and fixes:
- Add lib function to retrieve object acceleration
- Add lib function to close log file (issue #556)
- it will otherwise stay open for concatenating further runs
- Add Python example, drive.py, using SimpleVehicle model (issue #555)
- run from esmini/bin:
python ../EnvironmentSimulator/code-examples/hello_world/drive.py
- drive using arrow keys
- run from esmini/bin:
- Add controller experimental virtual operation mode
- in this mode the controller only calculates acceleration, not applying it
- for use cases with an external vehicle dynamics model
- example code and scenario: mixed_control
- brief info in mixed_control.cpp file header comment
- Fix ghost trail issue after long standstill
- at end of standstill phase, add another sample
- avoiding slightly wrong interpolated speed
- Fix controller type not being updated in object state
- type now set whenever a controller is activated on longitudinal domain
- not only for the initially assigned controller, which was the case
New features:
- Support overlay text scaling (issue #548)
- launch argument:
--text_scale <scale factor>
- launch argument:
Improvements and fixes:
- Indicate ClothoidSpline support in osc_coverage.txt
- Recommend newer protobuf version for Python scripts
- root cause is missing builder.py in older versions
- changing recommended version from 3.19 to 3.20.2
- Align float precision in print statement (issue #549)
- Check model id and warn if not matching model3d attribute (issue #547)
- but only if scenario is being recorded (into a dat file)
- Fix typo in CSV Logger, replace "Entitity" label by "Entity" (PR #552)
- might affect processing of files created with
--csv_logger
argument
- might affect processing of files created with
- Add brief info on ideal sensors (issue #553)
- Add another search path for model_id file, solving load failure
- Support trajectory pitch and roll interpolation (issue #543)
- only for floating trajectories, i.e. world pos with explicit z values
- see videoclip of bike_tilt_smooth.xosc
- Establish initial speed from trajectories during initialization
- Avoid crash (null ptr ref) after viewer failure
Updated behaviors:
- Injected action cancels any ongoing action of same type
- use function
SE_InjectedActionOngoing()
to check for ongoing actions - see updated examples action_injection.cpp and action_injection.py
- use function
- Add ground plane when environment is missing, i.e:
- when no OpenDRIVE specified and specified scenegraph failed to load
- when neither OpenDRIVE nor scenegraph specified
Improvements and fixes:
- Fix route catalog parameter handling (issue #544)
- Add replayer capability to smoke test framework
- Improve replayer collision detection (issue #483)
- detect collision between any objects
- detect multiple simultaneous overlaps
- Add example how to run all scenarios in a folder
- see end of User guide - Replay scenario
- Update coverage and osc-extensions info
- Trailer support now part of OpenSCENARIO (v1.3), add to coverage
- SteadyState added to SynchronizeAction (osc v1.1), remove from extensions
Improvements and fixes:
- Fix ghost controller type wrongly reported as default instead of ghost reserved type
- bug introduced in v2.37.2
- Fix pitch/roll mix-up in relative world- and object positions
- bug introduced in v2.36.0
New features:
- Support multiple assigned controllers per object (introduced in OpenSCENARIO XML v1.2)
- example (external app steering while ACC ctrl active): dual_controllers.cpp / acc_with_external_controller.xosc
Improvements and fixes:
- Fix continuous repeat object double width issue
- Add some info about esmini SUMO integration in User guide - SUMO integration
New features:
- Add action injection capabilities to esminiLib API
- see example User guide - Inject actions (C++ and Python)
Improvements and fixes:
- Fix OSI header file dependency for non OSI builds (issue #540)
- Group sign bounding boxes with odr features, toggle key 'o' (issue #530)
- In lib header, replace outdated element state description with enum reference (issue #541)
New features:
- Add friction support
- support OpenDRIVE lane material friction
- populate OSI wheel data (issue #527)
- visualize low friction as blue, high as red
- see brief info in User guide - Friction
- Add duration option (
--duration <time>
) in odrviewer- play for specified duration
--duration 0
will quit immediately after one frame
- Flag to skip create signs when external scene-graph is loaded (issue #530)
- always create wire-frame sign bounding boxes (toggle 'O')
- skip load or create sign model when external scene-graph loaded and flag set
Improvements and fixes:
- New method for controller initialization after player (and viewer) init
- enables e.g. adding sensors to objects from controller (issue #532)
- see example in ControllerACC.cpp (enable line 73, and press 'r' to see frustum)
- Expose visibilityMask in esmini lib (issue #535)
- Improve LaneChangeAction and fix edge case
- fix slightly wrong heading calculation
- ensure total speed (lat + long) is maintained
- handle edge case of requested lateral movement exceeding speed
- support only lateral speed component (edge case above)
- Fix CommonMini version generation (PR #537)
New features:
- Support paths in StoryboardElementStateCondition (issue #529)
- allows for prefix element name with parent name
- e.g. Event2::MyAction
- Add odr signal bounding box (issue #530)
- use as stand-in 3D model if none could be loaded
- for signal 3D models, optional wire frame bounding box (toggle on key 'O')
New behaviors:
- Replace storyboard element path separator '/' with '::'
- Fix OSI stationary object ids, now start at 1 and not 0 (which is reserved for undefined)
Improvements and fixes:
- Fix issue in calculation of relative orientation components (issue #496)
- Add position conversion code example (convert_position_type)
- shows ways to print or convert world positions (x,y) to road coordinates
- manipulate_positions.py makes trajectories portable wrt road characteristics
- Fix link issue with gcc 7.5 on Ubuntu
New features:
- Add OSI Traffic Command to OSMP
- initial version with limited coverage
- only a few actions supported yet (teleport, lane change, speed change)
Improvements and fixes:
- Fix bugs in World (X,Y) to Road/Route position conversion when off route (issue #523)
- don't limit search to route roads only
- especially when current position is out of route bounds
- Respect full path for permutation artifacts (issue #526)
- e.g. log, dat, osi and csv files
- include any specified folder path
- Maintain longitudinal speed in step (immediate) lane change actions
New features:
- Add full element path name to the storyboard element state change callback function
- including all parent names delimited by '/'
- see updated test case: StoryBoardElementStateCallbackInstance1
- and Python example code: hello_world/storyboard_state_callback.py
- Add OSITrafficCommand embryo (issue #499)
- some initial code outlining a possible approach
- recent storyboard state handling updates ensures no command is missed
- code example: osi-traffic_command
- Respect and apply jerk settings (acc/dec change rate) in LongitudinalDistanceAction
- Add scooter vehicle
- add entry in vehicle catalog
- add simple 3D model to model pack
- remove esmini/resources/models folder and re-run
cmake ..
to download - or fetch latest pack manually from here
- remove esmini/resources/models folder and re-run
Improvements and fixes:
- Skip velocity and acceleration updates after teleport action, avoiding spikes
- Fix bug in DistanceCondition not resolving relative positions correctly
- Fix presets for Linux VSCode including debug support
- User guide updated as well, see Run and Debug with Linux and visual studio code
- Major storyboard code refactorization
- replace mega nested loop with full OO approach
- improve element state condition handling, no transition misses
New features:
- Add "off-road" follower controller
- a simple "follow-the-leader" controller for open spaces
- see more info in User guide - OffroadFollowerController
- example scenario offroad_follower.xosc and video clip
- code module: ControllerOffroadFollower.cpp
Improvements and fixes:
- Fix and update ideal sensor API (issue #514)
- Fix wrong return code in SE_AddObjSensor, now returning unique sensor ID
- Add functions to retrieve number of sensors, both total and per object
- Reset status in SpeedAction for any additional run
- enables same speed action to be correctly re-triggered
- example scenario: drive_when_close.xosc, drive while close to another car else stop
Build improvements:
- Automatically attempt download dependent packages from all (3) available sources
- Add implot package to CI cache (faster total build time)
- Exclude implot from slim esmini build (in CI)
Fixes:
- Fix and update esminiRMLib functions for recent positioning updates
- Support trailerRef attribute name in ConnectTrailerAction
Compile and CI updates:
- Restore default setting not treating warnings as errors (still enabled for CI)
- Fix compiler warning in OSI + non-OSG builds
- Run all relevant unit tests also for non-OSG builds
Improvements and fixes:
- Fix relative positioning over connections and junctions (issue #502)
- prioritize own route over referenced object's one
- if neither entities has assigned route, use default routing
- Improve route handling, don't get stuck outside defined route path (issue #501)
- Consider full orientation for relative object positioning (issue #509)
- align the relative delta x, y, z components with reference entity
- Accept zero length NURBS trajectories
- Randomize equal weighting junction choices
- randomize choice between candidate roads with equal outgoing angle
- Fix outdated list of storyboard element states in storyboard_state_callback.py
- Fix
--threads
mode missing quit request from viewer - Cosmetics: Limit steering rate for calculated steering angle
New features:
- Add
--pause
launch flag- halt after initialization
- press
Space
orEnter
to continue or step
- Add runtime control to player server (former action server) (issue #497)
- new feature: support play, pause, step commands
- see example: inject_actions.py and video clip
- improvement: avoid duplicate actions on same object
Updated behaviors:
- Treat fixed timestep = 0 as non fixed (realtime)
New features:
- Add support for OpenDRIVE parking space
- Support string concatenation expressions
- see info in User guide - Expressions/Strings
- example: OvertakerBrakeEvent startTrigger in cut-in.xosc
Improvements and fixes:
- Don't automatically stop when all acts are done
- continue until storyboard stopTrigger hits
- or, if stopTrigger is missing, continue "for ever"
- Note: This change might require moving act stop trigger to storyboard
Additional information:
- Due to a mistake leading to master branch out of synch with dev branch and
release tag v2.34.1 stuck on dev, it was decided to revert master history back
to v2.34.0. This might lead to issues when pulling master. If that happens, resync
your local master branch as described in User guide - Branch strategy.
Improvements and fixes:
- Fix bug preventing trigging and evaluation of subsequential stories
- bug introduced in 2.34.0
- Improve image handling (fetch or save rendered images) (issue #173)
- off-screen (to RAM) rendering off by default (for performance)
- API now allows to activate before init
- Example how to fetch images from multiple cameras: multiple-cameras.cpp
- Note: Activating off-screen before init is now required to include initial frame
New features:
- Support OpenDRIVE explicit road lines
Improvements and fixes:
- Fix issue with trajectory relative positions not updating
- too eager optimization skipped initial evaulation of trajectory
- bug introduced in v2.33.0
- Restore OSI optimization and add documentation
- static OSI content should only written first step (not always been the case lately)
- add brief info on OSI API for programmers: User guide - OSI data
- Improve and simplify storyboard state handling
- identity act complete state
- support zero stories (Init actions only)
- make state transitions immediately
- Note: Might affect trigger timing slightly
- some code clean-up, e.g. centralize storyboard update
- Fix low curvature clothoids mistakenly identified as lines
- Fix position calculation issues
- skip reference lane in relative laneId calculations
- fix initialization bugs wrt relative/absolute orientation type
- fix bugs in relative position
- Note: These changes might affect pose (pos + rot) behavior
- Add code example changing catalog parameter values
- Add rmlib c# example
- Fix FBX SDK download issue in osg apps build and update info to support DAE
- script: compile_osg_apps.sh
- info: User guide - Get osgconv
- Add Python OSI receiver example (issue #500)
- Add hint how to create .dat files from multiple scenarios in one command -- See end of section User guide - Scenario recording (.dat)
- Align trailer actions with updated concept (candidate for OpenSCENARIO 1.3)
- Introduce separate actions for connect and disconnect trailer
- Add parent umbrella action TrailerAction
- See updated example trailer_connect.xosc
- Handle timestamps in ClothoidSpline prototype implementation
- ClothoidSpline shape is an OpenSCENARIO 1.3 feature candidate
- Add link to User guide git commit history under Version
New feature:
- Add clothoid spline trajectory shape
- Enables sequence of clothoids in one trajectory
- Prototype implementation of OpenSCENARIO 1.3 feature candidate
- Example scenario: lane-change_clothoid_spline_based_trajectory.xosc
Improvements and fixes:
- Fix graphics flickering of overlapping road, sidewalk, and grass areas
- Identify bidirectional lane type as drivable
- Fix wrong position mode setting in Hello World external Ego example
Updated behaviors:
- Fix wrong t axis for offset in RelativeLanePosition with dsLane
- ds will alight s/t to road direction, dsLane will align s/t to lane direction
- for dsLane, negative offset will be right in lane direction and positive left
Improvements and fixes:
- Fix missing polyline length causing unintended trajectory loop
- Improve continuous road objects (issue #489)
- model as 3D outline object instead of individual bounding boxes
- when 3D model is provided, individual objects are still populated
- OSI populated accordingly, as polygon vertices or bounding box
- Add Python examples on how to initialize esmini with launch arguments
- Add info on how to change fps with ffmpeg (here)
- Add OSI UDP socket API to C# wrapper
New features:
- Report parking spot on OSI
- Add support for RelativeLanePosition dsLane mode
- Add flexible interpolation and positioning modes
- introduce mode which can be RELATIVE or ABSOLUTE
- mode can be set per position component Z (elevation), heading, pitch and roll
- trajectory orientation interpolation
- see info in User guide - Positioning
Updated behaviors:
- Camera focus on OSC object bounding box center
- instead of bounding sphere of object 3D geometry
- Accept zero stories as introduced in OSC 1.2
- Output also relative camera position on 'K' key event
Improvements and fixes:
- Add some more details to the version string
- most recent tag
- nr builds from tag
- indicate local changes (dirty)
- based on
git describe
- Fix superelevation calculation
- project along Z instead of rotating road boundaries
- harmonizing with object orientation and positioning
- Fix dashed road mark visualization bug
- Fix condition delay issue preventing looped storyboard elements to trigger
- Fix bug in cmake contibuting to sanitizer run failure
- Update recent dropbox links for new policy (issue #482)
New features:
- Support UserDefinedAction as wait/noop action
- see example in user_defined_action.xosc
- Add ConnectTrailerAction prototype
- action for connecting/disconnecting trailer
- see video clip and example scenario trailer_connect.xosc
Updated behaviors:
- Support activating controller on several domains in mulitple activation steps
- see example in distance_test.xosc
- previvious behavior was to reset all domains for each activation
Improvements and fixes:
- Add esmini, OSI and OSMP version to OSMP_FMU modelDescription.xml (PR #476)
- Ensure synchronized route position in junctions (scenariogeneration #179)
- solves intermittent intersection border issue leading to wrong road ID and route failure
- Avoid additional step after scenario termination
- Fix plot window crash on added objects
- Add trailer rotating front axle example
- see video clip and find links in description
- Document optional parameters in ReportObjectPos
- z, p, r can be set to NAN for road alignment (temporary solution)
New features:
- Runtime plotting feature based on imgui/implot
- see brief info in User guide - Runtime plotting
- osi3::TrafficUpdate input to the esmini OSMP FMU (PR #463)
- esmini can now be used in a closed-loop co-simulation with a traffic participant model
- UDP action server (issue #465)
- Inject actions via UDP messages
- Only a few actions supported so far
- See issue and example inject_actions.py for more info
Updated behaviors:
- Relative lane-change/offset direction now based on the referenced entity orientation
- Add road ID to trajectory vertices
- purpose is to preserve road ID for trajectory lookup functions, e.g. follow ghost
- especially useful in intersections where road id is ambiguous due to overlapping roads
- Reduce lane change jitter
- apply lateral movement with delta-time of current frame, not previous
Improvements and fixes:
- Code quality improved by const correctness on class methods (PR #466)
- Set SUMO vehicles role = CIVIL and category = CAR (previously undefined)
- Add missing road info for esminiLib road lookahead functions
- junctionId, roadId, laneId, laneOffset, s and t
- Update info how to install clang v15 on Linux in User guide - Formatting
- Fix execution flow bug in the experimental fix_dae_materials.py script
- Add SE_AddObjectWithBoundingBox() method to lib API (PR #460)
- Fix wrong expected swarm central object attribute name (issue #459)
- correct attribute name is CentralObject
- previous expected name, CentralSwarmObject, is accepted as well
- Add combined type and vehicle class to osi2csv
- Add missing OSI VAN class
- Add missing fence 3D model to demo package
- For TTC, calc rel speed along triggering entity velocity vector (issue #445)
New behaviours:
- Calculate omitted WorldPosition headings also when trajectory following mode is "position"
- previously omitted heading was set to "0.0" (default according to standard)
Improvements and fixes:
- Expose functions to control snappable lanes (issue #448)
- both in esminiLib and esminiRMLib
- Fix camera lost track of bounding boxes bug
New behaviours:
- Set camera focus on model center instead of referece point (issue #442)
- Relative lane id/offset based on entity x-axis instead of road ref system (issue #444)
- Align any missing z (elev), r (roll), and p (pitch) to road surface, skipping default value (0)
- Note: This is a deviation from the OpenSCENARIO standard motivated by common sense
- Values can still be set to 0 explicitly
Improvements:
- Update prerequisite info on formatting
- Fix left hand traffic going reverse (issue #441)
- Fix wrong type in GeoReference.axis_ (issue #442)
- Add info on how to install OSI for use with Python on Windows
- Add Python example script manipulating the speed of a vehicle
New content:
- Add 2+1 road
- xodr (resources/xodr/two_plus_one.xodr)
- parameterized script: (scripts/scenario_scripts/create_two_plus_one_road.py)
- scenario (resources/xosc/two_plus_one_road.xosc)
- run-script, with suitable camera pos (run/esmini/run_two-plus-one-road.bat)
- video clip: https://youtu.be/aT7I2iBDeR0
Improvements and fixes:
- Clarify esmini lane offset handling deviating from OpenDRIVE
- Make sure lane offset definitions starts from s=0
- if first entry does not start at s=0, add a copy for s=0
- Fix bug in heading calculation wrt lane width and offset
- Fix wrong SE_GetDistanceToObject() return code for case route not found
- Demonstrate position type conversion (issue #437)
Improvements and fixes:
- Add some additional object info to csv_logger (issue #434)
- bounding box position (relative obj ref point)
- bounding box dimensions
- lane id
- lane offset
- Add API function
SE_GetDistanceToObject()
to get delta between objects- distance (ds, dt, dx, dy)
- delta lane id
- opposite lane flag
- Note: ds will accumulate over multiple road segments
- Add motorway type to relevant road segments in Unittest/xodr/highway_exit.xodr
- affects OSI handling of the junction
- Reduce grid intensity in plot scripts
Project updates:
- Update to macos-11 on github actions
Improvements and fixes:
- Add custom camera option to look at current entity
- simply specify
--custom_camera <x,y,z>
(skip heading and pitch)
- simply specify
- Fix orientation alignment bug
- respect individual rotational dimension (h,p,r) alignment setting correctly
- Add parameter to control accepted lateral distance in ACC Controller (issue #427)
- Ignore road sign subtypes "none" and "-1" (issue #430)
- Fix custom camera position behavior
- camera position affected only by entity position and heading, not roll and pitch
- Add missing includes to esminiJS CMakeLists.txt
Improvements and fixes:
- Support
freespace
attribute in RelativeClearanceCondition- typo in standard, should have been
freeSpace
- esmini now supports both
freespace
andfreeSpace
- typo in standard, should have been
- Improve RelativeClearanceCondition
- consider also empty lane of triggering entity
- consider opposite lane flag for empty lanes as well
- Added OpenMSL to related work
Improvements and fixes:
- Fix RelativeClearanceCondition missed case of empty lanes within range
- Support OpenSCENARIO v1.2
override
priority, renamed fromoverwrite
- Improve LongitudinalDistanceAction
- make use of any dynamics constraints provided for the action
- disable dynamics only when all constraints are missing
- respect vehicle performance settings (limit constraints)
- exclude odr and model refs from csv file converted from .dat
- fixes plot_csv.py failing to plot csv files created from dat2csv.py
- Add some ghost trigger info to User guide, see The ghost concept / Actions and triggers
New features and behaviors:
- Add custom fixed top camera option to odrviewer as well
- for usage info, see similar last example in User guide - Camera control
Improvements and fixes:
- Add C# coding example showing how to get and print OSI ground truth
- Fix bug causing camera to be stuck in orthographic mode after switching from custom top view
- Run nightly sanitizer checks on dev branch instead of master
New features and behaviors:
- Add esmini OSMP FMU (PR #409 and issue #341)
- based on the OSMPDummySource example
- more info here: https://github.com/esmini/esmini/tree/master/OSMP_FMU
- Add support for OSC 1.2 RelativeClearanceCondition
- Add
--ground_plane
option to replayer - Add static variant of esminiLib
- also add code example hello_world_static
- Expose subset of OSI API in C# wrapper (ESMiniWrapper.cs)
Improvements and fixes:
- Add info on blocked files on Windows (see here)
- Add some COLLADA info related to osgconv (see here)
- Fix issue with stand still phases on trajectories
- e.g. allow for rotate heading while stationary
- Fix curvature direction dependence in esminiRM Unity Util GetLaneInfo()
- Add info on failed package download to User guide - Various issues
- Fix/update esmini C# wrapper API documentation (header comments/tooltip))
- AddObject() returns created object ID (not always 0) on success
- object_id replacing object index as argument in many functions (use GetId(index) to find out)
- Improve delta lane ID calculation in Roadmanager::Position::Delta() method
- based on connected lane id at target position (compare at same road and s-value)
- remove reference lane from delta (e.g. difference between lanes -2 and +3 is 4, not 5)
- include flag for vehicle found in opposite lane or not
- Add another looming controller demo scenario loomingHW.xosc (videoclip)
Project updates:
- Add brief info for developers and contributors:
- Code formatting
- How to run tests
- Branch strategy
- see User guide - For esmini developers and contributors
- Add CONTRIBUTING.md with brief guidelines for contributions
- e.g. checklist for reporting issue
New features and behaviors:
- Support OpenSCENARIO 1.2 and OSI 3.5.0 vehicle role attribute
- Add simple police car 3D model (model pack updated)
- easy way to update: Delete resources/models folder and run
cmake ..
again from build folder
- easy way to update: Delete resources/models folder and run
- Add odrviewer option (
--stop_at_end_of_road
) to stop instead of respawn at end of road (issue #407) - Expose SimpleVehicle class (kinematic "bicycle" model) in C# API
- example code: simpleVehicleExample.cs
Improvements and fixes:
- Set exit code according to esmini success (0) or failure (-1) (issue #413)
- Update odrviewer command reference, add missing Space and Return key commands
- Expose GetId() to C# API and add helloWorld example (helloWorld.cs)
Project updates:
- Bump C++ version from 14 to 17
- Migrate CI to GitHub actions
- introducing further checks, e.g. formatting check, build and test more variants
- Introducing "dev" as main development branch while master will be reserved mainly for releases
New features and behaviors:
- Add pause and step feature to odrviewer (issue #407)
- For complete command list, see Key shortcuts in User guide - odrviewer
- Add some viewer options to replayer and odrviewer
- odrviewer: --aa_mode, --headless, --custom_fixed_camera
- replayer: --aa_mode, --headless
- For complete and updated launch arguments, see User guide - Command reference
- Add "Looming" driver model controller
- experimental implementation, see more info in ControllerLooming.hpp#L14
Improvements and fixes:
- Support pause and quit during ghost head start
- Add driver input reverse example (issue #400)
- Add scenario, one_car_on_hilly_road.xosc, to demonstrate road alignment in UDP driver controller
- See testUDPDriver.py how to run
New features and behaviors:
- Add lookahead options to followGhost controller
- set separate lookahead time/distance for speed and steering targets
- see more info User guide - FollowGhost
- Add cmake option (-D OSI_VERSION_3_3_1) to enforce OSI v3.3.1 instead of v3.5.0 (default)
Improvements and fixes:
- Fix incorrect use of timeout parameter in unix (PR #393)
- Ghost improvements
- Support reverse trajectory following (issue #389)
- Bugfix: Skip ghost time offset for relative timing mode causing an initial jump
- Fix distance check messing up route (issue #395)
- Fix missing maneuverGroup reset for multiple executions
New features and behaviors:
- Fix wrong ParameterValueSet handling (issue #390)
- For each scenario run one individual parameter value set is now applied
- Previous behavior was to apply all value sets at once
Improvements and fixes:
- ghost fixes:
- fix wrong sim time in actions at ghost restart, causing corrupt SpeedProfile
- add default head-start time in ghost controllers
- Fix issue with ordinary teleport actions by ghost (no restart)
- restore ghost bounding box visibility
New features and behaviors:
- Identify road edges and populate OSI accordingly
- Road edge is currently defined as boundary of outermost lane considered part of the road pavement
- Lane types currently considered part of the road pavement:
- DRIVING
- ENTRY
- EXIT
- OFF_RAMP
- ON_RAMP
- ANY_DRIVING
- RESTRICTED
- STOP
- Count total displacement in SpeedAction dynamics (issue #384)
- for transition dimension = distance (fulfil speed change over specified distance), consider total sum of displacement including motion in opposite directions when speed is changing sign, e.g. from 10 to -5 m/s.
Improvements and fixes:
- Update OSI to v3.5.0 for scripts as well (forgotten about in v2.29.0)
- Add player reference in controllers
- enables more control of visualization from controllers
- implemented example: Visualize sensor target point in acc controller (key 'o' /
--road_features on
)
- Fix coloring of stand-in bounding boxes
- Fix issues in ad-hoc traffic example
- Some additional bug fixes
New features and behaviors:
- Support for DirectionDimension in relevant conditions (introduced in OSC v1.2)
- Make AccelerationCondition aware of deceleration
- Previously only considering absolute value of acceleration. Now signed.
- Add cmake config presets also for Visual Studio (Windows)
Improvements and fixes:
- Update to OSI v3.5.0 (from v3.3.1)
- Major refactorization cleaning up memory leaks and compiler warnings
- Increase compiler warning sensitivity, add multiple useful warnings
- For CI builds, treat warnings as errors - zero tolerance
- Improve OSI build script
- Restore OSI demo in esmini-dyn
New features and behaviors:
-
Update OverrideControllerValueAction for OpenSCENARIO v1.2
- support new attributes like rate, force and automatic gear
- API (data structs) updated, not backward compatible, see esminiLib.hpp
-
Respect elevation alignment setting
- enable use cases with external objects not bound to road surface
- harmonize function prefix, change RM_SetAlignMode* to SE_SetAlignMode*
- see example in User guide - External control of Ego
New features and behaviors:
- support OpenSCENARIO variables (introduced in OSC v1.2)
- Scenario example: Unittest/xosc/lane_change_trig_by_variable.xosc
- limitation: Only SetAction supported, not ModifyAction yet
- external API for setting and reading variables see esminiLib.hpp
- deprecated ParameterSetAction still supported
- API for setting and reading parameters still available as well
- Adjust speed along s to maintain absolute speed
- In other words: Do not increase total speed during lateral actions
- Note: This can affect how far an object travels along s for a given duration.
- Update reference driver in ALKS_R157SM controller, e.g:
- fulfill reference driver action even if critical situation dissolves
- add overlap tolerance param to avoid edge cases, e.g. equal sized objects
- Embryo solution for esmini.js (esmini lib for web usage), see Libraries/esminiJS (PR #356)
- Add Python OSI example (issue #367)
- Add collision detection example to Hello World (issue #368)
- see more info in User guide - Collision detection
Improvements and fixes:
- Fix SE_InitWithArgs whitespace bug (issue #370)
- Add missing plot.py to demo pack
- Fix scenario initialization return code (issue #363)
- return 0 only on success, else -1
- Fix relative position beyond current road bug (issue #372)
- Fix typos in User guide (PR #375)
- Some additional minor bug fixes
New features and behaviors:
- Step fwd/back by delta time in replayer instead of fixed nr steps
- shift => 0.1s
- ctrl-shift => 1.0s
- full description see replayer Command reference
Improvements and fixes:
- Fix chopped exe filenames in demo pack for Windows
- Fix orientation alignment bug (issue #364)
- Fix visibility mask bug in replayer
New features and behaviors:
- Extend plot_dat and add plot_csv script
- plot_dat.py support all plottable values
- added plot_csv.py for plotting any csv file
- this means that osi tracefiles can be plotted (via osi2csv.py and plot_csv.py)
- Support continuous polyline speed and constant acceleration on segments
- apply continuous speed / constant acc in FollowMode = follow
- keep constant speed (zero acc) per segment in FollowMode = position
- Add grid on plots
- Update ALKS Reference Driver controller implementation
- add support for cut-out and deceleration
- add experimental support for pedestrians
- add a few scenario examples (alks_*.xosc)
- adjusted lateral trigger rule for cutting-in motorbikes
- add overlap check function and apply for ALKS AEB trigger
- add a few experimental properties, see
ALKS_R157SM_Controller
in ControllerCatalog.xosc
Improvements and fixes:
- Update equation link in odr elevation example in straight_500_superelevation_elevation.xodr
- Hello World updated to make use of existing library and header file (avoid keeping copies)
- Add info on how to use Visual Studio (and VSCode) with Hello World tutorial
- Fix shaky heading at end of small segment trajectories
- Fix failed quit on close window event (issue #363)
- Fix wrong OSI
bbcenter_to_rear
values (issue #353)- change sign (measure from bb center to read axle)
- rear axle z relates to actual position, not projected on ground
- Add correct moving obj z coordinate (issue #355)
- Fix some additional memory leaks
- Restore lost OSI files in demo pack
- Add script for parallel execution of parameter distributions
- see more info in User guide - Parallel execution
- Add esmini option to just return nr permutations (also as exit code)
- Add acc and orientation vel/acc to scripts/osi2csv.py script
- Fix maxDeceleration parse error (PR #354)
- Fix scripts path issues
- move osi3 folder up one folder for easier reuse
- add search path to make scrips executable from anywhere
- Move binary demo generator scripts to scripts folder
- Add missing parameter distribution file cut-in_parameter_set.xosc to demo pack
- Fix sensor line elevation bug taking vehicle pitch angle into consideration
- Patch to avoid known VS2019 std::vector issue (issue #335)
New feature:
- Add parameter distribution support
- see info in User guide - Parameter distributions
- Note: currently limited to deterministic distributions
Improvements:
- Fix some memory leaks
- code refactorization for improved memory handling and enabling sanitizer checks
- Unified test runner script (works on all systems)
- Some osi optimization and less print outs
- Extend testUDPDriver-print-osi-info.py example to extract also stationary objects (issue #350)
- Add Python example add_sensor.py showing how to add cull sensors from Python (issue #351)
Bug fixes:
- Fix bug messing up auto-calculation of polyline trajectory heading
- Some additional minor fixes
Additional info:
- Move some scripts from root to scripts folder
- Clarify limited Win32 (16 bit) support in User guide - Build configurations
- Make pedestrians snap to sidewalks (issue #343)
- Enable visualization of road and lane sensors for pedestrians
- Add GetIdByName function to esminiLib (issue #345)
- Remove RoadPosition driving direction dependency (issue #340)
- Remove obsolete SE_RegisterEventCallback (issue #311)
- use SE_RegisterStoryBoardElementStateChangeCallback instead
- Make use of roadmanager detailed return codes in esminiRMLib functions
- Bugfix: Preserve overlapping road check result until next query
- Bugfix: Reset lane offset after enforced lane switch (e.g. due to lane end or width become zero)
- Bugfix: Fix SE_GetRoadInfoAtDistance along route (avoid accumulating distance)
- Some additional minor fixes
- New feature: Custom lights (issue #339)
- launch option for custom light sources:
--custom_light <x y z intensity>
- see more info in User guide - Lighting
- and User guide - esmini Launch commands
- launch option for custom light sources:
- Align
%
andround
operators to IEEE 754 (issue #319)- see updated info in User guide - Supported expression operators and functions
- Prevent snap to zero-width lanes and opposite directed lanes (issue #337)
- Fix double speed at FollowRouteCtrl first lane change step (issue #338)
- Fix issue with zero width lane in FollowRouteController (issue #335)
- Fix SE_GetRoadInfoAtDistance() return codes
- update to align with internal API codes
- see esminiLib.hpp
- Fix some memory leaks (pr #336)
- Fix bug in LaneChange action potentially resulting in wrong lane offset
- Add note on object not appearing to User guide - Various issues
- Update UDPDriverController
- add new input mode involving only
heading, speed and wheelAngle
- add missing data fields to all example scripts
- document controller (see User guide - UDPDriverController)
- add new input mode involving only
- Add external trigger example in Python (issue #331)
- Add Python storyboard event callback example (issue #332)
- also restore lost advanced User guide - Object state callback example
- Fix (OSI and tesselation) issue with partial lane segments with intentionally missing/no roadmarks
- Fix OSG lib build script (generate_osg_libs.sh) issues on Windows
- Support Apple Silicon (e.g. M1)
- from now on releases includes universal binaries (works on both Intel and Apple Silicon based Macs).
- see updated info on how to deal with unsigned applications here: esmini User guide - Mac issues and limitations
- Fix build error on Ubuntu 22.04
- enforce OSG lib to use sched_yield instead of deprecated pthread_yield
- build scripts updated
- updated osg lib for Ubuntu available here: osg_linux_glibc_2_31_gcc_7_5_0.7z (now default)
- Support straight arcs (curvature = 0.0 treated as a line)
- Add option
--extended
to dat2csv.py to extract additional data, e.g. road coordinates-e
works as well
- Handle empty or missing road IDs (issue #326)
- Generate and assign unique IDs (previously all roads got id=0, which caused trouble)
- Improve road elevation support (issue #327)
- handle discontinuities in elevation profile and lane widths
- fix bug causing low tesselation resolution wrt elevation slope changes
- Fix dat2csv.py (actually dat.py) issue so that it runs also on Python 2.X
- Fix bugs that could cause a crash when adding/removing entities while co-simulating with SUMO (issue #308)
- Add missing box 3D model to demo pack
-
API related changes:
-
Wheel angle (steering) and rotation (revolution) populated in the SE_ScenarioObjectState (pr #323)
NOTE: Structure on calling side should be updated accordingly. See example get_states.py.
-
If velocity (vector) has been reported but not speed, then speed is calculated based on velocity x,y components (instead of dx, dy movement).
-
-
Bugfixes:
- Fix end-of-road detection failure for external entities (x, y -> road coord mapping)
- Support some additional expression functions, e.g. sin, sign and atan.
- NOTE: These functions are extensions to OpenSCENARIO, use with care
- Complete list see User guide - Expressions
- Fix lane offset, tolerate discontinuities
- ensure correct lane tesselation for offset steps, e.g. when lane shift left or right
- cut lane markings at end of lane sections
- Calculate speed and wheel orientations if not reported for external vehicles (issue #163)
- default is to calculate speed and wheel roll and yaw angles based on vehicle motion
- can be overridden by simply reporting the values, see example in test-driver.cpp
- Improve world coordinate (x, y) mapping to road coordinates
- prioritize connected lanes wrt previous known road coordinate
- for example when entering an intersection with overlapping lanes
- Add support for botts' dots
- OpenDRIVE roadMarkType:
botts dots
- OSI LaneBoundary/Classification/Type:
TYPE_BOTTS_DOTS
- example in Unittest/xodr/mw_100m.xodr
- OpenDRIVE roadMarkType:
- Add info on ghost concept to User guide
-
New features:
- Add FollowRoute controller
- improved path finding by incorporating lane changes
- more info in User guide - FollowRoute
- Add roadworks/construction sign
- OSI road sign code: TYPE_ROAD_WORKS = 13
- Swedish and German signs added to 3D model pack
- see User guide - Update 3D model pack how to update
- Extend options for logfile and .dat (recording) location and filename
- specify either of:
- Explicit directory and filename
- Just directory (ending '/' or '\') (use default filename)
- Just filename (use default directory)
- see details in esminiLib.hpp
- specify either of:
- Add FollowRoute controller
-
Fixes:
- Fix crash when query objects added by SE_AddObject() (issue #263)
- Fix struct mismatch in Python RoadManager example (issue #318)
-
Other:
- Add OpenStreetMap (OSM) to OpenDRIVE tip to User guide (issue #317)
- Road object updates:
- Support continuous road objects (e.g. fence, railings)
- examples in crest-curve.xodr and e6mini.xodr
- Create stand-in bounding boxes for missing 3D object files, instead of skipping
- Improve alignment of road object wrt road curvature
- Note: For correct alignments the model pack needs to be updated
- Support continuous road objects (e.g. fence, railings)
- Re-add missing files in Mac and Linux demo packages
- New features:
- Add obj id to legend in plot_dat.py (useful for merged data)
- Add option to plot dots on top of lines in plot_dat.py
- Add generic StoryBoardElementStateChange callback functionality (pr #314)
- Add
replayer
merge dat-files option (see info in User guide) - Add alks reg 157 safety models controller
- Experimental implementation of four safety models inspired by JRC-FSM
- See more info in User guide
- Fixes:
- Support also maneuver element type in StoryboardElementStateCondition
- Add heading when populating road object to OSI
- Fix free space distance calc bug (issue #309)
- Check story stopTrigger before stepping Init actions (issue #313)
- Consider only private actions in conflict handling (issue #295)
- Fix Delta function sometimes returning wrong dt/dlane in junction (pr #283)
- Update OSC coverage, clarify version
- Add box and cones to model_id file
- Consider speedProfileAction in ghost setup
- Fix corrupt search path for traffic sign files
- Minor updates hopefully not causing side effects:
- Prevent controller step completely during ghost restart
- Update Hello World tutorial OSI example info regarding platform differences
- Rework lane change action to preserve position info
- Add info on update road sign framework to User guide - Road signs
- Relax country code interpretation, support both upper and lower case (e.g.
se
andSE
will both work) - Extend search locations, increasing chances to find the traffic signal catalogs
- Add missing speed signs to release package (update cache on build server)
-
Update road sign framework
- clarifies interpretation of country code, type, subtype and value
- 3D model filename derived from type definition (name now only used as fallback)
- add embryo catalog for swedish road signs
- ensure correct lookup when mixing country codes
- update examples in OpenDRIVE file straight_500m_signs.xodr
- update model pack with new German speed signs and updated and renamed Swedish ones
Note:
Due to new sign name convention model pack has been updated. Get it from here.
Also, to enable frequent updates of the model pack it has been removed from github. Which means that also cmake build script has been updated. If trouble arise, the easiest solution is to grab a fresh clone of esmini:
git clone https://github.com/esmini/esmini.git
.
- Support lane discontinuities and improve road 3D model tesselation
- refactorize OSI lane points to support discontinuities, e.g. step laneWidth changes
- optimize tesselation reducing unnecessary polygons
- Add high precision (64 bit double) GetSimulationTime function
- See header here
- Add vehicle 3D model bounding box dimensions info to vehicle catalog
- Support inline trailer definitions
- see updated example "semi_truck_with_extra_trailer" in vehicle catalog
- also see updated draft trailer XML description
- Add followingMode to FollowTrajectoryAction
- followingMode
follow
: Calculate and interpolate heading in case heading is not explicitly set (overriding OpenSCENARIO 1.1+ default values) - followingMode
position
: Strictly follow the standard, e.g. missing heading is interpreted as 0.0
- followingMode
- Improve heading interpolation (decrease radius/ duration)
- Populate stationary objects, including outlines, to OSI stream
- Add misc object to example scenario and fix miscObjectCategory typo
- esmini now expect
miscObjectCategory
instead of the former wrongMiscObjectCategory
- obstacle box added to the example scenario drop-bike.xosc
- esmini now expect
- Add info to User guide on how to make
osgconv
deal with repeated objects- see about FLATTEN_STATIC_TRANSFORMS_DUPLICATING_SHARED_SUBGRAPHS here
- Add info on sharp braking speed profiles
- Add info on how to suppress Windows console (issue #294)
- see here
- Add derivative feature to plot_dat.py
- plot first derivative (instead of original value) of parameters wrt x axis (typically time)
- activate with
--derive
argument
- Accept roadMark type
none
- This change enables empty road mark segments within same lane section
- Accept unsorted (sOffset)
roadMark
entries - Fix min time-step glitch causing esmini to be really slow
- Fix error messages to show junction id (pr #297)
- Fix invalid warning of unknown argument when using SE_InitWithArgs()
- Fix elevation jump bug at trajectory end (issue #293)
- Fix performance setting log message bug
- Fix crash due to referencing deactivated ghost (nullptr)
- this fix makes it possible to toggle on/off controllers involving ghost
- Fix wrong successor selection at junction on route (pr #292)
- Fix intermittent speed spike at end of synchronize action
- Updated Linux OSG libs for increased compatibility
- previous version, updated for esmini v2.23.3, was compiled with g++ v9.4
- current version is compiled with g++ v7.5
- either pick from here or delete externals/OpenSceneGraph and re-run
cmake ..
to download
- Add dead-reckoning option to UDP controller
- see (or run) updated example testUDPDriver.py
- Add optional on-screen info per entity
- activate with
--info_text 2
or--info_text 3
- toogle info_text mode on key 'i'
- Note: OSG libs for linux update needed. Either pick from here or delete externals/OpenSceneGraph and re-run
cmake ..
to download.
- activate with
- Populate wheel angle in osi2csv.py script
- Disable off-screen rendering by default
- see more info in User guide - save_or_grab_images
- Bugfix: Cancel conflicting actions only for same entity (issue #289, pr #290)
- Fix esminiRMLib
SetRoadId()
bug sometimes resulting in wrong road - Fix intermittent crash at viewer initialization Refactor viewer thread initialization using semaphores
- Fix relative road position issue #253
- consider road plane in lane change action
- Updated SpeedProfileAction to respect initial acceleration
- See more info in User guide - Initial acceleration taken into account
- Improve multi-replayer support for different timesteps
- Fix direct junction bug missing some counter connections
- Fix route finding failure due to changing lane id
- consider that lane ids might change over lane sections
- Improve route end checks
- Detect route end in junctions
- Fix bug in route length calculation
- Updated SpeedProfileAction handling of single entry cases
- See more info in User guide - Special case: Single entry
- Populate OSI wheel angle (yaw/heading)
- Increase internal precision for time and positions (float -> double)
- Improve stepping, avoid one step diff between external and internal entities
- info for esmini lib users in User guide - How to interact with esmini lib API
- Add API to flush OSI file
- Refactor csv_logger to support multiple runs with different sets of entities
- Fix a few ghost controller bugs
- Fix pline interpolation bug
- Fix collision log bug and align collision timestamps
- New feature: Speed profile
- specify multiple speed targets over time in one single action
- optional dynamic constraints
- more info in User guide - Speed profile
- preliminary and experimental implementation
- Add RMlib method to enforce road ID (RM_SetRoadId())
- Remove
Parking
from set of drivable lane types - Fix handling of entering non drivable lane
- when switching lane section and valid driving lane or link is missing, snap to closest valid lane.
- Bugfix: updateObjectSpeed() only affect longitudinal domain
- Bugfix: Fix wrong reported curvature of perfectly straight clothoids
- Fix wrong RelativeLanePos interpretation (issue #267)
offset
should be relative to center of new lane, not relativeoffset
of the related position- in contrast to
dt
in RelativeRoadPosition which is relativet
of the related position Note: This can affect existing scenarios. Use RelativeRoadPosition with ds="0.0" and dt="0.0" to get same longitudinal and lateral position as the related entity.
- Support ManeuverGroup multiple executions (issue #269)
- Log scenario parameter names and values
- Add event and condition callbacks to C# wrapper (issue #257)
- Fix wrong condition delay by relaxing floating point tolerance (issue #270)
- Place intermediate waypoints at 1/3 road length instead of at s=0
- Bugfix: Avoid crash on missing incoming road in junctions
- Tolerate init position at waypoint road but outside route s range
- internal route s value will simply be < 0 or > length_of_route
- User guide published: https://esmini.github.io
- Initial experimental embryo version
- Focus on use cases
- Hello World code tutorial moved to User guide
- Build guides moved to User guide
- New feature: Custom cameras with fixed position and optionally fixed orientation (issue #264)
--custom_camera <position> Additional custom fixed camera position <x,y,z,h,p> (multiple occurrences supported) --custom_fixed_camera <position and optional orientation> Additional custom camera position <x,y,z>[,h,p] (multiple occurrences supported) --custom_fixed_top_camera <position and rotation> Additional custom top camera <x,y,z,rot> (multiple occurrences supported)
- see examples in User guide: https://esmini.github.io/#_camera_control
- Add odometer to replayer
- Update RMLib C# wrapper
- Propagate scaled bounding box to .dat file
- Align and change default headstart in ghost controllers to 3s
- Add example scenario acc-toggle.xosc to demonstrate switching between controllers (issue #259)
- Add odrplot to demo package
- Fix bug in route path calculation (issue #265)
- Fix condition edge check bug that in some cases prevented multiple story element executions
- Fix bug in position delta calculation sometimes flipping dLaneId (PR #266)
- Bugfix: Add missing initial frame (t=0) to OSI trace file
- Fix malfunctioning replayer start and stop time options
- Fix unintentional toggling of route waypoints (toggle key 'R')
- Remove obsolete EgoSimulator (it was just a duplicate of esmini application)
- Add RMLib methods to get road lane width and type
- See API here.
- Add roadmanager API to fetch all roads overlapping current position (can be useful in junctions)
- Extend roadmanager return code to indicate whenever
- moved into a new road segment (return code 1)
- moved into a junction and made a choice (return code 2)
- See full list of return codes here
- NOTE: This change might need code updates. Previously only 0 meant OK and negative return values indicated some error. If
code == 0
is used to check OK, it should be changed tocode >= 0
.
- Add state handling to ManeuverGroups
- supporting storyBoardState condition on ManeuverGroup level
- Improve xy -> trackpos mapping at road endpoints (using actual road normals instead of OSI points to ensure continuity between roads)
- Fix relativeRoadPos relative heading bug (issue #253)
- Log complete path for loaded files (OpenSCENARIO, OpenDRIVE and scenegraph)
- Ghost controller improvements:
- move any AssignRouteAction to ghost. Enables routing for ghost controllers.
- restart ghost from Ego after triggered events from other entities
- parameterize followGhost mode: position (default) or time
- assign unique route object to ghost, solving issue with FollowRoute actions defined in Init
- Fix wheel-angle calculation
- also update some car models fixing right front wheel issue
- grab updated model package from here
- Make road object LOD distance dependent also on object size
- Add ground plane option
- add launch flag
--ground_plane
to put a large gray surface under the roads
- add launch flag
- Fix and improve road object handling
- Fix repeat object lengthStart/End bug
- Fix inter-distance affected by road curvature and lateral position
- Populate length, width and height from bounding box if attributes not set
- Add hedge and fence models
Note: To fetch updated models, remove resources/models folder and run
cmake ..
again, or get the package from here - Set color of based on type (for objects lacking explicit 3D model)
- building, barrier: light gray
- tree, vegetation: green
- obstacle: red
- all other: dark gray
- xodr/crest-curve.xodr updated to show some of the features
- Reduce OSI file size (again)
- Save size by save static data only first frame
- This was implemented in v2.17.4 but unfortunately disabled by a bug introduced in v2.20.6
- New feature: Trailer support
- Extend OpenSCENARIO vehicle class with trailer connection elements (experimental)
- Extension noted in osg_coverage.txt and briefly described here
- Simplified trailer mathematics and dynamics, good enough for basic scenarios
- Provided examples:
- trailer.xosc / video clip / run script: run/esmini/run_trailers.bat
- parking_lot.xosc / video clip / run script: run/esmini/run_parking_lot.bat
- Demo showing capabilites and limitations: video clip
- New vehicle 3D models: Semi-truck tractor, semi-trailer, truck trailer and car trailer
Note: To fetch updated models, remove resources/models folder and run
cmake ..
again, or just get the package from here
- Support for multiple Repeat objects (PR #251)
- Support simple OpenDRIVE bounding box objects (when no osgb filename or outline specified)
- xodr/crest-curve.xodr updated with an example (see object with ID 0)
- SwarmAction updated to spawn only relevant, specified vehicle types
- Respect vehicle acceleration and deceleration constraints in InteractiveDriver controller
- Add lib method to set SimpleVehicle wheel status: SE_ReportObjectWheelStatus()
- Add lib API for pause flag: SE_GetPauseFlag()
- Parameterize steering rate for InteractiveDriver controller
- Add C# API to get parameter names (PR #252)
- Optimize muli-replayer feature, now supporting much larger and/or more scenarios
- Generalize 3D model wheel handling
- Support any number of front and rear wheels
- Identify front wheels as wheel_f*
- Identity rear wheels as wheel_r*
- All wheels will roll, only front wheels will change heading/steer
- Add methods to register callbacks for triggered conditions and event start/end (PR #249)
- Add Python variant of ad_hoc_traffic example (see here)
- Set controller type for externally added objects (via SE_AddObject())
- Fix AcquirePositionAction issues, e.g. when destination is on same road (PR #247)
- Fix ghost trail reset issues (at ghost restart)
- Optimize polyline trajectory parsing and ghost trail following
- Fix error in speed calculation for absolute time trajectory
- Expose Add/DeleteObject functions in esminiLib API
- code example ad_hoc_traffic
- Expose collision detection in esminiLib API (issue #243)
- Add OSI related esminiLib functions to C# wrapper
- Update outdated data struct Python example (issue #242)
- Improve 3rd party lib build scripts (PR #244)
- Additional minor bugfixes and improvements
- Support MSYS2 / MinGW-w64 (issue #239). See brief info here.
- Eliminate need for garbage collection in C# wrapper
- greatly improves esmini performance e.g. in Unitu
- Fix freeze at time=0 when init with XML (issue #235)
- Bugfix: Ensure deleted objects not involved in condition evaluations
- Bugfix: Disregard waypoints with invalid road IDs
- Change lib functions to handle id instead of index
- Note: This can affect user applications making use of esminiLib object query functions. Especially for scenarios making use of Add/DeleteEntityActions.
- New function SE_GetId(index) to find out id of objects. Example:
for (int i = 0; i < SE_GetNumberOfObjects(); i++) { SE_ScenarioObjectState state; SE_GetObjectState(SE_GetId(i), &state); }
- Complete API see esminiLib/esminiLib.hpp
- More examples, see Hello-World_coding-example
- Fix condition timer bug (issue #237)
- Improve replayer multi-recording functionality to handle dat files with some variation in terms of timings and number of entities.
- Fix orientation reference for RelativeRoadPosition (issue #228)
- Orientation relates to road s/t system, not driving direction
- Note: RelativeLanePosition still relates to driving direction, but will be changed as well when lane coordinate system has been fully implemented
- CSV logger typo fix and added units to header (PR #238)
- Fix issue which could cause simulation to freeze after calling SE_Step()
- Fix wrong ParamPoly3 curvature calculation
- Increase expression precision (issue #225)
- internal representation in double (64 bits) instead of float (32 bits)
- Add option to enforce creation of road 3D model (issue #227)
- Fix OSI GT reset between runs in same session (issue #229)
- Improve RoadManager OSI robustness (issue #212)
- Fix lookahead direction
- correctly consider driving direction and vehicle heading
- Add lib API to get ghost state by time (as alternative to by distance)
- Fix condition issues
- Fix timer on falling edge
- Add precision tolerance to < and > conditions
- Added setting of OSI lane subtype
- Updated OSG apps build script to support all platforms
- Improve ghost execution
- e.g. reduce spikes in velocity and acceleration at ghost restarts
- Add route waypoint visualization
- disable by launch argument
--hide_route_waypoints
- toggle on key 'R' (shift 'r')
- disable by launch argument
- Add replayer support for optional external model_id mapping file
- See default example resources/model_ids.txt
- Update ECE ALKS reference driver controller
- Support some corner cases, e.g. narrow lanes, high lateral velocities and large timesteps.
- Add API to retrieve speed unit (see esminiLib.hpp)
- Fix corner case of failed conflict detection (issue #218)
- Remove pedestrian performance limits (issue #224)
- Bugfix: Remove trajectory visualization of deleted entity (issue #208)
- Bugfix: Fix malfuncting left-shift-tab on Linux. It now jump to previous entity.
- Bugfix: Fix quit by close window event issue (Linux)
- Added a guide on how to bring osgb 3D models into Unity
- Fix replayer rewind all way to start, including negative ghost headstart time
- Fix crash on missing roadmark color attribute (issue #221)
- Add value conditions to cause a ghost teleport
- Fix initial speed and acceleration spikes with ghost
- Fix wrong EntityAction interpretation
- entityRef an attribute of the EntityAction not its child elements
- Change timer expire condition from > to >=
- Evaluate complete story before stepping it (issue #216)
- Change id of OSI objects to be concistent, use scenario entity id
- Prevent default controller (trying to) use invalid routes
- New replayer feature: Play multiple recordings in parallel
- example:
replayer --window 60 60 800 400 --res_path ./resources --dir ./dat --file variant
- above command will load and play all
variant*.dat
files found in./dat
folder, simultanously - Note: Intented for .dat files of same length and timesteps, e.g. using fixed timestep:
esmini --headless --fixed_timestep 0.01 --osc variant1.xosc --record variant1.dat
- example:
- Updated behavior: Disable global collision detection by default
- saving performance for huge scenarios
- activate with launch flag
--collision
- Updated roadmark support (issue #215):
- solid_solid and broken_broken roadmarks
- yellow colored roadmarks
- apply width (optional) and weight (if width is missing)
- Fix LaneOffsetAction final value bug (issue #213)
- Optimize evaluation of AND:ed conditions (conditions within same condition group)
- Ensure all timesteps are saved with
--capture_screen
in replayer
- Add replayer option to hide ghost models but still show their trajectories
- Launch flag:
--no_ghost_model
- Toggle on key 'g'
- See replayer/readme.txt
- Launch flag:
- Add OSI lane id to route info
- Relax replayer, run even if OpenDRIVE file missing
- RoadmarkType rule made optional according to standard (skip scary warnings)
- Hand over also AccelerationCondition to ghost
- The pattern is to hand over all non relative conditions
- Acceleration conditions were unintentially not handed over
- Fix SpeedAction continuous mode bug
- Add support for OpenSCENARIO EntityActions
- AddEntityAction and DeleteEntityAction supported (issue #208)
- See example scenario Unittest/xosc/add_delete_entity.xosc
- Fix some replayer issues
- Repeat works again
- Don't time-leap over empty periods states (e.g. entities temporarily deleted)
NOTE: To support entity actions, e.g. adding entities at any time, a change of initialization behavior was necessary. Previously all entities were instantiated at start of the scenario, regardless of presence in Init section. Now the following applies: Only entities involved in the Init section, e.g. by a TeleportAction, will be instantiated from start. Other entities can be added later by the AddEntityAction. This change might affect some scenarios and use cases.
- Support OpenDRIVE 1.7 Direct Junctions
- Fix ghost condition handling issues (issue #210)
- Avoid nullptr crash for non event conditions (e.g. act condition)
- Hand over also SpeedCondition, EndOfRoadCondition, OffRoadCondition and StandStillCondition to ghost
- New esmini feature: Pause and step simulation
- Press space to toggle pause/play
- Press return to step (forward only) Note: In replayer similar feature is space for pause/play and arrow right/left to step forward and backwards.
- Fix maneuver event order dependency
- When an event overwrites another it could happen that both step methods were applied. Now its first sorted out what events to run, then they are stepped.
- Fix replayer bug when ghost involved, causing really slow progress at negative time
- Update Python info and scripts
- A more flexible variant the basic scenario player script esmini-player.py
- providing scenario via argument
- quit at press Escape or end of scenario
- work on all supported platforms
- Add example Python launcher for esmini executable: scripts/esmini-launcher.py
- A more flexible variant the basic scenario player script esmini-player.py
- Add global collision detection (issue #206)
- Evaluate all entities for collision detection (not only those subject to CollisionCondition)
- Result will be logged in console and log file
- Collision status added to csv log (activate with --csv_logger <filename>)
- Disable the feature with flag --disable_collision_detection
- New feature: Off-screen rendering
- Fetch rendered images via esminiLib API (synchronous or via callback) (issue #173)
- Example code: image-capture.cpp
- Off-screen rendering without GFX system (e.g. headless Ubuntu):
- Windows using Mesa3D: Put opengl32.dll in same folder as esmini exec.
- Linux using xvfb:
Xvfb :99 -screen 0 1920x1080x24+32 & export DISPLAY=:99
then run esmini as ususal.
- Disable feature with launch flag
--disable_off_screen
(potentially gaining performance)
- Lossless screen-capture in TGA format instead of JPG
- Disadvantage: larger files
- Advantage: Videoclips created from uncompressed files better quality/size ratio
- Anyway it's easy to convert TGA to JPG in a post process step
- Reminder: Add launch flag
--capture_screen
for continuous capture
- Extended screen-capture control
- Specify exact number of frames to capture, or continuous mode (-1)
- Note that esminiLib API for screen-capture has changed, examples (old => new):
- SE_CaptureContinuously(true) => SE_SaveImagesToFile(-1)
- SE_CaptureContinuously(false) => SE_SaveImagesToFile(0)
- SE_CaptureNextFrame() => SE_SaveImagesToFile(1)
- New replayer features:
- Collision detection. Log events and pause player. Activate with launch flag
--collision
- Quit at end of scenario. Activate with launch flag
--quit_at_end
- Collision detection. Log events and pause player. Activate with launch flag
- Add route API to esminiLib.
- Reworked action dynamics. Hopefully more correct math and behavior.
- e.g. Lane change trajectory affected by (long) speed if and only if Dimension = time
- LaneOffset maxLateralAcc respected (issue #201)
- Note that behavior might differ from previous versions
- Changed behavior is either intentional or not, so please report suspected bugs.
- Respect vehicle performance specification (max speed, acc, dec)
- Improved LaneChangeAction: Handle lane split cases, e.g. highway exit.
- Improved route handling: Relax lane requirement, e.g. maintain route during and after lane changes, when possible.
- Fix lost trajectory during laneChange (issue #203)
- Add esmini root folder to binary release packages (issue #204)
- Update ALKS scenarios to v0.4.1.
- Fix wrong pitch calculation (issue #197)
- Improve tesselation wrt elevation and roll rates (issue #197)
- Add rounding tolerance to condition rules greaterOrEqual and lessOrEqual
- Updated behavior: Update simulation time after storyboard evalulation (not before)
- Fix typo messing up DistanceCondition (issue #200)
- Some additional minor fixes
- Replace plot_csv.py with plot_dat.py
- No need to create intermediate csv file
- Increased precision (since not limited by csv file)
- Extend trajectory to complete final step
- When reaching the end of a trajectory, move the remaning step in the extended line from trajectory end-point and heading.
- The purpose is to avoid discontinuous velocity (and acceleration spikes)
- Add example scenario (lane-change_clothoid_based_trajectory.xosc) for clothoid based trajectory
- Rename udp-driver subfolder to udp_driver to support Python sub module import
- Improve laneChangeAction behavior with junctions
- Handle road split case, e.g. highway exit
- Add missing cone model to demo packages
- Add API functions to get object type and 3D model filename (issue #193)
- Add launch flag for continuous screen capture in replayer (
--capture_screen
) - Update dat2csv.py script for current dat version (v2)
- Fix bug causing crash when reset to defaultController
- Support global actions in the Init section of the scenario
- see example in updated xosc/swarm.xosc
- Bump dat file format v1->2. Support object visibility.
- Do not calculate polyline trajectory heading when specified explicitly
- Add cone models cone-45.osgb and cone-100.osgb
- see example usage in xodr/crest-curve.xodr
- Updated model pack here
- Add
--hide_trajectories
launch flag to esmini (already available in replayer) - Reduce default steering sensitivity of simple vehicle model
- Add optional angular check to ReachPositionCondition
- If Orientation element is added, then it is checked in addition to position
- For now using hardcoded tolerance of 0.05 radians (~3 degrees)
- See examples in scenario Unittest/xosc/traj-heading-trig.xosc.
- Updated behavior: Raise exception/quit on missing required attribute
- Move remaining full step after reaching end of trajectory, avoiding velocity spikes
- Fix replayer bug causing sporadic crash
- Add fixed timestep option to odrviewer (all options see odrviewer/readme.txt)
- Add missing comparison operators (issue #191)
- Bugfix: Fix string converted to low precision type (issue #192)
- Expose GeoReference data to esminiRM (RoadManager) API
- Add ParameterDeclarationCallback API to C# wrapper (issue #190)
- See esminiLib/esminiUnityExample.cs for example usage
- Reduce OSI log size by storing static data only once
- Consider lane offset (and curvature) for steplen calculation (issue #187)
- Add more tuneable parameters to SimpleVehicle and expose in API
- Max speed and acceleration, steering behavior, engine brake
- See function headers in esminiLib/esminiLib.hpp
- Add framework for country typed traffic signs (from OpenDRIVE to OSI)
- Add missing OSI files to demo packages
- Add API for get and set seed
- Fix ghost on trajectory timing issue
- Fix ECE_ALKS_RefDriverController catalog parameters (issue #182)
- Add dependent osi files for UDPDriverController examples
- Support modify parameters during initialization
- Callback mechanism to change parameter values after ParameterDeclaration has been parsed, but before the Init section of the scenario.
- See code example parametric-init.
- Add OSI reading to UDPDriverController examples
- Extend SimpleVehicle API in esminiLib
- Add initial speed to constructor
- Add SE_SimpleVehicleControlTarget function
- NOTE: Vehicle::DrivingControlTarget arguments changed order to harmonize with other SE_SimpleVehicleControl functions.
- Add external controller code example test-driver.
Bugfixes
- Fix highway type of junctions to have the correct lane-pairing
- Don't reset ghost on traveledDistance trigger
- Fix steering calculation in Vehicle::DrivingControlTarget
- Ghost vehicle concept updated to handle greater variation of triggers
- Relative triggers handled using a combination with the teleportAction
- ResetEvent added to make sure events don't go missing in a teleportation
- Time handling added to handle the difference between ghost and ego
- Add projection to the geo reference string
- Fix LaneOffsetAction relative target bug (issue #183)
- Bugfix: Raise exception on invalid condition instead of crash
- Add ECE ALKS reference driver controller (PR #181)
- Separate material for border, sidewalk and biking lane types
- inner border lanes: dark gray
- if outmost lane is border: grass
- sidewalk and biking lanes: light gray
- Fix default mode and init speed issue for ACC/ALKS controllers
- Delete duplicate timestamps in dat files
- Add UDPDriverController
- Provide an UDP interface to control entities, e.g. for external driver models.
- Either by explicit position (variants of x,y,z,h,p,r) or driver input (throttle, steering...)
- Synchronous (blocking) or asynchronous (non-blocking) mode
- Works both on same or different host (than esmini running on)
- For more info, see example python scripts in scripts\udp-driver.
- Initial implementation of geo reference
- Add lib API for custom camera positions
- Support additive mode for ACCController
- In override mode setSpeed is explicitly stated as a property
- In additive mode setSpeed will adapt to external modifications to speed, e.g. SpeedAction
- Option to remove ghost vehicle info from OSI groundtruth dynamic
- Fix disable_controllers ghost bug
- Fix OSI lane left/right, predecessor/successor and some other OSI related bugs
Note: To support the external driver controller some changes to gateway was needed (e.g. extended dirty bit strategy to keep track of what parts of entity states has been updated or not). These changes might affect behavior of existing integrations with esmini, e.g. how and when esmini will align entities to road elevation and/or pitch. Please report any new (undesired) behavior.
- Extend screen capture functionality
- Support continuous screen capture (individual images though)
- Add continuous screen capture argument (see docs/commands.txt)
- Add screen capture API to esminiLib
- Support multiple option occurrences
- e.g. multiple paths can be set by adding several
--path <path to directory>
- e.g. multiple paths can be set by adding several
- Add support for custom camera positions (partly issue #173)
- New command line option
--custom_camera <x,y,z,h,p,r>
- Multiple custom cameras supported, add any number of custom_camera arguments
- Make first custom camera default by argument
--camera_mode custom
- Switch camera during simulation with key "k"
- New command line option
- Parse vehicle Performance element
- so far applied only in the ACC controller
- Improve and simplify ACC controller
- Respect vehicle max acceleration and deceleration Performance properties
- Simplistic long control based on relative distance and speed
- Add ALKS controller
- initial dummy implementation inheriting the ACC controller
- longitudinal domain handled in the same way as the ACC controller
- lateral domain handled by the default controller (follow lane at current offset)
- Extend use of path(s) for locating files
- Now both filename with and without any leading relative or absolute path will be concatenated with the path entries and tested
- Rework disable controllers strategy
- Only controllers activated explicitly by the scenario affected
- Implicit controllers used by e.g. TrafficSwarmAction not affected
- Support OSC 1.1 AssignController activate attributes
- controllers can be activated when assigned
- Fix missing euclidianDistance support in RelativeDistanceCondition
- Bugfix: Add missing boolean support in setParameterValue()
- Fix missing dummy boundingbox when model failed to load
- the bug was introduced in v2.14.0
- Catch missing junction error and continue anyway (issue #174)
- Fix alternating lane offset issue in routes, e.g. AcquirePosition (PR #167)
- Fix random way selector issue resulting in always same choice in intersections
- Add missing bounding box
- Add missing motorbike 3D model
- Add limited support for TrafficSwarmAction
- TrafficDefinition not supported yet
- Vehicle models picked randomly from specified catalogs
- Simplified driver model only based on ACC-Controller, not traffic rules
- Experimental implementation, expect bugs and shortcomings
- Example scenario swarm.xosc
- Added option
--seed <number>
to specify random seed from a previous runs- seed is always printed to console/log file, so it can be grabbed from there
- seed reuse only per platform (e.g. Windows seed gives different result on Linux)
- see docs/commands.txt for all launch options
- Support temporary objects in replayer
- Show only active objects at given time frame
- Show only active trajectories at given time frame
- Fix some issues in entity freespace distance calculations
- ACC adjustments slightly reducing intersection deadlocks
- Fix crash due to unsupported OpenSCENARIO condition
- Fix wheel rotations in esminiLib
- Fix some action failures in repeated events (maximumExecutionCount > 1)
- Root cause: Internal timer not reset between runs
- Fix ACC controller issue for scenarios with multiple vehicles
- Add visualization of externally reported OSI sensorView
- Add argument
--sensors
or just press 'r' to view
- Add argument
- Add support for motorbike modelId=10 in replayer
- mc.osgb added to model pack models.7z
- cyclist.osgb updated wrt reference point (rear axle projected on ground)
- Fix OverrideControllerValueAction domain handling
- Assigned control strategy depends on type of controller value (e.g. steering is lateral, throttle is longitudinal)
- Fix issue with controllers being aborted by conflicting actions
- ActivateControllerAction itself does not assign any control strategy
- Add entity 3D model and bounding box scale options
- optional property "scaleMode" for scenario objects. Values:
- None (default) = Don't scale 3D model or bounding box
- BBToModel = Scale bounding box to fit loaded 3D model
- ModelToBB = Scale model to fit specified bounding box see examples in VehicleCatalog
- scaleMode added to .dat files as well for scenario replay Note: .dat file format has been updated, dat files created in previous versions of esmini will not play.
- optional property "scaleMode" for scenario objects. Values:
- dat fileformat version control
- replayer and dat2csv now checking for supported version instead of crashing
- Support ScenarioObject attribute "model3d", added in OpenSCENARIO v1.1
- "File filepath" property still supported as well (if model3d missing)
- Support Clothoid attribute curvaturePrime (renamed from curvatureDot in OSC v1.1)
- curvatureDot attribute still supported as well (if curvaturePrime missing)
- Fix bug that in rare cases prevented init actions from reaching complete state
- Fix OSI angle ranges to [-pi, pi]
- current range [0, 2pi] is not aligned with OSI standard
- Stop conflicting actions when starting new ones (issues #155 and #157)
- Add velocity to CSV log (issue #156)
- Fix SetLanePos s truncation bug
- reaching end of road or route not handled as error
- Fix trajectory time handling and add timref check
- Don't assume first timestamp to be 0.0
- If trajectory duration (from timestamps) is 0, set timeref=NONE
- Fix and sync C# wrappers
- OSI driving side fixed for Right and Left hand traffic
- Separate logfile for roadmanager lib (esminiRM_log.txt)
- Fix trajectory findClosestPoint bug
- Explicitly specify Xcode generator for cmake on macOS
- Some code improvements:
- Some improved type checking for enum types
- Some added safeguarding of uninitialized scenario and road objects
- Add build option for dynamic protobuf linking (see more info here)
- Add junction ID to position object
- can be used to determine whether in a junction or not (-1 => not in junction)
- see code example here
- Parse OpenDRIVE controllers. See code example in test case TestControllers.
- Fix odrplot bug with roads < 1m
- Bugfix for osi intersections
- Fix collision condition parsing bug causing crash for the ByType option (issue #149)
- Add a simple ACC-Controller
- and example scenario acc-test.xosc / run_acc-test.bat
- Extend CSV logger with acc and yaw rate (issue #145)
- Add support for MiscObject catalogs (not tested yet, issue #146)
- Use controller's name for missing esminiController property
- E.g. by naming the controller "ExternalController", the line:
<Property name="esminiController" value="ExternalController" />
can be omitted.
- E.g. by naming the controller "ExternalController", the line:
- Update roadmanager junction strategy using angle instead of limited discreet choices
- Road with closest heading direction will be selected (can be randomized as well)
- Add event default trigger if missing (issue #147)
- Fix major bug causing lane width issue for roads with more than one laneSection
- The bug was introduced 2021-07-02 in commit 4e95a09 and release v2.11.3.
- Improve nurbs heading (#144)
- Calculate heading from actual nurbs instead of polyline approximation
- Traffic sign added to OSI ground truth
- Add OSI lane pairing
- Fix condition timer restart issue
- Old behavior prevents timer from restarting. This commit fix so that timer restarts if condition becomes true again from being false.
- Support halt/pause at end of trajectory
- When trajectory control points includes time stamps, end of trajectory should be based on time instead of actually reaching full length.
- Fix nurbs heading issues (#144)
- Interpolate heading from polyline approximation
- Fix bug reusing heading of second vertex to first one
- Add road object lane validity support (issue #143)
- Add show version option (--version)
- Fix csv-logger missing first entry (issue #137)
- Fix relative distance issue (#139)
- Consider heading when determine entities inter-displacement
- Fix LongitudinalDistanceAction bugs
- Use correct distance mode
- Time gap based on referenced enity's speed instead of own speed
- Support OpenSCENARIO 1.1 LongitudinalDistanceAction / displacement attribute
- Improve expression support (e.g. handle "not()" )
- Custom OSI trace filename (see docs/commands.txt)
- Center lane logic for broken solid and solid broken
- Some additional minor fixes
- Restore support for "$" prefix in parameter names
- Catch and log expression errors
- Support OpenSCENARIO 1.1 expressions
- e.g.
<AbsoluteTargetSpeed value="${$EgoSpeed / 3.6}"/>
- e.g.
- Fix nested parameter declarations issue, ensure limited scope
- Do not reset heading at end of trajectory
- If alignment is desired, add explicit TeleportAction/RelativeLanePosition with relative h = 0. See example here.
- Some OSI refactorization and optimization, static data only sent first time
- Fix bug preventing OSC 1.1 controller activation
- Warn for cond edges at simTime 0 (might be missed since edge can not be defined)
- Some additional minor fixes
- Add support for solid/broken roadmark combinations
- Fix issue with multiple waypoints per road
- Remove any additional waypoints on same road
- Keep only first on first road, and last on following roads
- Bugfixes:
- Fix expected location of ActivateControllerAction in OSC 1.1 (issue #133)
- Fix issue with final double entry in .dat files
- Bugfix causing zero lanewidth reported at edge cases where s > length of road
- Fix issue in LaneSection::GetClosestLaneIdx() sometimes returning wrong lane (PR #131)
- Update ALKS scenarios to b03cc8a
- Fix bug missing ghost coming to a stop
- Some additional minor fixes
- Fix file path issue in sumo-test config
- Bug prevented sumo-test.xosc to load on Linux
- Update behavior of the Default Controller
- Entities will still be aligned to the road direction, but the relative heading will be respected.
- To have a vehicle heading in driving direction (as defined by lane Id and road rule) simply set relative heading=0, or omit it since 0 is default.
- To have a vehicle heading in opposite driving direction, set relative heading = 3.14159 (PI/180 deg)
- To have an entity facing 90 deg left, set relative heading = 1.57 (PI/2)
- The entity will be moved in the road direction closest to its heading, so
- To have an entity facing 90 deg left, set relative heading slightly less than PI/2 ~ 1.57. I.e NOT > PI/2 because then it will got the other way.
- This behaviour allows for flexible control of the orientation more independent of driving direction, see new scenario example drop-bike.xosc / run_drop-bike.bat
- Entities will still be aligned to the road direction, but the relative heading will be respected.
- Fix some SUMO integration issues
- add another demo scenario with 100 cars: sumo-test.xosc / run_sumo-test.bat
- Fix and improve relative distance calculations in road coordinates cars.
- Fix grass color when texture not available (from white to green)
- Update ALKS tests, confirming esmini still works with latest ALKS version.
- Some additional minor fixes
- Fix condition delay issue
Previous behavior was to return true only once after timer expired. Then, if condition still true, restart the timer.
Now the behavior is:
- Timer is started when condition is evaluated to true. No more evaluations will be done from this point.
- When timer has expired the condition will always return true
- Set correct required cmake version for FILTER feature
- Some additional minor fixes
- Bugfixes:
- Fix typecast bug in esminiLib GetRoadInfoAtDistance/SE_RoadInfo (roadId and laneId)
- Avoid crash on road object load failure, e.g. when road sign .osgb file is not found
- Support slimmed esmini by making OSG, OSI, SUMO and googletest optional
- see more info here
- Add relevant modules to non OSG build
- E.g. odrplot (not OSG dependent) and dat2csv
- Add missing "driver" option to --camera_mode usage help text (esmini and replayer)
- Add xodr coverage file
- Support repeat road object
- Primary use case is to populate copies of imported .osgb files along the road, e.g. guard-rails or guide-posts
- Dimensions (len, width, height) can be adjusted (even change linearly along the stretch)
- Add examples in e6mini.xodr (rails and guide-posts) and curve_r100.xodr (guide-posts). These roads are used in e.g:
- Add railing and guide-post 3D models to the model package.
- Models are included in the demo package. The complete updated package is found here.
- Add option to NOT include/generate road object models (--generate_no_road_objects). Useful IF the objects are already populated in a referred scenegraph file.
- Add return codes to esminiRMLib functions RM_GetProbeInfo() and RM_SubtractAFromB()
- Some additional minor fixes
- Support simpler route definitions
- Resolve, if possible, any number intermediate waypoints
- Only start and end is needed, shortest route will be resolved
- User can specify additional intermediate waypoints for desired explicit routing
- Shortest path will only be searched for in forward (vehicle heading) direction
- Add AcquirePositionAction
- Also add example scenario routing-test.xosc (and launch script run_routing-test.bat) demonstrating improved routing and AcquirePositionAction.
- Support OpenDRIVE road "rule" attribute
- When heading is not explicitly specified, entities will be aligned in the road direction according to the traffic rule (RHT=right-hand traffic, LHT=left-hand traffic).
- Example e6mini-lht.xodr and left-hand-traffic_using_road_rule.xosc
- Fix bug that could cause SpeedAction to not terminate
- Updated OSI and Protobuf versions (v3.3.1 / v3.15.2)
- End AssignRouteAction immediately according to standard
- Add useful OSG options to help (issue #119)
- Some additional minor fixes
- Bugfix: Fix road model generator issue
- tesselation error could cause application crash or dark model
- the bug was introduced in 2.8.2, so avoid that release.
- Add first person "driver" view
- Activate by toggle view on 'k' (press a few times to reach driver view), or
- launch argument:
--camera_mode driver
- example script: run/esmini/run_lane_change_crest_driver-view.bat
- Add reverse junction links for left hand traffic (related issue #114)
- Fix nan compile error (issue #115)
- Add experimental Abs2Rel Controller
- Some additional minor fixes
- Add some accessors to RMObject, e.g. GetType(), GetLength()... (issue #109)
- Increase precision in csv files (created by dat2csv and dat2csv.py)
- Bugfixes:
- Fix LaneChange issue over end-to-end/start-to-start road succession (PR #110)
- Update filename container size in dat2csv.py
- Fix wrong nurbs trajectory time interpolation
- Improve action timings (push interpolations one time step)
- Fix SE_ReportObject* functions, prevent values getting overwritten
- Some additional minor fixes
- New feature in odrplot: Indicate road ID and direction
- odrviewer update: Respawn vehicles at open road ends (if any)
- Bugfix: Remove 0.5m trajectory end tolerance causing wrong end position
- Add API for simple vehicle performance
- Improve replayer file path handling for odr and osgb
- Expand filename container and store complete file paths in .dat file NOTE: This change affects .dat file format - old recordings files will not play
- If absolute path not found, test combinations using res_path argument
- Added mandatory field maxAcceleration to the vehicle catalog
- Add func to set explicit OSI timestamp
- Fix issues in OverrideControllerValueAction
- Correct wrong override action element name
- Quit action immediately (as clarified in OSC v1.1 User Guide)
- Improve scroll wheel handling (issue #105)
- inverse wheel in OSG default camera models
- add scroll wheel zoom to esmini camera models
- Add ideal-sensors code example
- Fix odrplot step-length bug (issue #100)
- Add brief info on 3D model conversion to readme (issue #63)
- Some additional minor fixes
- API to get object properties
- Extend road sign API (more attributes, e.g. height), see example use in rm-basic.cpp.
- Fix wrong OverrideControllerValueAction type names
- New feature: Print help text to console, trig on key 'H' (shift 'h')
- Some additional minor fixes
- Fix bug so roads without type can be used with osi intersections
- Fix wrong parameter type preventing synchronize example scenario to run
-
Support selected parts of OpenSCENARIO v1.1 for example:
- TrajectoryPosition
- FollowTrajectory with initialDistanceOffset
- SynchronizeAction with steady state option
- CoordinateSystem and RelativeDistanceType in distance operations
Most significant limitations:
- Logical scenarios not supported yet (e.g. ParameterValueDistribution and StochasticDistribution)
- Expressions not supported yet (Arithmetic calculations and logical expressions)
OpenSCENARIO v1.1 examples runs (with above limitations)
Other updates:
- Support OSI intersections
- Implement OverrideControllerValueAction
- Add typed Get and Set functions for named parameters
- Add Vehicle ParameterDeclaration support
- Add support for boolean parameter type in conditions
- Add "--disable_stdout" option to prevent log messages being written to console
- Remove debug trace (code module, code line...) as default setting
- Clean up log messages
- Add scenarioEngine unit test module, with one initial test
- Fix road::GetWidth both-sides bug (issue #96)
- Fix trajectory heading interpolation issue
- Add a few basic code examples, e.g. how to use esminiRMLib
- New feature: Visualize complete driving trajectories in replayer
- Improve dat2csv.py and align to behavior of dat2csv.cpp
- Add object type and category to esminiLib API
- Add funct to get all named parameter names (and type)
- Fix replayer issue with time < 0 (ghost use cases)
- Support parameterRef with and without prefix '$' (in ParameterAssignment)
- Fix heading bug in ghost trail
-
Support nurbs trajectories
- Order, controlpoint Timestamp and weight taken into account
- Means that now all shape types are supported: polyLine, clothoid and nurbs
- See updated example trajectory-test.xosc. (run script: run/esmini/run_trajectory-test.bat) part of the esmini demo package.
-
Visualization active trajectory
- can be toggled with 'n' key (see docs/readme.txt for all key-shortcuts)
-
Improve object heading when following polyLine trajectory
- Instead of interpolating heading all the way between two control points, follow the angle of the line and just interpolate a few meters before and after control point.
-
Fix object orientation limitations
- Fully separate object orientation from road pitch and bank to support correct object rotations on any road and trajectory
- Correct pitch and roll angles will now also be recorded into .dat files
-
Fix precision issue in odrplot
-
Fix issue with too large OSI UDP messages
- Now large messages are split into smaller chunks.
- Updated Applications/replayer/osi_receiver.cpp shows how to deal with it on receiver side.
-
Add option to remove objects in replayer (see replayer/readme.txt for more info)
-
Add dat2csv Python script (similar to C++ application dat2csv.cpp)
-
Update .dat file format to simplify parsing in Python
- Also ensuring portablility between Windows and Linux
- NOTE: This change is NOT backward compatible (old .dat file not supported in this and future esmini versions)
- Hopefully format will now stabilize so .dat files can be used between esmini versions
-
Add OSI sensorData to example code
-
Some additional minor fixes
- Add shortcut keys in replayer app for jumping to start and end of scenario
- Ctrl + Left (arrow): Jump to start
- Ctrl + Right (arrow): Jump to end
- see updated readme.txt
- Fix lateralprofile bug
- All child elements to <lateralProfile> was incorrectly assumed to be of type <superelevation>. Which is wrong, and any <shape> element would cause broken road and popcorn effect on road users.
- Now any <shape> elements are ignored (until being supported).
- Improve error handling
- Always log exception messages
- Handle (quit with log message) invalid object references
- Update Unity wrappers (align to current API)
- Add OSI groundtruth example to Hello World tutorial
- Add brief info on OSI to README, including OSI/Protobuf versions
-
Support freespace distance measurement
Some conditions and actions offer a choice on how to measure distance:
- freespace = false: Distance between the reference points of objects (low fidelity)
- freespace = true: Distance between closest bounding box points (high fidelity)
So far esmini has accepted freespace=true without actually implementing it, leading to no effect but the same result as for freespace=false. Now it is implemented and applied accordingly.
Conditions with freespace option:
- TimeHeadwayCondition
- TimeToCollisionCondition
- DistanceCondition
- RelativeDistanceCondition
Actions with freespace option:
- LongitudinalDistanceAction
- (LateralDistanceAction - not implemented in esmini yet)
-
Fix road mark bug (issue #83) The bug could cause visual defects on roads with multiple lane sections.
-
Fix relative orientation bug (PR #85) Could result in wrong vehicle heading caused by referring to road heading before known.
- Further log file improvements
- Option to disable logfile
- Support custom log filename
- These features available both from command line and API
- Stabilize lane matching
- Increase tension in ZY2Road mapping, add 2m threshold before snapping to another lane. Purpose is to stay in current path for driver models.
- Fix bug in Road Manager causing XY2Road to (sometimes) match the wrong road
- Add some recent esminiLib features to esminiRMLib as well
- Improved log file handling
- If default log file can't be created for some reason, try with system provided temp filename. Last resort is to run without logfile, just logging to console.
- Fix Event and Action life cycle issues
- Default maximumExecutionCount for Event and ManeuverGroup is now 1 (instead of infinity)
- Finished Action will move to Complete state instead of Standby, making it possible to trig on Action being completed.
- Note: This change CAN have impact on scenarios which might need to be updated, e.g. excplicitly specifying maximumExecutionCount.
- Improve dat file format
- Decouple dat format from Position class
- Reduce file size by factor 4
- Stabilize format: dat files can be saved and run in later versions of esmini, to greater extent than before.
- Add API for reporting actual acceleration and velocity of external objects
- Improve lane matching in XY2Road position mapping
- Optimize road manager XY2Road mapping (simplify road width calculations)
- Add options related to road lookahead functions
- Lock object to current lane. Flag that will preserve lane ID regardless of lateral position. Useful for driving models, where look-ahead normally should start from the original lane.
- Option in LookAhead function to look along actual driving direction or along road primary driving direction.
- Function returns additional info: roadId, laneId, laneOffset, s, t.
- Update Hello World driver model example, utilizing new options in look-ahead function
-
New feature: Support for OpenDRIVE road object outlines
- support open and closed shapes
- support both cornerRoad and cornerLocal specifications
- add a "roof" mesh on closed shapes
see example OpenDRIVE crest-curve.xodr used in scenario lane_change_crest.xosc. To run it, go to esmini/run/esmini and run the script run_lane_change_crest.bat.
-
Improve OSI performance
- Static and dynamic groundthruth data updated separately
- OSI API new functions: SE_UpdateOSIStaticGroundTruth and SE_UpdateOSIDynamicGroundTruth
- Old function SE_UpdateOSIGroundTruth depricated, will be removed enventually
-
Add option to tune OSI tolerances for road points (and 3D model generator)
- Fix issue with normalized ParamPoly3
- Relax StandStillCondition - allow for minor "noise"
- Moved OSI ref point to center of vehicle bounding box (instead of OSC rear axel ref. point)
- Add smoke tests and ALKS scenarios test suite as acceptance steps in the CI service
- Some additional minor fixes
-
Fix SpeedAction distance dimension issue
-
Fix ParamPoly3 arc length issue
Motion along paramPoly3 geometries has wrongly been based on the curve parameter which leads to wrong speed. Now the arc length is calculated and is used instead as basis for motion along the curve.
-
Some additional minor fixes
- Add support for cubic dynamics in Speed, LaneChange and LaneOffset actions.
- Complete implementation of laneOffset and laneChange actions
- Obey max_lateral_acc in LaneOffset action (previously ignored)
- Calculate correct LaneChange duration/distance based on (lateral) rate
- Minor fix: Set default value 250 kph for LongitudinalDistanceAction/maxSpeed
-
New feature: Support visualization of OpenDRIVE road signs and objects
The OpenDRIVE signal attribute name is used for 3D model reference. So far only Swedish speed signs are distributed with esmini. But the concept is generic and allows for customized database of many signs. The pole is separated and handled as an OpenDRIVE object, which is also supported in similar way: Name referring to 3D model.
Updated complete model pack can be downloaded from here, unpack into esmini/resources/models.
See example straight_500m_signs.xodr which is used in updated scenarios:
- distance_test.xosc (run/esmini/run_dist_test.bat)
- slow-lead-vehicle.xosc (run/esmini/run_slow-lead-vehicle.bat)
How to get information on road signs via API, see example usage in esmini-dyn/main.cpp
Please note that esmini OSI output is not yet propagating signal and object info.
-
Add argument for adding search path prefix. (see launch commands)
-
Calculate pline trajectory headings if Orientation missing
-
Add odometer to overlay info text
-
Add overlay info text to odrviewer
-
Fix pline trajectory heading interpolation bug
-
Fix lane change on route issue (not well tested)
-
Some additional minor fixes
- Fix typo ParameterSetAction -> SetAction
- Fix pitch and roll initialization issue, now aligned to road as default
- Update and extend the Driver model chapter in Hello-World examples.
- Some additional minor fixes
- Support for OpenDRIVE road superelevation (lateral inclination) - thanks cfschaller
- Add a few missing modes and shapes to SpeedAction, now aligned with osg_coverage.txt
- Fix macOS Big Sur issue, avoid crash by moving window position
- Add option for custom steplength in odrplot
- Some additional minor fixes
- Improve collision detection (in CollisionCondition) now based on bounding boxes
- Fix ghost controller bug causing premature stop trigger
- Some additional minor fixes
- Add ground surface textures for road model generator
- Add the textures to demo pack
Updated complete model pack can be downloaded from here
The road model generator is exercised by the following example scripts:
- run/esmini/run_lane_change.bat
- run/esmini/run_dist_test.bat
- run/odrviewer/run_e6mini.bat
- New feature: Generate simple road 3D model if missing.
- Adapt to compiler warning level 4 (Win/VisualStudio)
- Updates to get RControlStation integration back on feet
- Some additional minor fixes
- Fix OSI output to support all OpenSCENARIO vehicle types
- Option to specify custom OSI tracefile filename and path
- Add plot script to demo pack
- Some additional minor fixes
-
All EntityConditions now supported by addition of the following remaining ones (scenario demonstrating the condition in parenthesis):
- Offroad (lane_change.xosc)
- Acceleration (cut-in_simple.xosc)
- StandStill (synchronize.xosc)
- Speed (ltap-od.xosc)
- RelativeSpeed (slow-lead-vehicle.xosc)
-
All Position types now supported by addition of the following remaining ones:
- RelativeRoadPosition
- RoadPosition
- Add SynchronizeAction with SteadyState example scenario to demo package
- Improve world to road coordinate mapping (thanks brifsttar, for input & support)
- Allow storyboard element end transition directly from Standby to Complete state (when no run time needed)
- Added example scenario to demonstrate SynchronizeAction with SteadyState extension
- Fix a link issue that can appear with Visual Studio and vcpkg in Windows
- Some code clean up and other minor fixes
- Changed storyboard element
maximumExecutionCount
default value from 1 to infinite - Improved trigger logging, including all involved conditions and triggering entities
- Updated Unity integration files and added example package, see here
- Added support for CollisionCondition ByType (previously only EntityRef supported)
- Added brief info on OSG tools (e.g. converting 3D models .osgb <-> .fbx), see here
- Fixed an xy2road issue (finding closest road coord from arbitrary x,y position)
- Some additional minor fixes
- Add support for named parameters. See InnerWorkings/parameters.
- Add experimental steady state to SynchronizeAction, see osc-extensions.xml and example usage in pedestrian_traj_synch.xosc.
- Visualize all lanes, including non drivable (e.g. border)
- Support space in filenames and file paths (with --osc, enclose with "")
- Some additional minor fixes
- Fix multi-session issues
- Add method to clear paths between scenarios.
- Reset controllers between scenario runs (fixes issue with --disable_controllers not having effect)
- Fix relative position bug (which caused wrong lateral position in mapping x,y to road coordinates)
- Fix typos in scenario files
- Add position to on-screen info
- Fix end position issue in FollowTrajectory (issue appeared when connecting multiple trajectories)
- odrplot improvements:
- plot lane boundary instead of lane center
- plot non drivable lanes in gray
- maximize axis to simplify panning and zooming
- Fix LaneChange relative lane bug (when relative target lane is on other side of reference line)
- Add search path support for OpenDRIVE and models
- Some additional minor fixes
- Fixed minor issues in Hello World tutorial
- Set correct direction for OSI lanes
- Fix pedestrian catalog path for demo package
- Added a simple vehicle and driver model example to Hello World code guide
- Change interpretation of relative lane in LaneChangeAction. Now sign of relative lane is always according to reference line, regardless of driving direction. To our understanding better complying with OpenSCENARIO 1.0.
- Add analog driver control to the simple vehicle model class
- Improve XYZ2Track method. Now consider overlapping roads (in junctions) when searching best match (not just first hit).
- Add missing pedestrian catalog
- Fix a memory bug potentially causing crash when --disable_controllers flag is set
- Added a small curvy road with and without elevation profile
- Some additional minor fixes
- Align Hello World instructions with updated API
- Fix OpenDRIVE poly3 issues
- Adjust keepDistance tension proportional to MaxAcc (experimental)
- Add position to on-screen info
- Some additional minor fixes
- Fix model ID issue in replayer (caused crash when scenario involves pedestrians)
- Adjusted syntax (XSD) for optional SynchronizeAction tolerances (OpenSCENARIO extension)
- Added pause and step features to replayer
- Solved issue with ghost vehicles in replayer
- Improved end criterias for SynchronizeAction end, detecting when destination gas been passed (increasing dsistance)
- SynchronizeAction: Added tolerances to target positions. Can be set with attribute. Default 1m.
- Corrected some paths in HelloWorld code example
- Some additional minor fixes
- Fixed issue with syncronizeAction and trajectory following entities
- Added correctly dimensioned (according to OSC entity def) bounding box. Toggle show on key ',' (comma)
- Fixed execution order so that controllers and callback are applied AFTER default controller
- Some additional minor fixes
The major functional change is the implementation of the OpenSCENARIO controller concept. A side effect is that much of the functionality such as Ghost concept, interactive driving and external control previously assiciated and hardcoded in different applications now has moved out from the application(s) core and into different controllers which can be activated on demand in a more flexible way.
The actual application code gets much simpler and it makes no sense to have different applications for different use cases. As a result we decided to slim down to only two applications:
esmini
linking internal modules statically providing full access to internal API'sesmini-dyn
demonstrating use of the high-level dynamic shared library.
While doing such major reworks we also took the opportunity to rename applications and some modules, hopefully making things a little bit clearer, at least for newcomers. The changes breaks backward compatibility, calling for the update of major version number.
Controller details:
- Controller catalogs supported
- The following controllers, in addition to default controller, have been implemented:
- ExternalController Vehicle will not be updated by the scenario. It's state is expected to be reported via gateway. The optional Ghost feature will launch a fore-runner vehicle to perform the scenario and create a trajectory for the external driver model to follow.
- FollowGhostController An example of a (simple) vehicle and driver model using a Ghost as reference.
- InteractiveController A simple vehicle model controlled by the user via keyboard (arrow keys)
- SloppyDriverController Another example of a driver model, adding some random speed and lateral deviation to the default road following behavior. This controller is useless, it's pure purpose is to provide an example of separating lontitudinal and lateral control.
- SumoController A way to integrate SUMO simulation. OpenSCENARIO vehicles are reported to SUMO, and SUMO vehicles are reported back to esmini.
These controllers can now be utilized also via the shared library. As OpenSCENARIO actions they are activated/deactivated dynamically by means of OSC triggers.
For more information about esmini controllers please see Controllers.md
Other new featuers:
- VisibilityAction - makes object visible or invisible for sensors and/or graphics (visual presentation)
Structural changes:
- Special control modes External, Internal and Hybrid have been removed (replaced by controllers)
- ScenarioEngineDLL renamed to esminiLib
- RoadManagerDLL renamed to esminiRMLib
- EnvironmentSimulator removed (with controllers this got identical with the EgoSimulator)
- EgoSimulator renamed to esmini (since it now is the recommended application)
- ScenarioViewer renamed to esmini-dyn (kept as an example of using esminiLib)
- OpenDriveViewer renamed to odrviewer
- Replayer renamed to replayer
- osi_receiver renamed to osireceiver
Note:
- Previous use of control modes, e.g. external for interactive driving, now has to be specified in terms of controllers in the OpenSCENARIO file. Two steps needed: 1. AssignController and 2. ActivateController. See sloppy-driver.xosc for an example.
- These changes affects some headerfile names, which might need to be updated in custom code.
- Scripts referring to executables need updates, e.g. change any "EgoSimulator" or "EnvironmentSimulator" to "esmini" (however EgoSimulator will be provided as a raw copy of esmini executable during a deprecation period of a few releases)
- Added support for lane change dynamics by rate
- Fix pedestrian catalog support
- Fix bug deleting any entity with defined controller
- Add another OpenDriveViewer example run script
- Fix assumption that all controllers are SUMO config type
- Fix parameter name bug
- Add OpenDriveViewer to demo package
- Some additional minor bug fixes
- Improved OSI performance
- Added pedestrian example scenario
- Support correct parameter names excluding the "$" prefix (old way still supported as well)
- TimeToCollision condition
- Collision condition
- Improved road and lane connectivity w.r.t. preserve direction
- Additional bugfixes and improvements
- OSI raw struct output option
- OSI sensor view in local coordinates
- Callback mechanism to override (part of) entity states
- Improved WorldCoordinate(x, y, z) to RoadCoordinate(road, lane, offset) mapping
- Many minor bugfixes and improvements (and probably a few new bugs)
- Added trajectory clothoid support
2020-08-31 Version 1.7.5
- Added Hello World coding example
- Fixed a bug preventing shared library (ScenarioEngineDLL) to run with viewer on Mac
- Fixed crash when running with only OpenDRIVE road description (i.e. without scenegraph 3D model).
- CSV logging feature
- EndOfRoad trigger
- Unit test framework based on Google Test
- Cleaned irrelevant error messages
- SUMO support integrated (via libsumostatic), first limited shot.
- SUMO vehicles created by means of object controller. See example cut-in_sumo.xosc.
- NOTE that you need to re-run cmake script in order to fetch SUMO dependency package (including headers and pre-built libraries).
- Further OSI values populated, e.g. velocity and acceleration
- OSI trace file not created by default, activated with argument "--osi_file on"
- Condition/trigger timer now based on simulation time instead of system time
- OSI support extended with road information (lane and road marks)
- Bugfix: RelativeTargetLane (used in LaneChangeAction) is now calculated correctly, skipping reference lane and considering vehicle orientation so that positive lane changes will go left and negative to the right. Scenarios making use of RelativeTargetLane might need to be updated accordingly.
- OSI support, initial framework established.
- So far population of OSI global groundtruth moving objects.
- OSI data is populated and provided to user in three ways:
- OSI trace file (always created, in folder where application was started)
- UDP messages (option to send OSI messages to specified host/IP address)
- API to fetch OSI data via function call (in ScenarioEngineDLL)
- osi_receiver is a minimalistic demo-application showing how to receive OSI over UDP
- Updated to support OpenSCENARIO 1.0. Note: no legacy support for 0.9.1
- Updated demo scenarios to v1.0
- Improved condition handling, fully supporting AND (within ConditionGroup) and OR (Multiple ConditionGroups) combinations
- Refactored runtime model supporting StoryBoardElement states, also obeying nrOfExecutions attribute
- Initial Trajectory support. PolyLine only, so far and limited testing performed.
- Added support for TraveledDistance condition
- Added heading to sensors so that one entity can have multiple sensors in different directions
- Improved position Delta functionality. It will calculate shortest path and distance between two positions more generically and correctly.
- Added road model (multi_intersections.xodr/osgb) with multiple junctions. Useful for testing the shortest path functionality.
- Added new camera mode: top view (press 'k' multiple times to toggle or specify "--camera_mode top" as command line argument).
- Some bugfixes. E.g. ParamPoly3 with Normalized parameter range.
- Demos (and binaries) supplied for Mac (Catalina) and Linux (Ubuntu 18.04 and Kubuntu 18.04) in addition to Windows.
- jpeg screenshot. User can save a screen shot at any time by pressing key 'c'.
- QuitAction. User can specify when to quit the scenario (and application) by means of OSC conditions, just as any OSC action.
- Fixed timestep (--fixed_timestep ). Enabling scenarios to be executed in split of a second and, by using the recording feature, it can be replayed in viewer afterwards.
- Threads (--threads). Put scenario execution into a separate thread, decoupled from the viewer. Example of potential use case: Make it possible to pause scenario while moving camera.
- New keyboard shortcut commands, and some moved to new key. Please see run/readme.txt for complete set.
- Anti-Alias filter control
- EgoSimulator now takes argument aa_mode 0 means no Anti-Alias. 4 is default.
- One use case is when running esmini (EgoSimulator) within docker on Linux - which seem to not support AntiAlias.
- Mac CI build environment added. However only RoadManager and ScenarioEngine as shared libraries, and without graphics (OSG) support.
- Linux binaries now includes graphics (OSG) support.
- Demo package for Linux added. Now CI builds and deploy demo for both Windows and Linux (Ubuntu 18.04).
- Catalog handling updates
- Parameter assignment implemented (enabling variants or configuration of re-used catalog items)
- Name and structure updates: When a scenario refers to a catalog entry esmini will first locate the catalog by searching all specified catalog directories for a file named "catalog name".xosc. So a catalog name is defined by the base file name. Filename extension .xosc is mandatory. The actual Catalog XML element attribute "name" is ignored. See synchronize.xosc for an example on how to (re-)use manuever catalog entries.
- Trail visualization can be switched off by application argument (--trail <on/off>) and toggled by pressing key "t" in viewer window.
- External control flag replaced by enumeration Available modes: internal, external, hybrid EgoSimulator and EnvironmentSimulator argument syntax changed from --ext_control <on|off> to --control <internal|external|hybrid>