Added a min_longitudinal_safety_distance to world::RssDynamics structure parameter to provide a lower bound for the resulting longitudinal safe distance
Extend capabilities for system integration:
Added ad::rss::RssObjectAdapter classes as generic data inferfaces to the user implementation for RSS checks
Added ad::rss::RssRouteCheckerObjectData classes interacting with respective ad::rss::RssObjectAdapter classes
to handle apspects like map matching, route prediction/route planning along a given set of routing targets,
route shortening/extending, calculating vehicle dynamics on the route.
Added ad::rss::RssRouteChecker class to handle RSS checks on multiple routes in an efficient manner
with support for multiple ego-vehicles at once. The class takes care on variying numbers of route predictions
over time (duplicating rss checkers if required) to support more than one RSS situation per ego vehicle
(one RSS situation per ego-route prediction). This opens the possiblilty for RSS checking on global scope
i.e. from an infrastructure point of view, where a concrete ego-route might not be available.
Includes artificial object injection callback to inject artificial objects into the calculation.
Mechanisms to speed up:
Added mechanisms to improve reusability of calculated data (speed up)
Added possibililty to restrict operation on certain map areas (speed up)
Enabled parallel calculations
Allow injection of artificial objects (e.g. to handle occlusions based on ad::match::LaneOccupiedRegionList)
RssReachableSetsCalculation: Allow injection of method to calculate/manipulate the unstructured trajectory sets (e.g. to cut off parts outside the road)
Support newer colcon, cmake, boost, gcc-13, clang-18 and Ubuntu 24.04
Support newer spdlog: adding formatters for datatype logging
Harmonize CXX standard to 17
Covering Python versions 3.10-3.13
Disable outdated Ubuntu builds (18.04, 20.04)
Improve security of github actions
Adapt naming to conform to the well defined terms of 'situation' and 'scene' within the context of AD (see e.g. SAE J3131).
In general, the input to the core RSS calculations, the ad::rss::world::WorldModel describes a RSS situation
which contains constellations describing the ego vehicle in respect to one other object.
The constellation can be of structured or unstructured nature. This clarification has a bigger influence on the naming
of functions, variables, and class members:
Removed the namespace 'situation' and distributed the content into the namespaces 'core', 'structured' and 'unstructured'
Most occurances of 'situation', 'Situation', 'scene' or 'Scene' within any naming have been replaced
by the term 'constellation' in case the usage of them didn't match the general meaning of these terms as stated above
ad::rss::situation::Situation -> ad::rss::core::RelativeConstellation (describing the constellation in relative form for usage inside core calculations)
ad::rss::situation::VehicleState -> ad::rss::core::RelativeObjectState (describing the object in relative form for usage inside core calculations)
where the old members of VehicleState only relevant in structured constellations are now collected wihin the new ad::rss::core::StructuredObjectState
Move headers of ad_rss into the public folders and removed unnecessary std::unique_ptr from implemenation. This enables to create
straight forward copies of the ::rss::core::RssCheck objects.
Extended ad::rss::situation::SituationType by Unstructured value
Extended ad::rss::situation::VehicleState by ad::rss::world::ObjectType and ad::rss::world::ObjectState members
Extended ad::rss::state::ProperResponse by ad::rss::state::UnstructuredSceneResponse and ad::rss::state::HeadingRangeVector members
Renamed ad::rss::world::AccelerationRestriction -> ad::rss::state::AccelerationRestriction and integrated it
as a member into the ad::rss::state::ProperResponse.
Reflected this merge of the data types by renaming ad::rss::core::RssCheck::calculateAccelerationRestriction()
to ad::rss::core::RssCheck::calculateProperResponse() and adapting the function parameters accordingly.
Same applies for ad::rss::core::RssResponseResolving::provideProperResponse().
Extended ad::rss::state::RssState by ad::rss::situation::SituationType and ad::rss::state::UnstructuredSceneRssState members.
Extended ad::rss::state::RssStateSnapshot by ad::rss::state::UnstructuredSceneStateInformation member
Extended ad::rss::world::ObjectType by Pedestrian value
Extended ad::rss::world::Object by ::ad::rss::world::ObjectState member
Extended ad::rss::world::RssDynamics by ad::rss::world::UnstructuredSettings member
Extended ad::rss::map::RssSceneCreation::appendScenes() parameters by ad::physics::AngularVelocity of ego and object
and provide the mode of operation ad::rss::map::RssMode (NotRelevant, Structured, Unstructured)
Extended ad::rss::map::RssSceneCreator and ad::rss::map::RssObjectConversion classes to support unstructured scenes
Removed ad::rss::situation::CoordinateSystemAxis type
Refactored and extended calculations within Physics.hpp for unstructured cases
Made RssFormular.hpp public
Fixed consideration of maximum speed on accelerating:
Renamed ad::rss::world::RssDynamics::maxSpeed member to maxSpeedOnAcceleration to clarify that it's not the general max speed
of the vehicle, but the maximum speed to be considered while accelerating within the response time.
Fixed the calcualtions to consider the case that the current speed before the acceleration can already be higher than
the maxSpeedOnAcceleration parameter and in this case just no acceleration takes place
In preparation of the integration of unstructured scenes:
Deceleration values are given as negative values from now on
Remove separate Response Transformation to ease the merge of situations
On LateralResponse::None, the minimum value is not brakeMin anymore (that value was in each case irrelevant)
Reworked scene creation
Made RssSceneCreation a class with supporting classes RssObjectConversion and RssSceneCreator
to support multi-threaded scene appending.
Allow for scene specific ego vehicle RSS dynamics
Handle empty ego route correctly
Handle use-case: ego vehicle at back
Handle use-case: merging route
Restricting routes to relevant scene region to prevent from inaccourate relative distances
Ensure that NotRelevantScene also provides filled occupied region content
Workaround for route start within intersections: Use objectRoute intersection in intersection scenes if ego route
predictions don't provide intersection data at all (to be solved finally within ad::map::intersection::Intersection() class)
Massively extended scene creation unit tests
Make use of ad::map::route::getENUHeadingOfRoute() for more accurate object heading on route calculation
Introduced more straight forward interface on intermediate functions to support better integration of the single calls into an external
framework: SituationSnapshot, RssStateSnapshot, ProperResponse. Moved the timeIndex from the individual elements into these high level
types to support the propagation of the timeIndex even if there are no other vehicles in the surrounding.
Did some renaming (e.g. ResponseState->RssState, ResponseStateVector->RssStateVector, ResponseInformation->RssStateInformation,
ResponseEvaluator->RssStateEvaluator) to clarify by naming that the individual calcuated states only consider a snapshot in time without
analysis of the dangerous threshold. The ProperResponse became its own type and got an own overall isSafe flag and a list of dangerousObjects.
Added ObjectId to Situation and RssState to preserve the mapping to the originating object which was lost with the introduction of multiple
situations per object.
Increase amount of allowed situations because with multiple situations per object the amount of 100 might be hit too fast.
Improved merge of input scenarios to facilitate scene variations of the same situation
RssIntersectionChecker: since new situations may pop up when e.g. a previously occluded object is entering the field of view, one cannot guarantee that a previous safe state can be found. In this case, we have to brake instead of returning false.
Made some RssState operations available via public interface
Add option to select library build type (static/dynamic)
Allow multiple situations per ego vehicle/object pair: Add RssSituationIdProvider and made RssSituationExtraction a class holding RssSituationIdProvider instance to keep track of the different situation classes
Renamed world::Dynamics in world::RssDynamics, extended it by responseTime and separated it from world::Object; world::Scene got the objectRssDynamics and world::WorldModel the egoVehicleRssDynamics each as separate elements
Extended world::Scene by egoVehicle object description as occupied regions and velocity are actually scene dependent (e.g. when considering different vehicle predictions)
Added world::ObjectType::Invalid
Small updates to be compliant to clang-tidy-3.8 static code analysis
Added basic FAQ
Added official support for Ubuntu 14.04 (GCC 4.8, Clang 3.4 and 3.8/3.9)
Added official support for Ubuntu 18.04 (GCC 7.3)
Download/Build gtest on the fly rather than using the version from the OS
Fixed documentation of RoadArea LaneSegment ordering (left -> right)
Fixed isSafe flags of the resolved response
Renamed some internal files from 'RSS...' -> 'Rss...' to have camel-case everywhere
Added ResponseInformation to provide more insight into intermediate result calculation