- 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
- Expand filename container and store complete file paths in .dat file
- 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>