intel / ad-rss-lib

Library implementing the Responsibility Sensitive Safety model (RSS) for Autonomous Vehicles
https://intel.github.io/ad-rss-lib/
GNU Lesser General Public License v2.1
336 stars 138 forks source link

Always returning safe except when the Ego vehicle hits the leading vehicle #110

Closed hatem-darweesh closed 3 years ago

hatem-darweesh commented 3 years ago

Hello, I am trying to use the ad-rss-library. I constructed the following scene:

scena

The steps as the follows: 1- Construct the road area (world::RoadArea) as the figure. 2- Create two objects (world::Object), one for the Ego vehicle and another for the other vehicle. 3- Convert vehicle data (coordinates, velocities) to match created road area 4- Assign reasonable dynamics information ( velocity, acceleration braking , etc)
5- Create a scene from previous create items 6- Assign timeIndex 7- Iterate for n times a) move the ego vehicle with constant velocity b) replace the Ego vehicle object in the scene with the update Ego object after motion. c) Call "calculateProperResponse"

moving_scene

The result:

Thanks in advance.

berndgassmann commented 3 years ago

Hi, in general the way you describe it makes sense and should work. Also some of the unit tests create similar setups to test the functions. And if it turn from safe to unsafe at some point in time, then at least no general problem of your setup should exist (like that the input values are out of their range or so). So the return value is always true telling the operation succeeded at least.

Maybe you call the variant of the function where you are able to spot also into the intermediate results of the calculation: https://github.com/intel/ad-rss-lib/blob/master/ad_rss/impl/include/ad/rss/core/RssCheck.hpp#L75

Especially in the RssStateSnapshot structure you should be able to spot the individual calculation results of the input WorldModel: https://github.com/intel/ad-rss-lib/blob/master/ad_rss/generated/include/ad/rss/state/RssStateSnapshot.hpp#L140

Your input world model has 1 entry in the list, therefore the output in the RssStateSnapshot should also have one entry of: https://github.com/intel/ad-rss-lib/blob/master/ad_rss/generated/include/ad/rss/state/RssState.hpp

SituationType expected to be SameDirection https://github.com/intel/ad-rss-lib/blob/master/ad_rss/generated/include/ad/rss/situation/SituationType.hpp#L53

Especially the RssStateInformation https://github.com/intel/ad-rss-lib/blob/master/ad_rss/generated/include/ad/rss/state/LongitudinalRssState.hpp#L137 provides some additional information like safeDistance and currentDistance which should change when the vehicle is changing. https://github.com/intel/ad-rss-lib/blob/master/ad_rss/generated/include/ad/rss/state/RssStateInformation.hpp

And the evaluator expected is of LongitudinalDistanceSameDirectionOtherInFront https://github.com/intel/ad-rss-lib/blob/master/ad_rss/generated/include/ad/rss/state/RssStateEvaluator.hpp#L66

Did you set the https://github.com/intel/ad-rss-lib/blob/master/ad_rss/generated/include/ad/rss/world/Object.hpp#L136 occupied regions correctly according to your setup? first image would be for the ego around: segmentId = 2 lonRange = {0.0; 0.6} latRange = {0.1; 0.9} and for the other: segmentId = 6 lonRange = {0.0; 0.7} latRange = {0.1; 0.9}

You can also try to increase the log level of spdlog to get some more information of the run as log output (you could also provide it to me so I can try to give you a hint on what might be the issue). spdlog::set_level(spdlog::level::trace)

Hope this helps

hatem-darweesh commented 3 years ago

Thanks you for you reply, the problem was in the road area creation function. the process described above is working fine.