Skip to content

Commit

Permalink
Release 4.0.0
Browse files Browse the repository at this point in the history
* Support of unstructured scenes/pedestrians
  - 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
* Harmonized physics calcualions
  - 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
* Improved BUILDING documentation
  • Loading branch information
berndgassmann authored Jul 3, 2020
1 parent 2e0f26e commit 277b4f9
Show file tree
Hide file tree
Showing 203 changed files with 19,329 additions and 3,101 deletions.
17 changes: 10 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@
2. [License](#license)
3. [Documentation](#documentation)
4. [Releases](#releases)
1. [Release 3.x](#release_3)
2. [Release 2.x](#release_2)
3. [Release 1.x](#release_1)
1. [Release 4.x](#release_4)
2. [Release 3.x](#release_3)
3. [Release 2.x](#release_2)
4. [Release 1.x](#release_1)
5. [Getting Started](#started)
1. [Supported Systems](#systems)
6. [Building the library](#building)
Expand Down Expand Up @@ -86,6 +87,9 @@ If you have any additional question not answered therein, you might find more in
## Releases <a name="releases"></a>
General release notes and changes can be found in the [Changelog](https://intel.github.io/ad-rss-lib/CHANGELOG/index.html)

#### Release 4.x.x <a name="release_4"></a>
These releases extends the 3.x version with handling of unstructured roads and pedestrians.

#### Release 3.x.x <a name="release_3"></a>
These releases improve the 2.x version capabilities on scene creation.

Expand All @@ -99,12 +103,11 @@ The initial release of the C++ software library for RSS implements a subset of t
This release implements the RSS calculations and rules corresponding to the following scenarios:

* Multi-lane roads, i.e. longitudinal and lateral safe distance and proper response determination; and
* Intersections, i.e. two or more routes of different geometry, rules for intersections of routes, with priority/right of way, and longitudinal and lateral proper response determination. However, in the case of intersections, it is assumed that there is always a lateral conflict.
* Intersections, i.e. two or more routes of different geometry, rules for intersections of routes, with priority/right of way, and longitudinal and lateral proper response determination. However, in the case of intersections, it is assumed that there is always a lateral conflict; and
* Unstructured roads and pedestrians.

The following parts of RSS are NOT implemented in this release of the library software:

* Unstructured roads, e.g. parking lots and wide round-abouts;
* Pedestrians, bicyclists and other vulnerable road users;
* Occlusions;
* Longitudinal or lateral evasive maneuvers as defined by RSS; and
* Intersections without a lateral conflict.
Expand All @@ -117,7 +120,7 @@ Note: The RSS module in this library does not initiate evasive manuevers. At the
Currently, the focused operating system is Ubuntu 16.04. Nevertheless, the library should work in a similar way for any other Linux OS.
To install the dependencies for Ubuntu 16.04 execute the following command:
```bash
user$> sudo apt-get install git build-essential cmake
user$> sudo apt-get install git build-essential cmake libboost-dev
```

If you want to use doxygen for API documentation, please also install:
Expand Down
11 changes: 7 additions & 4 deletions RELEASE_NOTES_AND_DISCLAIMERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,19 @@ __The following additional terms apply to the C++ Library for RSS (the “Softwa
provided by Intel Corporation (“Intel”) to the recipient (“Recipient”).__

1. The Software implements the RSS calculations and rules corresponding to the following scenarios:

- Multi-lane roads, i.e. longitudinal and lateral safe distance and proper response determination; and
- Intersections, i.e. two or more routes of different geometry, rules for intersections of routes, with priority/right of way, and longitudinal and lateral proper response determination. However, in the case of intersections, it is assumed that there is always a lateral conflict.
- Intersections, i.e. two or more routes of different geometry, rules for intersections of routes, with priority/right of way, and longitudinal and lateral proper response determination. However, in the case of intersections, it is assumed that there is always a lateral conflict; and
- Unstructured roads and pedestrians.

The following parts of RSS are __NOT__ implemented in this release of the Software:
- Unstructured roads, e.g. parking lots and wide round-abouts;
- Pedestrians, bicyclists and other vulnerable road users;

- Occlusions;
- Longitudinal or lateral evasive maneuvers as defined by RSS; and
- Intersections without a lateral conflict.

2. Recipient understands, acknowledges and agrees that the Software:

- is a pre-production, research version intended for use in a testing simulator;
- should not be considered full, complete, or fully functional;
- does not contain all features necessary for a production version of the Software;
Expand All @@ -24,4 +26,5 @@ provided by Intel Corporation (“Intel”) to the recipient (“Recipient”)._
- has not obtained any regulatory approvals (such as, UL or FCC), or obtained any certifications or qualifications (such as, AEC-Q100) and may therefore not be certified for use in certain countries or environments.

3. By using the Software, Recipient agrees to the following:
- Recipient expressly assumes all risks associated with the use of the Software, which are provided “__AS IS__” by Intel with all faults.

- Recipient expressly assumes all risks associated with the use of the Software, which are provided “__AS IS__” by Intel with all faults.
16 changes: 13 additions & 3 deletions ad_rss/generated/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
##

cmake_minimum_required(VERSION 3.5)
project(ad_rss VERSION 3.0.1)
project(ad_rss VERSION 4.0.0)

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
Expand All @@ -25,24 +25,31 @@ set(CMAKE_CXX_STANDARD 14)
option(BUILD_SHARED_LIBS "Build shared libraries instead of static ones" ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

set(INCLUDE_DIRS)
set(LIBRARIES)

include(ad_rss)

if ((NOT ad_rss_SOURCES) OR (NOT ad_rss_INCLUDE_DIRS))
message(FATAL_ERROR "${PROJECT_NAME}: Variable ad_rss_SOURCES or ad_rss_INCLUDE_DIRS pointing to the generator managed library not set!")
endif()

find_package(ad_physics 2.0.3 REQUIRED CONFIG)
find_package(Boost REQUIRED)
list(APPEND INCLUDE_DIRS ${Boost_INCLUDE_DIRS})
list(APPEND LIBRARIES ${Boost_LIBRARIES})

find_package(ad_physics 2.1.0 REQUIRED CONFIG)
find_package(spdlog REQUIRED CONFIG)

add_library(${PROJECT_NAME}
${ad_rss_SOURCES}
src/ad/rss/situation/CoordinateSystemAxis.cpp
src/ad/rss/situation/LateralRelativePosition.cpp
src/ad/rss/situation/LongitudinalRelativePosition.cpp
src/ad/rss/situation/SituationType.cpp
src/ad/rss/state/LateralResponse.cpp
src/ad/rss/state/LongitudinalResponse.cpp
src/ad/rss/state/RssStateEvaluator.cpp
src/ad/rss/state/UnstructuredSceneResponse.cpp
src/ad/rss/world/LaneDrivingDirection.cpp
src/ad/rss/world/LaneSegmentType.cpp
src/ad/rss/world/ObjectType.cpp
Expand All @@ -61,12 +68,15 @@ target_include_directories(${PROJECT_NAME} PUBLIC
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
${ad_rss_TARGET_INCLUDE_DIRECTORIES}
"$<BUILD_INTERFACE:${ad_rss_INCLUDE_DIRS}>"
${INCLUDE_DIRS}
)

target_link_libraries(${PROJECT_NAME} PUBLIC
ad_physics
spdlog::spdlog
${ad_rss_TARGET_LINK_LIBRARIES}
PRIVATE
${LIBRARIES}
)

set(BINDING_TYPE MOCKUP)
Expand Down
6 changes: 5 additions & 1 deletion ad_rss/generated/cmake/Config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@

include(CMakeFindDependencyMacro)

find_dependency(ad_physics 2.0.3)
find_package(Boost REQUIRED)
list(APPEND INCLUDE_DIRS ${Boost_INCLUDE_DIRS})
list(APPEND LIBRARIES ${Boost_LIBRARIES})

find_dependency(ad_physics 2.1.0)
find_dependency(spdlog)

include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]")
Expand Down

This file was deleted.

7 changes: 6 additions & 1 deletion ad_rss/generated/include/ad/rss/situation/SituationType.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,12 @@ enum class SituationType : int32_t
/*!
* Both drive on individual roads which intersect at the end. Object and ego vehicle have same priority.
*/
IntersectionSamePriority = 5
IntersectionSamePriority = 5,

/*!
* An unstructured scene constellation.
*/
Unstructured = 6
};

} // namespace situation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ inline bool withinValidInputRange(::ad::rss::situation::SituationType const &inp
|| (input == ::ad::rss::situation::SituationType::OppositeDirection)
|| (input == ::ad::rss::situation::SituationType::IntersectionEgoHasPriority)
|| (input == ::ad::rss::situation::SituationType::IntersectionObjectHasPriority)
|| (input == ::ad::rss::situation::SituationType::IntersectionSamePriority);
|| (input == ::ad::rss::situation::SituationType::IntersectionSamePriority)
|| (input == ::ad::rss::situation::SituationType::Unstructured);
if (!inValidInputRange && logErrors)
{
spdlog::error("withinValidInputRange(::ad::rss::situation::SituationType)>> {}, raw value: {} ",
Expand Down
21 changes: 20 additions & 1 deletion ad_rss/generated/include/ad/rss/situation/VehicleState.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
#include <sstream>
#include "ad/physics/Distance.hpp"
#include "ad/rss/situation/VelocityRange.hpp"
#include "ad/rss/world/ObjectState.hpp"
#include "ad/rss/world/ObjectType.hpp"
#include "ad/rss/world/RssDynamics.hpp"
/*!
* @brief namespace ad
Expand Down Expand Up @@ -108,7 +110,8 @@ struct VehicleState
return (velocity == other.velocity) && (dynamics == other.dynamics) && (hasPriority == other.hasPriority)
&& (isInCorrectLane == other.isInCorrectLane)
&& (distanceToEnterIntersection == other.distanceToEnterIntersection)
&& (distanceToLeaveIntersection == other.distanceToLeaveIntersection);
&& (distanceToLeaveIntersection == other.distanceToLeaveIntersection) && (objectType == other.objectType)
&& (objectState == other.objectState);
}

/**
Expand Down Expand Up @@ -153,6 +156,16 @@ struct VehicleState
* The maximum distance to cover by the vehicle to leave the intersection completely.
*/
::ad::physics::Distance distanceToLeaveIntersection{std::numeric_limits<::ad::physics::Distance>::max()};

/*!
* The type of object.
*/
::ad::rss::world::ObjectType objectType;

/*!
* The state of the object required to perform unstructured scene calculations.
*/
::ad::rss::world::ObjectState objectState;
};

} // namespace situation
Expand Down Expand Up @@ -206,6 +219,12 @@ inline std::ostream &operator<<(std::ostream &os, VehicleState const &_value)
os << ",";
os << "distanceToLeaveIntersection:";
os << _value.distanceToLeaveIntersection;
os << ",";
os << "objectType:";
os << _value.objectType;
os << ",";
os << "objectState:";
os << _value.objectState;
os << ")";
return os;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
#include "ad/physics/DistanceValidInputRange.hpp"
#include "ad/rss/situation/VehicleState.hpp"
#include "ad/rss/situation/VelocityRangeValidInputRange.hpp"
#include "ad/rss/world/ObjectStateValidInputRange.hpp"
#include "ad/rss/world/ObjectTypeValidInputRange.hpp"
#include "ad/rss/world/RssDynamicsValidInputRange.hpp"
#include "spdlog/fmt/ostr.h"
#include "spdlog/spdlog.h"
Expand All @@ -45,7 +47,8 @@ inline bool withinValidInputRange(::ad::rss::situation::VehicleState const &inpu
inValidInputRange = withinValidInputRange(input.velocity, logErrors)
&& withinValidInputRange(input.dynamics, logErrors)
&& withinValidInputRange(input.distanceToEnterIntersection, logErrors)
&& withinValidInputRange(input.distanceToLeaveIntersection, logErrors);
&& withinValidInputRange(input.distanceToLeaveIntersection, logErrors)
&& withinValidInputRange(input.objectType, logErrors) && withinValidInputRange(input.objectState, logErrors);
if (!inValidInputRange && logErrors)
{
spdlog::error("withinValidInputRange(::ad::rss::situation::VehicleState)>> {} has invalid member",
Expand Down
Loading

0 comments on commit 277b4f9

Please sign in to comment.