    

 ## On this page

  

 

 # predictive\_ttc\_calculator

 Last update: 16.07.2025 

<a id="l00001" name="l00001"></a> 1 

<a id="l00003" name="l00003"></a> 3 

<a id="l00004" name="l00004"></a> 4\#include "autonomy/evaluator/predictive\_ttc\_calculator/predictive\_ttc\_calculator.h"

<a id="l00005" name="l00005"></a> 5\#include "autonomy/evaluator/predictive\_ttc\_calculator/utils.h"

<a id="l00006" name="l00006"></a> 6\#include &lt;optional&gt;

<a id="l00007" name="l00007"></a> 7namespace [simulation\_framework](namespacesimulation__framework.xhtml)

<a id="l00008" name="l00008"></a> 8{

<a id="l00009" name="l00009"></a> 9namespace [evaluator](namespaceevaluator.xhtml)

<a id="l00010" name="l00010"></a> 10{

<a id="l00011" name="l00011"></a> 11 

<a id="l00012" name="l00012"></a> 12using namespace utils;

<a id="l00013" name="l00013"></a> 13 

<a id="l00014" name="l00014"></a> 14std::chrono::milliseconds PredictiveTimeToCollisionCalculator::Calculate(const osi3::GroundTruth&amp; ground_truth) const

<a id="l00015" name="l00015"></a> 15{

<a id="l00016" name="l00016"></a> 16 auto host_vehicle_validation = std::make_optional&lt;int&gt;();

<a id="l00017" name="l00017"></a> 17 

<a id="l00018" name="l00018"></a> 18 const auto&amp; host_vehicle_id = ground_truth.host_vehicle_id();

<a id="l00019" name="l00019"></a> 19 BoundingBox bounding_box_ego;

<a id="l00020" name="l00020"></a> 20 const auto&amp; gt_moving_objects = ground_truth.moving_object();

<a id="l00021" name="l00021"></a> 21 for (auto object : gt_moving_objects)

<a id="l00022" name="l00022"></a> 22 {

<a id="l00023" name="l00023"></a> 23 if (host_vehicle_id.value() == object.id().value())

<a id="l00024" name="l00024"></a> 24 {

<a id="l00025" name="l00025"></a> 25 host_vehicle_validation = object.id().value();

<a id="l00026" name="l00026"></a> 26 bounding_box_ego.x = object.base().position().x();

<a id="l00027" name="l00027"></a> 27 bounding_box_ego.y = object.base().position().y();

<a id="l00028" name="l00028"></a> 28 bounding_box_ego.width = object.base().dimension().width();

<a id="l00029" name="l00029"></a> 29 bounding_box_ego.length = object.base().dimension().length();

<a id="l00030" name="l00030"></a> 30 bounding_box_ego.yaw = object.base().orientation().yaw();

<a id="l00031" name="l00031"></a> 31 bounding_box_ego.velocity_x = object.base().velocity().x();

<a id="l00032" name="l00032"></a> 32 bounding_box_ego.velocity_y = object.base().velocity().y();

<a id="l00033" name="l00033"></a> 33 break;

<a id="l00034" name="l00034"></a> 34 }

<a id="l00035" name="l00035"></a> 35 }

<a id="l00036" name="l00036"></a> 36 

<a id="l00037" name="l00037"></a> 37 if (!host_vehicle_validation.has_value())

<a id="l00038" name="l00038"></a> 38 {

<a id="l00039" name="l00039"></a> 39 return std::chrono::milliseconds::max();

<a id="l00040" name="l00040"></a> 40 }

<a id="l00041" name="l00041"></a> 41 

<a id="l00042" name="l00042"></a> 42 auto predictive_minimum_ttc{std::chrono::milliseconds::max()};

<a id="l00043" name="l00043"></a> 43 

<a id="l00044" name="l00044"></a> 44 for (auto object : gt_moving_objects)

<a id="l00045" name="l00045"></a> 45 {

<a id="l00046" name="l00046"></a> 46 if (host_vehicle_id.value() == object.id().value())

<a id="l00047" name="l00047"></a> 47 {

<a id="l00048" name="l00048"></a> 48 continue;

<a id="l00049" name="l00049"></a> 49 }

<a id="l00050" name="l00050"></a> 50 

<a id="l00051" name="l00051"></a> 51 const auto&amp; vehicle_base = object.base();

<a id="l00052" name="l00052"></a> 52 BoundingBox bounding_box_vehicle{vehicle_base.position().x(),

<a id="l00053" name="l00053"></a> 53 vehicle_base.position().y(),

<a id="l00054" name="l00054"></a> 54 vehicle_base.dimension().width(),

<a id="l00055" name="l00055"></a> 55 vehicle_base.dimension().length(),

<a id="l00056" name="l00056"></a> 56 vehicle_base.orientation().yaw(),

<a id="l00057" name="l00057"></a> 57 vehicle_base.velocity().x(),

<a id="l00058" name="l00058"></a> 58 vehicle_base.velocity().y()};

<a id="l00059" name="l00059"></a> 59 

<a id="l00060" name="l00060"></a> 60 if (AreBoundingBoxesOverlapped(bounding_box_vehicle, bounding_box_ego))

<a id="l00061" name="l00061"></a> 61 {

<a id="l00062" name="l00062"></a> 62 return std::chrono::milliseconds(0);

<a id="l00063" name="l00063"></a> 63 }

<a id="l00064" name="l00064"></a> 64 predictive_minimum_ttc =

<a id="l00065" name="l00065"></a> 65 std::min(PredictTimeToCollision(

<a id="l00066" name="l00066"></a> 66 bounding_box_vehicle, bounding_box_ego, predictive_ttc_precision_, predictive_ttc_max_),

<a id="l00067" name="l00067"></a> 67 predictive_minimum_ttc);

<a id="l00068" name="l00068"></a> 68 }

<a id="l00069" name="l00069"></a> 69 

<a id="l00070" name="l00070"></a> 70 return predictive_minimum_ttc;

<a id="l00071" name="l00071"></a> 71};

<a id="l00072" name="l00072"></a> 72 

<a id="l00073" name="l00073"></a> 73} // namespace evaluator

<a id="l00074" name="l00074"></a> 74} // namespace simulation\_framework

[evaluator](namespaceevaluator.xhtml)

The namespace containing evaluator implementations.



[simulation\_framework](namespacesimulation__framework.xhtml)

The top namespace for simulation framework.